part2.rkt 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #lang racket
  2. (define fp (open-input-file "input"))
  3. (define sum 0)
  4. (define (get-lines fp)
  5. (let loop ((lines '()))
  6. (define l (read-line fp))
  7. (if (eof-object? l)
  8. (reverse lines)
  9. (loop (cons l lines)))))
  10. (define lines (get-lines fp))
  11. (define (replace-digit str)
  12. (set! str (string-replace str "one" "o1ne"))
  13. (set! str (string-replace str "two" "t2wo"))
  14. (set! str (string-replace str "three" "t3hree"))
  15. (set! str (string-replace str "four" "f4our"))
  16. (set! str (string-replace str "five" "f5ive"))
  17. (set! str (string-replace str "six" "s6ix"))
  18. (set! str (string-replace str "seven" "s7even"))
  19. (set! str (string-replace str "eight" "e8ight"))
  20. (set! str (string-replace str "nine" "n9ine"))
  21. str)
  22. (define (extract-number rawline)
  23. (define line (replace-digit rawline))
  24. (define number-list (filter char-numeric? (string->list line)))
  25. (set! number-list (map (lambda (c)
  26. (string->number (list->string (list c))))
  27. number-list))
  28. (+ (last number-list) (* 10 (car number-list))))
  29. (display (apply + (map extract-number lines)))
  30. (newline)