refactor: create a main file that controls execution of the days
This commit is contained in:
parent
ecd5ff63ed
commit
020a953376
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
inputs
|
||||||
|
|
||||||
|
|
86
main.rkt
86
main.rkt
@ -1,81 +1,23 @@
|
|||||||
#lang racket
|
#lang racket
|
||||||
|
|
||||||
(require racket/port)
|
; import all days
|
||||||
|
(require "src/day01.rkt")
|
||||||
|
|
||||||
; You try to ask why they can't just use a weather machine ("not powerful enough")
|
(define (run-all)
|
||||||
; and where they're even sending you ("the sky") and why your map looks mostly
|
(printf "Running all solutions")
|
||||||
; blank ("you sure ask a lot of questions") and hang on did you just say the sky
|
(define result-01-p1 (advent-of-code-01-p1))
|
||||||
; ("of course, where do you think snow comes from") when you realize that the
|
(printf (string-append "Day 1 part 1: " result-01-p1)))
|
||||||
; 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))))
|
|
||||||
|
|
||||||
|
|
||||||
; Read file
|
(define argv (current-command-line-arguments))
|
||||||
(define file-contents
|
(define argc (vector-length argv))
|
||||||
(port->string (open-input-file "input-01.txt") #:close? #t))
|
|
||||||
; Split file into list of strings
|
|
||||||
(define input (string-split file-contents "\n"))
|
|
||||||
|
|
||||||
; process
|
; If no arguments are provided, run all solutions from all days
|
||||||
(define char-list (map string->list input))
|
; on the real inputs
|
||||||
(define result (foldl + 0 (map list->digits char-list)))
|
|
||||||
|
(when (= argc 0)
|
||||||
|
(run-all)
|
||||||
|
(exit 1))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(print result)
|
|
||||||
|
81
src/day01.rkt
Normal file
81
src/day01.rkt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#lang racket
|
||||||
|
|
||||||
|
(require racket/port)
|
||||||
|
(provide advent-of-code-01-p1)
|
||||||
|
|
||||||
|
; 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 (advent-of-code-01-p1)
|
||||||
|
; Read file
|
||||||
|
(define file-contents
|
||||||
|
(port->string (open-input-file "input-01.txt") #:close? #t))
|
||||||
|
|
||||||
|
; Split file into list of strings
|
||||||
|
(define input (string-split file-contents "\n"))
|
||||||
|
|
||||||
|
; process
|
||||||
|
(define char-list (map string->list input))
|
||||||
|
(define result (foldl + 0 (map list->digits char-list)))
|
||||||
|
result)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user