; find target in a matrix
(define (matrix-rows x) (vector-length x))
(define (matrix-cols x) (vector-length (vector-ref x 0)))
(define (matrix-ref m i j) (vector-ref (vector-ref m i) j))
(define (target m x)
(let loop ((r 0) (c (- (matrix-cols m) 1)))
(cond ((or (negative? c) (= (matrix-rows m) r)) #f)
((< x (matrix-ref m r c)) (loop r (- c 1)))
((< (matrix-ref m r c) x) (loop (+ r 1) c))
(else (values r c)))))
(define m '#(
#( 1 12 43 87)
#( 9 25 47 88)
#(17 38 48 92)
#(45 49 74 95)))
(display (target m 72)) (newline)
(call-with-values
(lambda () (target m 38))
(lambda (r c)
(display r) (newline)
(display c) (newline)))
OyBmaW5kIHRhcmdldCBpbiBhIG1hdHJpeAoKKGRlZmluZSAobWF0cml4LXJvd3MgeCkgKHZlY3Rvci1sZW5ndGggeCkpCihkZWZpbmUgKG1hdHJpeC1jb2xzIHgpICh2ZWN0b3ItbGVuZ3RoICh2ZWN0b3ItcmVmIHggMCkpKQooZGVmaW5lIChtYXRyaXgtcmVmIG0gaSBqKSAodmVjdG9yLXJlZiAodmVjdG9yLXJlZiBtIGkpIGopKQoKKGRlZmluZSAodGFyZ2V0IG0geCkKICAobGV0IGxvb3AgKChyIDApIChjICgtIChtYXRyaXgtY29scyBtKSAxKSkpCiAgICAoY29uZCAoKG9yIChuZWdhdGl2ZT8gYykgKD0gKG1hdHJpeC1yb3dzIG0pIHIpKSAjZikKICAgICAgICAgICgoPCB4IChtYXRyaXgtcmVmIG0gciBjKSkgKGxvb3AgciAoLSBjIDEpKSkKICAgICAgICAgICgoPCAobWF0cml4LXJlZiBtIHIgYykgeCkgKGxvb3AgKCsgciAxKSBjKSkKICAgICAgICAgIChlbHNlICh2YWx1ZXMgciBjKSkpKSkKCihkZWZpbmUgbSAnIygKICAjKCAxIDEyIDQzIDg3KQogICMoIDkgMjUgNDcgODgpCiAgIygxNyAzOCA0OCA5MikKICAjKDQ1IDQ5IDc0IDk1KSkpCgooZGlzcGxheSAodGFyZ2V0IG0gNzIpKSAobmV3bGluZSkKCihjYWxsLXdpdGgtdmFsdWVzCiAgKGxhbWJkYSAoKSAodGFyZ2V0IG0gMzgpKQogIChsYW1iZGEgKHIgYykKICAgIChkaXNwbGF5IHIpIChuZXdsaW5lKQogICAgKGRpc3BsYXkgYykgKG5ld2xpbmUpKSk=