Compare commits

...

2 Commits

Author SHA1 Message Date
8f6053e781 refactor: day 1 part 1 2024-10-31 06:11:47 -05:00
05a8044400 refactor: day 1 part 1 2024-10-26 14:34:43 -05:00
3 changed files with 23 additions and 15 deletions

2
.gitignore vendored
View File

@ -1,3 +1,3 @@
inputs input

View File

@ -4,9 +4,8 @@
(require "src/day01.rkt") (require "src/day01.rkt")
(define (run-all) (define (run-all)
(printf "Running all solutions") (printf "Running all solutions\n")
(define result-01-p1 (advent-of-code-01-p1)) (printf (string-append "Day 1 part 1: " (advent-of-code-01-p1))))
(printf (string-append "Day 1 part 1: " result-01-p1)))
(define argv (current-command-line-arguments)) (define argv (current-command-line-arguments))

View File

@ -41,14 +41,18 @@
; From a char list returns the first digit it finds as a char, or nil ; From a char list returns the first digit it finds as a char, or nil
; char list -> char
(define (get-first-digit list) (define (get-first-digit list)
(if (= (length list) 0) (if (empty? list)
null null
(let ([current-char (first list)]) (let ([current-char (first list)])
(if (char-numeric? current-char) (if (char-numeric? current-char)
current-char current-char
(get-first-digit (rest list)))))) (get-first-digit (rest list))))))
; finds the last digit in the given list
; char list -> char
(define (get-last-digit list carry) (define (get-last-digit list carry)
(if (= (length list) 0) (if (= (length list) 0)
carry carry
@ -59,23 +63,28 @@
carry)]) carry)])
(get-last-digit (rest list) next-char)))) (get-last-digit (rest list) next-char))))
; Creates a new number from the first & last number found inside a string ; Creates a new number from the first & last number found inside a char list
; char list -> int
(define (list->digits list) (define (list->digits list)
(let ([first-char (get-first-digit list)] (let ([first-char (get-first-digit list)]
[last-char (get-last-digit list -1)]) [last-char (get-last-digit list -1)])
(string->number (string first-char last-char)))) (string->number (string first-char last-char))))
(define (advent-of-code-01-p1) (define (advent-of-code-01-p1)
; Read file ; Read file
(define file-contents (define file-contents
(port->string (open-input-file "input-01.txt") #:close? #t)) (port->string (open-input-file "input/01.txt") #:close? #t))
; Split file into list of strings ; Split file into list of strings
(define input (string-split file-contents "\n")) (define lines (string-split file-contents "\n"))
(define list-of-list-of-chars (map string->list lines))
(define list-of-digits (map list->digits list-of-list-of-chars))
(define sum (foldl + 0 list-of-digits))
; process (number->string sum))
(define char-list (map string->list input))
(define result (foldl + 0 (map list->digits char-list))) (define (advent-of-code-01-p2)
result) 0)