; triple or add five
(define (make-queue) (list (list)))
(define (enqueue q x) (cons (car q) (cons x (cdr q))))
(define (head q)
(if (pair? (car q))
(caar q)
(if (pair? (cdr q))
(car (reverse (cdr q)))
(error 'head "empty"))))
(define (tail q)
(if (pair? (car q))
(cons (cdar q) (cdr q))
(if (pair? (cdr q))
(cons (cdr (reverse (cdr q))) (list))
(error 'tail "empty"))))
(define (empty? q) (and (null? (car q)) (null? (cdr q))))
(define (triple-or-add-five n)
(let loop ((queue (enqueue (make-queue) (list n))))
(if (empty? queue) #f
(let ((seq (head queue)) (queue (tail queue)))
(if (= (car seq) 1) seq
(if (< (car seq) 1) (loop queue)
(let ((queue (enqueue queue (cons (- (car seq) 5) seq))))
(if (zero? (modulo (car seq) 3))
(loop (enqueue queue (cons (/ (car seq) 3) seq)))
(loop queue)))))))))
(display (triple-or-add-five 24)) (newline)
(display (triple-or-add-five 99)) (newline)
(display (triple-or-add-five 15)) (newline)
OyB0cmlwbGUgb3IgYWRkIGZpdmUKCihkZWZpbmUgKG1ha2UtcXVldWUpIChsaXN0IChsaXN0KSkpCgooZGVmaW5lIChlbnF1ZXVlIHEgeCkgKGNvbnMgKGNhciBxKSAoY29ucyB4IChjZHIgcSkpKSkKCihkZWZpbmUgKGhlYWQgcSkKICAoaWYgKHBhaXI/IChjYXIgcSkpCiAgICAgIChjYWFyIHEpCiAgICAgIChpZiAocGFpcj8gKGNkciBxKSkKICAgICAgICAgIChjYXIgKHJldmVyc2UgKGNkciBxKSkpCiAgICAgICAgICAoZXJyb3IgJ2hlYWQgImVtcHR5IikpKSkKCihkZWZpbmUgKHRhaWwgcSkKICAoaWYgKHBhaXI/IChjYXIgcSkpCiAgICAgIChjb25zIChjZGFyIHEpIChjZHIgcSkpCiAgICAgIChpZiAocGFpcj8gKGNkciBxKSkKICAgICAgICAgIChjb25zIChjZHIgKHJldmVyc2UgKGNkciBxKSkpIChsaXN0KSkKICAgICAgICAgIChlcnJvciAndGFpbCAiZW1wdHkiKSkpKQoKKGRlZmluZSAoZW1wdHk/IHEpIChhbmQgKG51bGw/IChjYXIgcSkpIChudWxsPyAoY2RyIHEpKSkpCgooZGVmaW5lICh0cmlwbGUtb3ItYWRkLWZpdmUgbikKICAobGV0IGxvb3AgKChxdWV1ZSAoZW5xdWV1ZSAobWFrZS1xdWV1ZSkgKGxpc3QgbikpKSkKICAgIChpZiAoZW1wdHk/IHF1ZXVlKSAjZgogICAgICAobGV0ICgoc2VxIChoZWFkIHF1ZXVlKSkgKHF1ZXVlICh0YWlsIHF1ZXVlKSkpCiAgICAgICAgKGlmICg9IChjYXIgc2VxKSAxKSBzZXEKICAgICAgICAgIChpZiAoPCAoY2FyIHNlcSkgMSkgKGxvb3AgcXVldWUpCiAgICAgICAgICAgIChsZXQgKChxdWV1ZSAoZW5xdWV1ZSBxdWV1ZSAoY29ucyAoLSAoY2FyIHNlcSkgNSkgc2VxKSkpKQogICAgICAgICAgICAgIChpZiAoemVybz8gKG1vZHVsbyAoY2FyIHNlcSkgMykpCiAgICAgICAgICAgICAgICAgIChsb29wIChlbnF1ZXVlIHF1ZXVlIChjb25zICgvIChjYXIgc2VxKSAzKSBzZXEpKSkKICAgICAgICAgICAgICAgICAgKGxvb3AgcXVldWUpKSkpKSkpKSkKCihkaXNwbGF5ICh0cmlwbGUtb3ItYWRkLWZpdmUgMjQpKSAobmV3bGluZSkKKGRpc3BsYXkgKHRyaXBsZS1vci1hZGQtZml2ZSA5OSkpIChuZXdsaW5lKQooZGlzcGxheSAodHJpcGxlLW9yLWFkZC1maXZlIDE1KSkgKG5ld2xpbmUp