; your code goes here
(define (factors n) ; 2,3,5-wheel
(let ((wheel (vector 1 2 2 4 2 4 2 4 6 2 6)))
(let loop ((n n) (f 2) (w 0) (fs (list)))
(if (< n (* f f)) (reverse (cons n fs))
(if (zero? (modulo n f))
(loop (/ n f) f w (cons f fs))
(loop n (+ f (vector-ref wheel w))
(if (= w 10) 3 (+ w 1)) fs))))))
(define (numdiv n)
(let ((fs (factors n)))
(let loop ((prev (car fs)) (fs (cdr fs)) (f 2) (d 1))
(cond ((null? fs) (* d f))
((= (car fs) prev) (loop prev (cdr fs) (+ f 1) d))
(else (loop (car fs) (cdr fs) 2 (* d f)))))))
(define (euler12 limit)
(let loop ((n 1) (tri 1))
(if (< limit (numdiv tri))
(list n tri (numdiv tri))
(loop (+ n 1) (+ tri n 1)))))
(display (euler12 500)) (newline)
OyB5b3VyIGNvZGUgZ29lcyBoZXJlCgooZGVmaW5lIChmYWN0b3JzIG4pIDsgMiwzLDUtd2hlZWwKICAobGV0ICgod2hlZWwgKHZlY3RvciAxIDIgMiA0IDIgNCAyIDQgNiAyIDYpKSkKICAgIChsZXQgbG9vcCAoKG4gbikgKGYgMikgKHcgMCkgKGZzIChsaXN0KSkpCiAgICAgIChpZiAoPCBuICgqIGYgZikpIChyZXZlcnNlIChjb25zIG4gZnMpKQogICAgICAgIChpZiAoemVybz8gKG1vZHVsbyBuIGYpKQogICAgICAgICAgICAobG9vcCAoLyBuIGYpIGYgdyAoY29ucyBmIGZzKSkKICAgICAgICAgICAgKGxvb3AgbiAoKyBmICh2ZWN0b3ItcmVmIHdoZWVsIHcpKQogICAgICAgICAgICAgICAgICAoaWYgKD0gdyAxMCkgMyAoKyB3IDEpKSBmcykpKSkpKQooZGVmaW5lIChudW1kaXYgbikKICAobGV0ICgoZnMgKGZhY3RvcnMgbikpKQogICAgKGxldCBsb29wICgocHJldiAoY2FyIGZzKSkgKGZzIChjZHIgZnMpKSAoZiAyKSAoZCAxKSkKICAgICAgKGNvbmQgKChudWxsPyBmcykgKCogZCBmKSkKICAgICAgICAgICAgKCg9IChjYXIgZnMpIHByZXYpIChsb29wIHByZXYgKGNkciBmcykgKCsgZiAxKSBkKSkKICAgICAgICAgICAgKGVsc2UgKGxvb3AgKGNhciBmcykgKGNkciBmcykgMiAoKiBkIGYpKSkpKSkpCgooZGVmaW5lIChldWxlcjEyIGxpbWl0KQogIChsZXQgbG9vcCAoKG4gMSkgKHRyaSAxKSkKICAgIChpZiAoPCBsaW1pdCAobnVtZGl2IHRyaSkpCiAgICAgICAgKGxpc3QgbiB0cmkgKG51bWRpdiB0cmkpKQogICAgICAgIChsb29wICgrIG4gMSkgKCsgdHJpIG4gMSkpKSkpCgooZGlzcGxheSAoZXVsZXIxMiA1MDApKSAobmV3bGluZSk=