Area of overlapping rectangles
Write a function that takes two rectangles and returns the area of the overlap. Sometimes the overlap is zero!
(overlap-area [{:top-left {:x 0 :y 0}
:bottom-right {:x 10 :y 10}}
{:top-left {:x 5 :y 5}
:bottom-right {:x 15 :y 15}}]) ;=> 25
;; 2 identical rectangles
(overlap-area [{:top-left {:x 0 :y 0}
:bottom-right {:x 1 :y 1}}
{:top-left {:x 0 :y 0}
:bottom-right {:x 1 :y 1}}]) ;=> 25
;; no overlap
(overlap-area [{:top-left {:x 0 :y 0}
:bottom-right {:x 1 :y 1}}
{:top-left {:x 6 :y 6}
:bottom-right {:x 8 :y 8}}]) ;=> 0
;; enclosing rectangles
(overlap-area [{:top-left {:x 0 :y 0}
:bottom-right {:x 1 :y 1}}
{:top-left {:x -1 :y -1}
:bottom-right {:x 2 :y 2}}]) ;=> 1
Thanks to this site for the challenge idea where it is considered Very Hard in JavaScript.
Please submit your solutions as comments on this gist.
Here's an intentionally longer solution inspired by the theme of the recent newsletters: timeless truths. It tries to establish some truths about lines and rectangles, then builds up a solution around those truths.