Click to see raw data
depth_readings = [182,
188,
204,
203,
205,
206,
208,
216,
217,
218,
219,
225,
226,
207,
204,
205,
217,
255,
254,
270,
261,
262,
264,
265,
255,
257,
249,
248,
249,
250,
265,
286,
308,
309,
317,
326,
328,
316,
318,
333,
330,
293,
292,
294,
321,
313,
307,
301,
296,
291,
295,
297,
304,
314,
331,
330,
342,
325,
324,
354,
360,
368,
371,
372,
373,
374,
381,
384,
387,
389,
390,
392,
393,
382,
361,
350,
356,
357,
359,
363,
371,
391,
398,
402,
403,
397,
394,
397,
396,
398,
399,
393,
411,
417,
428,
429,
456,
446,
451,
459,
456,
460,
458,
451,
455,
452,
446,
451,
448,
444,
476,
478,
480,
503,
502,
504,
496,
511,
518,
531,
543,
544,
516,
512,
511,
514,
524,
522,
523,
535,
558,
576,
589,
584,
580,
582,
581,
580,
571,
570,
578,
616,
609,
610,
603,
604,
614,
615,
616,
614,
612,
604,
601,
606,
604,
600,
599,
600,
609,
614,
607,
631,
629,
631,
637,
653,
661,
660,
661,
705,
721,
719,
722,
707,
720,
725,
721,
729,
730,
729,
730,
718,
728,
733,
709,
712,
699,
670,
671,
670,
655,
641,
658,
661,
659,
648,
649,
644,
643,
642,
643,
636,
656,
660,
670,
677,
679,
676,
658,
659,
651,
656,
637,
632,
625,
624,
585,
590,
591,
594,
595,
596,
607,
584,
586,
587,
597,
589,
588,
589,
599,
597,
606,
592,
612,
614,
608,
602,
601,
574,
567,
557,
535,
533,
534,
535,
509,
520,
525,
539,
535,
546,
551,
566,
571,
564,
567,
556,
566,
567,
566,
579,
610,
613,
620,
621,
598,
599,
626,
633,
659,
641,
642,
643,
641,
642,
646,
661,
662,
668,
674,
676,
681,
689,
690,
689,
677,
697,
700,
712,
702,
704,
707,
708,
705,
706,
709,
704,
705,
706,
705,
698,
694,
693,
694,
692,
689,
686,
688,
694,
720,
721,
733,
732,
716,
702,
704,
710,
701,
698,
703,
704,
702,
703,
723,
713,
722,
724,
739,
740,
741,
743,
741,
727,
724,
704,
699,
715,
710,
699,
698,
691,
694,
682,
683,
684,
682,
656,
657,
662,
664,
668,
662,
665,
649,
667,
666,
667,
639,
637,
639,
620,
618,
621,
617,
604,
605,
606,
601,
603,
606,
609,
610,
611,
615,
617,
615,
621,
619,
621,
612,
602,
601,
617,
618,
631,
626,
633,
609,
607,
610,
611,
610,
615,
619,
622,
621,
622,
626,
637,
613,
603,
612,
614,
611,
607,
628,
639,
643,
644,
643,
642,
641,
642,
641,
642,
648,
649,
652,
654,
657,
659,
682,
687,
688,
689,
678,
697,
699,
703,
720,
711,
712,
714,
713,
699,
698,
707,
710,
702,
694,
684,
682,
676,
680,
679,
662,
666,
668,
681,
671,
665,
666,
662,
629,
641,
632,
633,
632,
641,
644,
641,
647,
643,
641,
642,
643,
645,
647,
646,
645,
648,
649,
648,
637,
604,
605,
600,
601,
599,
598,
597,
591,
592,
590,
591,
565,
576,
577,
578,
581,
583,
586,
587,
598,
604,
607,
604,
602,
609,
606,
609,
620,
621,
629,
622,
620,
618,
620,
632,
654,
660,
661,
658,
657,
656,
680,
682,
688,
680,
673,
663,
665,
668,
663,
669,
670,
662,
668,
665,
672,
678,
676,
679,
680,
673,
674,
677,
678,
679,
680,
681,
659,
664,
662,
657,
664,
663,
666,
696,
712,
708,
709,
710,
725,
729,
735,
731,
732,
749,
746,
726,
727,
732,
741,
734,
733,
723,
722,
720,
722,
719,
711,
695,
696,
699,
700,
701,
724,
725,
722,
723,
715,
716,
717,
714,
715,
717,
716,
715,
723,
728,
729,
733,
734,
735,
736,
748,
788,
794,
795,
793,
792,
803,
805,
804,
805,
804,
806,
805,
784,
792,
778,
777,
787,
799,
794,
808,
811,
813,
815,
812,
809,
833,
859,
863,
864,
866,
865,
863,
850,
845,
844,
854,
860,
861,
865,
869,
851,
850,
853,
874,
875,
876,
875,
876,
875,
879,
880,
888,
891,
890,
902,
904,
892,
893,
892,
900,
905,
918,
925,
924,
923,
914,
924,
925,
926,
952,
953,
951,
947,
957,
971,
968,
982,
971,
974,
975,
958,
943,
950,
934,
940,
949,
947,
941,
972,
971,
967,
969,
968,
964,
972,
966,
976,
975,
962,
959,
962,
967,
965,
966,
963,
959,
960,
959,
961,
962,
949,
950,
956,
957,
961,
953,
949,
956,
954,
955,
919,
921,
913,
925,
921,
945,
947,
948,
963,
976,
974,
980,
981,
982,
978,
982,
988,
985,
995,
994,
981,
985,
980,
984,
999,
1001,
1002,
1020,
1021,
1035,
1044,
1040,
1060,
1074,
1075,
1078,
1056,
1062,
1059,
1060,
1058,
1063,
1066,
1068,
1069,
1068,
1082,
1081,
1082,
1086,
1075,
1087,
1085,
1087,
1097,
1096,
1098,
1093,
1102,
1114,
1119,
1128,
1127,
1112,
1113,
1112,
1114,
1133,
1138,
1137,
1144,
1146,
1144,
1145,
1148,
1143,
1150,
1151,
1153,
1152,
1153,
1134,
1124,
1146,
1145,
1140,
1143,
1144,
1143,
1144,
1148,
1149,
1151,
1153,
1152,
1151,
1155,
1156,
1155,
1152,
1187,
1182,
1201,
1206,
1211,
1204,
1205,
1204,
1203,
1205,
1206,
1187,
1188,
1196,
1206,
1205,
1208,
1201,
1218,
1212,
1220,
1201,
1204,
1210,
1228,
1234,
1237,
1225,
1224,
1223,
1207,
1208,
1207,
1213,
1192,
1200,
1198,
1209,
1197,
1209,
1215,
1193,
1234,
1233,
1216,
1213,
1235,
1239,
1237,
1231,
1235,
1240,
1253,
1268,
1270,
1279,
1278,
1280,
1285,
1319,
1323,
1324,
1329,
1324,
1330,
1334,
1308,
1312,
1308,
1307,
1286,
1288,
1294,
1322,
1325,
1336,
1324,
1330,
1331,
1328,
1342,
1341,
1343,
1345,
1351,
1352,
1358,
1357,
1363,
1362,
1358,
1385,
1384,
1395,
1394,
1395,
1402,
1409,
1377,
1378,
1340,
1341,
1339,
1338,
1335,
1348,
1351,
1363,
1358,
1359,
1335,
1347,
1337,
1340,
1339,
1329,
1340,
1334,
1337,
1339,
1340,
1341,
1345,
1346,
1349,
1344,
1345,
1346,
1354,
1340,
1315,
1319,
1321,
1320,
1333,
1334,
1328,
1318,
1309,
1304,
1324,
1339,
1314,
1313,
1310,
1311,
1314,
1316,
1317,
1318,
1319,
1320,
1328,
1337,
1350,
1353,
1347,
1349,
1338,
1339,
1336,
1344,
1329,
1320,
1322,
1343,
1346,
1350,
1306,
1308,
1306,
1303,
1320,
1321,
1320,
1321,
1320,
1330,
1328,
1334,
1350,
1349,
1348,
1350,
1347,
1350,
1351,
1358,
1356,
1364,
1374,
1375,
1354,
1351,
1360,
1364,
1348,
1361,
1356,
1357,
1354,
1357,
1352,
1334,
1335,
1330,
1355,
1354,
1353,
1354,
1355,
1361,
1360,
1358,
1356,
1359,
1371,
1372,
1378,
1377,
1376,
1355,
1357,
1355,
1356,
1357,
1364,
1378,
1379,
1380,
1374,
1381,
1389,
1396,
1402,
1403,
1384,
1386,
1387,
1409,
1413,
1419,
1420,
1421,
1427,
1453,
1456,
1453,
1425,
1427,
1428,
1424,
1420,
1417,
1421,
1412,
1413,
1415,
1414,
1411,
1412,
1413,
1425,
1426,
1440,
1470,
1461,
1466,
1457,
1460,
1494,
1481,
1483,
1482,
1481,
1482,
1481,
1483,
1499,
1485,
1486,
1487,
1488,
1489,
1468,
1472,
1469,
1470,
1479,
1478,
1479,
1485,
1461,
1460,
1456,
1455,
1456,
1455,
1449,
1446,
1448,
1451,
1452,
1439,
1440,
1442,
1448,
1445,
1432,
1433,
1434,
1415,
1420,
1412,
1413,
1419,
1420,
1405,
1401,
1403,
1377,
1380,
1382,
1383,
1379,
1381,
1403,
1405,
1428,
1429,
1431,
1424,
1415,
1420,
1424,
1429,
1439,
1440,
1438,
1440,
1448,
1442,
1441,
1439,
1441,
1442,
1444,
1449,
1450,
1449,
1446,
1477,
1466,
1467,
1496,
1503,
1529,
1538,
1539,
1528,
1558,
1560,
1561,
1573,
1587,
1569,
1566,
1572,
1577,
1585,
1602,
1603,
1606,
1581,
1598,
1599,
1593,
1598,
1595,
1604,
1607,
1606,
1607,
1605,
1614,
1629,
1636,
1638,
1656,
1664,
1668,
1671,
1687,
1683,
1700,
1703,
1706,
1720,
1719,
1718,
1720,
1701,
1700,
1701,
1702,
1704,
1707,
1700,
1712,
1708,
1712,
1729,
1728,
1729,
1730,
1738,
1741,
1730,
1733,
1730,
1729,
1726,
1728,
1745,
1755,
1754,
1755,
1760,
1753,
1747,
1746,
1747,
1749,
1750,
1748,
1749,
1743,
1745,
1754,
1757,
1763,
1766,
1775,
1773,
1774,
1773,
1746,
1747,
1732,
1730,
1709,
1721,
1727,
1718,
1717,
1701,
1700,
1701,
1705,
1712,
1723,
1724,
1725,
1720,
1727,
1728,
1746,
1744,
1760,
1748,
1747,
1746,
1771,
1786,
1784,
1786,
1783,
1795,
1793,
1794,
1808,
1793,
1808,
1811,
1807,
1808,
1806,
1841,
1860,
1861,
1840,
1839,
1831,
1836,
1829,
1818,
1816,
1817,
1846,
1835,
1827,
1815,
1816,
1832,
1831,
1830,
1831,
1829,
1828,
1829,
1831,
1830,
1838,
1852,
1853,
1851,
1865,
1866,
1889,
1890,
1888,
1887,
1879,
1859,
1860,
1863,
1867,
1868,
1860,
1872,
1873,
1881,
1895,
1893,
1892,
1899,
1901,
1907,
1916,
1906,
1916,
1917,
1928,
1933,
1921,
1924,
1925,
1935,
1952,
1953,
1959,
1960,
1958,
1962,
1988,
1995,
1985,
1988,
1986,
1989,
2003,
2004,
2009,
2011,
2020,
2021,
2040,
2039,
2024,
2029,
2030,
2037,
2038,
2037,
2040,
2038,
2042,
2045,
2046,
2051,
2046,
2045,
2034,
2033,
2011,
2015,
2025,
2011,
2012,
2011,
1993,
2007,
1999,
1975,
1970,
1985,
1990,
1989,
1986,
1989,
1991,
1995,
1978,
1976,
1956,
1958,
1945,
1930,
1933,
1931,
1926,
1937,
1936,
1935,
1942,
1936,
1934,
1918,
1919,
1923,
1929,
1935,
1952,
1961,
1959,
1960,
1947,
1948,
1949,
1946,
1944,
1961,
1929,
1932,
1944,
1933,
1928,
1920,
1889,
1894,
1886,
1906,
1900,
1895,
1890,
1901,
1904,
1903,
1898,
1921,
1922,
1931,
1933,
1939,
1940,
1939,
1927,
1920,
1934,
1947,
1946,
1956,
1955,
1949,
1951,
1953,
1951,
1949,
1952,
1942,
1945,
1933,
1934,
1917,
1927,
1934,
1913,
1914,
1911,
1912,
1920,
1919,
1915,
1917,
1943,
1951,
1952,
1945,
1950,
1929,
1926,
1933,
1935,
1949,
1947,
1966,
1967,
1945,
1972,
1985,
1962,
1964,
1956,
1942,
1943,
1937,
1936,
1933,
1941,
1949,
1965,
1968,
1969,
1970,
1957,
1956,
1957,
1962,
1939,
1942,
1957,
1956,
1961,
1960,
1959,
1956,
1957,
1983,
1981,
1979,
1976,
1969,
1974,
1952,
1938,
1952,
1955,
1952,
1958,
1952,
1964,
1965,
1956,
1959,
1960,
1962,
1961,
1960,
1967,
1968,
1979,
1989,
1990,
1993,
2004,
2003,
2012,
2006,
1994,
1998,
1988,
1991,
1987,
1986,
1987,
1985,
1982,
1985,
1988,
1990,
1984,
1978,
1967,
1978,
1990,
1984,
1985,
1984,
1985,
2009,
2007,
2000,
1992,
2012,
2011,
2020,
2021,
2022,
2017,
2000,
1975,
1989,
1988,
1975,
1954,
1955,
1947,
1954,
1971,
1970,
1973,
1981,
1982,
1984,
1996,
1992,
1994,
1996,
1997,
2001,
1998,
2000,
1998,
1997,
1999,
2007,
2001,
2007,
2005,
2003,
2001,
2003,
1999,
1997,
1980,
1981,
1999,
2005,
2011,
2016,
2017,
2026,
2027,
2020,
2021,
2023,
2024,
2025,
2024,
2025,
2029,
2033,
2035,
2039,
2051,
2052,
2054,
2065,
2082,
2084,
2101,
2097,
2096,
2097,
2092,
2104,
2105,
2101,
2092,
2094,
2100,
2101,
2095,
2096,
2093,
2118,
2116,
2152,
2161,
2162,
2163,
2165,
2174,
2163,
2183,
2187,
2155,
2156,
2158,
2162,
2155,
2148,
2147,
2149,
2148,
2142,
2144,
2140,
2129,
2132,
2133,
2137,
2143,
2140,
2150,
2135,
2134,
2133,
2136,
2145,
2136,
2137,
2140,
2141,
2118,
2125,
2106,
2104,
2089,
2088,
2076,
2063,
2060,
2054,
2047,
2046,
2047,
2050,
2051,
2046,
2051,
2061,
2060,
2066,
2068,
2072,
2073,
2083,
2098,
2101,
2096,
2098,
2099,
2103,
2093,
2092,
2111,
2129,
2152,
2159,
2155,
2163,
2155,
2158,
2163,
2166,
2170,
2161,
2155,
2159,
2147,
2146,
2154,
2165,
2172,
2163,
2179,
2182,
2180,
2168,
2172,
2179,
2181,
2183,
2176,
2147,
2170,
2172,
2173,
2153,
2158,
2140,
2135,
2136,
2134,
2130,
2134,
2156,
2161,
2162,
2163,
2149,
2150,
2159,
2160,
2161,
2178,
2185,
2183,
2158,
2173,
2168,
2170,
2165,
2181,
2173,
2175,
2178,
2183,
2185,
2184,
2189,
2202,
2203,
2191,
2176,
2177,
2163,
2150,
2159,
2158,
2153,
2139,
2136,
2135,
2143,
2155,
2166,
2171,
2183,
2190,
2180,
2183,
2165,
2166,
2167,
2168,
2160,
2161,
2174,
2175,
2172,
2176,
2198,
2205,
2210,
2211,
2223,
2249,
2254,
2267,
2260,
2263,
2256,
2258,
2265,
2278,
2279,
2278,
2271,
2273,
2278,
2279,
2272,
2274,
2286,
2273,
2279,
2278,
2264,
2263,
2264,
2274,
2287,
2308,
2309,
2310,
2305,
2304,
2303,
2305,
2317,
2316,
2318,
2319,
2320,
2322,
2326,
2335,
2359,
2351,
2353,
2354,
2356,
2341,
2338,
2333,
2334,
2333,
2344,
2334,
2344,
2323,
2341,
2325,
2317,
2327,
2323,
2321,
2312,
2297,
2302,
2304,
2315,
2308,
2317,
2330,
2350,
2360,
2341,
2342,
2341,
2342,
2357,
2363,
2353,
2355,
2352,
2354,
2360,
2361,
2348,
2354,
2355,
2345,
2346,
2347,
2360,
2358,
2360,
2361,
2364,
2365,
2354,
2361,
2362,
2373,
2375,
2373,
2365,
2346,
2362,
2359,
2357,
2373,
2397,
2398,
2394,
2396,
2401,
2421,
2414,
2420,
2406,
2407,
2403,
2402,
2401,
2397,
2396,
2420,
2444,
2446,
2428,
2427,
2428,
2431,
2429,
2433,
2463,
2487,
2495,
2524,
2535,
2542,
2552,
2575,
2573,
2574,
2568,
2576,
2583,
]
depth_readings
|> Enum.reduce(%{count: 0}, fn (depth, worksheet) ->
case worksheet[:prior] do
prior_reading when is_number(prior_reading) and depth > prior_reading ->
Map.merge(worksheet, %{prior: depth, count: worksheet[:count] + 1})
_ ->
Map.merge(worksheet, %{prior: depth})
end
end)
|> Map.get(:count)
depth_readings
|> Enum.reduce(%{count: 0}, fn (a, worksheet) ->
case worksheet do
%{ b: b, c: c, prior: prior } when (a + b + c) > prior ->
Map.merge(worksheet, %{b: a, c: b, prior: a + b + c, count: worksheet[:count] + 1})
%{ b: b, c: c } ->
Map.merge(worksheet, %{b: a, c: b, prior: a + b + c})
%{ b: b } ->
Map.merge(worksheet, %{b: a, c: b})
_ ->
Map.merge(worksheet, %{b: a})
end
end)
|> Map.get(:count)
Click to see raw data
commands = [
{"forward", 7},
{"forward", 9},
{"forward", 3},
{"down", 5},
{"down", 9},
{"forward", 6},
{"down", 2},
{"forward", 2},
{"forward", 8},
{"forward", 3},
{"forward", 5},
{"forward", 5},
{"forward", 8},
{"down", 6},
{"forward", 8},
{"forward", 2},
{"up", 8},
{"down", 8},
{"forward", 6},
{"down", 4},
{"down", 5},
{"forward", 2},
{"down", 6},
{"forward", 7},
{"down", 9},
{"forward", 9},
{"down", 2},
{"down", 7},
{"up", 6},
{"up", 3},
{"up", 7},
{"down", 9},
{"forward", 1},
{"forward", 1},
{"down", 4},
{"down", 9},
{"forward", 4},
{"up", 4},
{"forward", 8},
{"forward", 9},
{"down", 7},
{"down", 4},
{"up", 6},
{"down", 8},
{"down", 2},
{"forward", 8},
{"forward", 6},
{"down", 3},
{"forward", 2},
{"forward", 6},
{"down", 3},
{"forward", 1},
{"forward", 8},
{"down", 8},
{"down", 9},
{"forward", 5},
{"forward", 4},
{"forward", 8},
{"down", 7},
{"forward", 4},
{"forward", 3},
{"forward", 6},
{"down", 3},
{"forward", 6},
{"forward", 6},
{"down", 9},
{"down", 9},
{"down", 9},
{"down", 2},
{"down", 7},
{"down", 4},
{"forward", 3},
{"up", 7},
{"up", 3},
{"down", 1},
{"forward", 4},
{"up", 9},
{"forward", 4},
{"forward", 2},
{"down", 2},
{"forward", 9},
{"up", 4},
{"forward", 5},
{"down", 8},
{"up", 7},
{"down", 5},
{"down", 1},
{"up", 7},
{"up", 4},
{"forward", 5},
{"up", 8},
{"up", 3},
{"down", 2},
{"down", 1},
{"down", 2},
{"forward", 3},
{"up", 1},
{"forward", 1},
{"forward", 1},
{"down", 1},
{"down", 6},
{"down", 6},
{"up", 4},
{"down", 4},
{"down", 4},
{"forward", 6},
{"down", 6},
{"forward", 7},
{"forward", 5},
{"up", 7},
{"down", 9},
{"down", 6},
{"forward", 5},
{"forward", 6},
{"forward", 2},
{"down", 4},
{"forward", 5},
{"forward", 8},
{"down", 8},
{"down", 6},
{"forward", 2},
{"forward", 8},
{"down", 3},
{"forward", 6},
{"down", 1},
{"forward", 5},
{"down", 8},
{"up", 1},
{"forward", 6},
{"down", 7},
{"forward", 4},
{"down", 8},
{"down", 8},
{"forward", 8},
{"down", 6},
{"down", 3},
{"forward", 2},
{"forward", 8},
{"forward", 9},
{"forward", 4},
{"forward", 3},
{"down", 4},
{"forward", 3},
{"down", 9},
{"down", 1},
{"forward", 2},
{"forward", 3},
{"forward", 7},
{"down", 1},
{"forward", 6},
{"forward", 8},
{"forward", 6},
{"forward", 2},
{"down", 8},
{"up", 9},
{"forward", 6},
{"forward", 8},
{"down", 7},
{"down", 5},
{"up", 4},
{"forward", 9},
{"up", 7},
{"up", 3},
{"forward", 3},
{"down", 6},
{"forward", 4},
{"forward", 2},
{"down", 3},
{"forward", 9},
{"forward", 5},
{"up", 7},
{"down", 9},
{"up", 4},
{"down", 3},
{"forward", 8},
{"up", 1},
{"forward", 2},
{"forward", 8},
{"forward", 8},
{"forward", 5},
{"down", 7},
{"up", 6},
{"down", 9},
{"down", 4},
{"forward", 2},
{"down", 5},
{"down", 2},
{"down", 2},
{"forward", 6},
{"down", 2},
{"forward", 9},
{"forward", 1},
{"up", 1},
{"forward", 4},
{"down", 1},
{"forward", 3},
{"down", 3},
{"forward", 4},
{"up", 5},
{"up", 3},
{"forward", 6},
{"forward", 8},
{"forward", 2},
{"forward", 6},
{"up", 5},
{"down", 9},
{"down", 8},
{"forward", 3},
{"down", 5},
{"forward", 8},
{"forward", 1},
{"down", 9},
{"up", 3},
{"down", 2},
{"down", 9},
{"up", 8},
{"down", 2},
{"up", 7},
{"up", 2},
{"up", 3},
{"down", 9},
{"down", 1},
{"down", 7},
{"down", 1},
{"forward", 1},
{"down", 9},
{"down", 6},
{"forward", 3},
{"up", 7},
{"up", 8},
{"down", 5},
{"down", 6},
{"up", 2},
{"forward", 8},
{"down", 4},
{"up", 1},
{"forward", 4},
{"up", 4},
{"forward", 2},
{"down", 4},
{"forward", 4},
{"down", 9},
{"up", 4},
{"forward", 8},
{"up", 7},
{"forward", 1},
{"down", 3},
{"up", 7},
{"forward", 5},
{"down", 5},
{"forward", 2},
{"forward", 7},
{"forward", 3},
{"down", 8},
{"forward", 4},
{"forward", 9},
{"up", 2},
{"down", 4},
{"down", 5},
{"forward", 4},
{"down", 4},
{"up", 6},
{"down", 8},
{"up", 1},
{"down", 1},
{"up", 6},
{"up", 6},
{"down", 7},
{"down", 7},
{"forward", 2},
{"forward", 4},
{"forward", 8},
{"down", 8},
{"down", 4},
{"down", 4},
{"down", 7},
{"forward", 4},
{"down", 3},
{"forward", 5},
{"forward", 5},
{"forward", 7},
{"down", 7},
{"forward", 1},
{"down", 8},
{"up", 4},
{"up", 9},
{"up", 3},
{"up", 6},
{"forward", 5},
{"forward", 5},
{"forward", 4},
{"forward", 9},
{"down", 9},
{"forward", 4},
{"forward", 1},
{"up", 8},
{"up", 2},
{"down", 9},
{"up", 4},
{"forward", 2},
{"up", 8},
{"forward", 6},
{"forward", 2},
{"up", 9},
{"down", 3},
{"forward", 3},
{"up", 7},
{"down", 7},
{"forward", 4},
{"forward", 7},
{"forward", 3},
{"down", 4},
{"down", 5},
{"forward", 7},
{"up", 3},
{"up", 1},
{"down", 4},
{"forward", 6},
{"down", 1},
{"forward", 1},
{"down", 4},
{"down", 3},
{"forward", 9},
{"forward", 4},
{"down", 9},
{"down", 3},
{"forward", 2},
{"forward", 5},
{"forward", 6},
{"down", 3},
{"forward", 5},
{"down", 9},
{"forward", 2},
{"forward", 9},
{"down", 7},
{"down", 4},
{"down", 3},
{"down", 1},
{"up", 2},
{"forward", 6},
{"forward", 4},
{"down", 9},
{"down", 2},
{"forward", 2},
{"forward", 9},
{"down", 3},
{"forward", 8},
{"down", 8},
{"forward", 5},
{"down", 4},
{"forward", 4},
{"up", 6},
{"up", 3},
{"down", 3},
{"down", 9},
{"forward", 5},
{"forward", 8},
{"down", 2},
{"forward", 9},
{"forward", 5},
{"up", 9},
{"forward", 2},
{"forward", 3},
{"forward", 4},
{"up", 8},
{"up", 1},
{"up", 6},
{"down", 5},
{"down", 8},
{"down", 4},
{"forward", 6},
{"up", 2},
{"forward", 1},
{"forward", 7},
{"up", 8},
{"forward", 5},
{"up", 9},
{"forward", 7},
{"down", 6},
{"up", 5},
{"up", 7},
{"up", 1},
{"down", 3},
{"up", 6},
{"forward", 1},
{"up", 1},
{"forward", 2},
{"forward", 4},
{"forward", 5},
{"up", 3},
{"up", 8},
{"up", 1},
{"up", 6},
{"up", 3},
{"down", 5},
{"down", 4},
{"up", 8},
{"down", 9},
{"up", 7},
{"down", 6},
{"down", 9},
{"forward", 5},
{"forward", 3},
{"down", 9},
{"down", 3},
{"down", 6},
{"up", 3},
{"up", 8},
{"down", 4},
{"down", 1},
{"up", 9},
{"up", 9},
{"forward", 8},
{"down", 7},
{"forward", 1},
{"forward", 4},
{"down", 8},
{"forward", 2},
{"down", 4},
{"forward", 7},
{"forward", 3},
{"forward", 5},
{"forward", 1},
{"up", 2},
{"down", 9},
{"down", 5},
{"up", 6},
{"down", 3},
{"forward", 1},
{"up", 9},
{"forward", 6},
{"forward", 1},
{"forward", 4},
{"up", 7},
{"forward", 6},
{"down", 1},
{"forward", 9},
{"forward", 1},
{"forward", 3},
{"down", 9},
{"down", 8},
{"down", 5},
{"forward", 4},
{"down", 7},
{"up", 1},
{"forward", 8},
{"up", 4},
{"forward", 6},
{"down", 2},
{"forward", 4},
{"forward", 7},
{"down", 8},
{"forward", 6},
{"down", 7},
{"forward", 7},
{"up", 7},
{"forward", 4},
{"down", 8},
{"down", 8},
{"forward", 8},
{"forward", 6},
{"down", 9},
{"down", 8},
{"down", 6},
{"down", 2},
{"down", 4},
{"forward", 7},
{"forward", 3},
{"down", 8},
{"down", 5},
{"forward", 2},
{"down", 9},
{"down", 7},
{"up", 1},
{"up", 5},
{"forward", 6},
{"up", 8},
{"up", 7},
{"up", 4},
{"down", 6},
{"down", 6},
{"down", 8},
{"down", 9},
{"down", 2},
{"forward", 6},
{"forward", 6},
{"forward", 2},
{"up", 9},
{"forward", 6},
{"forward", 9},
{"forward", 8},
{"down", 5},
{"down", 3},
{"forward", 1},
{"forward", 8},
{"forward", 1},
{"forward", 3},
{"down", 4},
{"forward", 5},
{"forward", 1},
{"forward", 6},
{"down", 8},
{"down", 9},
{"forward", 3},
{"forward", 2},
{"forward", 1},
{"forward", 3},
{"up", 7},
{"down", 7},
{"down", 2},
{"forward", 3},
{"down", 5},
{"down", 2},
{"down", 7},
{"down", 9},
{"down", 5},
{"down", 7},
{"down", 9},
{"up", 7},
{"forward", 7},
{"forward", 9},
{"forward", 8},
{"forward", 5},
{"down", 1},
{"up", 6},
{"up", 6},
{"forward", 5},
{"up", 6},
{"down", 8},
{"up", 6},
{"forward", 2},
{"down", 9},
{"down", 5},
{"up", 8},
{"up", 7},
{"down", 8},
{"down", 7},
{"up", 3},
{"down", 5},
{"forward", 6},
{"forward", 2},
{"down", 6},
{"forward", 6},
{"forward", 1},
{"forward", 5},
{"forward", 3},
{"down", 4},
{"forward", 3},
{"down", 1},
{"up", 7},
{"forward", 3},
{"forward", 9},
{"forward", 3},
{"forward", 4},
{"down", 9},
{"forward", 6},
{"down", 1},
{"up", 6},
{"forward", 2},
{"forward", 1},
{"down", 2},
{"down", 1},
{"down", 9},
{"forward", 1},
{"up", 8},
{"down", 1},
{"up", 3},
{"forward", 3},
{"forward", 1},
{"up", 6},
{"down", 1},
{"down", 7},
{"down", 2},
{"forward", 5},
{"down", 4},
{"forward", 4},
{"forward", 9},
{"down", 7},
{"forward", 6},
{"down", 4},
{"forward", 8},
{"down", 5},
{"forward", 6},
{"down", 6},
{"down", 6},
{"down", 9},
{"forward", 3},
{"forward", 2},
{"forward", 7},
{"forward", 6},
{"forward", 8},
{"up", 6},
{"forward", 7},
{"down", 2},
{"up", 4},
{"forward", 6},
{"forward", 3},
{"forward", 9},
{"down", 1},
{"forward", 9},
{"down", 1},
{"forward", 6},
{"down", 9},
{"forward", 7},
{"forward", 9},
{"forward", 6},
{"up", 3},
{"down", 3},
{"forward", 3},
{"up", 1},
{"down", 8},
{"forward", 7},
{"down", 4},
{"forward", 7},
{"forward", 7},
{"down", 1},
{"forward", 5},
{"down", 6},
{"forward", 6},
{"down", 8},
{"down", 2},
{"down", 7},
{"forward", 9},
{"forward", 7},
{"forward", 2},
{"down", 5},
{"forward", 7},
{"forward", 8},
{"forward", 5},
{"forward", 5},
{"up", 1},
{"down", 1},
{"up", 4},
{"forward", 5},
{"forward", 8},
{"down", 4},
{"up", 8},
{"forward", 8},
{"up", 2},
{"down", 1},
{"down", 9},
{"up", 9},
{"down", 9},
{"forward", 3},
{"forward", 1},
{"down", 7},
{"down", 2},
{"forward", 5},
{"up", 7},
{"forward", 9},
{"forward", 1},
{"down", 4},
{"down", 8},
{"down", 2},
{"up", 1},
{"up", 6},
{"forward", 9},
{"down", 3},
{"down", 2},
{"forward", 5},
{"forward", 4},
{"down", 5},
{"down", 4},
{"up", 4},
{"forward", 4},
{"down", 3},
{"up", 3},
{"down", 7},
{"down", 7},
{"forward", 1},
{"forward", 4},
{"forward", 7},
{"forward", 5},
{"down", 4},
{"down", 7},
{"forward", 1},
{"forward", 9},
{"down", 4},
{"forward", 8},
{"up", 4},
{"down", 9},
{"down", 9},
{"up", 6},
{"up", 3},
{"forward", 2},
{"forward", 3},
{"up", 7},
{"forward", 7},
{"down", 4},
{"forward", 5},
{"forward", 5},
{"up", 2},
{"down", 5},
{"down", 9},
{"forward", 9},
{"forward", 7},
{"forward", 1},
{"up", 5},
{"up", 5},
{"forward", 8},
{"forward", 3},
{"forward", 2},
{"down", 4},
{"down", 6},
{"down", 2},
{"forward", 5},
{"down", 3},
{"down", 9},
{"forward", 8},
{"forward", 7},
{"forward", 7},
{"down", 1},
{"up", 3},
{"down", 8},
{"down", 9},
{"forward", 6},
{"up", 6},
{"down", 6},
{"forward", 2},
{"forward", 3},
{"forward", 7},
{"up", 8},
{"down", 8},
{"down", 7},
{"forward", 2},
{"down", 2},
{"up", 7},
{"up", 9},
{"forward", 1},
{"forward", 1},
{"forward", 1},
{"forward", 1},
{"forward", 1},
{"up", 8},
{"down", 3},
{"up", 8},
{"down", 5},
{"down", 3},
{"up", 4},
{"forward", 4},
{"down", 3},
{"down", 4},
{"down", 3},
{"up", 3},
{"down", 3},
{"up", 2},
{"up", 6},
{"down", 9},
{"down", 6},
{"up", 8},
{"up", 7},
{"down", 1},
{"down", 7},
{"down", 3},
{"forward", 3},
{"forward", 5},
{"down", 4},
{"down", 7},
{"forward", 1},
{"forward", 8},
{"up", 9},
{"up", 2},
{"forward", 3},
{"up", 1},
{"forward", 7},
{"down", 7},
{"down", 5},
{"forward", 9},
{"up", 9},
{"forward", 3},
{"down", 2},
{"up", 4},
{"down", 2},
{"down", 1},
{"down", 9},
{"down", 9},
{"forward", 3},
{"forward", 4},
{"down", 2},
{"down", 6},
{"up", 8},
{"down", 5},
{"forward", 7},
{"forward", 4},
{"up", 3},
{"forward", 2},
{"down", 4},
{"down", 8},
{"forward", 4},
{"forward", 6},
{"forward", 8},
{"down", 6},
{"down", 8},
{"up", 2},
{"forward", 5},
{"up", 7},
{"down", 9},
{"down", 6},
{"forward", 7},
{"up", 3},
{"down", 9},
{"forward", 2},
{"down", 6},
{"up", 6},
{"down", 6},
{"down", 3},
{"down", 2},
{"down", 8},
{"down", 4},
{"forward", 8},
{"up", 7},
{"forward", 9},
{"forward", 4},
{"down", 3},
{"forward", 3},
{"down", 9},
{"down", 2},
{"forward", 2},
{"forward", 1},
{"down", 4},
{"down", 3},
{"down", 8},
{"up", 6},
{"down", 4},
{"forward", 3},
{"down", 7},
{"forward", 8},
{"down", 7},
{"forward", 6},
{"forward", 2},
{"forward", 7},
{"forward", 6},
{"forward", 4},
{"up", 4},
{"forward", 2},
{"down", 4},
{"down", 2},
{"forward", 3},
{"down", 2},
{"up", 9},
{"down", 6},
{"forward", 5},
{"up", 6},
{"forward", 1},
{"up", 1},
{"down", 3},
{"up", 4},
{"forward", 1},
{"down", 6},
{"forward", 9},
{"up", 2},
{"forward", 4},
{"up", 9},
{"up", 5},
{"down", 5},
{"forward", 3},
{"down", 9},
{"forward", 5},
{"down", 3},
{"forward", 7},
{"forward", 5},
{"forward", 9},
{"up", 5},
{"down", 4},
{"down", 2},
{"forward", 9},
{"down", 3},
{"down", 8},
{"down", 9},
{"forward", 2},
{"down", 8},
{"up", 6},
{"down", 4},
{"down", 2},
{"up", 9},
{"forward", 8},
{"forward", 8},
{"down", 8},
{"forward", 4},
{"down", 7},
{"forward", 2},
{"up", 7},
{"forward", 7},
{"down", 4},
{"forward", 4},
{"down", 3},
{"forward", 9},
{"down", 9},
{"forward", 6},
{"down", 5},
{"down", 9},
{"up", 5},
{"forward", 7},
{"forward", 2},
{"down", 3},
{"down", 7},
{"down", 2},
{"forward", 3},
{"down", 4},
{"up", 3},
{"down", 1},
{"forward", 9},
{"down", 4},
{"down", 8},
{"up", 9},
{"forward", 7},
{"down", 8},
{"forward", 9},
{"down", 2},
{"up", 2},
{"down", 1},
{"down", 1},
{"forward", 6},
{"forward", 2},
{"forward", 3},
{"down", 5},
{"down", 1},
{"down", 1},
{"up", 4},
{"forward", 8},
{"down", 3},
{"down", 1},
{"forward", 9},
{"forward", 7},
{"forward", 2},
{"up", 8},
{"up", 6},
{"down", 7},
{"down", 6},
{"forward", 3},
{"down", 2},
{"down", 9},
{"up", 7},
{"forward", 5},
{"up", 9},
{"down", 9},
{"down", 4},
{"down", 8},
{"down", 5},
{"down", 8},
{"down", 8},
{"forward", 6},
{"forward", 1},
{"forward", 4},
{"forward", 7},
{"down", 7},
{"down", 6},
{"forward", 4},
{"forward", 7},
{"forward", 6},
{"down", 7},
{"forward", 4},
{"forward", 9},
{"up", 3},
{"forward", 9},
{"forward", 5},
{"forward", 1},
{"up", 2},
{"down", 1},
{"down", 5},
{"forward", 9},
{"up", 4},
{"forward", 6},
{"up", 3},
{"up", 6},
{"forward", 8},
{"down", 6},
{"forward", 5},
{"down", 3},
{"forward", 2},
{"forward", 7},
{"down", 4},
{"up", 8},
{"forward", 6},
{"up", 7},
{"up", 9},
{"forward", 3},
{"down", 3},
{"down", 7},
{"down", 7},
{"down", 1},
{"down", 6},
{"down", 9},
{"up", 1},
{"forward", 6},
{"forward", 6},
{"down", 3},
{"forward", 7},
{"down", 8},
{"forward", 1},
{"down", 7},
{"down", 4},
{"down", 3},
{"down", 4},
{"down", 4},
{"forward", 7},
{"down", 3},
{"forward", 6},
{"up", 9},
{"forward", 3}
]
%{ distance: distance, depth: depth} = commands
|> Enum.reduce(%{distance: 0, depth: 0}, fn ({dir, amt}, worksheet) ->
case dir do
"forward" ->
Map.merge(worksheet, %{ distance: worksheet[:distance] + amt })
"down" ->
Map.merge(worksheet, %{ depth: worksheet[:depth] + amt })
"up" ->
Map.merge(worksheet, %{ depth: worksheet[:depth] - amt })
end
end)
distance * depth
%{ distance: distance, depth: depth} = commands
|> Enum.reduce(%{distance: 0, depth: 0, aim: 0}, fn ({dir, amt}, worksheet) ->
case dir do
"forward" ->
new_distance = worksheet[:distance] + amt
delta_depth = worksheet[:aim] * amt
new_depth = worksheet[:depth] + delta_depth
Map.merge(worksheet, %{ distance: new_distance, depth: new_depth })
"down" ->
Map.merge(worksheet, %{ aim: worksheet[:aim] + amt })
"up" ->
Map.merge(worksheet, %{ aim: worksheet[:aim] - amt })
end
end)
distance * depth
Click to see raw data
digits = [
"011111101011",
"101001110000",
"010010001011",
"011111100101",
"111110100011",
"100000010101",
"001110110111",
"101101111100",
"001101110111",
"010101000101",
"010001001110",
"000010001111",
"011111001000",
"011011111011",
"001101110100",
"011101111010",
"000101000000",
"011010101111",
"010001010010",
"110010101001",
"100000011111",
"001100001011",
"011100001000",
"100101100111",
"111011101101",
"011001010100",
"011110010100",
"010001110001",
"111001101110",
"011001110011",
"101110111100",
"101101010110",
"111111100101",
"001011100100",
"101000111101",
"001101100000",
"101011011110",
"111110000111",
"101101010010",
"001110100100",
"110010010101",
"110000011000",
"000000000100",
"100101011110",
"010101110001",
"110111100111",
"110110100101",
"100110000001",
"001111000011",
"000100101000",
"001100111011",
"001011010011",
"000110111010",
"001110011100",
"100010001100",
"011010000001",
"011100001111",
"110111111101",
"011100110101",
"110111010010",
"010111001110",
"110100110101",
"010010011011",
"100111010000",
"011100000111",
"011100011100",
"100111000011",
"111111110001",
"111011001000",
"001111111011",
"011001000100",
"100110010010",
"000000100111",
"101011001010",
"111111101001",
"011100101011",
"101110001101",
"111111010100",
"100100000010",
"111100001011",
"110000011101",
"110111100110",
"011100010101",
"100111001101",
"101101100001",
"000101101101",
"001001001110",
"101001100000",
"101010110001",
"100001010101",
"100100001001",
"111101100001",
"100000010010",
"000001101010",
"000110100011",
"110011111100",
"111010101110",
"011110111000",
"101011110001",
"100100100001",
"000000011011",
"000100000010",
"101011010110",
"011001111111",
"101111010000",
"100001101011",
"110111000110",
"111000110001",
"100000000101",
"100010111011",
"010100011111",
"100000011101",
"110011000010",
"010111111001",
"011011101111",
"110011111110",
"111011010011",
"000011010100",
"111010100000",
"010100101010",
"101000000011",
"000101100000",
"111101100100",
"111101101101",
"010000111111",
"100001000001",
"000011010110",
"110001101001",
"110100011110",
"000100001000",
"110010100011",
"010000010001",
"000010000100",
"100001000000",
"111110100101",
"001100001111",
"001001010001",
"101011110000",
"101101001111",
"110001011110",
"100011011101",
"100000110100",
"110011000100",
"110101001000",
"100010010001",
"001011011010",
"111000101000",
"111000100100",
"001001100010",
"100100011111",
"011101101100",
"001011111001",
"111000001100",
"100001101010",
"101001111011",
"010101100111",
"010111100101",
"010000110110",
"010011001001",
"011000110110",
"000000101111",
"101110111000",
"100010100010",
"001101011100",
"010010001000",
"011011110010",
"001001100000",
"001110010010",
"011011100001",
"100101001110",
"000100001111",
"100100110001",
"100100111010",
"110000010110",
"110010011110",
"110100110000",
"111011011111",
"000100111001",
"010111110000",
"111001100001",
"001010011100",
"010000000110",
"110010010010",
"101000001001",
"100111000100",
"001001111011",
"111000111000",
"000110100010",
"100001101001",
"000100111101",
"111111110111",
"100001000010",
"000111000100",
"110101001111",
"111101011011",
"100101111110",
"010110111101",
"100010101111",
"111010111011",
"110000100101",
"100111011001",
"110110100111",
"010011000011",
"000011010010",
"100011011110",
"001000100101",
"001001111010",
"110011001111",
"101010100111",
"011111010000",
"110001011101",
"010010101110",
"110011111011",
"011011101011",
"111110001011",
"011001000001",
"101111000110",
"111100101110",
"011011001110",
"010011010001",
"000101011001",
"111100101010",
"010000100001",
"101010100100",
"110110011110",
"111000111110",
"100111001100",
"001000100001",
"110110110011",
"111110101111",
"011110111110",
"000101101110",
"000011111111",
"010101111000",
"010000001100",
"010111100001",
"111010110100",
"001110000001",
"101100101111",
"010110100001",
"011100000110",
"110001001000",
"100110101001",
"001000111010",
"101100000101",
"100110011101",
"011110101101",
"011100010100",
"000011100000",
"000011101111",
"100100000001",
"010001100100",
"001111000110",
"101001010110",
"000011101101",
"111110001100",
"101011101110",
"100001010110",
"111110110010",
"000101111111",
"000111101111",
"011000011001",
"101101000101",
"110110111001",
"111010011000",
"000100100110",
"001110011010",
"001001011000",
"101001011001",
"110111000001",
"000101110101",
"100001110101",
"110010100010",
"001000010011",
"000011000100",
"111100000000",
"011000100001",
"000111000110",
"010101011011",
"001110011011",
"110011101001",
"001111101001",
"010100100101",
"011111000100",
"010000011101",
"010101001100",
"001011010010",
"010001011100",
"011011010011",
"001000111101",
"011011101010",
"001010010001",
"010101011000",
"011110100000",
"010010001100",
"000010001011",
"000000001101",
"001111000001",
"100111001011",
"010000001111",
"010111111111",
"110000100100",
"110111001001",
"111010011101",
"001000000010",
"011110010000",
"111111111110",
"011011111111",
"110010110011",
"001100101111",
"101011101010",
"111111000011",
"101011000100",
"011001011000",
"111001000100",
"001011001100",
"011010001101",
"100100011100",
"111000101111",
"111010001001",
"100110000010",
"100011000110",
"001101011011",
"110000011011",
"010101010000",
"010100001000",
"000011010000",
"110110001110",
"111001001010",
"010011111111",
"010011110111",
"111100010100",
"110101101010",
"100100011001",
"111101011000",
"011000001011",
"101011100100",
"111011101100",
"011010011110",
"000100010111",
"010101100011",
"000001000000",
"001000110110",
"100000110110",
"000100101010",
"010111001111",
"100100010110",
"111000011100",
"111100010000",
"001100010100",
"010001011011",
"111101110110",
"100011111101",
"100001010010",
"011111101100",
"010110011110",
"111100011001",
"110110010110",
"110011011011",
"000100100010",
"111110110110",
"010110010110",
"000000111110",
"110010101000",
"011100100100",
"110011100000",
"001011100110",
"001000110111",
"010011001010",
"001011001110",
"100010010010",
"100011000100",
"110010111000",
"100010111000",
"111010000000",
"010101001110",
"110100010100",
"010011010110",
"111111000110",
"000110111001",
"001011000101",
"110111011001",
"101001101001",
"111001111111",
"111100000100",
"100100110100",
"110100000010",
"000100011011",
"100101000000",
"000000000111",
"101010100001",
"010011101000",
"101101101010",
"011011001111",
"000001111011",
"110100011001",
"111101100010",
"000001110101",
"110011000000",
"100101110111",
"101000100100",
"010110011011",
"001001101011",
"000100011010",
"011011000010",
"001111100000",
"101111000101",
"001101111010",
"010000101101",
"011100011011",
"011001011010",
"010010101101",
"100101101011",
"100111011101",
"111011001111",
"001010101011",
"111101011110",
"010100000111",
"001101011001",
"001101000101",
"101111000001",
"010100010000",
"011011111100",
"110101101011",
"000000011001",
"000000101101",
"101100010010",
"101110011101",
"001110010011",
"001011000111",
"111101001110",
"010101101010",
"001100010000",
"100101010101",
"111101110111",
"001101010001",
"111001100101",
"001101101101",
"111100101000",
"100001100011",
"011000011010",
"101111000111",
"101000010100",
"000011001001",
"111010101101",
"100110010100",
"011001111000",
"001001100110",
"010100110000",
"101100001010",
"111100100001",
"000110010000",
"100100000100",
"011100101000",
"100111101011",
"001111100001",
"111001011001",
"000000010101",
"011000010011",
"100111000010",
"000100001101",
"110100010110",
"001110001111",
"001101110010",
"110110101000",
"100111011010",
"011001110111",
"011111011111",
"101111111100",
"001100100110",
"101101111111",
"010000111101",
"010000000111",
"010110000100",
"111101001000",
"011101101110",
"010011011111",
"000000101100",
"101011100000",
"010111111010",
"111001011000",
"001000100110",
"110000001010",
"110101011011",
"101001010000",
"000000110110",
"000100101100",
"001000010010",
"101010010000",
"011100010001",
"001100101010",
"010110001010",
"011000100110",
"110001111010",
"100001011100",
"010001111010",
"111101010100",
"100001111010",
"000100011000",
"011110111100",
"111110010000",
"000011111100",
"001010101100",
"011100001101",
"101100001101",
"111010000111",
"001110100011",
"100001001110",
"110011001010",
"000101111110",
"111101010010",
"101000001110",
"001100111101",
"111110101010",
"001101001010",
"000011110011",
"000001010110",
"110111010110",
"110011111001",
"110111001110",
"011100111001",
"111101100011",
"010110001000",
"100100100101",
"111001110001",
"001101101011",
"111000101110",
"011000100010",
"001100001010",
"101001011101",
"101001000110",
"101001110100",
"100010010011",
"111011110011",
"011100111101",
"100110010000",
"111110001010",
"101011111010",
"101110101100",
"100010100000",
"110101001011",
"111001101111",
"101010110000",
"110011010110",
"101001110101",
"001011011100",
"111100011110",
"011000111110",
"011100111100",
"001101000011",
"101110010111",
"110011101110",
"001100011100",
"001100001000",
"010000010011",
"110011111000",
"101010001001",
"001001110110",
"111000000010",
"101110100110",
"010000000011",
"100100001000",
"000000101010",
"110000111010",
"000101110111",
"110101100011",
"010111101011",
"010110100100",
"011010100111",
"010110111100",
"011010011100",
"001110110100",
"010110100000",
"010010111100",
"001001100001",
"101010000001",
"100010101011",
"010011100010",
"110010001001",
"111110110101",
"111001100110",
"101010011101",
"000100110100",
"011000111100",
"000001011010",
"100100001010",
"110010001100",
"101111001101",
"011101101001",
"001011111101",
"101001011111",
"111011001110",
"001000010000",
"000000000011",
"011100100000",
"000101001010",
"100101100100",
"101000100101",
"101011111000",
"100101111010",
"100011110110",
"011110010011",
"101111110101",
"000000110000",
"111101011010",
"110001110001",
"100000001110",
"101101000000",
"110110010100",
"100011000111",
"011000000100",
"011010110110",
"100100001100",
"011000110001",
"000011010001",
"011010111111",
"011110001110",
"111111000000",
"000111011001",
"110100000100",
"110101000111",
"011001101010",
"010000100010",
"110010000100",
"011011001010",
"010100011000",
"111000100001",
"011001110010",
"011111010111",
"001000110001",
"110010011101",
"001110010001",
"001011011000",
"000111010000",
"010010011010",
"011110110110",
"010010000010",
"000000111000",
"101110101010",
"110111010001",
"010010000100",
"001110010100",
"101011110011",
"001000100100",
"110000110000",
"100011000101",
"000011100010",
"010101111100",
"110110110100",
"111110000100",
"011010110100",
"001111001111",
"101010111011",
"010010000001",
"001011101101",
"001001000011",
"000111100100",
"100111111000",
"011111001011",
"011110101001",
"101011101101",
"101110111011",
"111111101000",
"110000100011",
"011101010011",
"111100000111",
"011110101000",
"001000110101",
"110101111011",
"010101000001",
"110111011011",
"000100000101",
"011010010101",
"000111010010",
"100011001101",
"001011011011",
"001001111111",
"100100110010",
"101100101000",
"110111010011",
"111000011001",
"100000001111",
"001001111001",
"001010010000",
"011010011111",
"111100010001",
"010101001010",
"000100001011",
"011110000100",
"101101110101",
"011100001010",
"100110110110",
"001110111100",
"010010101010",
"000101011111",
"101101010111",
"100110100000",
"100110100001",
"010110010010",
"011010100010",
"101001110110",
"011110000111",
"001001010010",
"010011001101",
"011000011000",
"101001100011",
"011111100100",
"110111110111",
"010010110001",
"100111000111",
"100001100000",
"100101001001",
"001010110011",
"101111110010",
"111100101100",
"100011101111",
"010010111101",
"010001010101",
"100011001011",
"101111100010",
"101011010011",
"101111001000",
"111111111111",
"101001111101",
"011111110010",
"101111010010",
"011000000010",
"101110101101",
"011011100101",
"111110011111",
"110101110101",
"000001011110",
"110110110111",
"001001001000",
"000100111011",
"011101011111",
"101110000111",
"100011100100",
"011000110011",
"110100011111",
"101010001011",
"000000010011",
"110101010011",
"001101010000",
"011011010101",
"000101100110",
"100110001111",
"100011010101",
"111100101001",
"101111010001",
"000011001000",
"100110000111",
"101001111010",
"000110000110",
"010100101011",
"101011111100",
"000111000010",
"111000100111",
"110010101100",
"111000000100",
"101101000001",
"110101001110",
"001100100100",
"011000011111",
"000010111100",
"100010101010",
"000001011111",
"011001100001",
"010010000111",
"111100111010",
"110100011100",
"101000101111",
"010110001001",
"101111100110",
"101101110110",
"001010101000",
"000101110110",
"101101111001",
"110000001001",
"110101100000",
"011100110110",
"101110010101",
"111001101100",
"101000011011",
"011001010110",
"101111011110",
"001110101111",
"000100110110",
"101110100111",
"001010010100",
"001000000000",
"100100001110",
"101011000010",
"001011111011",
"011111100111",
"100001001100",
"000001101100",
"110001101101",
"010101001001",
"000000011110",
"010100111001",
"011111100010",
"011000010100",
"000001111101",
"011110011101",
"010001010111",
"001100110001",
"101111001010",
"100100010000",
"101011101011",
"011110001001",
"001101100011",
"010010100100",
"111010101010",
"011010100011",
"010100011010",
"001000000110",
"100011001100",
"011111000010",
"111011011101",
"111101010111",
"000101011110",
"101011101001",
"100111110001",
"000000011101",
"100010001010",
"000000010000",
"111001100100",
"101100111000",
"100011000010",
"010011010111",
"011110111101",
"111000110101",
"001000001001",
"111001100111",
"010001001010",
"011101110101",
"001111111111",
"000101001100",
"010011010000",
"000111111101",
"100101110100",
"110011110110",
"100110111101",
"011011101001",
"001111101111",
"110010001110",
"110100111101",
"001111101110",
"100110100100",
"010011001111",
"110001011000",
"100101110010",
"101101101100",
"001010111111",
"111000000111",
"110100101011",
"100100000000",
"100100111101",
"110110000000",
"110010010100",
"111100110000",
"101110001100",
"110001111100",
"111001100000",
"111011100011",
"100100011101",
"000111110111",
"011011000100",
"111001101000",
"000001011011",
"100000101101",
"100011010100",
"010111000000",
"011111001101",
"010000101011",
"110001010110",
"001101100111",
"111101111011",
"000100101001",
"000000100110",
"011011111110",
"001011010001",
"101110010010",
"010101101101",
"100111011011",
"100001111000",
"011110011011",
"001001110011",
"010100011011",
"001001110010",
"111101010101",
"010111011001",
"000001001110",
"010111010110",
"000000100000",
"000001101101",
"001110101000",
"100100101001",
"111100001010",
"110110101010",
"000101111000",
"011010100000",
"100111101111",
"110000110110",
"001001000111",
"100110101011",
"010011100000",
"010110011101",
"111110100111",
"110000000001",
"011101001101",
"101110100100",
"011110011010",
"000111001110",
"110100001100",
"110011011000",
"000001010010",
"011111010010",
"011111010101",
"000101110011",
"111001011111",
"001111110101",
"110111000011",
"001011101100",
"110010000000",
"100001011010",
"001111110111",
"111110011110",
"110111100001",
"001010000001",
"110111101110",
"001100000110",
"000110001001",
"110001101110",
"111110101001",
"111101101111",
"010110110100",
"100101011010",
"011111110110",
"001110111001",
"011000101110",
"010001010001",
"101000000000",
"001010000110",
"011110111001",
"010000001011",
"101110110101",
"100011011001",
"000100111000",
"011000111111",
"010010100010",
"101100110110",
"011001010101",
"111000001101",
"111101011101",
"111011010101",
"101100101110",
"100101010001",
"001011000001",
"101110111010",
"100010110100",
"010011001100",
"100001100110",
"000101010111",
"001110110010",
"100100010101",
"000100100000",
"100101101101",
"010101000011",
"000100011101",
"101000001100",
"111111101111",
"110000111011",
"001011100010",
"100100101100",
"011011100110",
"101010110101",
"000111110100",
"101111100100",
"001001111101",
"010000111000",
"000000101000",
"001000010111",
"001011010000",
"110010111011",
"100111101101",
"011100111011",
"101100101001",
"010010000011",
"100110001110",
"101000011100",
"010111001000",
"011111111001",
"010100111111",
"011000110111",
"000001100101",
"100101100010",
"001111110000",
"100000011011"
]
zeros_and_ones = digits
|> Enum.map(fn (n) -> Enum.map(String.codepoints(n), &String.to_integer/1) end)
defmodule AOC.Diagnostics do
def to_decimal(n) do
n
|> Enum.reduce("", &(&2 <> Integer.to_string(&1)))
|> Integer.parse(2)
|> elem(0)
end
end
halfway = Enum.count(digits) / 2
count_of_ones_by_position = zeros_and_ones
|> Enum.reduce([0,0,0,0,0,0,0,0,0,0,0,0], fn
(digits, counts) ->
Enum.zip_with([digits, counts], fn [x, y] -> x + y end)
end)
gamma_rate = count_of_ones_by_position
|> Enum.map(&(if &1 > halfway, do: 1, else: 0))
|> AOC.Diagnostics.to_decimal
epsilon_rate = count_of_ones_by_position
|> Enum.map(&(if &1 < halfway, do: 1, else: 0))
|> AOC.Diagnostics.to_decimal
gamma_rate * epsilon_rate
defmodule AOC.LifeSupport do
def winnow_by(numbers, strategy) do
filter = filter_digit_for_index(numbers, 0, strategy)
winnow_by(numbers, filter, 0, strategy)
end
# hooray, we found it
defp winnow_by([number], _, _, _), do: number
defp winnow_by(numbers, filter, index, strategy) do
keepers = numbers
|> Enum.group_by(&(Enum.at(&1, index)))
|> Map.get(filter)
next_index = index + 1
next_filter = filter_digit_for_index(keepers, next_index, strategy)
winnow_by(keepers, next_filter, next_index, strategy)
end
defp filter_digit_for_index([_], _, _), do: :eureka!
defp filter_digit_for_index(numbers, index, :most_common) do
numbers
|> Enum.map(&(Enum.at(&1, index)))
|> Enum.sum()
|> then(&(if &1 >= (length(numbers) / 2), do: 1, else: 0))
end
defp filter_digit_for_index(numbers, index, :least_common) do
numbers
|> Enum.map(&(Enum.at(&1, index)))
|> Enum.sum()
|> then(&(if &1 >= (length(numbers) / 2), do: 0, else: 1))
end
end
oxygen_generator_rating = zeros_and_ones
|> AOC.LifeSupport.winnow_by(:most_common_bits)
|> AOC.Diagnostics.to_decimal()
co2_scrubber_rating = zeros_and_ones
|> AOC.LifeSupport.winnow_by(:least_common_bits)
|> AOC.Diagnostics.to_decimal()
oxygen_generator_rating * co2_scrubber_rating
For this one I did somewhat heavy input cleaning. The cards came in as plain text matrices like this:
17 45 62 28 73 39 12 0 52 5 87 48 50 85 44 66 57 78 94 3 91 37 69 16 1
After a few vim-style keyboard macros, they had been massaged into syntactically valid lists of lists of {number, boolean}
tuples (representing the number and whether it’s been called yet), like this:
[ [{17, false}, {45, false}, {62, false}, {28, false}, {73, false}], [{39, false}, {12, false}, {0, false}, {52, false}, {5, false}], [{87, false}, {48, false}, {50, false}, {85, false}, {44, false}], [{66, false}, {57, false}, {78, false}, {94, false}, {3, false}], [{91, false}, {37, false}, {69, false}, {16, false}, {1, false}] ],
Now, onto the code.
Click to see raw data
calls = [76,69,38,62,33,48,81,2,64,21,80,90,29,99,37,15,93,46,75,0,89,56,58,40,92,47,8,6,54,96,12,66,83,4,70,19,17,5,50,52,45,51,18,27,49,71,28,86,74,77,11,20,84,72,23,31,16,78,91,65,87,79,73,94,24,68,63,9,88,82,30,42,60,13,67,85,44,59,7,53,22,1,26,41,61,55,43,39,3,35,25,34,57,10,14,32,97,95,36,98]
cards = [
[[{17, false}, {45, false}, {62, false}, {28, false}, {73, false}],
[{39, false}, {12, false}, {0, false}, {52, false}, {5, false}],
[{87, false}, {48, false}, {50, false}, {85, false}, {44, false}],
[{66, false}, {57, false}, {78, false}, {94, false}, {3, false}],
[{91, false}, {37, false}, {69, false}, {16, false}, {1, false}]],
[[{1, false}, {67, false}, {4, false}, {58, false}, {13, false}],
[{25, false}, {54, false}, {34, false}, {63, false}, {87, false}],
[{59, false}, {70, false}, {66, false}, {72, false}, {71, false}],
[{33, false}, {17, false}, {8, false}, {20, false}, {85, false}],
[{69, false}, {46, false}, {50, false}, {41, false}, {88, false}]],
[[{47, false}, {63, false}, {80, false}, {15, false}, {90, false}],
[{24, false}, {1, false}, {40, false}, {94, false}, {13, false}],
[{56, false}, {62, false}, {74, false}, {81, false}, {95, false}],
[{43, false}, {88, false}, {37, false}, {99, false}, {22, false}],
[{57, false}, {52, false}, {33, false}, {84, false}, {49, false}]],
[[{33, false}, {58, false}, {54, false}, {28, false}, {10, false}],
[{7, false}, {82, false}, {97, false}, {66, false}, {92, false}],
[{95, false}, {77, false}, {5, false}, {86, false}, {84, false}],
[{85, false}, {91, false}, {94, false}, {21, false}, {69, false}],
[{23, false}, {12, false}, {13, false}, {98, false}, {46, false}]],
[[{1, false}, {63, false}, {58, false}, {23, false}, {0, false}],
[{67, false}, {14, false}, {45, false}, {42, false}, {32, false}],
[{48, false}, {64, false}, {83, false}, {10, false}, {13, false}],
[{74, false}, {16, false}, {3, false}, {79, false}, {46, false}],
[{44, false}, {52, false}, {95, false}, {25, false}, {6, false}]],
[[{93, false}, {47, false}, {5, false}, {96, false}, {28, false}],
[{88, false}, {76, false}, {70, false}, {0, false}, {72, false}],
[{77, false}, {1, false}, {36, false}, {54, false}, {9, false}],
[{14, false}, {17, false}, {75, false}, {64, false}, {15, false}],
[{79, false}, {66, false}, {61, false}, {78, false}, {26, false}]],
[[{23, false}, {75, false}, {96, false}, {71, false}, {76, false}],
[{63, false}, {59, false}, {39, false}, {65, false}, {36, false}],
[{95, false}, {21, false}, {67, false}, {41, false}, {74, false}],
[{9, false}, {97, false}, {4, false}, {2, false}, {49, false}],
[{32, false}, {17, false}, {81, false}, {0, false}, {56, false}]],
[[{77, false}, {53, false}, {30, false}, {94, false}, {5, false}],
[{4, false}, {42, false}, {87, false}, {25, false}, {24, false}],
[{52, false}, {15, false}, {68, false}, {9, false}, {45, false}],
[{56, false}, {89, false}, {98, false}, {47, false}, {34, false}],
[{99, false}, {32, false}, {27, false}, {78, false}, {46, false}]],
[[{75, false}, {70, false}, {99, false}, {65, false}, {41, false}],
[{87, false}, {6, false}, {11, false}, {88, false}, {1, false}],
[{4, false}, {42, false}, {64, false}, {98, false}, {78, false}],
[{63, false}, {50, false}, {69, false}, {79, false}, {39, false}],
[{67, false}, {46, false}, {17, false}, {97, false}, {26, false}]],
[[{26, false}, {73, false}, {6, false}, {79, false}, {47, false}],
[{67, false}, {51, false}, {64, false}, {16, false}, {60, false}],
[{8, false}, {1, false}, {61, false}, {76, false}, {39, false}],
[{13, false}, {57, false}, {48, false}, {65, false}, {46, false}],
[{63, false}, {83, false}, {4, false}, {92, false}, {71, false}]],
[[{97, false}, {93, false}, {21, false}, {88, false}, {80, false}],
[{58, false}, {42, false}, {53, false}, {95, false}, {90, false}],
[{49, false}, {29, false}, {30, false}, {26, false}, {22, false}],
[{66, false}, {51, false}, {75, false}, {8, false}, {13, false}],
[{5, false}, {39, false}, {19, false}, {4, false}, {96, false}]],
[[{77, false}, {16, false}, {33, false}, {1, false}, {6, false}],
[{54, false}, {91, false}, {60, false}, {56, false}, {88, false}],
[{4, false}, {59, false}, {24, false}, {79, false}, {22, false}],
[{36, false}, {49, false}, {17, false}, {97, false}, {27, false}],
[{67, false}, {99, false}, {92, false}, {62, false}, {86, false}]],
[[{78, false}, {18, false}, {59, false}, {74, false}, {54, false}],
[{79, false}, {68, false}, {23, false}, {51, false}, {85, false}],
[{47, false}, {42, false}, {92, false}, {58, false}, {12, false}],
[{30, false}, {97, false}, {19, false}, {26, false}, {15, false}],
[{1, false}, {62, false}, {94, false}, {65, false}, {70, false}]],
[[{6, false}, {91, false}, {56, false}, {55, false}, {11, false}],
[{58, false}, {96, false}, {21, false}, {50, false}, {53, false}],
[{51, false}, {60, false}, {67, false}, {64, false}, {71, false}],
[{12, false}, {25, false}, {44, false}, {47, false}, {39, false}],
[{15, false}, {92, false}, {81, false}, {9, false}, {38, false}]],
[[{98, false}, {16, false}, {31, false}, {21, false}, {30, false}],
[{58, false}, {10, false}, {3, false}, {89, false}, {7, false}],
[{79, false}, {20, false}, {60, false}, {74, false}, {26, false}],
[{86, false}, {4, false}, {83, false}, {96, false}, {15, false}],
[{94, false}, {29, false}, {44, false}, {41, false}, {34, false}]],
[[{50, false}, {75, false}, {83, false}, {20, false}, {52, false}],
[{65, false}, {85, false}, {41, false}, {78, false}, {38, false}],
[{31, false}, {64, false}, {86, false}, {32, false}, {10, false}],
[{25, false}, {82, false}, {13, false}, {61, false}, {22, false}],
[{11, false}, {73, false}, {4, false}, {77, false}, {24, false}]],
[[{56, false}, {74, false}, {26, false}, {20, false}, {62, false}],
[{83, false}, {46, false}, {41, false}, {24, false}, {52, false}],
[{34, false}, {28, false}, {76, false}, {80, false}, {36, false}],
[{75, false}, {48, false}, {63, false}, {17, false}, {55, false}],
[{69, false}, {47, false}, {22, false}, {45, false}, {60, false}]],
[[{17, false}, {15, false}, {71, false}, {28, false}, {68, false}],
[{12, false}, {76, false}, {27, false}, {25, false}, {14, false}],
[{34, false}, {39, false}, {31, false}, {58, false}, {13, false}],
[{75, false}, {67, false}, {2, false}, {26, false}, {42, false}],
[{72, false}, {43, false}, {0, false}, {23, false}, {54, false}]],
[[{37, false}, {43, false}, {18, false}, {76, false}, {47, false}],
[{96, false}, {1, false}, {80, false}, {77, false}, {27, false}],
[{13, false}, {89, false}, {16, false}, {4, false}, {6, false}],
[{74, false}, {92, false}, {55, false}, {99, false}, {38, false}],
[{19, false}, {75, false}, {52, false}, {85, false}, {81, false}]],
[[{69, false}, {51, false}, {39, false}, {95, false}, {98, false}],
[{90, false}, {61, false}, {91, false}, {6, false}, {21, false}],
[{25, false}, {57, false}, {81, false}, {10, false}, {49, false}],
[{67, false}, {55, false}, {43, false}, {96, false}, {17, false}],
[{78, false}, {11, false}, {3, false}, {64, false}, {77, false}]],
[[{51, false}, {66, false}, {8, false}, {62, false}, {60, false}],
[{82, false}, {94, false}, {24, false}, {54, false}, {26, false}],
[{59, false}, {91, false}, {97, false}, {37, false}, {77, false}],
[{20, false}, {25, false}, {69, false}, {98, false}, {84, false}],
[{38, false}, {12, false}, {65, false}, {35, false}, {61, false}]],
[[{7, false}, {26, false}, {91, false}, {84, false}, {17, false}],
[{23, false}, {52, false}, {86, false}, {19, false}, {24, false}],
[{58, false}, {44, false}, {5, false}, {32, false}, {40, false}],
[{6, false}, {27, false}, {89, false}, {76, false}, {92, false}],
[{33, false}, {10, false}, {90, false}, {83, false}, {82, false}]],
[[{44, false}, {61, false}, {68, false}, {70, false}, {87, false}],
[{23, false}, {17, false}, {90, false}, {93, false}, {21, false}],
[{92, false}, {54, false}, {95, false}, {46, false}, {14, false}],
[{47, false}, {24, false}, {89, false}, {33, false}, {31, false}],
[{26, false}, {80, false}, {35, false}, {42, false}, {78, false}]],
[[{88, false}, {80, false}, {50, false}, {46, false}, {26, false}],
[{1, false}, {97, false}, {92, false}, {51, false}, {74, false}],
[{16, false}, {24, false}, {40, false}, {31, false}, {95, false}],
[{47, false}, {85, false}, {61, false}, {99, false}, {12, false}],
[{27, false}, {8, false}, {25, false}, {42, false}, {13, false}]],
[[{8, false}, {59, false}, {37, false}, {87, false}, {44, false}],
[{62, false}, {0, false}, {67, false}, {39, false}, {92, false}],
[{79, false}, {81, false}, {54, false}, {24, false}, {93, false}],
[{56, false}, {84, false}, {23, false}, {18, false}, {34, false}],
[{72, false}, {68, false}, {29, false}, {11, false}, {91, false}]],
[[{64, false}, {51, false}, {81, false}, {44, false}, {12, false}],
[{49, false}, {20, false}, {23, false}, {36, false}, {53, false}],
[{59, false}, {73, false}, {37, false}, {60, false}, {57, false}],
[{96, false}, {65, false}, {5, false}, {43, false}, {14, false}],
[{46, false}, {31, false}, {47, false}, {87, false}, {1, false}]],
[[{11, false}, {13, false}, {72, false}, {30, false}, {3, false}],
[{67, false}, {20, false}, {84, false}, {59, false}, {77, false}],
[{52, false}, {87, false}, {97, false}, {51, false}, {16, false}],
[{43, false}, {36, false}, {21, false}, {33, false}, {82, false}],
[{41, false}, {96, false}, {91, false}, {93, false}, {29, false}]],
[[{7, false}, {31, false}, {19, false}, {87, false}, {94, false}],
[{92, false}, {68, false}, {18, false}, {57, false}, {23, false}],
[{5, false}, {88, false}, {81, false}, {86, false}, {10, false}],
[{99, false}, {50, false}, {37, false}, {33, false}, {25, false}],
[{97, false}, {22, false}, {0, false}, {53, false}, {91, false}]],
[[{78, false}, {39, false}, {41, false}, {44, false}, {89, false}],
[{91, false}, {82, false}, {71, false}, {42, false}, {37, false}],
[{25, false}, {93, false}, {67, false}, {53, false}, {9, false}],
[{84, false}, {23, false}, {33, false}, {92, false}, {14, false}],
[{74, false}, {45, false}, {57, false}, {86, false}, {50, false}]],
[[{79, false}, {83, false}, {10, false}, {85, false}, {48, false}],
[{51, false}, {29, false}, {93, false}, {87, false}, {21, false}],
[{58, false}, {5, false}, {52, false}, {37, false}, {99, false}],
[{80, false}, {1, false}, {18, false}, {46, false}, {42, false}],
[{60, false}, {92, false}, {0, false}, {44, false}, {59, false}]],
[[{79, false}, {76, false}, {54, false}, {14, false}, {42, false}],
[{57, false}, {11, false}, {39, false}, {66, false}, {33, false}],
[{86, false}, {62, false}, {27, false}, {61, false}, {26, false}],
[{48, false}, {68, false}, {47, false}, {99, false}, {46, false}],
[{78, false}, {90, false}, {9, false}, {36, false}, {98, false}]],
[[{76, false}, {79, false}, {66, false}, {38, false}, {65, false}],
[{67, false}, {91, false}, {90, false}, {41, false}, {93, false}],
[{2, false}, {1, false}, {33, false}, {56, false}, {50, false}],
[{46, false}, {9, false}, {0, false}, {61, false}, {62, false}],
[{26, false}, {58, false}, {16, false}, {24, false}, {10, false}]],
[[{20, false}, {22, false}, {86, false}, {58, false}, {14, false}],
[{53, false}, {74, false}, {54, false}, {85, false}, {6, false}],
[{2, false}, {96, false}, {40, false}, {72, false}, {78, false}],
[{99, false}, {81, false}, {16, false}, {31, false}, {55, false}],
[{11, false}, {57, false}, {62, false}, {51, false}, {32, false}]],
[[{8, false}, {51, false}, {73, false}, {40, false}, {88, false}],
[{83, false}, {35, false}, {37, false}, {98, false}, {27, false}],
[{3, false}, {42, false}, {15, false}, {14, false}, {33, false}],
[{2, false}, {38, false}, {52, false}, {82, false}, {71, false}],
[{67, false}, {55, false}, {9, false}, {66, false}, {53, false}]],
[[{94, false}, {99, false}, {54, false}, {18, false}, {14, false}],
[{40, false}, {56, false}, {57, false}, {66, false}, {68, false}],
[{28, false}, {74, false}, {48, false}, {30, false}, {0, false}],
[{59, false}, {1, false}, {22, false}, {50, false}, {23, false}],
[{13, false}, {71, false}, {6, false}, {26, false}, {15, false}]],
[[{28, false}, {60, false}, {66, false}, {25, false}, {56, false}],
[{49, false}, {68, false}, {84, false}, {10, false}, {38, false}],
[{73, false}, {50, false}, {87, false}, {16, false}, {14, false}],
[{79, false}, {26, false}, {29, false}, {18, false}, {2, false}],
[{57, false}, {22, false}, {5, false}, {48, false}, {91, false}]],
[[{61, false}, {78, false}, {3, false}, {95, false}, {87, false}],
[{6, false}, {62, false}, {25, false}, {74, false}, {84, false}],
[{22, false}, {71, false}, {93, false}, {57, false}, {20, false}],
[{81, false}, {33, false}, {15, false}, {45, false}, {96, false}],
[{38, false}, {14, false}, {19, false}, {72, false}, {26, false}]],
[[{51, false}, {19, false}, {62, false}, {72, false}, {39, false}],
[{36, false}, {83, false}, {6, false}, {33, false}, {9, false}],
[{95, false}, {43, false}, {42, false}, {2, false}, {22, false}],
[{94, false}, {99, false}, {23, false}, {97, false}, {11, false}],
[{66, false}, {61, false}, {16, false}, {30, false}, {35, false}]],
[[{51, false}, {38, false}, {7, false}, {24, false}, {82, false}],
[{23, false}, {12, false}, {46, false}, {55, false}, {85, false}],
[{43, false}, {97, false}, {45, false}, {61, false}, {67, false}],
[{53, false}, {2, false}, {77, false}, {99, false}, {34, false}],
[{17, false}, {93, false}, {25, false}, {9, false}, {72, false}]],
[[{37, false}, {32, false}, {35, false}, {63, false}, {93, false}],
[{40, false}, {16, false}, {51, false}, {99, false}, {88, false}],
[{73, false}, {69, false}, {49, false}, {80, false}, {33, false}],
[{56, false}, {54, false}, {18, false}, {87, false}, {71, false}],
[{29, false}, {98, false}, {85, false}, {58, false}, {17, false}]],
[[{38, false}, {4, false}, {55, false}, {72, false}, {33, false}],
[{29, false}, {63, false}, {86, false}, {52, false}, {75, false}],
[{7, false}, {47, false}, {34, false}, {53, false}, {14, false}],
[{89, false}, {39, false}, {83, false}, {36, false}, {78, false}],
[{6, false}, {21, false}, {15, false}, {18, false}, {96, false}]],
[[{56, false}, {19, false}, {40, false}, {0, false}, {7, false}],
[{61, false}, {33, false}, {50, false}, {66, false}, {54, false}],
[{93, false}, {91, false}, {64, false}, {6, false}, {45, false}],
[{51, false}, {90, false}, {94, false}, {18, false}, {37, false}],
[{15, false}, {28, false}, {13, false}, {2, false}, {44, false}]],
[[{18, false}, {79, false}, {4, false}, {56, false}, {15, false}],
[{38, false}, {80, false}, {8, false}, {42, false}, {5, false}],
[{60, false}, {11, false}, {53, false}, {23, false}, {27, false}],
[{9, false}, {71, false}, {19, false}, {83, false}, {72, false}],
[{39, false}, {97, false}, {98, false}, {99, false}, {7, false}]],
[[{90, false}, {22, false}, {41, false}, {95, false}, {15, false}],
[{20, false}, {18, false}, {7, false}, {70, false}, {49, false}],
[{97, false}, {51, false}, {79, false}, {94, false}, {77, false}],
[{31, false}, {89, false}, {50, false}, {40, false}, {9, false}],
[{37, false}, {84, false}, {6, false}, {98, false}, {35, false}]],
[[{38, false}, {56, false}, {94, false}, {55, false}, {0, false}],
[{92, false}, {84, false}, {8, false}, {85, false}, {73, false}],
[{86, false}, {81, false}, {76, false}, {35, false}, {1, false}],
[{62, false}, {5, false}, {59, false}, {77, false}, {72, false}],
[{79, false}, {97, false}, {60, false}, {11, false}, {70, false}]],
[[{43, false}, {98, false}, {87, false}, {97, false}, {70, false}],
[{53, false}, {55, false}, {35, false}, {8, false}, {64, false}],
[{80, false}, {59, false}, {75, false}, {11, false}, {2, false}],
[{17, false}, {95, false}, {13, false}, {38, false}, {90, false}],
[{31, false}, {20, false}, {60, false}, {84, false}, {4, false}]],
[[{38, false}, {19, false}, {10, false}, {73, false}, {86, false}],
[{37, false}, {72, false}, {66, false}, {22, false}, {53, false}],
[{6, false}, {41, false}, {20, false}, {21, false}, {92, false}],
[{0, false}, {13, false}, {9, false}, {89, false}, {17, false}],
[{43, false}, {61, false}, {80, false}, {60, false}, {65, false}]],
[[{61, false}, {50, false}, {42, false}, {99, false}, {26, false}],
[{11, false}, {51, false}, {52, false}, {83, false}, {64, false}],
[{92, false}, {60, false}, {2, false}, {91, false}, {20, false}],
[{95, false}, {10, false}, {14, false}, {94, false}, {98, false}],
[{5, false}, {37, false}, {90, false}, {17, false}, {69, false}]],
[[{82, false}, {48, false}, {51, false}, {32, false}, {78, false}],
[{30, false}, {39, false}, {10, false}, {84, false}, {69, false}],
[{94, false}, {5, false}, {60, false}, {92, false}, {89, false}],
[{95, false}, {31, false}, {64, false}, {67, false}, {23, false}],
[{96, false}, {20, false}, {33, false}, {66, false}, {61, false}]],
[[{33, false}, {92, false}, {78, false}, {24, false}, {74, false}],
[{45, false}, {34, false}, {73, false}, {5, false}, {57, false}],
[{18, false}, {37, false}, {69, false}, {44, false}, {38, false}],
[{25, false}, {30, false}, {53, false}, {87, false}, {64, false}],
[{28, false}, {23, false}, {14, false}, {10, false}, {81, false}]],
[[{39, false}, {82, false}, {40, false}, {64, false}, {86, false}],
[{26, false}, {81, false}, {3, false}, {85, false}, {50, false}],
[{71, false}, {75, false}, {91, false}, {65, false}, {96, false}],
[{17, false}, {55, false}, {8, false}, {56, false}, {59, false}],
[{22, false}, {36, false}, {73, false}, {90, false}, {0, false}]],
[[{18, false}, {67, false}, {50, false}, {70, false}, {71, false}],
[{83, false}, {8, false}, {75, false}, {55, false}, {29, false}],
[{66, false}, {33, false}, {39, false}, {88, false}, {16, false}],
[{32, false}, {84, false}, {78, false}, {59, false}, {0, false}],
[{11, false}, {3, false}, {61, false}, {65, false}, {36, false}]],
[[{1, false}, {12, false}, {66, false}, {59, false}, {9, false}],
[{24, false}, {97, false}, {75, false}, {83, false}, {11, false}],
[{45, false}, {16, false}, {14, false}, {31, false}, {71, false}],
[{85, false}, {43, false}, {99, false}, {18, false}, {15, false}],
[{61, false}, {56, false}, {80, false}, {69, false}, {29, false}]],
[[{18, false}, {50, false}, {86, false}, {53, false}, {71, false}],
[{67, false}, {36, false}, {14, false}, {24, false}, {55, false}],
[{52, false}, {30, false}, {33, false}, {54, false}, {81, false}],
[{72, false}, {51, false}, {39, false}, {28, false}, {42, false}],
[{45, false}, {98, false}, {78, false}, {35, false}, {73, false}]],
[[{60, false}, {86, false}, {68, false}, {58, false}, {37, false}],
[{17, false}, {78, false}, {43, false}, {31, false}, {96, false}],
[{33, false}, {61, false}, {34, false}, {45, false}, {36, false}],
[{10, false}, {29, false}, {83, false}, {98, false}, {2, false}],
[{88, false}, {73, false}, {7, false}, {84, false}, {50, false}]],
[[{30, false}, {21, false}, {94, false}, {31, false}, {4, false}],
[{20, false}, {68, false}, {91, false}, {55, false}, {51, false}],
[{10, false}, {98, false}, {2, false}, {25, false}, {84, false}],
[{64, false}, {97, false}, {29, false}, {28, false}, {58, false}],
[{75, false}, {17, false}, {76, false}, {54, false}, {65, false}]],
[[{17, false}, {11, false}, {88, false}, {9, false}, {66, false}],
[{1, false}, {59, false}, {60, false}, {79, false}, {55, false}],
[{30, false}, {46, false}, {83, false}, {67, false}, {91, false}],
[{23, false}, {45, false}, {99, false}, {90, false}, {6, false}],
[{81, false}, {33, false}, {8, false}, {13, false}, {76, false}]],
[[{25, false}, {68, false}, {43, false}, {59, false}, {51, false}],
[{56, false}, {14, false}, {41, false}, {52, false}, {16, false}],
[{62, false}, {36, false}, {12, false}, {37, false}, {71, false}],
[{83, false}, {90, false}, {81, false}, {91, false}, {0, false}],
[{95, false}, {92, false}, {29, false}, {54, false}, {26, false}]],
[[{53, false}, {84, false}, {85, false}, {18, false}, {10, false}],
[{51, false}, {44, false}, {87, false}, {86, false}, {67, false}],
[{4, false}, {81, false}, {82, false}, {77, false}, {30, false}],
[{26, false}, {68, false}, {80, false}, {57, false}, {71, false}],
[{22, false}, {83, false}, {47, false}, {61, false}, {14, false}]],
[[{41, false}, {89, false}, {38, false}, {14, false}, {66, false}],
[{70, false}, {92, false}, {26, false}, {97, false}, {53, false}],
[{78, false}, {25, false}, {5, false}, {4, false}, {48, false}],
[{54, false}, {86, false}, {31, false}, {23, false}, {0, false}],
[{99, false}, {73, false}, {6, false}, {20, false}, {98, false}]],
[[{18, false}, {81, false}, {96, false}, {60, false}, {47, false}],
[{59, false}, {87, false}, {95, false}, {15, false}, {57, false}],
[{34, false}, {17, false}, {26, false}, {7, false}, {42, false}],
[{25, false}, {90, false}, {45, false}, {94, false}, {5, false}],
[{10, false}, {41, false}, {32, false}, {20, false}, {98, false}]],
[[{37, false}, {9, false}, {20, false}, {82, false}, {83, false}],
[{84, false}, {14, false}, {62, false}, {3, false}, {76, false}],
[{86, false}, {67, false}, {95, false}, {40, false}, {65, false}],
[{57, false}, {26, false}, {1, false}, {19, false}, {69, false}],
[{49, false}, {41, false}, {29, false}, {35, false}, {13, false}]],
[[{29, false}, {74, false}, {69, false}, {92, false}, {48, false}],
[{80, false}, {47, false}, {59, false}, {18, false}, {13, false}],
[{98, false}, {5, false}, {64, false}, {89, false}, {83, false}],
[{37, false}, {97, false}, {90, false}, {32, false}, {49, false}],
[{25, false}, {87, false}, {39, false}, {21, false}, {63, false}]],
[[{1, false}, {61, false}, {5, false}, {82, false}, {66, false}],
[{87, false}, {75, false}, {18, false}, {23, false}, {63, false}],
[{38, false}, {51, false}, {33, false}, {59, false}, {4, false}],
[{21, false}, {14, false}, {17, false}, {97, false}, {92, false}],
[{94, false}, {45, false}, {84, false}, {22, false}, {10, false}]],
[[{86, false}, {93, false}, {8, false}, {99, false}, {54, false}],
[{1, false}, {4, false}, {37, false}, {30, false}, {34, false}],
[{80, false}, {17, false}, {50, false}, {74, false}, {97, false}],
[{28, false}, {11, false}, {6, false}, {85, false}, {78, false}],
[{94, false}, {76, false}, {92, false}, {63, false}, {79, false}]],
[[{63, false}, {87, false}, {89, false}, {19, false}, {81, false}],
[{72, false}, {90, false}, {71, false}, {96, false}, {16, false}],
[{85, false}, {92, false}, {78, false}, {11, false}, {37, false}],
[{50, false}, {17, false}, {68, false}, {82, false}, {66, false}],
[{21, false}, {9, false}, {39, false}, {69, false}, {73, false}]],
[[{30, false}, {63, false}, {90, false}, {5, false}, {45, false}],
[{26, false}, {15, false}, {28, false}, {84, false}, {65, false}],
[{1, false}, {23, false}, {0, false}, {12, false}, {17, false}],
[{61, false}, {98, false}, {21, false}, {39, false}, {56, false}],
[{67, false}, {51, false}, {3, false}, {8, false}, {42, false}]],
[[{54, false}, {91, false}, {9, false}, {70, false}, {93, false}],
[{75, false}, {58, false}, {89, false}, {53, false}, {19, false}],
[{77, false}, {64, false}, {45, false}, {78, false}, {14, false}],
[{7, false}, {31, false}, {99, false}, {42, false}, {51, false}],
[{87, false}, {95, false}, {60, false}, {10, false}, {84, false}]],
[[{98, false}, {35, false}, {66, false}, {42, false}, {85, false}],
[{75, false}, {27, false}, {97, false}, {54, false}, {9, false}],
[{16, false}, {15, false}, {60, false}, {44, false}, {49, false}],
[{28, false}, {19, false}, {51, false}, {24, false}, {50, false}],
[{59, false}, {18, false}, {37, false}, {88, false}, {39, false}]],
[[{69, false}, {29, false}, {49, false}, {9, false}, {76, false}],
[{4, false}, {83, false}, {64, false}, {33, false}, {2, false}],
[{67, false}, {81, false}, {88, false}, {70, false}, {39, false}],
[{85, false}, {73, false}, {97, false}, {15, false}, {8, false}],
[{7, false}, {13, false}, {26, false}, {12, false}, {1, false}]],
[[{57, false}, {3, false}, {65, false}, {28, false}, {87, false}],
[{36, false}, {31, false}, {51, false}, {19, false}, {0, false}],
[{56, false}, {77, false}, {41, false}, {20, false}, {76, false}],
[{79, false}, {29, false}, {80, false}, {60, false}, {66, false}],
[{55, false}, {61, false}, {8, false}, {30, false}, {15, false}]],
[[{2, false}, {42, false}, {3, false}, {17, false}, {40, false}],
[{10, false}, {56, false}, {91, false}, {52, false}, {23, false}],
[{76, false}, {39, false}, {75, false}, {82, false}, {49, false}],
[{50, false}, {36, false}, {99, false}, {9, false}, {53, false}],
[{92, false}, {66, false}, {48, false}, {31, false}, {41, false}]],
[[{16, false}, {51, false}, {80, false}, {95, false}, {23, false}],
[{36, false}, {84, false}, {33, false}, {56, false}, {11, false}],
[{49, false}, {46, false}, {32, false}, {78, false}, {85, false}],
[{67, false}, {29, false}, {94, false}, {26, false}, {22, false}],
[{76, false}, {6, false}, {30, false}, {37, false}, {0, false}]],
[[{27, false}, {94, false}, {79, false}, {48, false}, {4, false}],
[{55, false}, {81, false}, {22, false}, {18, false}, {88, false}],
[{93, false}, {15, false}, {59, false}, {41, false}, {11, false}],
[{67, false}, {43, false}, {24, false}, {92, false}, {65, false}],
[{5, false}, {1, false}, {60, false}, {99, false}, {62, false}]],
[[{2, false}, {51, false}, {42, false}, {84, false}, {82, false}],
[{80, false}, {28, false}, {43, false}, {93, false}, {72, false}],
[{81, false}, {57, false}, {13, false}, {45, false}, {66, false}],
[{34, false}, {22, false}, {53, false}, {37, false}, {3, false}],
[{31, false}, {46, false}, {70, false}, {77, false}, {79, false}]],
[[{17, false}, {12, false}, {22, false}, {53, false}, {74, false}],
[{23, false}, {49, false}, {52, false}, {60, false}, {40, false}],
[{64, false}, {98, false}, {97, false}, {75, false}, {57, false}],
[{58, false}, {81, false}, {85, false}, {89, false}, {92, false}],
[{42, false}, {34, false}, {65, false}, {87, false}, {18, false}]],
[[{13, false}, {8, false}, {54, false}, {25, false}, {11, false}],
[{84, false}, {72, false}, {66, false}, {78, false}, {1, false}],
[{22, false}, {82, false}, {48, false}, {85, false}, {62, false}],
[{68, false}, {99, false}, {18, false}, {3, false}, {57, false}],
[{64, false}, {41, false}, {80, false}, {94, false}, {71, false}]],
[[{45, false}, {5, false}, {56, false}, {30, false}, {62, false}],
[{10, false}, {50, false}, {78, false}, {13, false}, {34, false}],
[{90, false}, {97, false}, {85, false}, {36, false}, {0, false}],
[{86, false}, {35, false}, {80, false}, {55, false}, {74, false}],
[{47, false}, {99, false}, {59, false}, {61, false}, {18, false}]],
[[{79, false}, {87, false}, {81, false}, {45, false}, {95, false}],
[{24, false}, {91, false}, {27, false}, {18, false}, {16, false}],
[{51, false}, {35, false}, {34, false}, {46, false}, {48, false}],
[{39, false}, {40, false}, {6, false}, {70, false}, {99, false}],
[{1, false}, {82, false}, {63, false}, {32, false}, {50, false}]],
[[{78, false}, {68, false}, {27, false}, {17, false}, {65, false}],
[{74, false}, {15, false}, {21, false}, {38, false}, {24, false}],
[{82, false}, {97, false}, {49, false}, {7, false}, {58, false}],
[{19, false}, {23, false}, {87, false}, {79, false}, {22, false}],
[{57, false}, {93, false}, {30, false}, {1, false}, {69, false}]],
[[{64, false}, {13, false}, {40, false}, {21, false}, {89, false}],
[{3, false}, {95, false}, {20, false}, {79, false}, {59, false}],
[{80, false}, {46, false}, {91, false}, {54, false}, {1, false}],
[{62, false}, {66, false}, {30, false}, {60, false}, {47, false}],
[{26, false}, {99, false}, {55, false}, {25, false}, {2, false}]],
[[{47, false}, {83, false}, {7, false}, {71, false}, {81, false}],
[{9, false}, {72, false}, {12, false}, {20, false}, {96, false}],
[{28, false}, {57, false}, {82, false}, {98, false}, {42, false}],
[{34, false}, {59, false}, {18, false}, {69, false}, {1, false}],
[{68, false}, {38, false}, {46, false}, {19, false}, {80, false}]],
[[{43, false}, {39, false}, {48, false}, {84, false}, {87, false}],
[{32, false}, {78, false}, {5, false}, {65, false}, {50, false}],
[{86, false}, {13, false}, {20, false}, {22, false}, {70, false}],
[{31, false}, {6, false}, {52, false}, {53, false}, {18, false}],
[{73, false}, {25, false}, {4, false}, {60, false}, {99, false}]],
[[{48, false}, {15, false}, {59, false}, {50, false}, {33, false}],
[{93, false}, {99, false}, {46, false}, {70, false}, {21, false}],
[{91, false}, {26, false}, {76, false}, {65, false}, {87, false}],
[{10, false}, {27, false}, {78, false}, {5, false}, {96, false}],
[{4, false}, {63, false}, {22, false}, {82, false}, {20, false}]],
[[{88, false}, {63, false}, {66, false}, {48, false}, {37, false}],
[{39, false}, {47, false}, {56, false}, {52, false}, {27, false}],
[{81, false}, {18, false}, {33, false}, {12, false}, {59, false}],
[{3, false}, {96, false}, {55, false}, {26, false}, {43, false}],
[{42, false}, {4, false}, {7, false}, {28, false}, {22, false}]],
[[{95, false}, {12, false}, {98, false}, {84, false}, {23, false}],
[{37, false}, {35, false}, {78, false}, {9, false}, {61, false}],
[{52, false}, {47, false}, {24, false}, {90, false}, {17, false}],
[{55, false}, {87, false}, {18, false}, {80, false}, {41, false}],
[{38, false}, {0, false}, {14, false}, {36, false}, {48, false}]],
[[{62, false}, {72, false}, {56, false}, {78, false}, {8, false}],
[{75, false}, {26, false}, {11, false}, {58, false}, {91, false}],
[{38, false}, {74, false}, {52, false}, {65, false}, {45, false}],
[{43, false}, {41, false}, {15, false}, {82, false}, {35, false}],
[{89, false}, {27, false}, {21, false}, {54, false}, {0, false}]],
[[{43, false}, {36, false}, {85, false}, {68, false}, {60, false}],
[{26, false}, {89, false}, {84, false}, {10, false}, {80, false}],
[{87, false}, {50, false}, {75, false}, {81, false}, {35, false}],
[{12, false}, {46, false}, {6, false}, {70, false}, {59, false}],
[{93, false}, {51, false}, {66, false}, {33, false}, {49, false}]],
[[{68, false}, {32, false}, {0, false}, {63, false}, {54, false}],
[{20, false}, {92, false}, {39, false}, {89, false}, {17, false}],
[{48, false}, {60, false}, {87, false}, {36, false}, {14, false}],
[{93, false}, {76, false}, {83, false}, {10, false}, {55, false}],
[{64, false}, {74, false}, {80, false}, {11, false}, {41, false}]],
[[{9, false}, {32, false}, {11, false}, {41, false}, {87, false}],
[{78, false}, {22, false}, {8, false}, {72, false}, {75, false}],
[{6, false}, {51, false}, {29, false}, {90, false}, {50, false}],
[{21, false}, {68, false}, {47, false}, {2, false}, {7, false}],
[{52, false}, {19, false}, {36, false}, {57, false}, {58, false}]],
[[{83, false}, {36, false}, {25, false}, {31, false}, {99, false}],
[{86, false}, {29, false}, {47, false}, {77, false}, {38, false}],
[{13, false}, {51, false}, {20, false}, {59, false}, {27, false}],
[{74, false}, {50, false}, {9, false}, {11, false}, {44, false}],
[{52, false}, {95, false}, {81, false}, {2, false}, {70, false}]],
[[{96, false}, {47, false}, {14, false}, {73, false}, {59, false}],
[{84, false}, {87, false}, {7, false}, {4, false}, {46, false}],
[{60, false}, {27, false}, {79, false}, {53, false}, {30, false}],
[{58, false}, {28, false}, {55, false}, {5, false}, {43, false}],
[{91, false}, {75, false}, {63, false}, {35, false}, {52, false}]],
[[{41, false}, {66, false}, {27, false}, {50, false}, {56, false}],
[{76, false}, {60, false}, {80, false}, {85, false}, {23, false}],
[{3, false}, {21, false}, {37, false}, {74, false}, {95, false}],
[{9, false}, {92, false}, {43, false}, {5, false}, {98, false}],
[{79, false}, {49, false}, {88, false}, {24, false}, {70, false}]],
[[{59, false}, {18, false}, {57, false}, {90, false}, {13, false}],
[{79, false}, {29, false}, {12, false}, {2, false}, {0, false}],
[{84, false}, {58, false}, {38, false}, {77, false}, {96, false}],
[{33, false}, {89, false}, {43, false}, {11, false}, {44, false}],
[{93, false}, {23, false}, {98, false}, {60, false}, {51, false}]],
[[{58, false}, {86, false}, {28, false}, {17, false}, {1, false}],
[{6, false}, {4, false}, {81, false}, {55, false}, {53, false}],
[{84, false}, {27, false}, {38, false}, {12, false}, {83, false}],
[{50, false}, {43, false}, {40, false}, {85, false}, {88, false}],
[{26, false}, {72, false}, {25, false}, {41, false}, {44, false}]],
[[{14, false}, {92, false}, {7, false}, {98, false}, {12, false}],
[{44, false}, {11, false}, {71, false}, {64, false}, {26, false}],
[{88, false}, {8, false}, {2, false}, {56, false}, {6, false}],
[{59, false}, {0, false}, {15, false}, {33, false}, {51, false}],
[{10, false}, {52, false}, {89, false}, {53, false}, {34, false}]],
[[{52, false}, {4, false}, {5, false}, {63, false}, {50, false}],
[{15, false}, {8, false}, {60, false}, {70, false}, {13, false}],
[{33, false}, {79, false}, {21, false}, {39, false}, {34, false}],
[{84, false}, {91, false}, {30, false}, {12, false}, {71, false}],
[{61, false}, {31, false}, {41, false}, {9, false}, {66, false}]],
[[{43, false}, {67, false}, {52, false}, {92, false}, {54, false}],
[{17, false}, {21, false}, {71, false}, {78, false}, {60, false}],
[{19, false}, {0, false}, {88, false}, {61, false}, {2, false}],
[{14, false}, {66, false}, {87, false}, {12, false}, {37, false}],
[{89, false}, {23, false}, {25, false}, {4, false}, {24, false}]],
[[{41, false}, {62, false}, {7, false}, {66, false}, {33, false}],
[{59, false}, {87, false}, {84, false}, {80, false}, {71, false}],
[{73, false}, {97, false}, {25, false}, {85, false}, {60, false}],
[{86, false}, {64, false}, {61, false}, {54, false}, {83, false}],
[{22, false}, {18, false}, {63, false}, {81, false}, {27, false}]],
[[{92, false}, {89, false}, {50, false}, {11, false}, {73, false}],
[{41, false}, {48, false}, {62, false}, {80, false}, {78, false}],
[{46, false}, {55, false}, {81, false}, {16, false}, {94, false}],
[{97, false}, {45, false}, {5, false}, {13, false}, {40, false}],
[{14, false}, {75, false}, {22, false}, {42, false}, {2, false}]]]
defmodule Bingo do
def first_winning_card_and_call(cards, calls) do
[call | next_calls] = calls
results = Enum.map(cards, &(apply_number(&1, call)))
case Enum.find(results, &winner?/1) do
nil -> first_winning_card_and_call(results, next_calls)
winner -> {winner, call}
end
end
def last_winning_card_and_call(cards, calls) do
[call | next_calls] = calls
results = Enum.map(cards, &(apply_number(&1, call)))
case Enum.filter(results, &(!winner?(&1))) do
[last_at_the_party] -> first_winning_card_and_call([last_at_the_party], next_calls)
remaining_cards -> last_winning_card_and_call(remaining_cards, next_calls)
end
end
def winner?([
[a1, a2, a3, a4, a5],
[b1, b2, b3, b4, b5],
[c1, c2, c3, c4, c5],
[d1, d2, d3, d4, d5],
[e1, e2, e3, e4, e5]
] = rows) do
has_winning_row = Enum.any?(rows, &winning_line/1)
has_winning_column = [
[a1, b1, c1, d1, e1],
[a2, b2, c2, d2, e2],
[a3, b3, c3, d3, e3],
[a4, b4, c4, d4, e4],
[a5, b5, c5, d5, e5]
] |> Enum.any?(&winning_line/1)
has_winning_row || has_winning_column
end
# "squares" is any row or column of five squares; however you coerce
# it into a list is up to you, but that's the expectation.
defp winning_line(squares) do
Enum.all?(squares, fn {_, already_selected} -> already_selected end)
end
def apply_number(board, number) do
board
|> Enum.map(fn row ->
Enum.map(row, fn
{num, _} when num == number -> {num, true}
square -> square
end)
end)
end
end
{board, call} = Bingo.first_winning_card_and_call(cards, calls)
sum_of_unmarked_numbers = board
|> Enum.reduce(0, fn
(row, sum) -> Enum.reduce(row, sum, fn
{n, false}, sum -> sum + n
_, sum -> sum
end)
end)
sum_of_unmarked_numbers * call
{board, call} = Bingo.last_winning_card_and_call(cards, calls)
sum_of_unmarked_numbers = board
|> Enum.reduce(0, fn
(row, sum) -> Enum.reduce(row, sum, fn
{n, false}, sum -> sum + n
_, sum -> sum
end)
end)
sum_of_unmarked_numbers * call
vents = [
{{644, 38}, {644, 265}},
{{941, 468}, {941, 89}},
{{807, 552}, {618, 363}},
{{896, 510}, {896, 744}},
{{227, 909}, {227, 745}},
{{24, 66}, {946, 988}},
{{563, 529}, {563, 270}},
{{894, 707}, {359, 172}},
{{146, 253}, {146, 569}},
{{544, 683}, {140, 683}},
{{755, 612}, {755, 463}},
{{394, 320}, {891, 320}},
{{68, 616}, {68, 628}},
{{801, 770}, {801, 942}},
{{650, 290}, {580, 360}},
{{376, 18}, {181, 213}},
{{285, 391}, {805, 911}},
{{57, 153}, {501, 153}},
{{686, 301}, {686, 316}},
{{81, 971}, {683, 369}},
{{75, 456}, {75, 355}},
{{769, 59}, {769, 81}},
{{49, 958}, {49, 718}},
{{492, 754}, {492, 256}},
{{606, 133}, {391, 133}},
{{134, 683}, {134, 656}},
{{195, 463}, {658, 926}},
{{982, 498}, {982, 927}},
{{841, 122}, {889, 74}},
{{968, 891}, {968, 189}},
{{104, 941}, {104, 868}},
{{801, 450}, {272, 979}},
{{212, 749}, {212, 366}},
{{880, 928}, {880, 757}},
{{503, 483}, {283, 263}},
{{792, 924}, {792, 540}},
{{58, 87}, {905, 934}},
{{275, 661}, {36, 422}},
{{475, 654}, {466, 645}},
{{34, 946}, {969, 11}},
{{725, 664}, {725, 150}},
{{837, 680}, {837, 952}},
{{109, 987}, {644, 452}},
{{860, 984}, {860, 691}},
{{672, 800}, {107, 235}},
{{216, 888}, {301, 888}},
{{399, 676}, {718, 357}},
{{957, 544}, {784, 544}},
{{677, 743}, {633, 743}},
{{491, 866}, {77, 452}},
{{967, 949}, {45, 27}},
{{659, 699}, {659, 27}},
{{987, 116}, {696, 116}},
{{465, 847}, {309, 847}},
{{353, 19}, {353, 627}},
{{265, 713}, {592, 386}},
{{541, 765}, {461, 765}},
{{21, 409}, {895, 409}},
{{950, 149}, {766, 149}},
{{856, 889}, {895, 889}},
{{335, 962}, {485, 812}},
{{425, 774}, {400, 749}},
{{71, 932}, {989, 14}},
{{484, 974}, {44, 974}},
{{86, 797}, {86, 470}},
{{876, 962}, {876, 384}},
{{45, 631}, {169, 507}},
{{161, 789}, {523, 427}},
{{791, 640}, {791, 581}},
{{415, 170}, {835, 590}},
{{299, 275}, {988, 964}},
{{105, 233}, {231, 359}},
{{202, 226}, {202, 958}},
{{814, 717}, {618, 521}},
{{185, 442}, {559, 68}},
{{26, 149}, {665, 149}},
{{673, 369}, {247, 795}},
{{171, 963}, {171, 46}},
{{689, 801}, {94, 206}},
{{619, 243}, {619, 637}},
{{426, 245}, {660, 11}},
{{47, 503}, {47, 179}},
{{341, 363}, {487, 217}},
{{371, 774}, {371, 871}},
{{781, 794}, {781, 180}},
{{391, 632}, {92, 632}},
{{517, 150}, {517, 715}},
{{903, 10}, {18, 895}},
{{34, 500}, {426, 500}},
{{82, 955}, {886, 151}},
{{142, 297}, {142, 527}},
{{60, 965}, {36, 965}},
{{250, 807}, {372, 685}},
{{227, 393}, {610, 776}},
{{269, 893}, {269, 556}},
{{969, 223}, {611, 223}},
{{255, 92}, {194, 92}},
{{220, 233}, {958, 233}},
{{144, 209}, {144, 979}},
{{48, 413}, {48, 195}},
{{209, 151}, {648, 590}},
{{867, 648}, {871, 644}},
{{499, 555}, {807, 555}},
{{571, 729}, {865, 435}},
{{683, 151}, {485, 151}},
{{803, 26}, {803, 691}},
{{533, 921}, {300, 688}},
{{625, 695}, {483, 553}},
{{719, 370}, {139, 950}},
{{981, 17}, {16, 982}},
{{367, 617}, {367, 636}},
{{249, 644}, {835, 644}},
{{260, 825}, {260, 519}},
{{275, 144}, {275, 315}},
{{767, 314}, {962, 119}},
{{76, 625}, {76, 166}},
{{403, 680}, {313, 680}},
{{977, 21}, {16, 982}},
{{578, 753}, {271, 753}},
{{212, 358}, {477, 623}},
{{596, 220}, {868, 220}},
{{67, 797}, {935, 797}},
{{181, 107}, {181, 379}},
{{741, 332}, {419, 10}},
{{732, 827}, {732, 989}},
{{835, 111}, {436, 510}},
{{480, 328}, {480, 682}},
{{327, 673}, {327, 70}},
{{911, 547}, {833, 625}},
{{944, 509}, {874, 579}},
{{169, 340}, {731, 902}},
{{156, 842}, {825, 173}},
{{976, 40}, {51, 965}},
{{199, 416}, {916, 416}},
{{51, 970}, {792, 229}},
{{14, 577}, {501, 577}},
{{246, 464}, {246, 289}},
{{641, 464}, {100, 464}},
{{984, 11}, {43, 952}},
{{548, 36}, {156, 428}},
{{519, 799}, {519, 43}},
{{332, 364}, {332, 774}},
{{85, 123}, {85, 753}},
{{778, 12}, {40, 750}},
{{507, 56}, {507, 840}},
{{973, 632}, {670, 632}},
{{895, 928}, {37, 70}},
{{661, 784}, {661, 718}},
{{114, 25}, {938, 849}},
{{428, 752}, {428, 543}},
{{357, 270}, {957, 870}},
{{27, 70}, {899, 942}},
{{85, 780}, {747, 780}},
{{717, 565}, {951, 565}},
{{191, 748}, {651, 748}},
{{679, 301}, {679, 417}},
{{150, 266}, {150, 184}},
{{774, 964}, {64, 254}},
{{34, 248}, {34, 279}},
{{782, 610}, {802, 610}},
{{109, 146}, {822, 859}},
{{825, 848}, {825, 666}},
{{251, 718}, {615, 718}},
{{912, 722}, {289, 722}},
{{729, 579}, {729, 889}},
{{214, 756}, {214, 716}},
{{58, 497}, {58, 927}},
{{62, 55}, {742, 55}},
{{110, 429}, {110, 154}},
{{55, 794}, {638, 794}},
{{182, 96}, {676, 96}},
{{632, 334}, {202, 764}},
{{36, 541}, {36, 397}},
{{191, 819}, {191, 277}},
{{971, 491}, {839, 491}},
{{849, 561}, {538, 250}},
{{176, 523}, {10, 689}},
{{162, 638}, {717, 638}},
{{132, 843}, {646, 329}},
{{873, 67}, {873, 389}},
{{167, 631}, {167, 473}},
{{49, 337}, {465, 337}},
{{550, 429}, {438, 429}},
{{305, 720}, {476, 720}},
{{547, 636}, {547, 902}},
{{21, 627}, {49, 627}},
{{286, 70}, {989, 70}},
{{87, 930}, {896, 121}},
{{659, 916}, {200, 916}},
{{234, 589}, {234, 308}},
{{530, 962}, {90, 962}},
{{366, 478}, {676, 788}},
{{284, 520}, {284, 546}},
{{580, 74}, {146, 508}},
{{561, 977}, {561, 237}},
{{85, 150}, {804, 869}},
{{740, 850}, {159, 269}},
{{458, 705}, {458, 639}},
{{969, 563}, {381, 563}},
{{139, 439}, {139, 263}},
{{135, 971}, {908, 198}},
{{440, 632}, {102, 632}},
{{446, 549}, {446, 734}},
{{24, 49}, {212, 237}},
{{692, 882}, {527, 882}},
{{156, 895}, {156, 239}},
{{359, 246}, {359, 603}},
{{12, 349}, {604, 941}},
{{375, 161}, {732, 161}},
{{674, 287}, {322, 287}},
{{902, 957}, {328, 383}},
{{352, 185}, {352, 766}},
{{222, 205}, {222, 419}},
{{769, 815}, {769, 739}},
{{83, 147}, {880, 147}},
{{136, 148}, {136, 279}},
{{807, 241}, {439, 241}},
{{464, 240}, {478, 254}},
{{37, 839}, {646, 839}},
{{351, 316}, {639, 604}},
{{449, 492}, {449, 125}},
{{69, 892}, {933, 28}},
{{565, 161}, {598, 161}},
{{147, 802}, {905, 44}},
{{809, 861}, {38, 90}},
{{34, 80}, {34, 538}},
{{896, 405}, {582, 405}},
{{474, 201}, {893, 201}},
{{289, 64}, {975, 750}},
{{378, 785}, {375, 782}},
{{709, 472}, {357, 472}},
{{17, 14}, {987, 984}},
{{625, 46}, {647, 46}},
{{20, 84}, {914, 978}},
{{364, 811}, {397, 811}},
{{395, 726}, {628, 726}},
{{831, 89}, {593, 89}},
{{370, 562}, {827, 562}},
{{278, 371}, {609, 40}},
{{904, 529}, {391, 16}},
{{232, 829}, {232, 63}},
{{927, 121}, {194, 854}},
{{547, 280}, {547, 895}},
{{292, 904}, {292, 897}},
{{99, 525}, {99, 868}},
{{371, 44}, {643, 44}},
{{942, 74}, {986, 118}},
{{708, 179}, {110, 179}},
{{485, 637}, {713, 637}},
{{477, 512}, {102, 137}},
{{636, 657}, {727, 657}},
{{686, 564}, {256, 564}},
{{636, 169}, {377, 169}},
{{627, 943}, {627, 703}},
{{987, 795}, {987, 758}},
{{364, 827}, {642, 827}},
{{613, 694}, {864, 945}},
{{910, 521}, {777, 654}},
{{119, 394}, {22, 394}},
{{594, 439}, {515, 360}},
{{177, 11}, {177, 73}},
{{456, 628}, {456, 467}},
{{246, 214}, {594, 562}},
{{47, 790}, {47, 491}},
{{788, 21}, {788, 343}},
{{136, 847}, {136, 543}},
{{958, 302}, {733, 302}},
{{50, 981}, {923, 108}},
{{298, 179}, {298, 921}},
{{962, 644}, {93, 644}},
{{988, 671}, {988, 258}},
{{646, 140}, {646, 852}},
{{721, 264}, {721, 563}},
{{972, 407}, {684, 119}},
{{245, 422}, {401, 422}},
{{16, 494}, {16, 16}},
{{564, 72}, {361, 72}},
{{436, 390}, {166, 120}},
{{511, 571}, {241, 571}},
{{259, 215}, {259, 975}},
{{648, 841}, {898, 841}},
{{918, 881}, {438, 401}},
{{458, 561}, {752, 855}},
{{791, 192}, {319, 192}},
{{383, 929}, {217, 929}},
{{733, 26}, {527, 26}},
{{620, 160}, {620, 734}},
{{818, 181}, {61, 181}},
{{39, 21}, {927, 909}},
{{952, 208}, {952, 749}},
{{194, 55}, {304, 55}},
{{519, 673}, {519, 875}},
{{730, 919}, {733, 919}},
{{963, 269}, {933, 299}},
{{707, 112}, {178, 112}},
{{924, 349}, {264, 349}},
{{910, 94}, {96, 94}},
{{747, 289}, {89, 947}},
{{164, 956}, {164, 655}},
{{264, 300}, {753, 789}},
{{207, 672}, {207, 488}},
{{243, 838}, {812, 269}},
{{455, 320}, {425, 320}},
{{59, 964}, {59, 841}},
{{350, 373}, {526, 549}},
{{604, 683}, {604, 83}},
{{537, 281}, {537, 933}},
{{737, 634}, {737, 28}},
{{92, 909}, {725, 276}},
{{859, 335}, {859, 487}},
{{605, 495}, {371, 495}},
{{783, 155}, {783, 930}},
{{388, 591}, {388, 133}},
{{374, 634}, {472, 634}},
{{963, 914}, {64, 15}},
{{57, 435}, {140, 435}},
{{759, 619}, {105, 619}},
{{326, 501}, {326, 821}},
{{942, 136}, {414, 136}},
{{490, 376}, {490, 260}},
{{377, 59}, {377, 773}},
{{894, 169}, {99, 964}},
{{350, 511}, {726, 511}},
{{787, 728}, {787, 750}},
{{688, 11}, {688, 68}},
{{107, 514}, {183, 514}},
{{861, 12}, {22, 851}},
{{149, 49}, {149, 713}},
{{826, 737}, {890, 737}},
{{299, 307}, {299, 549}},
{{251, 648}, {862, 37}},
{{898, 85}, {412, 85}},
{{936, 168}, {845, 168}},
{{278, 677}, {302, 677}},
{{493, 878}, {493, 133}},
{{539, 205}, {539, 522}},
{{412, 495}, {412, 929}},
{{334, 605}, {334, 817}},
{{68, 462}, {462, 856}},
{{234, 134}, {234, 942}},
{{293, 823}, {678, 823}},
{{852, 874}, {158, 874}},
{{859, 612}, {435, 612}},
{{10, 876}, {613, 273}},
{{370, 13}, {118, 13}},
{{616, 774}, {14, 172}},
{{193, 543}, {81, 543}},
{{784, 179}, {14, 949}},
{{324, 533}, {153, 533}},
{{15, 976}, {976, 15}},
{{943, 52}, {20, 975}},
{{100, 34}, {671, 605}},
{{140, 552}, {140, 27}},
{{448, 497}, {186, 497}},
{{734, 355}, {734, 933}},
{{544, 131}, {259, 131}},
{{193, 84}, {663, 84}},
{{190, 949}, {833, 306}},
{{430, 34}, {328, 34}},
{{21, 46}, {483, 508}},
{{621, 202}, {98, 202}},
{{196, 874}, {889, 181}},
{{106, 217}, {850, 961}},
{{701, 891}, {488, 678}},
{{21, 597}, {894, 597}},
{{249, 21}, {249, 614}},
{{887, 808}, {887, 948}},
{{255, 711}, {913, 53}},
{{173, 447}, {173, 78}},
{{956, 224}, {956, 747}},
{{513, 882}, {48, 417}},
{{772, 591}, {930, 591}},
{{976, 98}, {86, 988}},
{{264, 67}, {264, 931}},
{{987, 982}, {48, 43}},
{{494, 514}, {494, 416}},
{{867, 785}, {556, 474}},
{{350, 902}, {257, 902}},
{{978, 977}, {978, 735}},
{{312, 240}, {371, 240}},
{{890, 112}, {890, 662}},
{{753, 327}, {427, 653}},
{{83, 888}, {927, 44}},
{{142, 480}, {12, 480}},
{{965, 39}, {85, 919}},
{{158, 926}, {158, 801}},
{{439, 22}, {439, 860}},
{{10, 26}, {765, 781}},
{{775, 838}, {775, 732}},
{{871, 607}, {871, 288}},
{{337, 850}, {337, 533}},
{{89, 581}, {89, 582}},
{{524, 977}, {524, 88}},
{{473, 283}, {639, 449}},
{{23, 324}, {23, 372}},
{{671, 486}, {278, 879}},
{{266, 98}, {989, 98}},
{{51, 947}, {634, 947}},
{{47, 18}, {47, 43}},
{{95, 239}, {609, 753}},
{{953, 34}, {71, 916}},
{{243, 685}, {243, 427}},
{{642, 537}, {304, 199}},
{{545, 41}, {914, 41}},
{{112, 860}, {112, 159}},
{{12, 12}, {989, 989}},
{{622, 907}, {648, 907}},
{{230, 983}, {230, 941}},
{{111, 868}, {852, 127}},
{{315, 895}, {799, 411}},
{{771, 533}, {584, 720}},
{{65, 492}, {657, 492}},
{{820, 315}, {820, 627}},
{{710, 554}, {829, 554}},
{{100, 967}, {877, 190}},
{{530, 733}, {530, 202}},
{{880, 28}, {83, 825}},
{{914, 448}, {494, 28}},
{{886, 344}, {966, 344}},
{{782, 923}, {857, 848}},
{{597, 632}, {597, 946}},
{{366, 789}, {366, 96}},
{{568, 834}, {187, 834}},
{{451, 687}, {224, 687}},
{{123, 12}, {914, 803}},
{{734, 42}, {526, 42}},
{{844, 116}, {844, 521}},
{{744, 976}, {744, 792}},
{{337, 837}, {617, 837}},
{{848, 139}, {848, 571}},
{{853, 264}, {112, 264}},
{{986, 965}, {92, 71}},
{{888, 892}, {53, 57}},
{{150, 342}, {150, 516}},
{{457, 264}, {796, 264}},
{{544, 595}, {544, 406}},
{{243, 118}, {482, 357}},
{{138, 804}, {138, 646}},
{{99, 80}, {99, 34}},
{{442, 883}, {442, 165}},
{{428, 72}, {428, 826}},
{{450, 815}, {901, 364}},
{{852, 516}, {852, 384}},
{{13, 969}, {972, 10}},
{{921, 50}, {32, 939}},
{{969, 470}, {969, 539}},
{{691, 238}, {763, 238}},
{{171, 733}, {823, 81}},
{{722, 963}, {21, 262}},
{{849, 203}, {849, 151}},
{{12, 99}, {884, 971}},
{{903, 240}, {148, 240}},
{{633, 140}, {633, 202}},
{{194, 393}, {747, 393}},
{{748, 43}, {126, 665}},
{{182, 155}, {182, 298}},
{{668, 814}, {668, 306}},
{{619, 384}, {255, 384}},
{{166, 341}, {795, 970}},
{{898, 870}, {57, 29}},
{{976, 148}, {976, 244}},
{{386, 525}, {662, 249}},
{{719, 67}, {131, 655}},
{{419, 847}, {188, 847}},
{{953, 823}, {743, 823}},
{{307, 299}, {307, 78}},
{{948, 253}, {756, 253}},
{{926, 938}, {46, 58}},
{{982, 618}, {652, 618}},
{{539, 742}, {539, 177}},
{{531, 974}, {531, 781}},
{{880, 922}, {283, 325}},
{{707, 257}, {707, 673}},
{{327, 308}, {930, 911}},
{{526, 170}, {980, 624}},
{{445, 653}, {445, 986}},
{{842, 737}, {754, 737}},
{{847, 982}, {16, 151}},
{{137, 426}, {292, 271}},
{{126, 556}, {50, 556}},
{{168, 766}, {168, 767}},
{{152, 46}, {363, 46}},
{{50, 381}, {760, 381}},
{{43, 943}, {43, 374}},
{{45, 964}, {956, 53}},
{{37, 403}, {576, 403}},
{{130, 317}, {576, 763}},
{{882, 840}, {179, 137}},
{{572, 608}, {572, 274}},
{{874, 977}, {32, 135}},
{{794, 56}, {730, 120}},
{{812, 841}, {812, 440}},
{{111, 66}, {137, 92}},
{{255, 287}, {255, 787}},
{{121, 137}, {121, 63}},
{{81, 811}, {81, 586}},
{{303, 365}, {910, 972}},
{{177, 134}, {962, 919}},
{{405, 41}, {405, 645}},
{{219, 934}, {441, 934}}
]
without_diagonals = vents
|> Enum.flat_map(fn
{{a1, a2}, {b1, b2}} when a1 == b1 -> Enum.reduce(a2..b2, [], fn i, acc -> [{a1, i} | acc] end)
{{a1, a2}, {b1, b2}} when a2 == b2 -> Enum.reduce(a1..b1, [], fn i, acc -> [{i, a2} | acc] end)
_ -> []
end)
|> Enum.reduce(%{}, fn coord, counts -> Map.update(counts, coord, 1, &(&1 + 1)) end)
|> Enum.filter(fn {_coord, count} -> count > 1 end)
|> Enum.count()
every_dang_one = vents
|> Enum.flat_map(fn
{{a1, a2}, {b1, b2}} when a1 == b1 -> Enum.reduce(a2..b2, [], fn i, acc -> [{a1, i} | acc] end)
{{a1, a2}, {b1, b2}} when a2 == b2 -> Enum.reduce(a1..b1, [], fn i, acc -> [{i, a2} | acc] end)
{{a1, a2}, {b1, b2}} -> Enum.zip(a1..b1, a2..b2)
end)
|> Enum.reduce(%{}, fn coord, counts -> Map.update(counts, coord, 1, &(&1 + 1)) end)
|> Enum.filter(fn {_coord, count} -> count > 1 end)
|> Enum.count()