]> fbox.kageds.com Git - adventofcode.git/commitdiff
alan day4
authorEC2 Default User <ec2-user@ip-10-0-110-53.eu-west-1.compute.internal>
Sat, 4 Dec 2021 18:40:16 +0000 (18:40 +0000)
committerEC2 Default User <ec2-user@ip-10-0-110-53.eu-west-1.compute.internal>
Sat, 4 Dec 2021 18:40:16 +0000 (18:40 +0000)
day3/day3 [new file with mode: 0755]
day3/day3.erl
day3/day3.hs [new file with mode: 0644]
day4/boards.txt [new file with mode: 0644]
day4/day4.erl [new file with mode: 0644]

diff --git a/day3/day3 b/day3/day3
new file mode 100755 (executable)
index 0000000..393c991
Binary files /dev/null and b/day3/day3 differ
index ee14ac9f32fb7e5ed5d875987b9263b99077f546..0f506c3f1a80455c55c8a0caaf2445858a1e541a 100644 (file)
@@ -11,7 +11,7 @@ solve() ->
     init:stop().
 
 solve(A) ->
     init:stop().
 
 solve(A) ->
-    solve(A, get_data()).
+    solve(A, get_test_data()).
 
 solve(['1'], D) ->
     io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
 
 solve(['1'], D) ->
     io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
@@ -60,6 +60,7 @@ get_count_list([H|_] = D) ->
     get_count_list(D, init_acc(length(H), [])).
 
 get_count_list([], Acc) ->
     get_count_list(D, init_acc(length(H), [])).
 
 get_count_list([], Acc) ->
+    io:format("~p~n", [Acc]),
     Acc;
 get_count_list([H|T], Acc) ->
     get_count_list(T, lists:zipwith(fun(X, {Ones, Zeros}) ->
     Acc;
 get_count_list([H|T], Acc) ->
     get_count_list(T, lists:zipwith(fun(X, {Ones, Zeros}) ->
diff --git a/day3/day3.hs b/day3/day3.hs
new file mode 100644 (file)
index 0000000..0ff169b
--- /dev/null
@@ -0,0 +1,25 @@
+main = do
+   putStrLn "The solution to puzzle 1 is:"
+   print (solve 1 )
+
+solve 1 = solution1 input_test_data (take 5 (repeat (0,0)))
+
+solution1 :: (Num a, Num b) => [[Char]] -> [(a, b)] -> [Char] 
+solution1 [] acc = 
+   [gamma x y | (x,y) <- acc]
+solution1 (x:xs) acc = do
+   solution1 xs (zipWith zip_f x acc)
+
+zip_f :: (Num a1, Num a2) => Char -> (a1, a2) -> (a1, a2)
+zip_f x (y,z) 
+    |x == '1' = (y+1,z) 
+    |x == '0' = (y,z+1)
+
+gamma :: (Num a1, Num a2) => a1 -> a2 -> Char
+gamma x y 
+    | x > y = '1'
+    | otherwise = '0'
+
+input_test_data = [ "00100", "11110", "10110", "10111", "10101", "01111", "00111", "11100", "10000", "11001", "00010", "01010" ]
+
+input_data = [ "010100110111", "101001010000", "101011110010", "100100011101", "101000011000", "110011011110", "111010010100", "001111100000", "111101100001", "100010101110", "101101110101", "010010101110", "111001110100", "000101111000", "111101111100", "000010001100", "101010111101", "001010011011", "001101101101", "000000110100", "001100101011", "110110110010", "001110000011", "011001111001", "110100110011", "011000110001", "111100100010", "101011000000", "011101000111", "011111000111", "111011001110", "011111010100", "001110110001", "010110110001", "100111011011", "100110100100", "110010111000", "101111001100", "101111111001", "000001000110", "100010010110", "110111100101", "001001010101", "001110001011", "101111001011", "111011110010", "101001001100", "101010100001", "000000111101", "100000000111", "111010111101", "000110110111", "100100101111", "110101100101", "011010110010", "110100001110", "001011011010", "010101010101", "011110000100", "010000000010", "010111010111", "011010011100", "101101001011", "000111100101", "101111001000", "000100010000", "111000011111", "100001010101", "011101111110", "001111011110", "001100111111", "000011000100", "001011101010", "001011010111", "101001001110", "010101011001", "110101001011", "011110011110", "001000110010", "011101110001", "101110000000", "000001100111", "110111000011", "001001111010", "100100000000", "000000011101", "111110111011", "101001111100", "110110100010", "101011011000", "000111100010", "011000110100", "111100100100", "010010100000", "111101001011", "111001000000", "001001000001", "010010100001", "110110001100", "001101100001", "011110010110", "100111011101", "001001110110", "001001100011", "011001111010", "110110010111", "110100111010", "111110011100", "100000100111", "010001101101", "110100110101", "101111101001", "100110010000", "100011001111", "101111001010", "001110111001", "111101001101", "001010111101", "010010011010", "100101101111", "100000011110", "011111010001", "000010001101", "010100101100", "001010001100", "100111011100", "011110000000", "100000011111", "000010010100", "000001001101", "011111011111", "100101001101", "000100010110", "011011111100", "000111000011", "010100101011", "011000101111", "001001100111", "110111110100", "111101111011", "110011010101", "100111111111", "010100010000", "001111110101", "010011010001", "101000111111", "000001110100", "010010010000", "100010000101", "110111100111", "001011111101", "101100101101", "001010110100", "000100110001", "111101110110", "111110101110", "100011100110", "011001001010", "001000010111", "010001110110", "011110000010", "101010101111", "110100100100", "010001100101", "001011111110", "100111100000", "111101000010", "101101011110", "101100111100", "001110011100", "110110100101", "000110111010", "011001010111", "010001000011", "100010010111", "000110110000", "001000010101", "010011010010", "110000100010", "010000101110", "010110111000", "011101001000", "011110000111", "100110100011", "110011001001", "001110000111", "000001101110", "001000100110", "011101111000", "101100000101", "110001100000", "101000100101", "110101110101", "111000101111", "101000101001", "101000100000", "101011010110", "000010111100", "011101101000", "000110101001", "000110110110", "100111001011", "100010001101", "101111000111", "100100111000", "100100111100", "000000100010", "100110000111", "101110001100", "110010010010", "100110010011", "100100000011", "000001011111", "110100100000", "000000111100", "110110010001", "001101111110", "010011010011", "001000111110", "100010010100", "000111110101", "111111101001", "100110001110", "101011011101", "110100100010", "010100001000", "100111101001", "010111010001", "001110101000", "100111101111", "100010101011", "101111100111", "111001100110", "111100110101", "001101001111", "111011011111", "011011100110", "101111011000", "100110110001", "100010011101", "000111010101", "101101011100", "111010100100", "001101000100", "101111100101", "010110001010", "111101010000", "100111110100", "100000000011", "010001111110", "011010001110", "110100010100", "010100111100", "011001101100", "110101001001", "000011100111", "011000000000", "110001000011", "101011001101", "001010110000", "010000011010", "101110101010", "001010011111", "011101000101", "110011101010", "101110001110", "100111110000", "100100010100", "010011101000", "100110000110", "111100010011", "011101101011", "100110010100", "011011100001", "011111100110", "111100101111", "000111101001", "100101011101", "010101001110", "110011110011", "111011011100", "101001101111", "100001010111", "110010111001", "011011101011", "111110001010", "000010111110", "011010000101", "011011000111", "110000000101", "010110111011", "010110110000", "011000110110", "100101001000", "000111110001", "011110000101", "001000010000", "011011000011", "100101100011", "010000100000", "100010011000", "001011100001", "000110100010", "011000111010", "100011001011", "101111111010", "001100110101", "101100111111", "010011100111", "001110110010", "000100100110", "010100010001", "100100011011", "110110100100", "100011011001", "110001000110", "110110100000", "101110001010", "000100101010", "000000100110", "110110111110", "011000111101", "001101111000", "110001100001", "101011011100", "101100001000", "100000111011", "011110010100", "010000101111", "100011100101", "100111010100", "000011010110", "111010110011", "010101000001", "001101010100", "010001010011", "100011000101", "011100011111", "100101100010", "011111011100", "011010010000", "011011011110", "101000000100", "110111111100", "100111110011", "110100010010", "100100011111", "000100001101", "001101100010", "000001010110", "110110010010", "001110000110", "101100110101", "111000110011", "111110111111", "001000111000", "010101111010", "010011101010", "010010100100", "000101001011", "010011011010", "100110111011", "100011110111", "111001001011", "011000000111", "000101101101", "001000011100", "110111111010", "011010101001", "110000010101", "011001110010", "001001001011", "111010110110", "101010000110", "110111010011", "101110011010", "011111110101", "010100110011", "010000100111", "010100001011", "011111010110", "110011111110", "100100111101", "000100111001", "011011101111", "111010001101", "100000110101", "110000000010", "111110101011", "011000010110", "001011101100", "010001110011", "111010111010", "100010011110", "001100000011", "000101110000", "111011101111", "111000000111", "100101011100", "010111000010", "010010111010", "001111111100", "101001000000", "000010111111", "001110011000", "111110011110", "101101000110", "101110100110", "100011011100", "101100000001", "111001111011", "101010101000", "010111101110", "000010100101", "100010111000", "101111000100", "000010011101", "011000111011", "010110011011", "010101100010", "100101010111", "011010101110", "110011011011", "110100101011", "110110111100", "000101110011", "011001110101", "111000100100", "101010000001", "110111100011", "100001000110", "001101011111", "101010000101", "011111111000", "000111011110", "100001111101", "011010010010", "101010011100", "101110101100", "000001010100", "101010100110", "001100101010", "101110100100", "100100111001", "110010100111", "000100001110", "111001110101", "110000101110", "000010011000", "010001110010", "000100010011", "011110100001", "001010111010", "010010111001", "010001001011", "101101001110", "011001000110", "110110011001", "110111000000", "011010111001", "001000010001", "010110011100", "000111110010", "101110000010", "000101001100", "110010111101", "001101010000", "010010011001", "010000010111", "011110011100", "111000100011", "110101011000", "101100100010", "111111100110", "010011111110", "111110000100", "100010100100", "101110111100", "110000010010", "011010000110", "000101100101", "001011001000", "111000110001", "000010001011", "111000010000", "100000101000", "001101011101", "101000101100", "010100111010", "101100000110", "001111010011", "011111110011", "101000100010", "111000001111", "111000111010", "001110000101", "110001010011", "011101011010", "101001000101", "111111001110", "111110110101", "110001110100", "101101010101", "000100011111", "101100100110", "000111011000", "101010110001", "000100110110", "101101110111", "100011101000", "010011110101", "110101111001", "110001110011", "000100111100", "010011010110", "101100000100", "011011101000", "101110000100", "100100010110", "111011100100", "011010110000", "100111011010", "110100011010", "101111111111", "110110011100", "110011100101", "100001111100", "111101100110", "110010001010", "010001001101", "101110100001", "111101001100", "110101000100", "011001110000", "010110100011", "111111000001", "110010100000", "101100110000", "110000000000", "001101110111", "001100001000", "001101101000", "101100100011", "001001011011", "011011101110", "010011111000", "110100111000", "011001101010", "111011111010", "100011111010", "001011011110", "111101100101", "100011100100", "101110101000", "000111110110", "100111010001", "110000011100", "111111111110", "110100010101", "101001110011", "000010001110", "000010001001", "110000110000", "001001000110", "110111110000", "010101010010", "111101110001", "110101101101", "010111000111", "111010110111", "001011011011", "001001100001", "101000101110", "101100110010", "100100100100", "011110111001", "011100000110", "100110110111", "111010001110", "110111111011", "011010111000", "011101100001", "011110001111", "110101011011", "000000001111", "101000001110", "111010101110", "001100001110", "010111000101", "111100111110", "001110101110", "011101111010", "011100001111", "000000000101", "111111000100", "000110010101", "001101000010", "111001111100", "101100010100", "001011001001", "010110000010", "010001101000", "001111101111", "011011011011", "111110000001", "100111011000", "011000000110", "100111101110", "101100000000", "101011000100", "111000011101", "100001101001", "100001101000", "011110001001", "110110011011", "011100010111", "000100111000", "000110000001", "000111001100", "000111111010", "110110000001", "000010011010", "100000101001", "101110001011", "100010110101", "110011010000", "111101111111", "100101011110", "101110011111", "111111011111", "011010010110", "010100101010", "001010100001", "000000110110", "110000111101", "010101101011", "110100100001", "011110001110", "111001010011", "001000001000", "000011111110", "111000100110", "100100101000", "011011000110", "111001100011", "111100101000", "110001100010", "011000000001", "111101010010", "001011000100", "010100110110", "000001111101", "001010000011", "010010100110", "100000011101", "101011010011", "000111110000", "101001001011", "100000001000", "010000111100", "000100101011", "011101010000", "101101010010", "100010011001", "001101100101", "101010010100", "111011111001", "101000010001", "001111000000", "011001000010", "100101010110", "000100001100", "010000101000", "110001111111", "000101010111", "110100101110", "111100110001", "101011000001", "101100101110", "110000101100", "101100111110", "111000010110", "010110101110", "001010100110", "110011010010", "111001100000", "100100100001", "000011011001", "111011011110", "011110000011", "101000100001", "101010010001", "101001100001", "100011001010", "100000000110", "010000100001", "001011011001", "110111010100", "111001000111", "111111110010", "101010100101", "100110001011", "010110011001", "110001111110", "100100000111", "110001110111", "101110010101", "010010111000", "000000011001", "101110000011", "100001010000", "001100001011", "111111001100", "111010010010", "010011100001", "100001111000", "000010000110", "010100011100", "101111101010", "100110010101", "101001101001", "100110101001", "001001011100", "001100011101", "001100011001", "000100100100", "100011010100", "000100001011", "111101100011", "011010001011", "111000101101", "101000010000", "010110001111", "111100010110", "000111111101", "100100111011", "101011000010", "011001100010", "101111011100", "101001110101", "101111101100", "110101001111", "111101100000", "101110011011", "100101110000", "001100111110", "010010101010", "001100100100", "001010101100", "001101100111", "110010011100", "010000001001", "011011110001", "100101110001", "101111100100", "110101101000", "110000100000", "101010011101", "111000010011", "100001010100", "000101101010", "101111001001", "000110101101", "101011010111", "000001001100", "100100111110", "000010111011", "000100000100", "100100001110", "011010000001", "010101110011", "111101101101", "101110101111", "100010100011", "110001011101", "110001011011", "100011110011", "111000011011", "110101110010", "000110010100", "101000001010", "011001011010", "111000001101", "101001101101", "111001000001", "000100000110", "110000000110", "010011001110", "011101000001", "010000101101", "010011011001", "010101001111", "011110110001", "100111110001", "101111011101", "111001000010", "111111111000", "001011101011", "001010100111", "111110111101", "011111011101", "000100111101", "010010000101", "001111101011", "110010100100", "110001011001", "010111111000", "100100101110", "110111011101", "100100000110", "111111011011", "101101111001", "111011010001", "000000011100", "011011101001", "100010111101", "110111000110", "001100110010", "111100111100", "111111000010", "100111010111", "100011001100", "110101011100", "001111001100", "101010000010", "110011010111", "110011010001", "001110110110", "000011011100", "001011001011", "100000000001", "110000100011", "011011110011", "100101100100", "011100100011", "100001110111", "011101001001", "011101100011", "011001001101", "011001000100", "010111001111", "100001001111", "101001100000", "110010001011", "010101011100", "011110110010", "111010000110", "000010100100", "110111000111", "001011010110", "010001000100", "110100010111", "010101100110", "010011101111", "101000001000", "011011001011", "100001000001", "101111110011", "100110110011", "100011100000", "101101000010", "000101011000", "111101110010", "110111010110", "101110000110", "110010110001", "000001101111", "110101101111", "000010111010", "100010010001", "111010011001", "011110011011", "000110101010", "010100001111", "010111011000", "000011110100", "010001010101", "110111011001", "010001111001", "111010111111", "010010010001", "010001100011", "111110001001", "101000010111", "001101110101", "111011000000", "001100110100", "000110001001", "110111101001", "010100110000", "101110111110", "100000000010", "110011010011", "010101100101", "110100110001", "100010100010", "101111111000", "111111100100", "011100001101", "000000100001", "100110100110", "010100100011", "000000001000", "101010110100", "100010001111", "111000001011", "010101000111", "001111110001", "000000111011", "111111101100", "001110110000", "011110111011", "001110100011", "100110000010", "010110110011", "001001101110", "110011101110", "111001100010", "111100010000", "000001010111", "001110001100", "110000101000", "100101111010", "001011001110", "100111101100", "111001101100", "110111110010", "101000110100", "100011100011", "100000100101", "100001111011", "011110101001", "000111000100", "010111100001", "111111010001", "100100001100", "111111010111", "001101111101", "000110001101", "010110000001", "111011010110", "011110110110", "011111001001", "001101011010", "010101110101", "110001100100", "101101011101", "011011010110", "001011001101", "101110110101", "001101010010", "101010001101", "100111000000", "110110101100", "001011111000", "000100111011", "000111110111", "101000111100", "110000110011", "000001000011", "000111111110", "001010010010", "100000111001", "010101111100", "001100010100", "010101110111", "110101010010", "000001001111", "101101111100", "011110111101", "111001010001", "000100101101", "011100100100", "110101000111", "011111100011", "110001001101", "100001100111", "101101100111", "000100110000", "101001100010", "001101101111", "100011000100", "011100101111", "011001100100", "011010011110", "010011001010", "011110101000", "111101111010", "110001010100", "000110010001", "001111011011", "110000111011", "000001111001", "010011001100", "100110101011", "111011001011", "001100110011", "010010011101", "100011110000", "110011110111" ]
diff --git a/day4/boards.txt b/day4/boards.txt
new file mode 100644 (file)
index 0000000..a9fba2f
--- /dev/null
@@ -0,0 +1,600 @@
+68 73 98 51 49
+82 56 87 64  8
+46  7 21 38 30
+66  5 86 97 74
+60 63 76 55 39
+
+92 20 87 77 52
+72 29 81 24 64
+26 16 19 79 68
+ 8 53 90 14 74
+28 89 78 54 15
+
+13 17 35  2 85
+37 87 57 74 65
+60 21 18 98 96
+ 4 51 46 84  0
+90 75 80 41 64
+
+83 98  4 78 45
+90 62 71 68 39
+47 81 96 73 43
+ 9 94 65 99 60
+44  5 29 50  6
+
+23 43 42 35  9
+82 90 49 70 59
+58 38 44 55 85
+ 3 99 88 65 61
+71 53 17 37  4
+
+58 38 47 84 89
+60 87 80 92 75
+57 83 40 62 25
+11  7 33 76 70
+82 31 53 56 90
+
+96 40 50 21 38
+58 77 64 98 86
+ 9 68 78 55 10
+51 74 71 28 16
+49 45 32  7 57
+
+71 98 26  5 95
+21 53 48 35 92
+ 4 90  9 45 82
+67 28 33 34 58
+85 41 80 64 19
+
+98 36 33 34 55
+15 81 97 56 96
+91 73 32 63 83
+31  3 85 80 38
+71 93 87 86 27
+
+19 15 97 31 26
+56 58 54 87  1
+ 9 28 23  7 20
+38 67 52 73 88
+95 77 27 91 81
+
+81 64 19 67 10
+97 73 46 31  3
+93 77  8  7 57
+ 0 28 87 42 66
+17 79 58 14 18
+
+43 17 63  7 49
+28 27 31 23 41
+65 34 51 70 77
+73 56 74 96 72
+94 86 48 71 40
+
+97 43 56  0 30
+60 71 34  1 96
+10 72 28 82 84
+36 22  9 20 67
+ 8 29 92  5 41
+
+28 49  8 78 53
+41 32  3  4 88
+56 68 18 65 54
+24  5 71 21 75
+52 15 47 83 79
+
+26 47  2 22  9
+ 6 81 53 17 88
+58 25 55 31 19
+42 27 85 97 14
+64 52 66 63 51
+
+80 43 88 42 51
+17 18 84 60 24
+34 48 89 33 10
+ 7 21 83  0 26
+28 86 25 58 16
+
+71 77  2 99 16
+90 59 54 27 10
+78 51 26 12 80
+25 58 53 33 83
+31  7 96 38 95
+
+87 91  7 76  5
+96  1 16 62 35
+22 61 29 27 12
+57 50 78  4 65
+ 3 97 73 82 94
+
+93 63 43 22 71
+12 74 41 64 62
+81  2 37 99 27
+26 39 66 30 20
+77 78 18 53  5
+
+72 61 21 59 41
+18 49 95 51 30
+63 75 10 47 27
+83 11  8 39 68
+ 9 99 67 44 77
+
+29 98 74 11 17
+44 80  1 78  6
+73 20 32  0 27
+76 37 77 41 24
+36 97 87 89 68
+
+12 35 84 98 87
+33 78 64 85  3
+18 14 71 54 93
+63 34 61 57 22
+36 20 91 69 55
+
+84 74 25 67 38
+59 60 56 68 81
+41 51 23 98 92
+30 35 45 17 83
+71 97 21  5 94
+
+95 10 92 27 34
+15 67 76 14 98
+85 81 40 38 58
+ 8 17  6 59 48
+78 73 84 11 46
+
+25 50 40 69 27
+89 59 17 86 20
+ 3 98 76 90  9
+41 75 21 29 55
+47 94 23  6 68
+
+82 90 99 65 52
+81 18 87 42  6
+56 79 36 96 60
+70 20 39 22 14
+71 88 86 46 48
+
+99 37 16 39 46
+82 27 12 19 47
+25 80 38 22 55
+76  1  7 54 28
+60 97 56 32 17
+
+79  5 56 14 51
+86 57 18 89 81
+97 88 54 60 34
+50 25 62 66 98
+23 65 87 63 11
+
+71 10  5 63 73
+14 70  7 36 20
+38 75 59 33 17
+18  3 72 46 76
+98 80 64 48 30
+
+54 21 56 86 61
+71 45 16  5 66
+ 0 12 94 70  1
+37 98 26 93 18
+87 90 24 44 91
+
+18 10 72 81 48
+67 80 42 25 33
+92 34  0 27 26
+77 99 57  9 46
+82 15 54 21 52
+
+73 18 80 27 50
+58 97 84 81 21
+94 68  8 57  9
+56 98 67 36 92
+86 53 35 41 89
+
+86 65  2 74  5
+ 3 80 19 41 48
+98 99 24 50 57
+ 8 59 53 67 91
+62 83 72  9 14
+
+56 69  7 38 87
+39 71 84 41 88
+23 94  1 97 33
+73 14  2 79 72
+26 91 45  9  6
+
+17 40 97 51 57
+92 25 38 26 23
+32 44 83 87 49
+54 74 33  7 12
+14 36 30  8 98
+
+56 26  3 73 32
+90 80 23  0 27
+59 19 33 78 52
+21  1 20 86 34
+85 48 37 97 67
+
+23 13 90 35 44
+30 96 18 14 92
+80  5 97 11 58
+12 50 33 65 78
+48 26 86 15  7
+
+70 32 62 92 13
+23  1 21 50 59
+79 26 11 65 76
+90 54 64 63 31
+ 0 19 86 33  9
+
+69 60  3 94 20
+35 72 82 42 45
+66  6 52 64 62
+19 28 83  1 98
+76 74 12  9 54
+
+32 29 46 57 50
+80 10 42 24 82
+56 41 90  7 12
+89 78 53 95  9
+26 52 67 27 83
+
+85 83  2 65 71
+35 66 55 87 39
+90 56 97 81  9
+73 32 98 84 95
+88 33 34 25 86
+
+78  8 34 21 23
+ 2 86 10  4 58
+31 62 35 91 63
+81 90 69 15 47
+41 12 61 72 36
+
+10 95 68 87 25
+59 45 54 92 82
+34 81 12 61 83
+89 69 98 72 44
+84 20 51 36  1
+
+59 94 26 76 54
+39 21 86 13 48
+58 61 75 80 62
+ 8 88 74 24 19
+42 38 72 60 93
+
+82 46 54 48 20
+53 94 57 98 83
+15 10 39 17 91
+89 47  4 35 27
+61 42 92 13  8
+
+97 73  9 67 58
+87 49 96 88 94
+68 38 11 41 43
+26 51  4 22  0
+18  2 84 62 33
+
+79 25 51 78 93
+76 49 69 87 26
+63 71 67 28 34
+48 38 99 66 11
+44 61 75 96 23
+
+66 79 37 23 98
+43 94 49 27 36
+21 86 34 24 42
+ 4  8 85 63 32
+74 82 68 92 72
+
+12 77 87 53 76
+71 66 10 68 36
+74 49 27 16 34
+98 21 54 93 18
+95 61 97 65 32
+
+60 91 68 11 76
+66 62 65  3 41
+ 6 84 61 58 73
+ 7 28 63 75 55
+35 45 98 47 81
+
+85 75 46 45 58
+95 92 73 99 47
+25 97 76 15 23
+19  5 37 36 65
+96  8 24 49 61
+
+53 60 16 94 59
+10 47 82 17 89
+86 91  1 40 45
+34 76 38 97 63
+25 85 57 27 93
+
+77 95 20 24 93
+37  4 23 39 35
+81  2 56 18 87
+46 75 52 51 50
+88  8 83 80 27
+
+20 47 27 52  2
+97  0 17 64 11
+53  9 69 88 77
+13 89 28 21 36
+71 33 31  6 68
+
+45 25  6 18  7
+51 84 82 83 81
+13 65 34 93 71
+87 92 49  8 24
+76 29 53 96 58
+
+15 41 65 85 29
+78 30 93 98 67
+36 58 12  1 25
+ 3 10 88  9 96
+ 8 53  7 14  6
+
+78 37 50 99 51
+42 19 40 62 54
+89 38 64 70 56
+96 72 41 43 95
+90 91 17 28 59
+
+23  5 45 80 93
+14 75 78 25 86
+21 24 73 30 34
+39 74 22 19 49
+72 31  1 77 57
+
+59  8 57 68 32
+71 19  9 29 63
+ 3 92 40 79 31
+87 75 99 88  2
+15 20 85 89 44
+
+ 7 41 16 15 46
+76  5 51 11 38
+28 70 68 91 66
+56 94 59 34 86
+72 80 42 75 65
+
+92 95 48 65 89
+27 64 69 15 33
+93 47 30  7 63
+91 35 29 42 72
+90 23 11 50 54
+
+97 17 66 92 91
+81 23 12  6 93
+48 25 27 16 54
+21 32 50 94 98
+15 55 40 11 84
+
+66 56 95 44 33
+26 11 41 22 86
+ 2  1 50 79 32
+70 74 84  5 90
+92  0  6 73 40
+
+34 48 28 98 88
+66 60 46 54 91
+43 21 81 95 33
+53 87 82 79 92
+45 62 58 99 96
+
+ 6 16 70 86  9
+19 95 37 96 62
+ 3 42 24 60 15
+55 56 92 80 26
+72 85 91 73 94
+
+72 73 94 15  4
+ 3 40 67 21 84
+45 33 60 82 10
+48  6 29 79 70
+27 66 13 38 47
+
+31  0 56 89 61
+62 49 37 73  1
+63 68 38 83 44
+70 17 69 14 81
+72 58 52 50 79
+
+46 18 61 11 14
+51 58 94 98 69
+ 2  0 93  6 95
+92 17  3 37 33
+48 20 45 16 13
+
+98 74 36 23  6
+65 17 78 95 96
+68 63 47 16 18
+87 30 53 51 57
+69 11 44 75 89
+
+25 56  5 53  3
+58  1 91  2 47
+72 75 44 96 70
+30 63 10 93 74
+67 55 82 32 61
+
+31 97 28 14 48
+87 50 95 23 83
+33 34  4 46 94
+43 84 86 13 40
+52 64 16 88 81
+
+40 30 14 36 90
+ 2 25 12 10 33
+18 27 78 73 60
+11 92 52 69 93
+19 22 35 17 61
+
+42 45 49  8 14
+21 18 69 12 27
+25 76 63 28 64
+52  7 77 58 39
+87 89 88 38  4
+
+40 57 53 48 46
+13 59 23 55 61
+ 1 50 83 73 31
+18 47 29 65 27
+76 49 33 51 26
+
+65 76 78 90 30
+25 83  4 23  3
+53 34 20 36 37
+18 66 12 45 59
+68 50 74 96 48
+
+39 51 92  7 22
+11 47 44 26 55
+73 52 38 45 59
+72 76 17 56 97
+83 13 70 29 37
+
+25 12 84 51 14
+ 2 22 85 13 10
+73 93 67 72 80
+56 90 60 42 61
+36 16 50 70 97
+
+ 1 60 44 32 47
+71 76 69 27 54
+22 43 12 72  9
+17 90 53 19 95
+41 65 62 11 63
+
+76 64 33  3 81
+28 20 95 98 79
+58 23 87 69 29
+31 72 55 49 36
+15 67 83 37 52
+
+52 87 40 67 91
+19  7 80 88 29
+97 28 50 63 53
+43 89 35 69 75
+79 65 58 78 86
+
+21 52 43 71 69
+26 47 81 91 20
+70 90  6 49 78
+11 72 82 83  2
+62 64 66 93 48
+
+47 78 38 10 82
+12 32 71 41 46
+18 13 74 63 90
+86 96 17 97  9
+70  4 59 52  6
+
+29 49 54 76  5
+42 99 92 52 26
+48 80 65  9 89
+87 68 47 24 78
+74  2 85 43 56
+
+21  7 44 36  3
+ 0 72 66 28 74
+99 68 83 53 30
+96 81  4 69 23
+15 20 31 41 42
+
+87 78 21  6 62
+68 95 30  5 20
+81 54 42 50 70
+18 39 93 35 72
+22 97 73 74 75
+
+25 24 62  5 54
+85 31 88 40 76
+48 44 15  3  4
+61 47 56 72  9
+11 49 50 78 39
+
+54 30 52 70 16
+63 49 91  3 51
+71 36 46 79 67
+80 66 31 57 43
+45  9 84 17 35
+
+68 41 32 23 24
+95 62 87 97  5
+16  2 48 17  1
+59  9 35 96 22
+50 70 44 89 31
+
+21 35 47 36  2
+33 49 77 39 60
+70 91 97 18 66
+25 95 22 87 20
+69 27 76 52 11
+
+42 40 26 61 98
+33 88 79 72 73
+ 7 57 71  0 82
+ 2 21 74 63 41
+58 96 50 13  4
+
+80 84 96 31 38
+58 75 19 91  6
+10 54 52 66 81
+55 35 47 23 69
+95 40 21 17 79
+
+58 68 27  0 81
+49 51 93 83 23
+ 5 90  8 76 57
+53 33 45 75 84
+72 28 38 43 40
+
+73 62 93 77 17
+ 4 89 82 85 18
+33 57 58 55 49
+48 11 94 14 72
+ 7 53 34 69 21
+
+19 37 69 48 13
+ 5 14 46  2 86
+40 87 95 79 36
+81 62 70 23 82
+51 43 91 29  9
+
+70 16  3  5 38
+62 85 19 15 41
+36 42 13 31 87
+58 66 27 49  6
+82 54 91 23 10
+
+67 63 60 80 66
+16 30  2 85 97
+45 52 62 21 49
+83 75 76 10 82
+47 90 72  5  9
+
+ 3 11 31 61 99
+42 62 15 64 40
+30 95  7 81 28
+63 50 74 77 34
+38 89 73  2 92
+
+34 73 60 32 56
+49 35 44 79 83
+64 61 57  5 24
+72 58  8 66 77
+94 31 55 67 74
+
+49 17 22 97 88
+ 0 16 14 93 31
+28 73  6 82 90
+80 45 92 55 78
+ 3 42 65 37 29
+
+23 61 97  1 69
+53 98 28 52 19
+66 51 46 77 15
+34 36 47 80 14
+ 7 89 62  9 49
+
diff --git a/day4/day4.erl b/day4/day4.erl
new file mode 100644 (file)
index 0000000..6a2b591
--- /dev/null
@@ -0,0 +1,100 @@
+%% to compile: erlc day3A.erl
+%% to run: erl -noshell -s day3 solve
+%%
+-module(day4).
+
+-export ([solve/0, solve/1, solve/2]).
+-export ([read_boards/0]).
+
+solve() ->
+    solve(['1']),
+    solve(['2']),
+    init:stop().
+
+solve(A) ->
+    solve(A, read_boards()).
+
+solve(['1'], D) ->
+    io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
+solve(1, D) ->
+    solution1(D);
+solve(['2'], D) ->
+    io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2, D)]);
+solve(2, D) ->
+    solution2(D).
+
+read_boards() ->
+       {ok, IO} = file:open("boards.txt", 'read'),
+       Data = read_boards(IO),
+       file:close(IO),
+        Data.
+
+read_boards(IO) ->
+       read_boards(IO, []).
+
+read_boards('eof', Boards) ->
+       Boards;
+read_boards(IO, Boards) ->
+       case read_board(IO) of
+               'eof' -> Boards;
+               Board -> read_boards(IO, Boards ++ [Board])
+       end.
+
+read_board(IO) ->
+       read_line(IO, []).
+
+read_line(IO, Board) ->
+       case file:read_line(IO) of
+               {ok, "\n"} -> make_board(Board);
+               'eof' -> 'eof';
+               {ok, Line} -> read_line(IO, [[ list_to_integer(X) || X <- string:tokens(Line, " \n")]|Board])
+       end.
+
+make_board(B) ->
+       B ++ [lists:map(fun(X) -> lists:nth(Y,X) end, B) || Y <- lists:seq(1,5)].
+
+solution1(Boards) ->
+       Input = get_input(),
+       Bingo = process(Boards, 1, Input),
+       score(Bingo).
+
+solution2(Boards) ->
+       Input = get_input(),
+       Bingo = process(Boards, length(Boards), Input),
+       score(Bingo).
+
+score({'bingo', Num, Board}) ->
+       Fun = fun(L) -> lists:foldl(fun(X, Acc) -> X + Acc end, 0, L) end,
+       Num * (Fun([Fun(X) || X <- Board]) / 2).
+
+process(Boards, _Count, []) -> Boards;
+process(Boards, Count, [H|T]) ->
+       New_boards = process_boards(Boards, H, []),
+       case is_bingo(New_boards) of
+               {'bingo', Board} when Count ==  1 -> {'bingo', H, Board};
+               {'bingo', _Board}  -> 
+                       New_boards2 = delete_bingo_boards(New_boards),
+                       process(New_boards2, Count - length(New_boards) + length(New_boards2), T);
+               _Else -> process(New_boards, Count, T)
+       end.
+
+
+process_boards([], _Num, Acc) ->
+       Acc;
+process_boards([B|T], Num, Acc) ->
+       process_boards(T, Num, [[lists:delete(Num, X) || X <- B]|Acc]).
+
+is_bingo([]) -> 'false';
+is_bingo([Board|Rest]) ->
+       case is_line(Board) of
+               'true' -> {'bingo', Board};
+               'false' -> is_bingo(Rest)
+       end.
+is_line(Board) ->
+       lists:any(fun(X) -> X == [] end, Board).
+
+delete_bingo_boards(Boards) ->
+       [Board || Board <- Boards, not is_line(Board)].
+
+get_input() ->
+       [83,69,34,46,30,23,19,75,22,37,89,78,32,39,11,44,95,43,26,48,84,53,94,88,18,40,62,35,27,42,15,2,91,20,4,64,99,71,54,97,52,36,28,7,74,45,70,86,98,1,61,50,68,6,77,8,57,47,51,72,65,3,49,24,79,13,17,92,41,80,63,67,82,90,55,0,10,93,38,21,59,73,33,31,9,76,5,66,16,58,85,87,12,29,25,14,96,56,60,81].