commit f78dcce0a60279eee6e281e2a5b2d4e4c9e7592e Author: Araozu Date: Sat Dec 2 19:25:35 2023 -0500 Day 1 part 1 sample diff --git a/main.rkt b/main.rkt new file mode 100644 index 0000000..01e26c3 --- /dev/null +++ b/main.rkt @@ -0,0 +1,72 @@ +#lang racket + +; You try to ask why they can't just use a weather machine ("not powerful enough") +; and where they're even sending you ("the sky") and why your map looks mostly +; blank ("you sure ask a lot of questions") and hang on did you just say the sky +; ("of course, where do you think snow comes from") when you realize that the +; Elves are already loading you into a trebuchet ("please hold still, we need +; to strap you in"). + +; As they're making the final adjustments, they discover that their calibration +; document (your puzzle input) has been amended by a very young Elf who was +; apparently just excited to show off her art skills. Consequently, the Elves +; are having trouble reading the values on the document. + +; The newly-improved calibration document consists of lines of text; each line +; originally contained a specific calibration value that the Elves now need to +; recover. On each line, the calibration value can be found by combining the +; first digit and the last digit (in that order) to form a single two-digit +; number. + +; For example: + +; 1abc2 +; pqr3stu8vwx +; a1b2c3d4e5f +; treb7uchet + +; In this example, the calibration values of these four lines are 12, 38, 15, +; and 77. Adding these together produces 142. + +; Consider your entire calibration document. What is the sum of all of the +; calibration values? + +(define input '("1abc2" + "pqr3stu8vwx" + "a1b2c3d4e5f" + "treb7uchet")) + +; From a char list returns the first digit it finds as a char, or nil +(define (get-first-digit list) + (if (= (length list) 0) + null + (let ([current-char (first list)]) + (if (char-numeric? current-char) + current-char + (get-first-digit (rest list)))))) + +(define (get-last-digit list carry) + (if (= (length list) 0) + carry + (let* ([current-char (first list)] + [next-char + (if (char-numeric? current-char) + current-char + carry)]) + (get-last-digit (rest list) next-char)))) + +; Creates a new number from the first & last number found inside a string +(define (list->digits list) + (let ([first-char (get-first-digit list)] + [last-char (get-last-digit list -1)]) + (string->number (string first-char last-char)))) + + +(define char-list (map string->list input)) +(define result (foldl + 0 (map list->digits char-list))) + +(print result) + + + +