diff --git a/Cargo.lock b/Cargo.lock index f0a2d4f..44589ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,7 +15,6 @@ dependencies = [ "image", "itertools 0.13.0", "memoize", - "rayon", "regex", ] diff --git a/Cargo.toml b/Cargo.toml index 97ed37b..d142b41 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,4 @@ edition = "2021" image = "0.25.5" itertools = "0.13.0" memoize = "0.4.2" -rayon = "1.10.0" regex = "1.11.1" diff --git a/input/17-0a.in b/input/17-0a.in deleted file mode 100644 index f09839b..0000000 --- a/input/17-0a.in +++ /dev/null @@ -1,5 +0,0 @@ -Register A: 729 -Register B: 0 -Register C: 0 - -Program: 0,1,5,4,3,0 diff --git a/input/17-0b.in b/input/17-0b.in deleted file mode 100644 index 4a91c26..0000000 --- a/input/17-0b.in +++ /dev/null @@ -1,5 +0,0 @@ -Register A: 2024 -Register B: 0 -Register C: 0 - -Program: 0,3,5,4,3,0 diff --git a/input/17-1.in b/input/17-1.in deleted file mode 100644 index fb81fbe..0000000 --- a/input/17-1.in +++ /dev/null @@ -1,5 +0,0 @@ -Register A: 27575648 -Register B: 0 -Register C: 0 - -Program: 2,4,1,2,7,5,4,1,1,3,5,5,0,3,3,0 diff --git a/input/18-0.in b/input/18-0.in deleted file mode 100644 index 79c8583..0000000 --- a/input/18-0.in +++ /dev/null @@ -1,25 +0,0 @@ -5,4 -4,2 -4,5 -3,0 -2,1 -6,3 -2,4 -1,5 -0,6 -3,3 -2,6 -5,1 -1,2 -5,5 -2,5 -6,5 -1,4 -0,4 -6,4 -1,1 -6,1 -1,0 -0,5 -1,6 -2,0 diff --git a/input/18-1.in b/input/18-1.in deleted file mode 100644 index 4fb826c..0000000 --- a/input/18-1.in +++ /dev/null @@ -1,3450 +0,0 @@ -7,0 -59,45 -15,9 -60,37 -61,43 -4,39 -7,9 -62,51 -21,21 -9,19 -27,2 -17,41 -1,38 -68,19 -3,11 -1,4 -63,60 -55,27 -67,18 -14,11 -9,7 -7,19 -2,51 -6,33 -3,14 -26,13 -5,46 -21,5 -15,5 -15,41 -18,21 -13,7 -6,49 -67,27 -21,29 -5,41 -65,47 -63,56 -21,4 -12,49 -5,9 -53,57 -5,42 -61,59 -7,21 -7,20 -3,9 -25,40 -3,37 -1,37 -40,59 -61,58 -66,59 -65,46 -19,45 -51,60 -65,62 -15,3 -67,69 -7,17 -67,56 -30,11 -27,1 -14,15 -3,31 -2,27 -18,17 -3,46 -67,32 -1,31 -67,54 -59,54 -63,19 -69,29 -8,5 -13,23 -6,7 -21,24 -17,43 -14,1 -21,40 -14,33 -9,16 -1,13 -3,22 -61,39 -67,55 -63,69 -8,45 -17,37 -69,45 -9,37 -61,34 -23,9 -24,35 -5,13 -3,4 -63,41 -69,24 -3,29 -61,45 -15,43 -61,23 -10,7 -4,7 -7,36 -25,1 -55,54 -61,49 -19,40 -6,11 -11,35 -47,19 -10,43 -65,52 -67,35 -25,11 -65,27 -61,33 -53,61 -65,48 -19,21 -47,68 -53,66 -6,45 -9,4 -65,65 -69,59 -3,33 -5,18 -68,43 -57,21 -13,33 -33,8 -60,49 -65,23 -17,49 -69,43 -21,7 -53,27 -56,33 -16,43 -55,51 -52,37 -19,29 -11,2 -63,59 -27,0 -13,13 -47,60 -23,1 -28,3 -61,26 -61,51 -57,48 -3,21 -4,37 -60,43 -52,61 -15,6 -18,11 -14,31 -11,34 -18,7 -21,8 -11,40 -17,21 -7,45 -19,13 -7,35 -5,5 -7,23 -68,59 -19,28 -69,55 -57,70 -51,66 -11,15 -59,46 -56,45 -66,23 -13,31 -2,41 -63,31 -19,12 -69,23 -63,44 -63,42 -69,48 -59,42 -67,50 -69,53 -23,47 -67,37 -61,60 -62,31 -69,69 -63,64 -4,29 -15,11 -11,7 -22,47 -21,23 -59,21 -66,67 -1,11 -0,53 -7,56 -5,21 -57,41 -3,13 -5,17 -5,1 -65,43 -59,68 -21,35 -70,41 -13,41 -68,41 -1,29 -20,45 -61,30 -21,19 -1,50 -12,23 -15,51 -19,1 -16,31 -9,1 -19,3 -13,2 -3,1 -5,58 -3,44 -50,23 -66,43 -64,25 -53,53 -3,43 -1,1 -55,59 -6,39 -49,51 -11,31 -7,8 -67,46 -60,67 -54,55 -55,69 -13,55 -5,45 -14,19 -59,61 -5,52 -59,52 -5,27 -66,41 -59,20 -57,69 -63,54 -5,16 -17,5 -53,29 -20,19 -9,21 -67,19 -62,35 -9,42 -5,35 -65,28 -2,29 -11,17 -17,28 -51,57 -8,33 -1,14 -55,47 -17,40 -69,54 -64,65 -14,5 -67,41 -69,52 -66,21 -58,61 -49,52 -21,3 -17,15 -3,52 -69,49 -7,49 -60,31 -3,35 -68,49 -65,19 -27,42 -11,29 -3,17 -15,29 -19,7 -15,15 -1,10 -61,65 -59,67 -11,3 -15,24 -62,29 -61,57 -7,47 -5,44 -69,25 -3,59 -21,13 -63,61 -47,58 -63,37 -63,23 -15,22 -12,37 -19,30 -8,29 -63,52 -9,31 -17,13 -13,3 -27,10 -31,8 -66,35 -29,9 -69,67 -17,47 -53,54 -54,61 -65,38 -7,22 -15,35 -10,49 -21,1 -21,50 -57,54 -16,13 -2,19 -59,35 -17,48 -50,53 -69,65 -15,53 -63,57 -54,65 -66,31 -57,53 -1,36 -51,51 -55,52 -23,41 -61,53 -2,31 -8,21 -2,49 -11,30 -6,13 -55,58 -23,8 -3,32 -69,61 -65,31 -7,27 -17,25 -20,9 -19,11 -69,34 -61,29 -51,63 -15,12 -69,26 -70,69 -9,18 -58,43 -19,25 -15,16 -47,61 -63,24 -19,2 -60,21 -69,51 -7,4 -7,41 -13,45 -33,5 -21,36 -50,59 -60,63 -22,11 -56,57 -27,11 -13,1 -16,35 -24,17 -39,4 -63,25 -6,35 -1,22 -63,49 -61,63 -12,17 -61,19 -62,39 -5,24 -57,63 -3,48 -59,53 -61,27 -21,37 -14,47 -39,2 -21,45 -25,17 -12,45 -69,22 -1,49 -21,25 -65,67 -12,11 -53,59 -59,31 -21,26 -19,32 -16,51 -7,3 -57,67 -22,23 -13,11 -7,54 -15,33 -60,65 -5,40 -21,33 -63,47 -11,27 -15,17 -3,16 -66,45 -69,66 -21,34 -63,55 -1,39 -27,30 -68,61 -21,46 -68,69 -31,5 -63,45 -1,19 -27,13 -11,6 -21,39 -26,5 -62,45 -69,27 -63,58 -11,44 -2,59 -1,34 -69,28 -13,21 -14,37 -13,5 -11,4 -11,49 -55,68 -65,59 -10,19 -69,39 -10,31 -45,68 -10,1 -69,20 -48,53 -8,43 -59,59 -17,4 -69,19 -11,37 -9,38 -1,45 -61,31 -51,53 -9,5 -9,14 -65,18 -54,51 -57,68 -25,3 -65,56 -59,41 -3,49 -67,67 -59,49 -6,27 -9,28 -69,63 -51,61 -13,26 -67,33 -1,35 -4,1 -5,11 -57,56 -65,26 -57,43 -12,47 -59,32 -58,37 -64,23 -65,25 -69,31 -3,47 -69,35 -9,43 -63,63 -66,53 -49,58 -9,13 -3,5 -9,35 -1,51 -57,18 -65,33 -68,25 -30,3 -49,63 -16,7 -65,45 -23,36 -56,27 -12,15 -67,34 -67,68 -64,33 -15,26 -55,67 -9,9 -3,19 -62,67 -3,6 -3,7 -65,40 -59,58 -59,36 -59,29 -22,31 -25,29 -57,60 -69,57 -24,3 -69,56 -5,23 -67,61 -17,46 -27,37 -59,26 -23,5 -66,65 -56,59 -15,45 -21,42 -21,44 -2,35 -18,3 -5,3 -68,39 -0,29 -5,15 -9,45 -18,27 -68,37 -19,14 -61,67 -13,51 -7,15 -10,15 -64,43 -22,43 -61,56 -31,1 -15,40 -13,17 -17,10 -41,23 -5,29 -57,59 -52,69 -19,27 -39,27 -69,58 -57,52 -55,25 -27,47 -1,43 -63,35 -3,10 -12,53 -22,5 -7,51 -48,27 -2,17 -59,57 -24,1 -50,57 -7,14 -4,19 -63,27 -69,32 -13,0 -7,13 -63,65 -11,33 -11,50 -15,50 -1,41 -14,35 -13,53 -63,21 -7,37 -13,47 -8,7 -15,37 -55,63 -61,37 -1,5 -10,37 -19,35 -12,5 -1,17 -55,65 -22,39 -61,54 -68,65 -1,15 -51,59 -9,3 -67,51 -63,48 -59,33 -1,23 -67,62 -69,36 -67,29 -5,22 -17,34 -51,65 -49,61 -17,17 -14,39 -1,40 -17,23 -1,21 -17,2 -12,41 -59,65 -67,49 -21,38 -64,47 -19,19 -3,57 -1,26 -65,37 -55,50 -23,37 -20,33 -61,69 -4,35 -9,12 -4,5 -11,45 -56,49 -55,53 -53,63 -19,6 -2,9 -62,63 -7,33 -15,13 -25,6 -58,29 -22,1 -65,21 -25,21 -58,49 -63,53 -64,21 -65,63 -61,55 -2,45 -63,29 -55,62 -3,51 -57,31 -67,47 -5,43 -9,17 -67,45 -23,45 -4,57 -27,3 -12,27 -3,3 -19,18 -11,22 -5,47 -10,29 -9,23 -57,38 -17,33 -9,22 -53,56 -0,43 -63,50 -7,24 -5,49 -11,23 -21,2 -19,47 -24,43 -17,11 -59,47 -11,32 -65,29 -9,53 -17,38 -15,49 -67,25 -3,56 -27,21 -7,39 -4,33 -15,39 -11,47 -15,4 -25,14 -61,35 -0,13 -51,32 -4,27 -3,27 -5,51 -21,14 -22,29 -9,25 -42,55 -69,33 -1,8 -63,67 -61,38 -9,36 -3,12 -70,63 -6,31 -19,5 -60,55 -69,46 -51,19 -35,2 -8,53 -65,60 -14,49 -42,65 -9,15 -67,30 -54,59 -25,23 -59,27 -67,57 -19,15 -49,59 -11,5 -1,7 -65,50 -49,67 -29,5 -5,33 -7,29 -24,7 -7,1 -12,55 -22,13 -17,39 -67,63 -53,68 -28,9 -17,36 -21,41 -47,69 -68,51 -67,65 -17,3 -65,35 -27,5 -64,29 -14,29 -13,36 -14,45 -18,15 -19,37 -25,13 -4,9 -65,49 -55,29 -59,62 -63,33 -2,21 -7,2 -15,55 -15,8 -65,41 -23,15 -64,69 -19,39 -44,27 -17,7 -3,2 -3,15 -5,7 -13,29 -13,35 -67,26 -5,20 -11,41 -26,1 -15,56 -59,23 -7,31 -67,23 -67,64 -59,50 -15,44 -13,27 -12,33 -19,38 -17,9 -69,41 -53,32 -16,29 -12,13 -48,61 -21,43 -9,46 -59,64 -49,53 -63,62 -15,47 -20,37 -52,57 -52,53 -21,10 -11,26 -2,1 -17,19 -65,61 -15,19 -67,59 -65,58 -13,9 -16,19 -21,31 -65,51 -31,11 -16,1 -57,61 -47,43 -17,32 -57,66 -5,25 -19,49 -0,47 -23,12 -16,17 -21,16 -17,31 -5,39 -21,6 -49,48 -8,25 -3,55 -17,42 -9,39 -8,31 -1,3 -58,57 -11,11 -63,43 -11,39 -29,3 -11,20 -57,55 -27,9 -6,3 -9,47 -24,15 -7,26 -15,1 -63,40 -27,33 -27,12 -63,39 -3,54 -31,17 -13,25 -9,34 -17,29 -18,45 -3,25 -3,53 -59,24 -7,43 -21,11 -11,21 -21,15 -9,49 -68,29 -61,48 -61,46 -9,29 -19,17 -15,31 -8,39 -55,45 -55,57 -67,21 -17,14 -11,13 -21,30 -7,25 -1,54 -23,13 -64,37 -47,53 -6,41 -8,11 -67,31 -1,25 -45,45 -19,42 -65,55 -62,69 -45,62 -13,14 -7,10 -63,66 -65,39 -1,27 -19,41 -1,33 -19,33 -19,31 -18,35 -17,8 -41,58 -13,24 -59,51 -9,33 -65,69 -59,55 -1,24 -4,13 -17,45 -69,47 -6,17 -15,21 -11,1 -10,9 -59,69 -63,51 -16,21 -59,40 -0,19 -3,23 -57,49 -5,31 -62,33 -7,5 -1,53 -61,47 -69,44 -65,68 -21,18 -13,15 -11,25 -69,21 -1,6 -10,39 -13,20 -67,43 -59,34 -1,47 -9,27 -19,9 -16,47 -65,57 -25,5 -63,36 -21,17 -23,3 -67,53 -7,48 -65,20 -5,30 -57,51 -58,65 -57,35 -61,61 -15,42 -3,42 -19,43 -12,51 -9,51 -55,55 -13,28 -10,47 -13,49 -4,49 -7,57 -10,25 -64,31 -22,33 -13,67 -45,15 -67,14 -34,53 -33,1 -34,5 -11,69 -66,7 -51,67 -37,12 -37,23 -42,5 -35,7 -16,59 -17,60 -47,55 -47,8 -35,0 -40,25 -48,49 -57,57 -35,3 -45,60 -29,48 -46,53 -49,22 -27,25 -36,51 -33,25 -56,63 -56,47 -63,17 -34,11 -25,9 -27,16 -65,7 -28,17 -49,6 -35,13 -17,59 -8,67 -27,31 -47,66 -47,35 -7,53 -19,50 -24,63 -41,16 -31,38 -39,13 -37,9 -28,23 -25,18 -63,16 -29,35 -51,17 -63,13 -3,69 -41,24 -38,39 -62,27 -39,25 -41,38 -33,60 -30,29 -39,9 -24,67 -13,57 -39,26 -13,19 -25,70 -43,23 -49,25 -67,16 -8,49 -53,67 -47,51 -69,3 -41,15 -19,61 -32,51 -9,67 -50,55 -45,39 -12,7 -31,36 -44,57 -42,25 -31,51 -63,1 -12,9 -51,29 -54,37 -49,31 -9,55 -11,67 -46,43 -41,31 -20,25 -65,13 -31,20 -7,61 -41,2 -68,13 -49,33 -18,57 -53,40 -43,7 -7,69 -53,1 -57,37 -14,21 -36,41 -21,20 -34,33 -41,33 -45,55 -67,7 -13,61 -17,63 -50,9 -65,3 -30,65 -30,61 -43,63 -32,35 -7,55 -45,21 -56,21 -39,34 -5,57 -35,10 -52,63 -61,4 -27,17 -37,1 -54,25 -33,59 -34,49 -36,9 -19,63 -32,13 -32,1 -29,51 -39,19 -15,25 -21,56 -20,63 -49,45 -54,19 -46,35 -31,59 -62,23 -24,45 -51,3 -22,51 -23,21 -65,6 -37,48 -52,15 -45,24 -44,51 -25,39 -37,27 -42,47 -47,12 -33,64 -7,65 -1,63 -37,65 -55,33 -7,62 -33,3 -46,57 -15,23 -52,49 -56,35 -57,17 -33,27 -43,59 -19,59 -25,55 -67,17 -31,29 -55,12 -65,12 -42,61 -37,51 -25,61 -9,59 -41,42 -41,17 -29,43 -17,55 -27,35 -25,56 -45,54 -25,51 -6,61 -40,53 -56,29 -60,7 -27,41 -57,32 -30,69 -37,39 -32,49 -0,69 -37,3 -43,49 -27,57 -53,49 -35,65 -52,9 -41,3 -23,11 -25,45 -53,12 -18,53 -69,13 -26,67 -42,11 -41,6 -25,63 -39,55 -43,67 -43,65 -61,9 -33,55 -11,43 -59,15 -39,43 -51,49 -42,63 -35,21 -45,29 -45,1 -45,47 -55,23 -37,16 -31,62 -33,67 -39,35 -69,4 -55,22 -36,35 -26,25 -35,36 -45,57 -55,10 -69,5 -49,23 -53,21 -49,3 -5,55 -44,15 -28,35 -53,46 -15,64 -36,39 -33,30 -35,62 -31,33 -61,8 -26,53 -10,53 -23,57 -9,63 -5,65 -61,21 -47,10 -31,42 -36,3 -25,53 -29,17 -40,65 -55,15 -27,56 -23,25 -45,36 -31,52 -48,55 -53,39 -41,63 -3,24 -49,5 -31,21 -1,64 -41,61 -38,1 -45,25 -41,60 -45,51 -39,53 -55,5 -34,55 -37,11 -68,7 -66,1 -24,25 -29,66 -40,11 -55,41 -45,59 -46,47 -36,23 -63,3 -11,54 -31,58 -44,59 -23,69 -33,66 -44,29 -61,13 -53,47 -61,15 -29,63 -37,33 -45,26 -29,33 -45,61 -35,68 -21,51 -43,57 -21,27 -35,59 -37,59 -4,65 -37,31 -55,17 -35,53 -14,63 -1,61 -39,38 -56,1 -67,11 -3,41 -62,7 -47,40 -35,51 -38,27 -57,4 -48,41 -35,6 -29,20 -53,69 -29,26 -27,60 -43,20 -11,68 -51,12 -69,2 -46,33 -33,45 -35,35 -33,11 -39,65 -56,15 -13,58 -41,56 -53,31 -34,43 -33,26 -37,55 -54,31 -29,13 -28,7 -59,17 -29,69 -49,21 -23,68 -48,37 -26,43 -35,63 -62,13 -53,35 -3,61 -21,61 -1,55 -49,39 -51,13 -16,67 -32,29 -40,29 -50,63 -25,67 -37,7 -44,13 -9,69 -38,23 -18,59 -29,31 -35,15 -35,5 -58,45 -54,15 -39,14 -31,23 -65,17 -33,33 -12,63 -49,36 -45,7 -15,65 -3,62 -43,33 -25,60 -27,29 -27,65 -39,39 -34,19 -31,19 -15,57 -47,14 -45,38 -19,51 -42,15 -37,52 -9,11 -27,68 -35,47 -53,36 -45,11 -44,3 -1,58 -53,42 -28,21 -31,41 -35,42 -53,41 -67,5 -40,63 -26,47 -59,3 -45,2 -23,65 -5,19 -1,65 -17,57 -33,41 -37,21 -30,41 -29,45 -69,11 -43,3 -21,47 -23,54 -47,27 -55,19 -19,22 -19,23 -25,28 -47,63 -39,8 -25,4 -45,37 -61,17 -59,19 -31,47 -54,3 -59,5 -41,67 -67,3 -61,5 -39,33 -65,1 -23,59 -57,30 -47,65 -29,55 -1,62 -41,20 -35,20 -3,38 -45,22 -41,4 -31,61 -44,67 -39,17 -30,17 -13,65 -36,21 -27,49 -69,0 -51,39 -51,23 -63,6 -33,23 -62,9 -39,11 -55,35 -36,15 -35,25 -31,25 -50,31 -1,67 -37,43 -35,69 -30,27 -29,53 -55,16 -23,7 -38,19 -15,63 -64,15 -35,57 -49,19 -19,55 -49,7 -20,69 -50,45 -47,9 -33,28 -32,41 -25,15 -52,21 -43,45 -17,51 -28,29 -33,13 -37,45 -65,11 -36,25 -57,27 -25,7 -44,17 -29,59 -11,57 -44,49 -57,7 -53,3 -49,43 -33,15 -25,65 -39,23 -15,27 -30,51 -70,39 -50,11 -27,54 -39,69 -43,13 -4,61 -26,65 -28,47 -52,47 -43,11 -30,31 -53,17 -38,45 -49,14 -49,16 -53,37 -30,23 -30,55 -9,52 -43,37 -23,63 -35,30 -39,67 -26,19 -17,26 -51,38 -13,37 -27,67 -37,4 -47,44 -31,57 -51,41 -33,69 -17,69 -33,17 -68,11 -11,51 -62,41 -55,6 -44,43 -39,30 -45,41 -57,19 -40,47 -57,45 -54,1 -35,19 -29,41 -15,54 -29,47 -53,48 -29,21 -56,39 -51,43 -59,10 -61,3 -24,41 -43,29 -44,9 -41,28 -37,47 -41,29 -34,17 -15,52 -56,41 -24,27 -20,65 -5,69 -41,47 -42,33 -55,7 -18,65 -22,65 -38,63 -62,19 -68,9 -3,39 -50,19 -23,33 -25,47 -63,9 -65,53 -48,29 -55,39 -57,13 -66,11 -11,58 -39,52 -44,19 -31,69 -26,37 -35,64 -14,69 -59,1 -18,51 -31,48 -15,62 -33,18 -15,69 -4,69 -29,65 -20,57 -44,63 -44,7 -42,41 -24,53 -35,37 -48,45 -59,25 -41,55 -47,15 -43,21 -25,19 -19,69 -51,45 -49,12 -52,43 -59,9 -33,49 -31,27 -24,37 -37,28 -43,27 -57,5 -54,41 -41,19 -29,38 -59,7 -35,67 -42,35 -29,7 -49,69 -27,61 -45,43 -39,45 -34,39 -6,55 -24,49 -49,47 -55,18 -3,60 -38,9 -13,69 -58,11 -25,46 -50,41 -66,9 -25,41 -9,57 -5,61 -25,30 -33,47 -31,65 -10,63 -35,43 -1,56 -39,56 -17,67 -29,61 -25,64 -34,15 -69,7 -57,33 -47,38 -17,61 -21,57 -29,6 -9,65 -17,1 -41,32 -64,11 -33,31 -29,37 -54,35 -27,51 -47,1 -63,15 -36,57 -27,63 -31,63 -37,44 -15,66 -11,70 -32,45 -23,53 -29,4 -65,15 -34,35 -41,7 -32,5 -43,30 -68,5 -49,65 -53,43 -59,18 -62,21 -50,67 -33,35 -47,64 -47,25 -55,11 -6,65 -47,17 -23,31 -23,20 -16,55 -47,7 -39,1 -31,46 -24,31 -43,5 -32,65 -48,65 -47,5 -52,1 -15,7 -35,45 -40,69 -45,23 -39,51 -43,53 -44,35 -69,17 -31,6 -38,69 -57,65 -29,46 -29,14 -31,31 -44,39 -47,20 -21,67 -41,11 -45,65 -52,7 -27,45 -21,59 -43,47 -11,55 -47,59 -15,67 -12,65 -29,49 -40,7 -5,63 -37,41 -65,14 -19,24 -39,54 -26,49 -37,61 -48,33 -7,67 -43,50 -31,9 -28,33 -45,53 -13,63 -42,19 -47,18 -11,65 -22,55 -12,61 -23,67 -58,13 -5,53 -69,16 -37,57 -7,16 -23,27 -25,22 -47,56 -31,34 -7,63 -49,15 -13,60 -46,29 -45,17 -39,21 -69,15 -51,27 -41,66 -35,56 -36,65 -32,55 -39,37 -46,15 -33,63 -51,28 -3,65 -43,39 -45,13 -43,25 -39,49 -42,49 -35,9 -33,61 -51,4 -12,67 -22,27 -47,3 -44,33 -37,15 -45,46 -54,69 -39,29 -32,31 -24,33 -10,59 -43,38 -41,9 -36,37 -38,5 -48,3 -43,15 -39,31 -49,11 -9,41 -6,69 -49,37 -50,47 -9,61 -1,59 -5,67 -51,69 -40,17 -31,3 -35,39 -49,41 -26,61 -37,18 -9,56 -55,49 -57,29 -33,57 -11,10 -63,18 -41,21 -59,63 -11,9 -27,28 -27,50 -47,47 -51,47 -27,26 -5,37 -21,60 -37,56 -41,44 -57,24 -26,33 -50,27 -33,22 -36,7 -43,56 -39,66 -50,39 -55,14 -29,25 -55,61 -48,5 -38,61 -3,67 -38,41 -47,67 -45,48 -8,59 -35,49 -24,51 -31,37 -21,69 -61,16 -47,57 -45,63 -55,2 -67,2 -53,28 -43,61 -33,7 -4,67 -29,23 -55,13 -27,39 -35,31 -2,69 -60,13 -58,9 -42,53 -28,53 -43,14 -67,13 -53,45 -55,43 -47,30 -60,3 -20,53 -64,9 -21,55 -55,37 -44,23 -16,69 -47,11 -43,9 -35,55 -31,53 -51,25 -10,67 -27,59 -4,53 -24,65 -33,53 -36,47 -11,63 -47,52 -53,5 -62,1 -46,17 -33,19 -51,26 -25,69 -23,29 -20,59 -41,5 -45,19 -53,24 -21,9 -31,56 -60,1 -44,65 -23,16 -30,53 -35,12 -13,18 -31,55 -21,49 -39,7 -26,57 -49,17 -17,35 -27,40 -49,55 -61,1 -35,32 -46,27 -49,0 -15,59 -52,39 -53,10 -38,15 -33,65 -49,35 -5,64 -32,11 -42,27 -5,59 -51,9 -58,3 -13,43 -53,55 -53,51 -17,53 -19,53 -53,15 -41,49 -37,29 -47,49 -19,62 -35,60 -42,69 -19,65 -41,65 -37,67 -49,49 -38,7 -47,31 -46,5 -21,52 -44,5 -31,49 -33,24 -29,11 -53,7 -35,23 -29,39 -57,39 -31,68 -67,39 -32,21 -59,11 -69,37 -47,50 -57,11 -70,11 -25,37 -37,32 -23,58 -27,15 -51,20 -53,23 -41,53 -57,9 -62,11 -56,25 -39,41 -37,62 -22,21 -49,27 -2,67 -46,61 -45,32 -70,17 -65,9 -29,15 -58,27 -45,69 -35,41 -48,69 -27,7 -34,45 -23,55 -47,13 -53,22 -41,13 -57,42 -59,13 -47,45 -23,17 -63,11 -53,30 -41,57 -53,18 -32,33 -35,28 -46,41 -51,64 -30,1 -40,13 -49,13 -19,68 -53,20 -22,67 -23,39 -25,27 -29,19 -54,7 -11,53 -41,25 -45,31 -16,63 -40,43 -41,51 -65,5 -21,53 -45,27 -53,8 -29,67 -25,20 -49,9 -51,50 -29,1 -55,31 -12,43 -41,39 -47,21 -43,1 -33,2 -66,37 -66,3 -46,7 -49,62 -29,40 -51,15 -53,19 -36,43 -22,63 -25,38 -1,57 -35,29 -33,9 -9,64 -35,33 -17,62 -51,5 -39,61 -19,54 -17,27 -42,1 -55,64 -13,56 -59,37 -51,44 -19,48 -58,7 -29,64 -25,57 -32,17 -27,43 -59,22 -59,14 -55,44 -31,35 -37,49 -47,33 -44,41 -45,0 -7,11 -51,37 -10,61 -33,70 -55,21 -51,7 -33,37 -25,49 -56,5 -44,69 -58,17 -32,61 -23,62 -21,65 -13,39 -23,43 -29,27 -41,37 -43,19 -28,67 -42,9 -26,23 -34,23 -38,59 -1,69 -25,33 -50,69 -13,59 -45,35 -33,4 -29,32 -62,3 -43,43 -8,61 -39,68 -26,9 -53,9 -35,17 -47,39 -32,69 -41,1 -37,54 -40,51 -27,36 -55,9 -38,31 -61,18 -47,23 -30,9 -69,8 -27,62 -37,25 -39,47 -23,35 -39,15 -41,46 -37,13 -45,67 -57,20 -45,33 -40,35 -52,5 -51,35 -21,63 -21,70 -41,45 -25,25 -45,5 -63,7 -38,65 -51,31 -46,3 -28,59 -47,41 -19,66 -33,14 -49,1 -11,19 -41,41 -39,63 -37,20 -57,47 -57,1 -46,65 -51,1 -44,45 -27,53 -49,42 -40,41 -35,27 -46,21 -31,26 -41,27 -57,15 -31,24 -27,69 -41,59 -23,51 -41,69 -55,28 -35,1 -53,4 -41,22 -53,33 -37,35 -14,59 -31,14 -52,33 -41,35 -43,41 -41,43 -25,59 -29,18 -47,24 -43,69 -55,1 -41,12 -17,56 -37,5 -38,11 -39,36 -37,69 -6,67 -23,23 -31,15 -55,34 -3,63 -51,55 -34,47 -33,38 -37,17 -13,66 -43,31 -33,58 -15,61 -57,25 -49,29 -38,49 -33,39 -33,40 -24,23 -50,3 -48,17 -23,48 -51,14 -59,39 -27,27 -39,22 -26,51 -53,26 -61,7 -27,44 -34,59 -10,57 -28,63 -31,7 -37,63 -23,49 -29,57 -49,26 -24,9 -43,44 -29,22 -50,17 -57,3 -25,43 -53,11 -31,44 -37,53 -53,65 -61,25 -60,27 -39,50 -24,57 -63,5 -61,41 -65,4 -59,16 -6,51 -43,17 -69,9 -64,1 -29,50 -34,67 -45,49 -19,67 -39,59 -29,29 -33,43 -31,67 -60,11 -3,45 -31,39 -48,9 -67,1 -7,59 -36,67 -23,19 -25,31 -27,23 -28,57 -47,2 -33,51 -47,29 -8,65 -41,40 -56,9 -33,54 -51,34 -39,3 -53,13 -6,59 -2,65 -55,3 -33,21 -48,23 -66,17 -43,51 -29,12 -33,29 -67,15 -31,45 -25,35 -39,5 -11,61 -33,10 -19,57 -47,37 -51,24 -37,46 -57,23 -37,58 -24,11 -27,19 -23,60 -30,59 -35,50 -9,68 -29,44 -51,21 -40,19 -37,19 -1,9 -51,11 -43,35 -48,31 -7,7 -45,3 -38,35 -49,34 -45,9 -49,57 -27,55 -39,57 -35,11 -50,7 -43,55 -23,61 -59,2 -35,26 -30,35 -37,37 -54,45 -17,68 -11,59 -51,33 -59,6 -28,39 -38,25 -53,25 -67,9 -69,1 -40,31 -31,43 -45,10 -35,61 -17,24 -17,65 -31,13 -59,43 -44,11 -44,53 -61,11 -26,36 -58,15 -43,26 -26,18 -11,60 -60,18 -45,44 -19,70 -54,39 -17,0 -61,20 -34,48 -46,30 -10,70 -53,6 -42,60 -32,23 -20,4 -34,16 -68,21 -46,28 -34,60 -38,51 -46,58 -10,46 -59,0 -30,64 -22,15 -66,27 -0,15 -24,50 -70,36 -0,34 -64,8 -56,11 -8,64 -18,61 -53,38 -1,68 -32,63 -20,6 -52,2 -46,13 -24,12 -32,32 -48,12 -9,20 -21,62 -38,58 -50,49 -52,34 -61,42 -32,42 -52,38 -42,2 -64,13 -28,1 -32,4 -40,6 -46,68 -0,36 -57,26 -18,44 -26,24 -39,18 -14,23 -64,28 -18,1 -18,22 -54,29 -22,62 -7,60 -68,20 -33,48 -24,38 -16,26 -70,33 -42,18 -36,19 -9,2 -58,58 -31,40 -46,8 -58,69 -40,22 -32,46 -44,8 -58,24 -25,34 -45,34 -50,60 -66,46 -32,58 -59,70 -6,29 -36,68 -12,19 -36,16 -2,16 -58,34 -32,22 -26,3 -9,50 -16,10 -38,40 -60,2 -60,15 -40,39 -48,6 -41,34 -37,26 -0,48 -52,67 -20,8 -56,42 -2,66 -47,16 -52,32 -44,18 -44,31 -33,20 -65,34 -51,2 -54,50 -51,16 -50,1 -46,60 -62,10 -30,30 -70,42 -4,58 -32,38 -6,64 -52,46 -67,6 -10,22 -60,53 -50,0 -34,28 -29,30 -60,34 -42,26 -31,2 -51,46 -26,35 -8,0 -18,58 -60,33 -60,36 -0,8 -2,61 -18,68 -54,23 -38,4 -8,62 -52,28 -50,34 -48,51 -70,43 -36,64 -40,67 -66,2 -11,24 -70,4 -45,40 -12,22 -16,60 -43,52 -54,36 -46,59 -52,55 -18,32 -44,54 -46,66 -28,28 -42,40 -28,24 -49,50 -18,9 -57,8 -52,8 -48,62 -70,46 -7,50 -16,9 -0,65 -32,59 -19,4 -53,62 -16,44 -16,65 -10,69 -46,2 -52,27 -32,6 -16,37 -46,0 -29,34 -13,10 -27,24 -54,18 -4,62 -6,57 -14,53 -62,22 -0,50 -70,32 -38,52 -48,28 -66,19 -45,28 -64,40 -39,24 -30,34 -10,45 -34,2 -31,16 -43,6 -68,8 -10,4 -68,3 -25,12 -29,52 -14,6 -28,10 -38,68 -50,4 -20,39 -48,34 -61,6 -58,70 -19,26 -5,54 -32,64 -18,64 -64,52 -28,38 -5,6 -70,34 -47,22 -56,4 -44,2 -38,22 -38,24 -55,38 -44,58 -59,38 -50,13 -28,60 -57,6 -32,3 -60,64 -15,38 -24,13 -54,67 -10,58 -54,9 -41,50 -70,24 -17,44 -8,60 -56,10 -40,40 -48,26 -47,46 -35,46 -44,22 -48,30 -28,62 -58,18 -27,38 -32,15 -0,49 -66,32 -19,44 -6,62 -58,30 -50,35 -30,5 -70,19 -36,13 -52,19 -44,25 -37,66 -38,32 -36,69 -22,37 -25,0 -29,70 -11,46 -48,47 -66,68 -24,24 -58,60 -22,49 -14,18 -42,37 -14,12 -18,14 -40,20 -44,64 -60,19 -46,69 -49,24 -48,56 -10,8 -0,52 -11,16 -32,28 -26,56 -57,10 -58,19 -66,25 -65,16 -26,15 -28,30 -14,52 -5,50 -12,18 -65,24 -56,58 -18,24 -67,42 -62,34 -64,16 -56,23 -31,30 -12,44 -65,0 -45,16 -50,48 -20,22 -69,18 -66,38 -24,29 -42,59 -44,21 -38,14 -51,40 -61,40 -42,36 -63,26 -67,0 -11,52 -10,50 -28,37 -13,42 -36,49 -43,48 -23,34 -36,18 -18,26 -42,17 -0,42 -4,17 -35,54 -62,24 -46,45 -50,30 -50,44 -52,40 -43,12 -56,30 -65,42 -52,10 -53,52 -35,24 -46,62 -68,0 -68,30 -5,38 -58,41 -12,50 -30,37 -24,5 -42,6 -17,66 -25,26 -70,45 -2,22 -55,20 -40,50 -0,10 -42,51 -48,40 -5,14 -0,54 -24,22 -66,12 -35,58 -36,1 -28,36 -58,39 -33,42 -14,60 -49,32 -30,25 -12,4 -45,56 -18,28 -13,68 -23,10 -46,63 -0,18 -38,17 -35,22 -45,6 -24,32 -62,12 -10,66 -66,40 -45,12 -67,24 -54,14 -50,66 -40,32 -30,20 -27,8 -20,28 -54,63 -32,43 -31,12 -30,13 -43,54 -15,10 -48,43 -42,20 -40,15 -32,25 -8,9 -16,14 -16,20 -0,39 -44,30 -46,64 -2,25 -63,8 -54,62 -8,10 -49,28 -24,18 -40,66 -40,45 -18,33 -40,46 -32,62 -2,47 -58,23 -62,64 -66,10 -42,23 -8,58 -12,16 -54,0 -1,60 -58,46 -62,28 -70,29 -64,12 -10,51 -58,10 -48,20 -52,45 -32,12 -12,2 -29,8 -0,59 -64,50 -38,50 -38,33 -54,28 -49,56 -20,26 -6,14 -56,38 -58,21 -44,37 -40,21 -22,12 -44,36 -46,54 -10,18 -43,4 -44,34 -67,12 -22,61 -42,8 -26,7 -28,12 -34,0 -34,18 -22,8 -23,28 -64,30 -52,54 -49,10 -34,14 -14,64 -42,57 -6,44 -70,20 -10,55 -62,65 -50,15 -43,18 -13,64 -60,39 -30,24 -14,13 -62,15 -22,58 -34,57 -9,62 -40,42 -68,24 -6,53 -36,56 -50,18 -6,4 -25,32 -38,21 -55,30 -60,42 -65,10 -64,17 -35,8 -12,68 -38,12 -40,5 -70,5 -37,30 -34,54 -14,27 -50,22 -28,27 -39,28 -70,14 -57,12 -8,19 -58,62 -24,4 -40,27 -14,22 -34,44 -18,23 -68,2 -22,34 -64,64 -14,25 -40,4 -60,14 -18,16 -55,0 -16,45 -3,30 -6,70 -8,20 -64,44 -38,47 -2,13 -8,63 -40,24 -17,52 -2,12 -22,40 -24,58 -22,22 -34,36 -12,36 -24,2 -54,26 -2,36 -48,60 -20,47 -4,32 -30,16 -61,36 -70,9 -0,38 -59,56 -57,58 -50,12 -70,15 -37,14 -54,12 -0,63 -25,48 -23,64 -22,18 -42,30 -2,60 -68,47 -36,70 -28,22 -8,6 -36,8 -23,24 -33,32 -36,26 -25,50 -32,37 -46,4 -5,0 -41,0 -70,48 -67,60 -39,16 -8,57 -36,40 -60,10 -70,26 -6,66 -14,67 -14,14 -55,32 -67,38 -28,44 -8,50 -16,32 -70,67 -9,6 -64,18 -18,19 -51,52 -34,32 -11,48 -43,32 -18,56 -25,54 -32,8 -26,22 -45,30 -28,68 -60,60 -16,54 -26,16 -6,34 -48,19 -2,7 -48,52 -42,64 -53,14 -22,10 -14,10 -64,38 -5,48 -34,61 -60,45 -18,10 -36,30 -5,68 -66,14 -30,54 -64,68 -12,64 -37,22 -0,32 -65,30 -70,50 -50,32 -20,60 -6,40 -7,58 -10,60 -30,15 -56,22 -14,70 -8,28 -44,68 -16,53 -19,8 -51,70 -41,64 -47,32 -14,65 -56,48 -10,40 -68,70 -30,63 -64,14 -4,24 -16,16 -24,56 -69,68 -46,26 -48,11 -48,54 -12,66 -38,48 -43,46 -3,0 -55,48 -47,6 -4,41 -14,17 -36,36 -15,68 -32,39 -22,2 -46,70 -46,22 -2,37 -15,30 -60,29 -58,6 -19,64 -35,16 -43,8 -2,57 -54,42 -20,36 -59,12 -2,52 -65,22 -57,34 -26,4 -50,52 -6,15 -28,58 -8,38 -28,52 -21,0 -9,26 -45,70 -8,48 -4,34 -58,8 -4,56 -64,57 -36,52 -12,42 -62,43 -19,0 -2,46 -13,62 -47,36 -62,26 -34,63 -22,54 -7,32 -15,58 -30,66 -46,11 -26,66 -47,54 -68,4 -45,8 -60,0 -39,32 -44,26 -36,38 -49,2 -66,56 -2,33 -20,41 -60,28 -10,56 -5,12 -66,61 -2,44 -0,55 -35,40 -28,56 -64,39 -64,70 -70,13 -44,46 -2,34 -12,14 -2,53 -34,69 -3,70 -20,49 -60,58 -2,56 -36,11 -38,67 -48,35 -33,68 -30,60 -34,9 -70,12 -44,62 -54,68 -58,20 -38,30 -58,31 -56,26 -70,25 -53,2 -14,36 -49,38 -57,64 -5,36 -10,2 -46,67 -9,66 -24,66 -7,52 -56,20 -15,14 -17,18 -20,7 -50,2 -38,38 -65,44 -23,70 -22,42 -42,14 -35,44 -62,5 -46,49 -18,12 -10,30 -22,56 -15,46 -30,7 -48,44 -22,4 -66,24 -70,40 -54,52 -4,6 -51,10 -5,70 -40,38 -62,59 -23,26 -60,50 -13,54 -2,64 -56,17 -20,16 -56,46 -62,25 -30,46 -16,27 -68,27 -56,18 -12,52 -34,30 -58,5 -38,42 -0,67 -52,36 -13,34 -20,52 -37,70 -68,15 -11,64 -66,8 -18,66 -7,28 -26,48 -8,8 -16,2 -41,30 -37,60 -52,60 -40,52 -48,22 -61,64 -38,20 -36,44 -50,68 -30,43 -36,55 -69,40 -62,66 -66,58 -48,10 -3,40 -14,24 -0,5 -25,2 -36,53 -39,62 -68,63 -8,13 -61,32 -59,28 -60,26 -23,30 -66,66 -49,66 -60,24 -66,44 -10,12 -68,44 -36,60 -68,31 -38,18 -23,18 -66,33 -8,46 -28,41 -70,68 -34,1 -44,44 -10,35 -54,10 -64,67 -16,66 -50,61 -44,32 -26,10 -58,42 -62,49 -19,36 -23,14 -56,69 -18,70 -21,32 -16,48 -26,40 -23,0 -17,16 -33,56 -49,18 -42,45 -40,36 -34,52 -68,16 -0,60 -40,61 -20,5 -0,44 -30,33 -63,0 -18,18 -66,62 -66,16 -23,4 -55,40 -48,8 -68,28 -42,58 -42,31 -12,69 -0,9 -29,36 -70,0 -68,67 -2,8 -36,14 -68,55 -37,36 -56,64 -50,51 -36,17 -7,12 -64,35 -40,3 -56,56 -47,42 -11,36 -39,48 -60,68 -30,14 -48,67 -6,21 -36,66 -12,25 -34,34 -64,4 -43,16 -20,54 -68,1 -22,0 -57,62 -27,70 -44,10 -51,0 -31,54 -66,29 -61,50 -67,48 -38,2 -41,26 -2,3 -0,68 -26,28 -44,50 -9,10 -36,48 -35,18 -10,65 -36,61 -28,19 -46,37 -38,6 -52,50 -68,38 -55,26 -20,17 -70,10 -64,45 -57,44 -31,10 -28,25 diff --git a/src/bin/17.rs b/src/bin/17.rs deleted file mode 100644 index 41feadd..0000000 --- a/src/bin/17.rs +++ /dev/null @@ -1,166 +0,0 @@ -use rayon::prelude::*; - -fn combo_operand(operand: u8, a: u64, b: u64, c: u64) -> u64 { - match operand { - 0..4 => operand as u64, - 4 => a, - 5 => b, - 6 => c, - _ => unreachable!(), - } -} - -fn run_program(program: &[u8], mut a: u64, mut b: u64, mut c: u64) -> Vec { - let mut i = 0; - - let mut output = Vec::new(); - - while let Some((&opcode, &operand)) = program.get(i).zip(program.get(i + 1)) { - // dbg!(i, a, b, c, opcode, operand); - match opcode { - 0 => { - a = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - 1 => { - b ^= operand as u64; - i += 2; - } - 2 => { - b = combo_operand(operand, a, b, c) % 8; - i += 2 - } - 3 => { - if a != 0 { - i = operand as usize - } else { - i += 2; - } - } - 4 => { - b ^= c; - i += 2; - } - 5 => { - output.push((combo_operand(operand, a, b, c) % 8) as u8); - i += 2; - } - 6 => { - b = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - 7 => { - c = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - - _ => unreachable!(), - } - } - - output -} - -fn run_program_output(program: &[u8], mut a: u64, mut b: u64, mut c: u64) -> bool { - let mut i = 0; - - let mut o = 0; - - while let Some((&opcode, &operand)) = program.get(i).zip(program.get(i + 1)) { - // dbg!(i, a, b, c, opcode, operand); - match opcode { - 0 => { - a = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - 1 => { - b ^= operand as u64; - i += 2; - } - 2 => { - b = combo_operand(operand, a, b, c) % 8; - i += 2 - } - 3 => { - if a != 0 { - i = operand as usize - } else { - i += 2; - } - } - 4 => { - b ^= c; - i += 2; - } - 5 => { - if program.len() >= o && program[o] != (combo_operand(operand, a, b, c) % 8) as u8 { - return false; - } - o += 1; - i += 2; - } - 6 => { - b = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - 7 => { - c = a / (2u64.pow(combo_operand(operand, a, b, c) as u32)); - i += 2 - } - - _ => unreachable!(), - } - } - - o == program.len() -} - -fn main() { - let text = std::fs::read_to_string("input/17-1.in").unwrap(); - let mut lines = text.lines(); - let start_a = lines - .next() - .unwrap() - .split_once(": ") - .unwrap() - .1 - .parse::() - .unwrap(); - let start_b = lines - .next() - .unwrap() - .split_once(": ") - .unwrap() - .1 - .parse::() - .unwrap(); - let start_c = lines - .next() - .unwrap() - .split_once(": ") - .unwrap() - .1 - .parse::() - .unwrap(); - - let program = lines - .nth(1) - .unwrap() - .split_once(": ") - .unwrap() - .1 - .split(',') - .map(|c| c.parse::().unwrap()) - .collect::>(); - - println!("{:?}", run_program(&program, start_a, start_b, start_c)); - - let start = 1_000_000_000_000u64; - - let t = (start..start * 10) - .into_par_iter() - .find_first(|&i| run_program_output(&program, i, 0, 0)) - .unwrap(); - - println!("{t}"); -} diff --git a/src/bin/18.rs b/src/bin/18.rs deleted file mode 100644 index 9275418..0000000 --- a/src/bin/18.rs +++ /dev/null @@ -1,58 +0,0 @@ -use std::collections::{HashMap, HashSet, VecDeque}; - -static DIRECTIONS: [(isize, isize); 4] = [(0, -1), (1, 0), (0, 1), (-1, 0)]; - -fn dijkstra(map: &HashSet<(usize, usize)>, size: usize) -> Option { - let mut queue = VecDeque::new(); - - queue.push_back((0usize, 0usize, 0usize)); - - let mut visited = HashSet::new(); - - while let Some((cx, cy, steps)) = queue.pop_front() { - if cx == size - 1 && cy == size - 1 { - return Some(steps); - } - if visited.insert((cx, cy)) { - for (nx, ny) in DIRECTIONS.iter().filter_map(|&(dx, dy)| { - Option::zip( - cx.checked_add_signed(dx).filter(|&s| s < size), - cy.checked_add_signed(dy).filter(|&s| s < size), - ) - }) { - if !visited.contains(&(nx, ny)) && map.get(&(nx, ny)).is_none() { - queue.push_back((nx, ny, steps + 1)); - } - } - } - } - - None -} - -fn main() { - // let text = std::fs::read_to_string("input/18-0.in").unwrap(); - // let size = 7; - // let first = 12; - let text = std::fs::read_to_string("input/18-1.in").unwrap(); - let size = 71; - let first = 1024; - - let mut iter = text.lines().map(|l| { - let (x, y) = l.split_once(',').unwrap(); - (x.parse::().unwrap(), y.parse::().unwrap()) - }); - - let mut map = iter.by_ref().take(first).collect::>(); - - let t = dijkstra(&map, size); - println!("{t:?}"); - - for d in iter { - map.insert(d); - if dijkstra(&map, size).is_none() { - println!("{d:?}"); - break; - } - } -}