; nines and zeros
(define (digits n . args)
(let ((b (if (null? args) 10 (car args))))
(let loop ((n n) (d '()))
(if (zero? n) d
(loop (quotient n b)
(cons (modulo n b) d))))))
(define (undigits ds . args)
(let ((b (if (null? args) 10 (car args))))
(let loop ((ds ds) (n 0))
(if (null? ds) n
(loop (cdr ds) (+ (* n b) (car ds)))))))
(define (f n)
(define (nine x) (if (= x 1) 9 x))
(let loop ((i 1))
(let ((x (undigits (map nine (digits i 2)))))
(if (zero? (modulo x n)) x (loop (+ i 1))))))
(do ((n 1 (+ n 1))) ((< 100 n))
(display n) (display #\tab)
(display (f n)) (newline))
OyBuaW5lcyBhbmQgemVyb3MKIAooZGVmaW5lIChkaWdpdHMgbiAuIGFyZ3MpCiAgKGxldCAoKGIgKGlmIChudWxsPyBhcmdzKSAxMCAoY2FyIGFyZ3MpKSkpCiAgICAobGV0IGxvb3AgKChuIG4pIChkICcoKSkpCiAgICAgIChpZiAoemVybz8gbikgZAogICAgICAgICAgKGxvb3AgKHF1b3RpZW50IG4gYikKICAgICAgICAgICAgICAgIChjb25zIChtb2R1bG8gbiBiKSBkKSkpKSkpCiAKKGRlZmluZSAodW5kaWdpdHMgZHMgLiBhcmdzKQogIChsZXQgKChiIChpZiAobnVsbD8gYXJncykgMTAgKGNhciBhcmdzKSkpKQogICAgKGxldCBsb29wICgoZHMgZHMpIChuIDApKQogICAgICAoaWYgKG51bGw/IGRzKSBuCiAgICAgICAgICAobG9vcCAoY2RyIGRzKSAoKyAoKiBuIGIpIChjYXIgZHMpKSkpKSkpCiAKKGRlZmluZSAoZiBuKQogIChkZWZpbmUgKG5pbmUgeCkgKGlmICg9IHggMSkgOSB4KSkKICAobGV0IGxvb3AgKChpIDEpKQogICAgKGxldCAoKHggKHVuZGlnaXRzIChtYXAgbmluZSAoZGlnaXRzIGkgMikpKSkpCiAgICAgIChpZiAoemVybz8gKG1vZHVsbyB4IG4pKSB4IChsb29wICgrIGkgMSkpKSkpKQogCihkbyAoKG4gMSAoKyBuIDEpKSkgKCg8IDEwMCBuKSkKICAoZGlzcGxheSBuKSAoZGlzcGxheSAjXHRhYikKICAoZGlzcGxheSAoZiBuKSkgKG5ld2xpbmUpKQ==