diff options
author | bd <bdunahu@operationnull.com> | 2024-06-26 18:43:31 -0600 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2024-06-26 18:43:31 -0600 |
commit | 03ad9b7eadb02b05e4eb5074d0fdaadf8dc4ee00 (patch) | |
tree | f5852fc851af17e6612711bd7d87db924ddc2661 /cube-conundrum | |
parent | fd93afc17c30e480e437a28c6d495b521c0e7fb3 (diff) |
AoC 2023.2 p1+2
Diffstat (limited to 'cube-conundrum')
-rw-r--r-- | cube-conundrum/README.org | 34 | ||||
-rw-r--r-- | cube-conundrum/cc-test.scm | 187 | ||||
-rw-r--r-- | cube-conundrum/cc.scm | 110 | ||||
-rw-r--r-- | cube-conundrum/input.txt | 100 | ||||
-rw-r--r-- | cube-conundrum/main.scm | 16 |
5 files changed, 447 insertions, 0 deletions
diff --git a/cube-conundrum/README.org b/cube-conundrum/README.org new file mode 100644 index 0000000..ab000f5 --- /dev/null +++ b/cube-conundrum/README.org @@ -0,0 +1,34 @@ +See: https://adventofcode.com/2023/day/2 +** Part 1 +*** Purpose +Say there exists a bag containing an indeterminate number of colored cubes. In a series of "games", we reach our hand in an pull out an assortment, a number of times per game. We record our answers, using a semicolon (;) to denote putting the cubes back in the bag and re-grabbing more: + +#+begin_example +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green +#+end_example + +Say now that we learn that the bag has only 12 red cubes, 13 green cubes, and 14 blue cubes? + +Some of the games above are impossible. Count the sum of the game IDs of games that /are/ possible. + +*** Method + +Originally, this part of the problem looked challenging. But, we really only need to keep a record of the minimum number of cubes of each color for each game to be valid, like so: + +#+begin_example +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green ;; 6 blue, 4 red, 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue ;; 4 blue, 1 red, 3 green +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red ;; 6 blue, 20 red, 13 green +#+end_example + +Then simply compare these numbers with the cubes we were presented, and determine which games were possible. I cannot think of any other way to complete this problem. + +So, it seems, the hardest difficulty is... parsing the above input string! + +** Part 2 + +Part two asks us to multiple the minimum number of each cubes required in each game and add them all up. This is very easy, given the work already done! We'll just add this output to the main function. diff --git a/cube-conundrum/cc-test.scm b/cube-conundrum/cc-test.scm new file mode 100644 index 0000000..6b4ff06 --- /dev/null +++ b/cube-conundrum/cc-test.scm @@ -0,0 +1,187 @@ +;; -*- compile-command: "guile -L . cc-test.scm"; -*- +(use-modules (srfi srfi-64) + (cc)) + +(test-begin "harness") + + +(test-equal "max rgb all zeros" + '(0 0 0) + (take-max-instances '(0 0 0) '(0 0 0))) + +(test-equal "max rgb no change" + '(0 0 0) + (take-max-instances '(0 0 0) '(-1 -2 -3))) + +(test-equal "max rgb all change" + '(-1 -2 -3) + (take-max-instances '(-2 -3 -4) '(-1 -2 -3))) + +(test-equal "max rgb red change" + '(99 0 0) + (take-max-instances '(0 0 0) '(99 0 -1))) + +(test-equal "max rgb mix" + '(42 53 69) + (take-max-instances '(42 7 13) '(21 53 69))) + +(test-equal "zero all empty string" + '(0 0 0) + (draw->colors "")) + +(test-equal "1 red draw" + '(1 0 0) + (draw->colors "1 red")) + +(test-equal "1 green draw" + '(0 1 0) + (draw->colors "1 green,")) + +(test-equal "2 blue draw" + '(0 0 2) + (draw->colors "2 blue,")) + +(test-equal "1 of each" + '(1 1 1) + (draw->colors "1 red, 1 green, 1 blue,")) + +(test-equal "mix of each, random order" + '(72 56 24) + (draw->colors "56 green, 24 blue, 72 red")) + +(test-equal "zero draw game" + '(0 0 0) + (game->seen "")) + +(test-equal "two red single" + '(2 0 0) + (game->seen " 2 red")) + +(test-equal "one red repeat" + '(1 0 0) + (game->seen "1 red; 1 red; 1 red")) + +(test-equal "one red one blue repeat" + '(1 0 1) + (game->seen "1 red; 1 blue; 1 red")) + +(test-equal "escalating reds" + '(3 0 0) + (game->seen "1 red; 2 red; 3 red")) + +(test-equal "deescalating reds" + '(3 0 0) + (game->seen "3 red; 2 red; 1 red")) + +(test-equal "realistic game" + '(4 2 6) + (game->seen "3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green")) + +(test-equal "zero games returns empty alist" + '() + (games->at-least "")) + +(test-equal "one game zero draws returns zeros" + '((0 . (0 0 0))) + (games->at-least " +Game 0: +")) + +(test-equal "one game one draw one color" + '((0 . (0 1 0))) + (games->at-least " +Game 0: 1 green +")) + +(test-equal "varied game counter one game one draw" + '((42 . (0 1 0))) + (games->at-least " +Game 42: 1 green +")) + +(test-equal "two games of one draw" + '((1 . (1 0 0)) + (0 . (0 1 0))) + (games->at-least " +Game 0: 1 green +Game 1: 1 red +")) + +(test-equal "two games of multiple draws" + '((2 . (1 6 1)) + (0 . (0 1 2))) + (games->at-least " +Game 0: 1 green; 2 blue +Game 2: 1 red; 6 green, 1 blue +")) + +(test-equal "many games many draws" + '((5 . (6 3 2)) + (4 . (14 3 15)) + (3 . (20 13 6)) + (2 . (1 3 4)) + (1 . (4 2 6))) + (games->at-least " +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green +")) + +(test-equal "no games results in no possible games" + '() + (filter-possible-games '() '(0 0 0))) + +(test-equal "one impossible game" + '() + (filter-possible-games '((1 . (99 99 99))) '(0 0 0))) + +(test-equal "one possible game" + '((1 . (0 0 0))) + (filter-possible-games '((1 . (0 0 0))) '(99 99 99))) + +(test-equal "one possible game borderline" + '((1 . (99 99 99))) + (filter-possible-games '((1 . (99 99 99))) '(99 99 99))) + +(test-equal "game crossed one" + '() + (filter-possible-games '((1 . (99 99 100))) '(99 99 99))) + +(test-equal "two possible zero impossible" + '((1 . (99 98 99)) + (3 . (101 52 99))) + (filter-possible-games '((1 . (99 98 99)) + (3 . (101 52 99))) '(101 99 99))) + +(test-equal "zero possible two impossible" + '() + (filter-possible-games '((1 . (99 98 99)) + (3 . (101 52 99))) '(100 97 99))) + +(test-equal "one possible one impossible" + '((1 . (99 98 99))) + (filter-possible-games '((1 . (99 98 99)) + (3 . (101 52 99))) '(100 99 99))) + +(test-equal "sum zero possible games" + '(0 . 0) + (cc "Game 0: 99 red" 0 0 0)) + +(test-equal "sum one possible games" + '(1 . 0) + (cc "Game 1: -1 red" 0 0 0)) + +(test-equal "sum realistic input" + '(8 . 2286) + (cc " +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green +" 12 13 14)) + + +(test-end "harness") diff --git a/cube-conundrum/cc.scm b/cube-conundrum/cc.scm new file mode 100644 index 0000000..de62808 --- /dev/null +++ b/cube-conundrum/cc.scm @@ -0,0 +1,110 @@ +(define-module (cc) + #:use-module (srfi srfi-1) + #:export (cc + filter-possible-games + games->at-least + game->seen + draw->colors + take-max-instances)) + + +(define (cc str red green blue) + "Given STR, a list of games and their +corresponding draws, as well as RED, GREEN, +and BLUE, the total amount of cubes actually +possessed, return the sum of the possible game +ids, as well as the total power." + (let ((games (games->at-least str))) + (cons + (apply + (map car + (filter-possible-games games + (list red green blue)))) + (calculate-total-power games)))) + +(define (calculate-total-power games) + "Given an alist of games, calculates the total +'power'. The power of one game is product the minimum +number of cubes required to make the game possible." + (apply + (map (lambda (x) + (apply * (cdr x))) + games))) + +(define (filter-possible-games games have-rgb) + (filter (lambda (x) + (list<=? (cdr x) have-rgb)) + games)) + +(define (list<=? lst1 lst2) + (cond + ((null? lst1) #t) + ((null? lst2) #f) + ((< (car lst2) (car lst1)) #f) + (#t (list<=? (cdr lst1) (cdr lst2))))) + +(define (games->at-least str) + "Given STR containing a new-line separated list +of games and their corresponding draws, returns an +alist containing the game identifiers as keys and a +list numbers of each cube that must be present for +the game to be possible." + (let ((ret '())) + (map (lambda (line) + (unless (string-null? line) + (let* ((gd-pair (string-split line #\:)) + (num (string->number (substring (car gd-pair) 5))) + (draws (cadr gd-pair))) + (set! ret (acons num (game->seen draws) ret))))) + (string-split + (string-trim-both str char-set:whitespace) + #\newline)) + ret)) + +(define (game->seen str) + "Given a single round of draws: + +8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red + +Produces a list of numbers representing the +maximum amount of each color seen at a time: +'(20 13 6)" + (let loop ((draws (string-split str #\;)) (cur-rgb '(0 0 0))) + (if (null? draws) + cur-rgb + (loop (cdr draws) + (take-max-instances + cur-rgb + (draw->colors (car draws))))))) + +(define (draw->colors str) + "Given a string of a single draw, i.e.: +3 blue, 4 red + +returns a list of numbers representing the +corresponding RGB: + +'(4 0 3)" + (let loop ((colors (string-split str #\,)) + (red 0) (green 0) (blue 0)) + (if (or (null? colors) + (zero? (string-length (car colors)))) + (list red green blue) + (let* ((nc-pair (string-split (string-trim (car colors)) #\space)) + (num (string->number (car nc-pair))) + (color (cadr nc-pair))) + (cond + ((equal? color "red") + (set! red num)) + ((equal? color "green") + (set! green num)) + ((equal? color "blue") + (set! blue num))) + (loop (cdr colors) red green blue))))) + +(define (take-max-instances cur-rgb new-rgb) + "Given two lists representing a count +of RGB cubes, return a new list that is +the max of each element-wise." + (map (lambda (c-pair) + (max (car c-pair) + (cadr c-pair))) + (zip cur-rgb new-rgb))) diff --git a/cube-conundrum/input.txt b/cube-conundrum/input.txt new file mode 100644 index 0000000..4620a0b --- /dev/null +++ b/cube-conundrum/input.txt @@ -0,0 +1,100 @@ +Game 1: 2 blue, 3 red; 3 green, 3 blue, 6 red; 4 blue, 6 red; 2 green, 2 blue, 9 red; 2 red, 4 blue +Game 2: 4 red, 1 green; 3 red; 13 green, 5 red, 3 blue; 3 green, 2 red; 3 blue, 5 red, 3 green; 2 red, 3 blue, 12 green +Game 3: 4 red, 1 green, 1 blue; 1 red, 1 blue; 6 red, 1 green; 6 red, 3 blue, 1 green; 4 red +Game 4: 4 blue, 12 red, 4 green; 6 green, 3 blue, 19 red; 3 blue, 2 red, 2 green +Game 5: 1 red, 5 blue, 16 green; 1 red, 6 green, 3 blue; 2 red, 12 blue; 17 blue, 3 green; 7 green, 2 red, 6 blue +Game 6: 3 green, 1 blue, 5 red; 5 green, 5 red; 2 green, 2 blue, 3 red; 5 green, 2 red; 3 green, 6 red, 3 blue; 5 green, 4 red +Game 7: 15 blue, 1 red, 6 green; 4 blue, 7 green, 2 red; 14 blue, 5 green, 2 red +Game 8: 6 blue, 3 green, 10 red; 2 blue, 1 green, 5 red; 6 blue, 3 green, 12 red; 11 red, 1 green, 1 blue; 5 blue, 14 red, 3 green; 3 red +Game 9: 15 red, 3 blue; 1 blue, 16 red; 1 red, 3 blue; 1 blue, 1 green, 9 red +Game 10: 1 red; 1 blue, 7 green; 1 green, 5 blue; 3 blue, 3 green; 1 green +Game 11: 19 blue, 13 green; 19 blue, 2 green; 10 blue, 3 red, 12 green; 11 blue, 1 red, 6 green +Game 12: 7 green, 5 blue; 6 green, 3 red, 6 blue; 2 red, 5 blue, 15 green; 2 red, 1 blue, 1 green; 4 red, 4 green, 2 blue; 3 blue, 6 green +Game 13: 9 red, 2 blue, 2 green; 1 blue, 2 red, 15 green; 9 green, 2 blue, 9 red; 5 blue, 8 green, 5 red; 2 blue, 11 green, 5 red +Game 14: 9 blue, 1 red; 10 blue, 4 green, 3 red; 2 red, 6 blue; 4 green, 2 blue, 1 red; 5 green, 2 red, 11 blue; 12 blue, 2 red, 1 green +Game 15: 9 blue, 7 green, 12 red; 9 red, 17 green, 8 blue; 6 red, 4 blue, 4 green; 5 red, 17 green +Game 16: 5 green, 4 red; 3 blue, 3 red, 14 green; 6 red, 5 blue, 12 green +Game 17: 8 blue, 5 green, 2 red; 6 red, 6 blue; 9 red; 5 blue, 2 green, 8 red; 13 red, 4 blue, 4 green; 9 blue, 3 green, 5 red +Game 18: 8 green, 1 red, 2 blue; 4 green, 4 red, 1 blue; 6 blue, 2 red +Game 19: 3 green, 9 blue; 4 blue, 10 red; 6 red, 3 green, 3 blue; 6 red, 4 green, 9 blue +Game 20: 11 green, 3 blue; 6 green; 3 green, 6 blue; 1 red, 5 green; 6 blue, 7 green +Game 21: 1 green, 1 blue, 12 red; 6 red, 2 blue; 5 green, 4 red, 2 blue; 11 red, 8 green, 1 blue +Game 22: 10 red; 1 red, 13 green, 9 blue; 6 blue, 12 red, 12 green; 10 red, 8 blue, 11 green; 2 green, 1 red, 3 blue; 7 red, 1 blue, 8 green +Game 23: 11 red, 15 blue; 10 blue, 16 red, 1 green; 14 blue, 5 red; 1 green, 9 red, 9 blue; 1 red, 7 blue, 3 green; 6 red, 2 green, 3 blue +Game 24: 6 blue, 11 red; 16 green, 2 red, 1 blue; 8 red, 7 blue; 14 blue, 9 green, 9 red; 13 green, 4 red, 8 blue; 2 red, 7 blue, 1 green +Game 25: 2 green, 12 blue, 1 red; 10 blue, 5 red, 5 green; 2 blue, 9 red, 3 green; 5 blue, 4 red, 2 green +Game 26: 7 blue, 6 red, 1 green; 2 blue, 3 green, 12 red; 2 blue, 6 red, 5 green +Game 27: 2 green, 3 red; 4 green; 2 red, 1 blue, 1 green; 2 red, 1 green, 2 blue +Game 28: 11 blue, 1 red, 5 green; 2 blue, 2 red, 4 green; 10 blue, 4 red, 1 green +Game 29: 6 blue, 17 red, 1 green; 8 blue, 4 red; 14 blue, 1 red, 3 green +Game 30: 2 blue, 4 green; 7 green, 1 blue, 1 red; 1 blue, 8 green +Game 31: 15 blue, 9 green, 2 red; 5 green, 4 blue, 1 red; 1 green, 15 red, 7 blue; 5 red, 2 blue +Game 32: 1 blue, 5 red, 3 green; 3 green, 8 red, 1 blue; 5 green, 1 red; 4 green, 3 blue, 15 red; 2 green, 1 blue; 4 blue, 15 red, 4 green +Game 33: 3 red, 10 blue; 4 red, 9 blue; 1 green, 10 blue +Game 34: 3 blue, 1 green, 9 red; 4 green, 2 red, 9 blue; 7 blue, 3 red; 6 blue, 13 red; 4 green, 13 blue, 9 red +Game 35: 14 red, 1 green; 1 red, 2 green, 4 blue; 3 blue, 10 red, 6 green; 5 blue, 6 red, 7 green; 7 blue, 5 red +Game 36: 2 blue, 8 red, 9 green; 9 green, 3 red, 10 blue; 6 red, 8 blue, 1 green; 6 green, 8 red, 4 blue +Game 37: 10 green, 3 red, 6 blue; 2 blue, 9 red, 5 green; 13 green, 9 red, 10 blue; 2 blue, 4 green, 9 red +Game 38: 4 red, 14 blue, 12 green; 6 red, 12 green, 18 blue; 6 green, 1 blue, 1 red +Game 39: 5 red, 1 blue, 3 green; 1 blue, 3 green, 8 red; 15 red, 1 blue, 5 green; 3 green, 5 red; 1 blue, 14 red; 3 green, 1 blue, 12 red +Game 40: 8 green, 4 blue; 5 blue, 7 red, 8 green; 5 blue, 8 green; 6 green, 3 red, 12 blue; 14 blue, 7 green, 2 red; 1 green, 7 red, 5 blue +Game 41: 7 red, 10 green; 10 red, 6 green; 9 red, 7 green, 1 blue; 3 red, 1 blue +Game 42: 3 green, 2 blue, 13 red; 1 blue, 3 red; 11 green, 16 red; 3 green, 1 blue, 16 red; 5 red, 8 green +Game 43: 12 blue, 9 red; 16 blue, 2 red, 7 green; 4 red, 1 blue, 11 green; 15 blue, 4 red, 9 green +Game 44: 17 green, 5 blue, 2 red; 9 green, 11 blue, 1 red; 20 green, 3 blue, 8 red; 2 red, 13 green, 9 blue; 15 green, 12 blue; 4 blue, 7 green, 9 red +Game 45: 5 green; 5 green, 1 red; 3 green, 2 blue; 1 green, 1 blue, 1 red +Game 46: 10 red, 11 green; 16 green, 8 blue, 12 red; 9 green, 9 blue +Game 47: 20 green, 17 red, 1 blue; 16 red, 2 blue, 11 green; 3 blue, 19 red, 1 green; 3 blue, 17 red, 17 green; 12 green, 2 blue, 7 red +Game 48: 1 red, 4 blue, 6 green; 19 green, 1 red, 1 blue; 16 green, 3 blue, 1 red; 3 blue, 17 green; 4 blue, 12 green +Game 49: 13 green, 2 blue, 1 red; 1 green, 8 red, 2 blue; 11 red, 11 green, 3 blue; 7 red, 8 green, 4 blue +Game 50: 11 blue, 1 red, 2 green; 1 green, 10 blue; 1 blue; 6 blue; 1 green, 2 blue +Game 51: 3 red, 3 green, 1 blue; 3 green, 3 red; 10 green, 4 red; 3 red, 2 green +Game 52: 1 red, 4 blue; 1 green, 11 blue; 1 green, 3 red, 6 blue; 4 red, 1 green, 4 blue; 9 blue, 1 green; 10 blue, 1 green +Game 53: 2 blue, 4 green, 1 red; 8 blue, 4 red, 7 green; 9 red, 7 blue, 6 green; 3 red, 7 green, 1 blue; 2 red, 9 blue, 5 green; 1 green, 7 red, 10 blue +Game 54: 1 red, 1 blue, 5 green; 2 red, 1 green, 2 blue; 3 green, 3 blue, 2 red; 4 red; 12 red, 5 green, 2 blue +Game 55: 2 red, 11 blue; 16 green, 7 red, 16 blue; 4 blue, 11 green, 7 red; 8 green, 18 blue, 8 red +Game 56: 2 blue, 2 green, 1 red; 1 red, 1 green; 1 red; 4 green; 1 blue; 1 blue, 7 green +Game 57: 4 blue, 3 green; 16 green, 2 red, 5 blue; 1 red, 13 green, 2 blue; 3 blue, 12 green, 2 red; 2 red, 5 blue, 4 green; 10 green, 2 blue +Game 58: 3 blue, 8 green; 4 green, 3 blue; 7 green, 5 blue, 5 red; 8 green; 3 red, 6 blue, 9 green; 2 red, 10 green, 4 blue +Game 59: 7 blue, 6 green, 5 red; 7 red, 2 blue; 5 red, 11 green, 14 blue; 8 green, 17 red +Game 60: 3 green, 8 blue, 2 red; 4 green, 7 blue, 6 red; 13 blue, 8 green, 2 red; 10 red, 6 blue, 5 green; 11 green, 3 blue, 4 red; 9 red, 5 green, 9 blue +Game 61: 4 red, 18 blue, 13 green; 9 green, 5 red, 3 blue; 4 green, 3 blue, 4 red; 8 red, 4 green, 7 blue; 8 red, 4 blue, 6 green; 10 green, 5 red, 14 blue +Game 62: 12 red, 14 blue, 9 green; 9 blue, 6 red, 4 green; 2 red, 5 blue; 1 red, 12 blue +Game 63: 11 blue, 13 red, 11 green; 4 blue, 9 green; 8 blue, 9 red; 7 red, 11 green, 7 blue +Game 64: 10 blue, 8 red, 12 green; 10 red, 12 blue, 9 green; 3 green, 17 red; 12 green, 15 blue, 16 red; 6 green, 15 blue, 1 red; 9 red, 6 blue, 10 green +Game 65: 7 red, 7 blue; 3 blue, 1 red, 1 green; 3 red, 8 blue +Game 66: 1 blue, 3 red; 10 green, 5 blue; 4 green; 3 red, 11 green; 3 blue, 15 green, 3 red +Game 67: 1 red; 2 blue, 2 green, 1 red; 6 green, 1 blue +Game 68: 7 red, 4 blue; 4 blue, 6 red, 7 green; 2 green, 19 red, 11 blue; 11 green, 9 red +Game 69: 4 blue, 3 green, 1 red; 7 blue, 1 red, 3 green; 5 blue, 1 green; 2 blue, 10 green, 2 red; 2 red, 6 green, 5 blue; 1 red, 4 green, 2 blue +Game 70: 9 blue, 7 red, 6 green; 19 blue, 4 red, 5 green; 6 blue, 7 red, 4 green; 3 blue, 4 red, 2 green +Game 71: 6 green, 12 blue, 4 red; 11 red, 10 green, 11 blue; 3 red, 14 blue, 13 green; 4 blue, 3 green +Game 72: 2 green, 1 blue, 9 red; 10 red, 3 green, 1 blue; 11 red, 2 green; 2 green, 1 blue, 5 red; 1 red, 1 blue, 3 green; 13 red, 4 blue, 1 green +Game 73: 11 green, 6 blue; 7 green, 6 blue, 7 red; 12 green, 8 blue, 11 red; 4 red, 2 blue, 9 green; 4 green, 7 blue, 2 red +Game 74: 3 blue, 7 red; 3 blue, 5 green, 2 red; 5 red, 1 green, 3 blue; 8 green, 2 blue, 11 red; 3 blue, 8 green, 10 red +Game 75: 2 green; 5 blue; 1 blue, 1 red; 1 red, 9 blue, 2 green; 2 blue, 2 green +Game 76: 12 blue, 13 green; 5 red, 11 blue, 9 green; 12 green, 6 red +Game 77: 1 blue, 15 green, 12 red; 15 green, 5 blue; 14 green, 3 blue, 8 red +Game 78: 11 green, 8 blue, 1 red; 9 green, 8 blue, 1 red; 13 green, 5 red, 6 blue; 5 red, 7 green, 20 blue; 10 blue, 5 red +Game 79: 3 blue; 6 blue, 5 red; 4 red, 1 green, 4 blue; 7 blue, 6 red; 7 red, 1 blue; 1 red, 1 blue, 1 green +Game 80: 11 green, 3 red, 8 blue; 2 red, 15 green, 2 blue; 5 green, 8 blue, 2 red; 8 blue, 14 green; 2 blue, 13 green +Game 81: 9 red, 4 green; 7 green, 4 red; 2 red, 4 blue, 6 green; 6 red, 4 blue, 9 green; 1 green, 3 red; 6 green, 1 blue, 8 red +Game 82: 5 blue, 3 red, 3 green; 5 red; 2 red, 3 green, 8 blue +Game 83: 10 green, 1 red, 1 blue; 3 red, 1 green, 1 blue; 4 red, 10 green +Game 84: 16 red, 2 green, 6 blue; 6 red, 3 green, 8 blue; 3 green, 10 red, 5 blue; 4 blue, 3 green; 15 red +Game 85: 3 green, 2 red; 5 green, 4 blue; 5 green, 8 red, 3 blue +Game 86: 7 green, 16 blue, 7 red; 1 green, 12 red, 2 blue; 15 green, 16 blue, 7 red +Game 87: 1 red, 6 green, 5 blue; 2 green, 1 blue; 2 green, 1 red, 1 blue; 5 green, 4 blue +Game 88: 3 green, 3 red, 4 blue; 1 red, 1 green; 6 blue, 9 red, 1 green; 1 green, 11 red, 3 blue; 7 red, 6 blue +Game 89: 2 blue, 3 red, 4 green; 5 red, 7 blue, 14 green; 8 blue, 5 red, 16 green; 2 blue, 5 red, 7 green; 5 green, 9 blue, 1 red +Game 90: 1 blue, 3 red, 7 green; 11 green, 4 red, 1 blue; 1 red, 1 blue, 6 green; 2 blue, 2 green; 8 green, 2 blue; 3 red, 2 blue, 4 green +Game 91: 6 blue, 4 red, 1 green; 8 red, 3 blue, 3 green; 1 green, 2 blue, 5 red; 1 blue, 3 green +Game 92: 8 green, 1 red, 5 blue; 2 green, 7 blue; 11 blue, 5 green, 8 red; 7 blue, 3 red, 4 green +Game 93: 3 green, 1 red, 9 blue; 13 red, 5 blue, 8 green; 5 green, 2 red, 7 blue +Game 94: 4 green, 10 blue, 8 red; 4 red, 10 blue, 2 green; 2 green, 10 blue, 5 red; 5 green, 2 red, 10 blue +Game 95: 5 green, 1 blue; 3 blue, 11 green, 8 red; 8 blue, 2 red, 12 green; 4 green, 4 blue, 4 red +Game 96: 1 blue, 13 green; 8 blue, 3 red, 4 green; 1 red, 3 blue, 10 green +Game 97: 18 green, 4 red; 1 blue, 2 red, 9 green; 6 red, 3 blue, 10 green; 3 blue, 15 green, 4 red +Game 98: 2 blue, 3 green, 6 red; 1 green, 1 blue, 8 red; 8 red, 3 green, 1 blue; 2 blue; 8 red, 2 green, 2 blue +Game 99: 1 green, 2 red, 1 blue; 8 green, 4 blue, 1 red; 7 blue, 1 red, 11 green; 9 green, 3 blue; 1 red, 2 blue; 1 red, 6 blue +Game 100: 7 blue, 9 green, 2 red; 5 red, 9 green; 1 blue, 8 red, 13 green diff --git a/cube-conundrum/main.scm b/cube-conundrum/main.scm new file mode 100644 index 0000000..3703427 --- /dev/null +++ b/cube-conundrum/main.scm @@ -0,0 +1,16 @@ +;; -*- compile-command: "guile -L . -e main -s main.scm 12 13 14 < input.txt"; -*- +(use-modules (cc) + ((ice-9 rdelim)) + (ice-9 binary-ports)) + + +(define (stdin-to-str) + (let loop ((result "")) + (let ((line (read-line))) + (if (eof-object? line) + result + (loop (string-append result line "\n")))))) + +(define (main args) + (display (apply cc (cons (stdin-to-str) (map string->number (cdr args))))) + (newline)) |