class Rectangle {
constructor(a, b) {
this.x1 = Math.min(a.x, b.x);
this.x2 = Math.max(a.x, b.x);
this.y1 = Math.min(a.y, b.y);
this.y2 = Math.max(a.y, b.y);
}
isSquare() {
return this.x2 - this.x1 === this.y2 - this.y1
}
contains(dot) {
return this.x2 > dot.x && this.x1 < dot.x && this.y2 > dot.y && this.y1 < dot.y
}
get area() {
return (this.x2 - this.x1) * (this.y2 - this.y1)
}
intersect(rectangle) {
if (this.x2 < rectangle.x1 || this.x1 > rectangle.x2 || this.y1 > rectangle.y2 || this.y2 < rectangle.y1) {
return undefined
} else {
return new Rectangle({
Math.max(this.x1, rectangle.x1), Math.max(this.y1, rectangle.y1)
},
{
Math.min(this.x2, rectangle.x2), Math.min(this.y2, rectangle.y2)
}
)
;
// return {
// x1: Math.max(this.x1, rectangle.x1),
// x2: Math.min(this.x2, rectangle.x2),
// y1: Math.max(this.y1, rectangle.y1),
// y2: Math.min(this.y2, rectangle.y2)
// }
}
}
}
Y2xhc3MgUmVjdGFuZ2xlIHsKICAgIGNvbnN0cnVjdG9yKGEsIGIpIHsKICAgICAgICB0aGlzLngxID0gTWF0aC5taW4oYS54LCBiLngpOwogICAgICAgIHRoaXMueDIgPSBNYXRoLm1heChhLngsIGIueCk7CiAgICAgICAgdGhpcy55MSA9IE1hdGgubWluKGEueSwgYi55KTsKICAgICAgICB0aGlzLnkyID0gTWF0aC5tYXgoYS55LCBiLnkpOwogICAgfQoKICAgIGlzU3F1YXJlKCkgewogICAgICAgIHJldHVybiB0aGlzLngyIC0gdGhpcy54MSA9PT0gdGhpcy55MiAtIHRoaXMueTEKICAgIH0KCiAgICBjb250YWlucyhkb3QpIHsKICAgICAgICByZXR1cm4gdGhpcy54MiA+IGRvdC54ICYmIHRoaXMueDEgPCBkb3QueCAmJiB0aGlzLnkyID4gZG90LnkgJiYgdGhpcy55MSA8IGRvdC55CiAgICB9CgogICAgZ2V0IGFyZWEoKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLngyIC0gdGhpcy54MSkgKiAodGhpcy55MiAtIHRoaXMueTEpCiAgICB9CgogICAgaW50ZXJzZWN0KHJlY3RhbmdsZSkgewogICAgICAgIGlmICh0aGlzLngyIDwgcmVjdGFuZ2xlLngxIHx8IHRoaXMueDEgPiByZWN0YW5nbGUueDIgfHwgdGhpcy55MSA+IHJlY3RhbmdsZS55MiB8fCB0aGlzLnkyIDwgcmVjdGFuZ2xlLnkxKSB7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbmV3IFJlY3RhbmdsZSh7CiAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLngxLCByZWN0YW5nbGUueDEpLCBNYXRoLm1heCh0aGlzLnkxLCByZWN0YW5nbGUueTEpCiAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTWF0aC5taW4odGhpcy54MiwgcmVjdGFuZ2xlLngyKSwgTWF0aC5taW4odGhpcy55MiwgcmVjdGFuZ2xlLnkyKQogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgICAgICA7CgogICAgICAgICAgICAvLyByZXR1cm4gewogICAgICAgICAgICAvLyAgICAgeDE6IE1hdGgubWF4KHRoaXMueDEsIHJlY3RhbmdsZS54MSksCiAgICAgICAgICAgIC8vICAgICB4MjogTWF0aC5taW4odGhpcy54MiwgcmVjdGFuZ2xlLngyKSwKICAgICAgICAgICAgLy8gICAgIHkxOiBNYXRoLm1heCh0aGlzLnkxLCByZWN0YW5nbGUueTEpLAogICAgICAgICAgICAvLyAgICAgeTI6IE1hdGgubWluKHRoaXMueTIsIHJlY3RhbmdsZS55MikKICAgICAgICAgICAgLy8gfQogICAgICAgIH0KICAgIH0KfQ==