diff options
author | jacopograndi <jacopo.grandi@outlook.it> | 2022-02-27 13:34:33 +0100 |
---|---|---|
committer | jacopograndi <jacopo.grandi@outlook.it> | 2022-02-27 13:34:33 +0100 |
commit | 629a630b2d8a02a6c9aff2e7c8c61a6e55da2b32 (patch) | |
tree | b230dff4ecc3882974952e3b42cabaed242e750d /2021/day24/notes_prog.txt | |
parent | 923918a20efb15c9314bf5c621fe8744e3377a58 (diff) |
day24
Diffstat (limited to '2021/day24/notes_prog.txt')
-rw-r--r-- | 2021/day24/notes_prog.txt | 490 |
1 files changed, 490 insertions, 0 deletions
diff --git a/2021/day24/notes_prog.txt b/2021/day24/notes_prog.txt new file mode 100644 index 0000000..4658479 --- /dev/null +++ b/2021/day24/notes_prog.txt @@ -0,0 +1,490 @@ +just a repeated routine, except for an immediate add to x: magic + +{wrong} +hidden rules: +if curr[n]%26 + magic[n] == i[n]: curr[n] = 0 +curr[n] = (curr[n]*26) + (i[n]+8) + +requirement: +curr[last] = 0 + +// evidence +99998499593576 z[14] = 455 +99998499594676 z[14] = 455 +99998499595776 z[14] = 455 +99998499596876 z[14] = 455 +99998499597976 z[14] = 455 + +99998422592476 z[14] = 13 +89998422592476 z[14] = 13 +98998422592466 z[14] = 13 +99987422592476 z[14] = 13 +69998422592476 z[14] = 13 + +59998426997979 z[14] = 0 +49998426997978 z[14] = 0 +39998426997977 z[14] = 0 + +// evidence smaller +51112188486865 352 +11112111481316 6461 +11114332481315 248 +11113232481315 248 +11114332481315 248 + +fairy = 1, 1, 1, 1, 26, 26, 1, 1, 26, 26, 1, 26, 26, 26 +magic = 13, 12, 12, 10, -11, -13, 15, 10, -2, -6, 14, 0, -15, -4 +witch = 8, 13, 8, 10, 12, 1, 13, 5, 10, 3, 2, 2, 12, 7 + +w = in[n] +x *= 0 +x += z +x %= 26 +z /= fairy[n] +x += magic[n] +x = x==w ? 1 : 0 +x = x==0 ? 1 : 0 +y = 25 +y *= x +y ++ +z *= y +y = w+witch[n] +y *= x +z += y + +// procedure: +w = in[n] +x = z%26 + magic[n] +z /= fairy[n] +y = 25 +if x == w: + z not modified +else: + y = 26 + z *= 26 + z += in[n] + witch[n] + +// working forwards + +n = 0 +x = 13 +z = 9..17 + +n = 1 +x = 9..17 + 12 +z = (9..17)*26 + 14..22 + +n = 2 +x = z%26 + 12 +z = z*26 + 9..17 + = ((9..17)*26 + 14..22)*26 + 9..17 + +n = 3 +x = z%26 + 10 +z = z*26 + 11..19 + = (((9..17)*26 + 14..22)*26 + 9..17)*26 + 11..19 + +n = 4 +x = z%26 - 11 = 11..19 - 11 => 0..8 +z /= 26 => z = + = ((9..17)*26 + 14..22)*26 + 9..17 +if 1..9 != 0..8: + in[4] = 9 + z = (z*26 + 21) + = (((9..17)*26 + 14..22)*26 + 9..17)*26 + 21 +else: + in[4] = 1..8 + z = ((9..17)*26 + 14..22)*26 + 9..17 + +n = 5 +case in[4] == 1..8: +x = z%26 - 13 = 9..17 - 13 = -4..4 +z /= 26 => z = (9..17)*26 + 14..22 +if 1..9 != -4..4: + in[5] = 5..9 + z = z*26 + 5..9 + 1 + = ((9..17)*26 + 14..22)*26 + 6..10 +else: + in[5] = 1..4 + z = (9..17)*26 + 14..22 +case in[4] == 9: +x = z%26 - 13 = 21 - 13 = 8 +z /= 26 => z = ((9..17)*26 + 14..22)*26 + 9..17 +if 1..9 != 8: + in[5] = 1..7,9 + z = z*26 + 1..7,9 + 1 + = (((9..17)*26 + 14..22)*26 + 9..17)*26 + 2..8,10 +else: + in[5] = 8 + z = ((9..17)*26 + 14..22)*26 + 9 + +n = 6 +case in[4] == 1..8: +case in[5] == 5..9: + +case in[5] == 1..4: + +case in[4] == 9: +case in[5] == 1..7,9: +z = (((9..17)*26 + 14..22)*26 + 9..17)*26 + 2..8,10 +x = z%26 + 15 = 2..8,10 + 15 > 9 +z = z*26 + 1..9 + 13 = + = ((((9..17)*26 + 14..22)*26 + 9..17)*26 + 2..8,10)*26 + 14..22 +z is too big, further down it cant be divided enough to be 0 +case in[5] == 8: + +// procedure: +w = in[n] +x = z%26 + magic[n] +z /= fairy[n] +y = 25 +if x == w: + z not modified +else: + y = 26 + z *= 26 + z += in[n] + witch[n] + +// working backwards + +n = 9 +x = z%26 -6 +z = z/26 +if in[n] != x: + z = (z*26 + 3 + in[n]) + + at the end z in R[10] + if x == in[n] => z%26-6 == 1..9 + => z%26 = 7..15 + => S[9] = (j*26+7..15 | j in R[10]) + else + at the end z is a multiple of 26 + 3..12 + => T[9] = (j+3..12 | j%26 != 7..15, j in R[10]) + R[9] = S[9] + T[9] + +n = 10 +x = z%26 + 14 +if in[n] != x: + z = (z*26 + 2 + in[n]) + + at the end z in R[11] + if x == in[n] => z%26+14 == 1..9 + z%26 == 15..23 + but every j in R[11], j%26 = 1..9, impossible + else + => z%26 = 0..14 u 24..25 + => z = z*26 + 3..11, in R[11] if 3..9 + => z = z*26 + 3..9 + => R[10] = { j | j%26 != 15..23, j*26+3..9 in R[11] } + +n = 11 +x = z%26 +z = z/26 +if in[n] != x: + z = (z*26) + 2 + in[n] + + at the end z=0 or (z=4*26..14*26, z%26=16..24) = R[12] + at the start z=0 -> z = 2+in[n] == 0 impossible + if x == in[n] => z%26 == in[n] + => at the end z in R[12] + => in[n] = z%26 + => z%26 = 1..9 + => z = (j+i..9 | j in R[12]*26) = R[11] + else + z is a multiple of 26 + 3..11 and z in R[12] + but every j in R[12] j%26=16..24 so z not in R[12] + +n = 12 +x = -15 + z%26 +z = z / 26 +if in[n] != x: + z = (z*26) + 7 + in[n] + + at the end z is in 4..14 + at the start either z = 0 -> z=7+in[n] -> in[n] = 1..7 + or z in 5*26..14*26 and z%26-15 == in[n] + so in[n] = 1..9 + so z%26 = 16..24, z=5*26..14*26 + len(R[12]) = 90 + +n = 13 +x = -4 + z%26 +z = z / 26 +if in[n] != x: + z = (z*26) + 7 + in[n] + + at the end z has to be 0 + so at the start z < 26, z-4>0, z-4<10 + so z < 26, z>4, z<14 + so in[n] = 1..9 + +n = 14 +z = 0 + + + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 13 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 8 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 12 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 12 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 8 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 10 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -13 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 1 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 10 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 5 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -2 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -6 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 3 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 2 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x 0 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 2 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -15 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -4 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 7 +mul y x +add z y |