; sum embedded numbers
(define (next-number xs)
(let loop ((xs xs))
(if (null? xs) (values #f #f)
(if (not (char-numeric? (car xs)))
(loop (cdr xs))
(let loop ((xs xs) (n 0))
(if (null? xs) (values n xs)
(if (char-numeric? (car xs))
(loop (cdr xs)
(+ (* n 10)
(- (char->integer (car xs))
(char->integer #\0))))
(values n xs))))))))
(define (sum-embedded-numbers str)
(let loop ((xs (string->list str)) (sum 0))
(call-with-values
(lambda () (next-number xs))
(lambda (n xs)
(if n (loop xs (+ sum n)) sum)))))
(display (sum-embedded-numbers "11aa22bb33cc44")) (newline)
OyBzdW0gZW1iZWRkZWQgbnVtYmVycwoKKGRlZmluZSAobmV4dC1udW1iZXIgeHMpCiAgKGxldCBsb29wICgoeHMgeHMpKQogICAgKGlmIChudWxsPyB4cykgKHZhbHVlcyAjZiAjZikKICAgICAgKGlmIChub3QgKGNoYXItbnVtZXJpYz8gKGNhciB4cykpKQogICAgICAgICAgKGxvb3AgKGNkciB4cykpCiAgICAgICAgICAobGV0IGxvb3AgKCh4cyB4cykgKG4gMCkpCiAgICAgICAgICAgIChpZiAobnVsbD8geHMpICh2YWx1ZXMgbiB4cykKICAgICAgICAgICAgICAoaWYgKGNoYXItbnVtZXJpYz8gKGNhciB4cykpCiAgICAgICAgICAgICAgICAgIChsb29wIChjZHIgeHMpCiAgICAgICAgICAgICAgICAgICAgICAgICgrICgqIG4gMTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChjaGFyLT5pbnRlZ2VyIChjYXIgeHMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhci0+aW50ZWdlciAjXDApKSkpCiAgICAgICAgICAgICAgICAgICh2YWx1ZXMgbiB4cykpKSkpKSkpCgooZGVmaW5lIChzdW0tZW1iZWRkZWQtbnVtYmVycyBzdHIpCiAgKGxldCBsb29wICgoeHMgKHN0cmluZy0+bGlzdCBzdHIpKSAoc3VtIDApKQogICAgKGNhbGwtd2l0aC12YWx1ZXMKICAgICAgKGxhbWJkYSAoKSAobmV4dC1udW1iZXIgeHMpKQogICAgICAobGFtYmRhIChuIHhzKQogICAgICAgIChpZiBuIChsb29wIHhzICgrIHN1bSBuKSkgc3VtKSkpKSkKCihkaXNwbGF5IChzdW0tZW1iZWRkZWQtbnVtYmVycyAiMTFhYTIyYmIzM2NjNDQiKSkgKG5ld2xpbmUp