heh
| -rw-r--r-- | src/inp.txt | 4312 | ||||
| -rw-r--r-- | src/main.rs | 215 |
2 files changed, 4028 insertions, 499 deletions
diff --git a/src/inp.txt b/src/inp.txt index 573622c..81e8e83 100644 --- a/src/inp.txt +++ b/src/inp.txt @@ -1,313 +1,3999 @@ -x00: 1 -x01: 0 -x02: 0 -x03: 1 -x04: 1 -x05: 1 -x06: 0 -x07: 0 -x08: 0 -x09: 1 -x10: 0 -x11: 0 -x12: 0 -x13: 0 -x14: 0 -x15: 1 -x16: 1 -x17: 0 -x18: 1 -x19: 0 -x20: 0 -x21: 0 -x22: 0 -x23: 1 -x24: 1 -x25: 0 -x26: 0 -x27: 0 -x28: 1 -x29: 0 -x30: 1 -x31: 0 -x32: 0 -x33: 0 -x34: 1 -x35: 1 -x36: 1 -x37: 0 -x38: 1 -x39: 1 -x40: 0 -x41: 0 -x42: 0 -x43: 1 -x44: 1 -y00: 1 -y01: 1 -y02: 1 -y03: 1 -y04: 0 -y05: 1 -y06: 0 -y07: 1 -y08: 0 -y09: 1 -y10: 1 -y11: 1 -y12: 1 -y13: 1 -y14: 1 -y15: 0 -y16: 0 -y17: 0 -y18: 1 -y19: 1 -y20: 1 -y21: 1 -y22: 1 -y23: 1 -y24: 0 -y25: 1 -y26: 1 -y27: 0 -y28: 1 -y29: 0 -y30: 1 -y31: 0 -y32: 1 -y33: 0 -y34: 1 -y35: 1 -y36: 0 -y37: 1 -y38: 0 -y39: 0 -y40: 0 -y41: 0 -y42: 0 -y43: 0 -y44: 1 - -rds AND wpc -> cmj -vbn XOR mkk -> z13 -y04 AND x04 -> bbw -ftn OR swv -> bmw -dkj AND gqs -> vbm -x38 XOR y38 -> bhv -jhh XOR vws -> z04 -y38 AND x38 -> tbv -whm AND rbn -> tpt -fkf XOR whs -> z31 -x37 XOR y37 -> bmt -y43 AND x43 -> jbc -qkj XOR fdg -> z15 -tsq XOR pmr -> z21 -x11 XOR y11 -> jtg -x35 XOR y35 -> hqk -whs AND fkf -> vpr -y16 XOR x16 -> sbt -y15 AND x15 -> gmt -tdp AND qqs -> sph -bsn OR bdc -> mkk -y12 AND x12 -> bdc -qmj OR rmv -> tdp -fdg AND qkj -> fjw -wfd XOR cwj -> z36 -rgm OR vgp -> cvt -vws AND jhh -> shg -qgd OR ggn -> cvr -x28 AND y28 -> rtf -y42 XOR x42 -> jgh -jsv OR kbr -> cwj -hdp OR rtr -> gms -gdm OR kqg -> wpc -x00 XOR y00 -> z00 -x17 AND y17 -> qqc -hrt AND sbt -> dfq -y07 AND x07 -> nsg -y18 AND x18 -> z18 -mjm AND njj -> bch -y39 AND x39 -> qnt -x16 AND y16 -> hsb -grq XOR vfq -> z28 -rbn XOR whm -> z40 -x25 AND y25 -> rwp -x41 AND y41 -> hdp -x42 AND y42 -> ftn -rcm AND rhd -> qvh -wsq XOR cvr -> z19 -rwp OR bvm -> gdq -kgd OR kqf -> z10 -x40 AND y40 -> gkj -x09 XOR y09 -> rds -jhm AND fqt -> rtr -y07 XOR x07 -> jfr -x35 AND y35 -> kbr -sqr XOR mwq -> mwk -hmc AND brk -> pjk -y23 XOR x23 -> gwq -tdd OR nsg -> cct -y14 XOR x14 -> njj -wtm XOR phh -> z06 -wws AND cdh -> dff -thq XOR mfd -> z17 -y13 XOR x13 -> vbn -y24 XOR x24 -> hsw -x12 XOR y12 -> jnk -vvj OR hph -> jsp -swf XOR hqk -> z35 -jjg OR pjp -> tqk -vbm OR wss -> whs -x22 XOR y22 -> kdn -y11 AND x11 -> pjp -x08 XOR y08 -> cjn -std XOR jfr -> z07 -tjj OR vpp -> jhh -pjk OR vpj -> rhd -vkd XOR vtd -> z34 -cjn AND cct -> kqg -hnw OR nth -> phh -x30 AND y30 -> wss -ptr OR dnq -> wrn -wfd AND cwj -> vvj -wpd AND ndm -> jcq -jmh XOR mrs -> z24 -x29 XOR y29 -> wws -x33 AND y33 -> wvp -y02 AND x02 -> wwc -nfh XOR nqq -> qgd -y30 XOR x30 -> gqs -jcq OR qnt -> rbn -wws XOR cdh -> z29 -bmn OR cmj -> mwq -y06 AND x06 -> mgc -wkt OR ddd -> swf -phh AND wtm -> cjd -wvp OR gqp -> vtd -jhm XOR fqt -> z41 -x20 XOR y20 -> vcn -gms AND jgh -> swv -y23 AND x23 -> sdd -ndb OR qqc -> nfh -png XOR gdq -> z26 -nfh AND nqq -> ggn -x40 XOR y40 -> whm -y33 XOR x33 -> wwp -sph OR hpb -> vfq -vjs OR sfm -> cpv -y43 XOR x43 -> bng -cct XOR cjn -> z08 -jmh AND mrs -> bmv -x01 XOR y01 -> brk -tsq AND pmr -> vjs -cwt AND mcd -> pcq -jfr AND std -> tdd -sbt XOR hrt -> z16 -y20 AND x20 -> twp -y05 AND x05 -> hnw -y27 XOR x27 -> qqs -bmv OR hsw -> mtn -y10 XOR x10 -> sqr -bmt XOR jsp -> z37 -sdd OR hcp -> mrs -shg OR bbw -> ckj -y04 XOR x04 -> vws -jsp AND bmt -> mwp -png AND gdq -> rmv -mwk XOR jtg -> z11 -twp OR rqv -> tsq -x19 AND y19 -> dtr -x18 XOR y18 -> nqq -wpc XOR rds -> z09 -kdn XOR cpv -> z22 -x31 AND y31 -> vjp -rtf OR cbh -> cdh -dkj XOR gqs -> z30 -y34 XOR x34 -> vkd -mgc OR cjd -> std -tff AND mtn -> bvm -gwq AND wrn -> hcp -vcn AND spr -> rqv -y44 XOR x44 -> mcd -y01 AND x01 -> vpj -vbn AND mkk -> tsd -tqk AND jnk -> bsn -x27 AND y27 -> hpb -bhv AND kqb -> nrc -spr XOR vcn -> z20 -ckj XOR tbw -> z05 -y22 AND x22 -> ptr -ckj AND tbw -> nth -cpv AND kdn -> dnq -fjw OR gmt -> hrt -qvh OR wwc -> sgb -gwq XOR wrn -> z23 -jgh XOR gms -> z42 -y32 AND x32 -> vgp -mwq AND sqr -> kgd -gkj OR tpt -> fqt -x34 AND y34 -> wkt -x14 AND y14 -> pwr -y31 XOR x31 -> fkf -mwk AND jtg -> jjg -y05 XOR x05 -> tbw -pwr OR bch -> fdg -x21 AND y21 -> sfm -vfq AND grq -> cbh -x41 XOR y41 -> jhm -y36 XOR x36 -> wfd -mcr AND bgf -> rgm -psb XOR sgb -> z03 -bmw AND bng -> trs -x02 XOR y02 -> rcm -jnk XOR tqk -> z12 -dfq OR hsb -> mfd -vtd AND vkd -> ddd -bhv XOR kqb -> z38 -y37 AND x37 -> ftj -fmp OR pcq -> z45 -brk XOR hmc -> z01 -dff OR hcb -> dkj -cvt AND wwp -> z33 -x13 AND y13 -> vwv -qqs XOR tdp -> z27 -x26 XOR y26 -> png -x15 XOR y15 -> qkj -x17 XOR y17 -> thq -trs OR jbc -> cwt -y36 AND x36 -> hph -x10 AND y10 -> kqf -x06 XOR y06 -> wtm -x32 XOR y32 -> mcr -mtn XOR tff -> z25 -y28 XOR x28 -> grq -mwp OR ftj -> kqb -x03 XOR y03 -> psb -x25 XOR y25 -> tff -njj XOR mjm -> z14 -y03 AND x03 -> vpp -x00 AND y00 -> hmc -mfd AND thq -> ndb -x26 AND y26 -> qmj -x29 AND y29 -> hcb -y19 XOR x19 -> wsq -bgf XOR mcr -> z32 -vpr OR vjp -> bgf -rhd XOR rcm -> z02 -bmw XOR bng -> z43 -nrc OR tbv -> ndm -y24 AND x24 -> jmh -x44 AND y44 -> fmp -wwp XOR cvt -> gqp -cvr AND wsq -> ghw -x39 XOR y39 -> wpd -x09 AND y09 -> bmn -hqk AND swf -> jsv -y08 AND x08 -> gdm -sgb AND psb -> tjj -vwv OR tsd -> mjm -y21 XOR x21 -> pmr -cwt XOR mcd -> z44 -ghw OR dtr -> spr -wpd XOR ndm -> z39 +##### +#.##. +#.##. +#..#. +#..#. +...#. +..... + +##### +##### +##.## +.#.## +...## +....# +..... + +##### +##### +.##.# +.##.# +.##.# +.#..# +..... + +##### +###.# +###.# +.##.. +.#... +.#... +..... + +..... +..#.# +..#.# +#.#.# +#.#.# +##### +##### + +##### +##### +.#### +..### +...## +...#. +..... + +##### +.##.# +.##.# +.#..# +.#..# +....# +..... + +##### +##### +####. +#.##. +..#.. +..... +..... + +##### +#.##. +#.##. +#.##. +#..#. +...#. +..... + +..... +..#.# +..#.# +..#.# +#.### +#.### +##### + +..... +..... +...#. +.#.## +##.## +##### +##### + +##### +##.## +##.## +#..## +#...# +#...# +..... + +..... +..... +..... +..#.. +..#.. +#.#.# +##### + +##### +#.### +#.### +#.##. +..#.. +..... +..... + +..... +..#.. +..##. +..##. +.###. +.#### +##### + +##### +#.### +..### +..##. +..#.. +..... +..... + +..... +..#.. +#.##. +#.##. +##### +##### +##### + +##### +#.### +#.### +#.### +...## +...#. +..... + +..... +#..#. +#..#. +#..#. +##.#. +##.## +##### + +##### +##### +##### +.#### +.#### +.#.#. +..... + +##### +#.### +..#.# +..#.# +..#.# +..#.# +..... + +##### +.#### +.#### +.###. +.###. +.#.#. +..... + +##### +###.# +###.. +##... +##... +.#... +..... + +..... +..... +...#. +.#.#. +.#.#. +##### +##### + +##### +##.#. +##.#. +##... +.#... +..... +..... + +##### +###.# +###.# +###.. +.#... +..... +..... + +..... +..... +..... +..... +.#... +.##.# +##### + +..... +#.#.. +#.#.. +####. +##### +##### +##### + +##### +#.### +#.### +#.##. +#.#.. +..#.. +..... + +..... +...#. +...#. +#..#. +#.### +#.### +##### + +..... +..... +..#.. +#.#.. +#.#.. +#.#.# +##### + +##### +##### +##.## +##.#. +#..#. +#..#. +..... + +##### +##.#. +.#... +.#... +.#... +..... +..... + +##### +.#.#. +...#. +...#. +...#. +..... +..... + +..... +..... +.#... +##.#. +##.#. +##.#. +##### + +..... +.#... +.#..# +.#..# +###.# +###.# +##### + +##### +###.# +###.# +#.#.# +..#.# +..... +..... + +..... +..... +..... +#.... +#.#.. +#.#.# +##### + +##### +###.# +###.# +#.#.# +..#.# +..#.# +..... + +##### +##### +##### +#.### +#.#.# +#...# +..... + +..... +..... +..... +..#.. +..#.# +#.### +##### + +##### +#.### +#.### +#.##. +#.#.. +..... +..... + +##### +###.# +.##.# +.##.# +.##.# +..#.# +..... + +..... +..... +..... +..... +.#.#. +.#.## +##### + +..... +..#.. +#.#.. +#.#.. +#.#.. +###.# +##### + +..... +....# +....# +.#..# +.##.# +.#### +##### + +##### +#.### +#.### +#..## +#..## +....# +..... + +##### +.#.## +.#.#. +.#.#. +...#. +...#. +..... + +##### +.##.# +.##.# +..#.# +..#.# +..#.. +..... + +..... +..... +.#.#. +.#.#. +##.## +##### +##### + +..... +...#. +.#.## +.#.## +.#.## +.#.## +##### + +##### +##### +###.# +##... +.#... +..... +..... + +##### +####. +#.##. +#.##. +#.#.. +#.#.. +..... + +##### +##.#. +##.#. +.#.#. +.#.#. +.#... +..... + +##### +##.## +##.## +##.## +.#..# +..... +..... + +..... +.#.#. +##.#. +##.#. +##.#. +##### +##### + +..... +..#.# +..#.# +..#.# +#.### +##### +##### + +..... +#.... +##... +###.# +###.# +##### +##### + +##### +#.##. +..##. +...#. +..... +..... +..... + +##### +##.## +#..#. +#..#. +#..#. +#.... +..... + +##### +#.### +#.### +..#.# +..#.. +..... +..... + +..... +...#. +..### +..### +..### +#.### +##### + +##### +##### +#.### +#..## +#..#. +...#. +..... + +##### +.#### +.#### +.#### +..### +..#.# +..... + +##### +.#### +..### +...#. +..... +..... +..... + +##### +#.### +#.### +#.### +..#.# +..... +..... + +##### +##### +###.# +#.#.# +..#.. +..#.. +..... + +##### +##### +##### +#.#.# +#.#.. +#.... +..... + +##### +##### +.##.# +.#... +.#... +..... +..... + +..... +..#.. +..#.. +#.#.. +###.. +####. +##### + +..... +..... +..... +...#. +#.##. +#.##. +##### + +##### +###.# +.#..# +.#..# +....# +..... +..... + +..... +.#.#. +.#.#. +####. +####. +####. +##### + +##### +####. +###.. +###.. +##... +.#... +..... + +..... +..... +.#... +.#..# +##.## +##### +##### + +##### +##### +##### +##### +###.# +#.#.. +..... + +##### +####. +.##.. +.##.. +.#... +.#... +..... + +##### +#.##. +..##. +..##. +..#.. +..#.. +..... + +..... +..... +.#... +.#..# +##..# +###.# +##### + +..... +..... +..#.# +..#.# +#.### +##### +##### + +..... +..... +#..#. +#..#. +#..## +##.## +##### + +##### +##### +.#### +.#.#. +.#... +..... +..... + +##### +###.# +##..# +##..# +##... +.#... +..... + +..... +..#.. +.##.# +.##.# +.##.# +.##.# +##### + +##### +##.## +##.#. +##.#. +.#... +..... +..... + +..... +.#... +.#..# +.#.## +##.## +##### +##### + +##### +####. +####. +####. +##.#. +.#.#. +..... + +##### +##### +##### +.#### +.###. +..#.. +..... + +..... +..... +.#..# +.#..# +##..# +##.## +##### + +..... +.#... +.#... +###.# +##### +##### +##### + +##### +.#### +.###. +.###. +.#.#. +...#. +..... + +..... +..... +...#. +.#.#. +.#.#. +##.## +##### + +##### +##### +#.##. +...#. +..... +..... +..... + +..... +..#.. +.###. +.#### +.#### +.#### +##### + +##### +#.##. +#.##. +#.#.. +..... +..... +..... + +##### +##### +##### +##.#. +.#.#. +..... +..... + +##### +#.### +#..## +...## +...## +...#. +..... + +..... +...#. +...#. +..### +#.### +##### +##### + +##### +##.## +##.## +##.## +##.## +#..#. +..... + +..... +..... +#.#.. +#.##. +#.### +##### +##### + +..... +..... +#.... +#...# +#...# +#.#.# +##### + +##### +##### +####. +###.. +.#... +..... +..... + +##### +#.### +#.### +#.### +...## +....# +..... + +..... +.#..# +.#..# +.#..# +.##.# +##### +##### + +##### +##### +.#.#. +...#. +..... +..... +..... + +##### +##### +###.# +###.# +#.#.# +....# +..... + +##### +#.### +#.### +#.### +#.#.# +#.#.. +..... + +##### +#.### +#.### +#.#.# +#.#.# +..#.# +..... + +..... +..... +....# +.#..# +.#.## +##### +##### + +##### +##### +##### +.##.# +..#.# +..... +..... + +##### +.#.## +.#.## +....# +..... +..... +..... + +..... +....# +..#.# +.##.# +##### +##### +##### + +##### +##### +###.# +#.#.# +#.#.# +#.... +..... + +##### +##### +.#### +.##.# +..#.# +..#.. +..... + +..... +#.... +#.... +#..#. +#..#. +##.#. +##### + +..... +..... +...#. +...#. +.#.#. +.#### +##### + +..... +..... +#..#. +#..#. +#.##. +#.##. +##### + +..... +..... +..#.. +..#.. +..#.. +.##.# +##### + +..... +#.#.. +#.#.. +####. +####. +##### +##### + +..... +..... +...#. +.#.## +##.## +##.## +##### + +##### +##### +#.#.# +#.#.# +#.#.# +..... +..... + +..... +....# +#.#.# +#.#.# +#.#.# +#.### +##### + +##### +.#### +..### +..### +...## +...#. +..... + +..... +.#... +.#... +.#..# +##..# +###.# +##### + +..... +.#... +.##.. +.##.. +###.. +###.# +##### + +..... +.#.#. +##.#. +##.#. +####. +##### +##### + +..... +.#... +.#... +.#..# +##..# +##.## +##### + +##### +##.#. +##.#. +##... +.#... +.#... +..... + +##### +##### +.#.## +.#..# +.#..# +..... +..... + +..... +....# +..#.# +.##.# +.##.# +###.# +##### + +##### +.#.## +...## +....# +..... +..... +..... + +##### +##.## +#...# +#.... +#.... +..... +..... + +..... +..... +.#... +.#.#. +.#.## +.#### +##### + +##### +.#### +.#.## +.#.## +....# +....# +..... + +..... +....# +..#.# +#.#.# +#.#.# +###.# +##### + +..... +.#... +.#..# +###.# +##### +##### +##### + +##### +###.# +#.#.. +#.#.. +#.#.. +..#.. +..... + +##### +#.### +#.### +#.##. +#.##. +...#. +..... + +##### +##### +###.# +###.# +#.#.# +..... +..... + +##### +##### +##### +##### +##.#. +.#... +..... + +..... +...#. +#.##. +#.### +#.### +#.### +##### + +##### +#.### +#.### +#.### +#.### +#.#.# +..... + +##### +.###. +.##.. +.#... +.#... +..... +..... + +##### +##.#. +##.#. +##.#. +.#... +.#... +..... + +..... +#..#. +#..#. +##.#. +##.#. +####. +##### + +..... +.#... +.##.. +.###. +.###. +####. +##### + +##### +###.# +###.. +.##.. +..#.. +..... +..... + +..... +...#. +...#. +...#. +.#.#. +.###. +##### + +##### +##### +##.## +##.## +##.#. +#.... +..... + +..... +#.#.. +#.#.# +##### +##### +##### +##### + +..... +.#.#. +##.#. +##.## +##.## +##.## +##### + +..... +.#... +##..# +###.# +##### +##### +##### + +..... +....# +.#..# +.##.# +.#### +##### +##### + +##### +###.# +#.#.. +..#.. +..... +..... +..... + +..... +...#. +.#.## +.#.## +.#### +##### +##### + +..... +..... +#.... +#.#.. +#.#.# +#.### +##### + +##### +##### +##.#. +##.#. +##.#. +#.... +..... + +..... +..... +..#.. +..##. +.#### +.#### +##### + +..... +.#... +.##.. +.##.. +.##.. +.###. +##### + +..... +...#. +.#.## +.#.## +##### +##### +##### + +##### +###.# +.##.# +..#.# +....# +....# +..... + +..... +..... +.#... +.#..# +.#..# +##.## +##### + +..... +#.... +#...# +#.#.# +#.#.# +###.# +##### + +..... +#.... +#.... +#...# +#.#.# +#.#.# +##### + +..... +#..#. +#..#. +#.### +#.### +#.### +##### + +..... +#.#.. +#.#.# +#.#.# +#.### +##### +##### + +..... +..... +....# +....# +..#.# +#.#.# +##### + +..... +..... +#.... +#..#. +#..## +#.### +##### + +##### +####. +##.#. +#..#. +#..#. +..... +..... + +..... +..... +..... +....# +....# +.#.## +##### + +##### +.#.## +.#.## +.#.#. +.#.#. +..... +..... + +##### +##### +###.# +#.#.# +#.#.# +..... +..... + +..... +..... +..... +.#... +.#.#. +##.## +##### + +..... +....# +#...# +#...# +##.## +##.## +##### + +##### +##### +.#.#. +.#.#. +.#.#. +..... +..... + +..... +#.#.. +#.#.# +###.# +###.# +###.# +##### + +..... +..... +.#... +##... +###.. +###.# +##### + +##### +####. +##.#. +.#.#. +..... +..... +..... + +..... +..... +..#.. +..#.# +..#.# +.#### +##### + +##### +##### +##### +#.##. +#..#. +...#. +..... + +..... +..... +#.... +##... +##..# +###.# +##### + +##### +##### +###.# +##..# +##..# +.#..# +..... + +..... +.#... +##..# +###.# +###.# +###.# +##### + +..... +#.#.# +#.### +#.### +#.### +##### +##### + +..... +#..#. +#.### +#.### +#.### +#.### +##### + +..... +..#.. +..#.# +..#.# +..#.# +#.#.# +##### + +##### +##.## +##..# +##..# +#.... +..... +..... + +##### +##### +##.#. +##.#. +.#... +.#... +..... + +..... +..... +....# +..#.# +#.#.# +##### +##### + +##### +#.### +#.##. +...#. +..... +..... +..... + +..... +..... +...#. +..##. +#.##. +#.##. +##### + +..... +..... +..#.. +..#.. +.###. +.#### +##### + +..... +..... +..#.. +..#.# +#.### +#.### +##### + +..... +#.... +#.... +##.#. +##.#. +##### +##### + +..... +.#... +.#... +.#... +.##.. +.##.# +##### + +##### +##### +.#.## +.#.#. +.#... +..... +..... + +..... +....# +#..## +#..## +#..## +#.### +##### + +..... +...#. +...#. +...## +#..## +##.## +##### + +##### +##### +##.## +##.#. +#.... +..... +..... + +..... +...#. +..##. +..##. +.#### +.#### +##### + +..... +..... +.#... +.#... +.#.#. +.#.## +##### + +..... +..... +#.... +#.... +#.#.# +#.### +##### + +..... +..... +#.#.. +#.#.. +#.#.. +###.# +##### + +##### +##.## +##.## +##.#. +#.... +..... +..... + +..... +..... +#...# +#...# +##.## +##.## +##### + +##### +.##.# +.##.. +..#.. +..#.. +..#.. +..... + +..... +..... +.#... +.#..# +.#.## +##.## +##### + +##### +#.### +..### +...## +....# +....# +..... + +##### +####. +#.##. +#..#. +#.... +..... +..... + +##### +#.#.# +#...# +....# +....# +....# +..... + +..... +....# +.#..# +##.## +##.## +##.## +##### + +..... +.#..# +.#..# +.#.## +.#### +.#### +##### + +..... +#.... +#.... +##... +###.. +###.# +##### + +##### +##### +.##.# +.##.# +.#..# +.#..# +..... + +..... +..... +..... +.#..# +.#.## +.#.## +##### + +..... +..... +#.... +#...# +##.## +##### +##### + +##### +##### +##### +####. +###.. +.#... +..... + +..... +..... +.#... +###.. +###.# +###.# +##### + +##### +###.# +###.# +##..# +##... +#.... +..... + +..... +...#. +#..#. +#..#. +##.#. +##.#. +##### + +..... +..... +#..#. +##.#. +##.## +##.## +##### + +..... +..... +#..#. +#.### +##### +##### +##### + +##### +#.### +#.### +..### +...## +...#. +..... + +##### +####. +.###. +.##.. +.##.. +.#... +..... + +..... +..... +..#.. +..#.. +..#.# +.#### +##### + +##### +##### +.#### +.#### +..##. +...#. +..... + +##### +##### +.#.## +.#.## +.#.#. +.#... +..... + +..... +..... +.#... +.#.#. +##.#. +####. +##### + +##### +.###. +.#.#. +.#.#. +.#.#. +.#... +..... + +##### +##### +.#### +..#.# +..#.# +....# +..... + +##### +#.### +#.### +#.##. +...#. +...#. +..... + +..... +.#... +.##.. +.##.. +.###. +####. +##### + +##### +#.### +#..## +#...# +#...# +#.... +..... + +..... +#..#. +#..#. +##.#. +####. +####. +##### + +##### +##### +#.### +#.##. +#.#.. +..#.. +..... + +..... +..... +..#.. +.##.. +.##.. +####. +##### + +##### +###.# +.#..# +.#..# +.#... +.#... +..... + +##### +.#### +.#.## +.#.## +.#.## +....# +..... + +..... +..... +..#.. +#.##. +#.##. +#.##. +##### + +##### +.#### +.###. +.#.#. +.#... +.#... +..... + +..... +..#.. +..##. +.###. +####. +##### +##### + +..... +..#.. +..#.. +..##. +#.##. +##### +##### + +..... +..... +#.... +#.#.. +###.# +###.# +##### + +##### +#.### +#.#.# +#.#.# +..#.. +..... +..... + +##### +.#### +.##.# +.#... +.#... +.#... +..... + +..... +..... +..... +..#.# +.##.# +.#### +##### + +##### +##### +##### +##### +####. +#.#.. +..... + +..... +...#. +...#. +...#. +#.### +##### +##### + +..... +...#. +...#. +.#.#. +####. +##### +##### + +..... +....# +.#.## +##.## +##### +##### +##### + +##### +#.### +..### +..#.# +..#.# +..#.# +..... + +..... +.#... +.#... +.#... +##.#. +####. +##### + +..... +#..#. +#..#. +##.## +##.## +##.## +##### + +..... +.#... +.#... +.#.#. +.#.#. +####. +##### + +##### +##### +##### +###.# +.##.# +..#.. +..... + +##### +##### +#.### +#..## +#..## +....# +..... + +..... +#.#.. +###.# +###.# +###.# +##### +##### + +..... +...#. +.#.#. +.#.#. +####. +####. +##### + +..... +#.... +#..#. +#..#. +#..#. +##.#. +##### + +..... +.#... +.##.. +.##.. +.###. +.#### +##### + +..... +..... +#...# +#.#.# +#.#.# +##### +##### + +##### +#.### +#.### +#.##. +..##. +...#. +..... + +..... +.#... +##.#. +##.#. +##.#. +##.#. +##### + +..... +..... +..... +..#.# +#.#.# +##### +##### + +##### +##.## +##..# +#...# +..... +..... +..... + +##### +##### +.#### +..##. +..##. +..#.. +..... + +##### +##### +##### +#.##. +#.##. +..#.. +..... + +##### +##### +.#### +.#.## +.#.## +...#. +..... + +..... +...#. +#.##. +#.##. +##### +##### +##### + +##### +##### +##### +#.##. +#.#.. +#.... +..... + +..... +.#... +.#..# +.#.## +##### +##### +##### + +..... +..... +....# +.#.## +.#.## +.#.## +##### + +..... +.#... +##..# +##..# +##.## +##.## +##### + +..... +..... +#.... +#..#. +##.#. +##### +##### + +##### +##.#. +##... +##... +#.... +#.... +..... + +##### +##### +##.#. +##.#. +##.#. +.#.#. +..... + +..... +..... +...#. +...#. +#..#. +##.## +##### + +..... +..... +#..#. +#..#. +#.##. +#.### +##### + +##### +##.## +.#..# +....# +..... +..... +..... + +##### +##### +###.# +#.#.# +#.#.. +#.... +..... + +..... +#.... +#...# +##.## +##### +##### +##### + +##### +####. +#.##. +...#. +...#. +..... +..... + +##### +###.# +###.# +#.#.# +#.#.. +#.#.. +..... + +##### +##### +###.# +###.# +#.#.# +#...# +..... + +..... +...#. +...#. +.#.#. +.###. +.###. +##### + +##### +#.##. +#.##. +..#.. +..#.. +..#.. +..... + +##### +###.# +.#..# +.#... +.#... +..... +..... + +##### +##### +##### +##.## +#..#. +#.... +..... + +..... +..... +..#.. +.###. +.###. +####. +##### + +..... +.#... +.#... +##..# +##.## +##### +##### + +..... +....# +#...# +#..## +#.### +#.### +##### + +##### +##### +##.#. +.#.#. +.#.#. +...#. +..... + +##### +##### +##### +.###. +..#.. +..... +..... + +..... +..... +#.... +##.#. +##.#. +##.## +##### + +..... +..... +..... +#.#.. +#.#.. +####. +##### + +..... +..#.. +..#.. +..#.# +.##.# +.##.# +##### + +..... +#.... +#...# +#...# +##..# +###.# +##### + +..... +.#... +.#... +.#..# +.#.## +##.## +##### + +..... +....# +..#.# +#.#.# +#.### +##### +##### + +..... +....# +#.#.# +###.# +##### +##### +##### + +..... +.#... +.#... +###.. +####. +####. +##### + +##### +.#### +.#### +.##.# +.##.# +..#.# +..... + +..... +..... +#..#. +#..#. +#.### +##### +##### + +..... +..... +..#.. +#.#.. +#.##. +#.##. +##### + +..... +...#. +..##. +#.##. +#.### +#.### +##### + +##### +##### +##.## +#..## +...## +....# +..... + +##### +##### +##### +.#.## +.#.## +...#. +..... + +..... +.#... +##.#. +##.#. +##.#. +####. +##### + +..... +...#. +.#.## +.#.## +##.## +##### +##### + +..... +.#..# +.#..# +##..# +##..# +###.# +##### + +..... +..... +..#.# +.#### +.#### +##### +##### + +..... +..... +..... +..#.# +..#.# +.#### +##### + +..... +.#... +.#..# +.#.## +.#.## +##.## +##### + +##### +##### +###.# +#.#.# +#.#.. +..... +..... + +##### +##### +##.## +.#.## +.#.## +....# +..... + +##### +##### +##.## +##.## +##.## +.#.#. +..... + +##### +##### +.#.#. +.#... +..... +..... +..... + +..... +..#.. +..#.. +..#.# +.##.# +##### +##### + +##### +#.### +#.### +#.### +#..## +...#. +..... + +##### +###.# +###.# +#.#.# +#...# +#.... +..... + +..... +#.... +##..# +##..# +###.# +###.# +##### + +..... +.#... +.#..# +.#..# +.##.# +.##.# +##### + +##### +##.## +##.## +##.#. +##.#. +#.... +..... + +##### +##### +##### +#.### +#.#.# +#.#.. +..... + +..... +....# +#..## +#.### +#.### +##### +##### + +..... +..#.. +.##.. +###.. +###.. +####. +##### + +##### +####. +##.#. +#.... +#.... +..... +..... + +##### +##### +##### +.#.## +.#..# +....# +..... + +##### +###.# +#.#.# +..#.# +....# +....# +..... + +..... +..#.. +..##. +..##. +..##. +.###. +##### + +..... +...#. +..##. +..##. +#.### +#.### +##### + +..... +..... +#.... +##.#. +##.#. +##.#. +##### + +..... +#..#. +#..#. +#..## +#..## +#.### +##### + +..... +..#.. +..#.. +..#.# +.#### +##### +##### + +##### +##### +#.### +...## +...## +...#. +..... + +..... +..... +....# +...## +#.### +#.### +##### + +##### +##### +.##.# +.##.# +.#... +.#... +..... + +..... +..... +..... +#.#.. +#.##. +#.##. +##### + +##### +###.# +#.#.. +#.#.. +..#.. +..#.. +..... + +##### +##### +####. +#.##. +#..#. +#.... +..... + +##### +#.### +#.##. +..##. +..##. +...#. +..... + +##### +##### +.#### +.#### +.###. +.#.#. +..... + +..... +..... +..#.. +..#.# +.##.# +.##.# +##### + +##### +##.#. +##.#. +#..#. +..... +..... +..... + +..... +..... +#.... +#...# +##..# +##.## +##### + +..... +..... +...#. +.#.#. +.#### +.#### +##### + +##### +##### +##### +.#.## +.#.## +.#.#. +..... + +##### +.#.#. +.#.#. +.#... +.#... +..... +..... + +..... +..... +.#... +.##.. +###.# +###.# +##### + +##### +##.## +#..## +#..## +...## +....# +..... + +##### +####. +##.#. +.#.#. +.#.#. +.#.#. +..... + +##### +#.### +#.##. +#.#.. +..... +..... +..... + +..... +....# +.#..# +.#..# +.#.## +##.## +##### + +..... +..#.# +..### +.#### +.#### +.#### +##### + +##### +##### +.##.# +.##.# +.#..# +..... +..... + +##### +##### +##.## +##.#. +.#.#. +..... +..... + +..... +#.... +#.#.# +#.### +##### +##### +##### + +##### +###.# +###.# +##..# +#.... +#.... +..... + +##### +.#### +.#### +..#.# +..#.. +..... +..... + +..... +.#... +.#... +##... +###.. +####. +##### + +##### +##### +#.### +..#.# +..#.# +....# +..... + +##### +##.## +##.## +##.## +##.#. +#.... +..... + +##### +#.### +..#.# +..#.# +....# +....# +..... + +..... +..#.. +..#.# +..### +#.### +##### +##### + +..... +#.... +#.... +#.... +#.... +##.#. +##### + +##### +####. +#.##. +#..#. +#.... +#.... +..... + +..... +..... +..... +.#... +.#... +###.# +##### + +##### +.#### +..##. +..#.. +..... +..... +..... + +..... +...#. +...#. +#..#. +#..## +#.### +##### + +##### +#.### +#.##. +#.##. +#..#. +...#. +..... + +##### +.##.# +.##.# +..#.# +..#.# +..... +..... + +..... +.#... +.#... +##... +###.. +###.# +##### + +..... +..... +#.... +#..#. +##.#. +####. +##### + +##### +.#### +.###. +.###. +.#.#. +.#.#. +..... + +..... +..... +.#.#. +.###. +.###. +.#### +##### + +##### +###.# +.#... +.#... +.#... +..... +..... + +..... +.#..# +.#..# +.##.# +.#### +##### +##### + +##### +.#.## +.#.#. +.#... +.#... +..... +..... + +##### +##### +.#.## +.#..# +.#..# +.#..# +..... + +##### +##### +##### +.#.## +.#.## +.#..# +..... + +..... +...#. +...#. +.#.#. +##.#. +####. +##### + +..... +..... +..... +....# +#..## +#.### +##### + +##### +##.## +##..# +##..# +#.... +#.... +..... + +..... +#.... +#.#.. +#.#.. +#.##. +####. +##### + +..... +..... +.#... +.#..# +.#.## +##### +##### + +##### +##### +##### +#.##. +#.##. +#..#. +..... + +..... +...#. +#..#. +#.##. +#.##. +####. +##### + +##### +####. +###.. +.##.. +.##.. +..#.. +..... + +##### +##### +.##.# +.##.. +.##.. +..#.. +..... + +..... +.#... +.#.#. +.#.#. +.#.#. +##### +##### + +##### +##### +##### +.##.# +.#..# +.#..# +..... + +..... +..... +....# +..#.# +#.#.# +#.#.# +##### + +##### +##### +#.#.# +#.#.. +..#.. +..... +..... + +..... +..... +..... +#.#.. +#.#.. +#.#.# +##### + +##### +#.### +..##. +...#. +...#. +..... +..... + +..... +..... +.#.#. +.#.#. +##.#. +####. +##### + +..... +#.... +#.#.. +####. +####. +##### +##### + +..... +....# +...## +#..## +##.## +##.## +##### + +##### +#.### +#..## +#..## +#..## +....# +..... + +..... +..... +..... +.#.#. +####. +####. +##### + +##### +##### +.#### +.##.# +.##.# +..#.# +..... + +##### +.#### +.#### +.##.# +.##.. +.#... +..... + +..... +....# +....# +....# +...## +#.### +##### + +##### +##### +##.## +##.#. +#..#. +...#. +..... + +..... +..... +#...# +#.#.# +#.### +##### +##### + +..... +.#..# +.#..# +.#..# +##..# +###.# +##### + +..... +...#. +.#.## +##.## +##### +##### +##### + +..... +..... +#.#.. +#.#.. +#.#.. +####. +##### + +##### +##### +##### +##### +#.### +...#. +..... + +##### +.#### +.##.# +..#.# +..#.. +..#.. +..... + +..... +#.#.# +#.#.# +#.### +##### +##### +##### + +..... +..... +....# +.#..# +.##.# +###.# +##### + +##### +##.#. +.#.#. +.#.#. +.#.#. +...#. +..... + +##### +##.## +##.## +##.## +#...# +#.... +..... + +..... +.#... +##.#. +##.#. +####. +##### +##### + +##### +.###. +..##. +..##. +...#. +...#. +..... + +##### +#.### +#.#.# +#...# +#...# +#.... +..... + +##### +.#### +.##.# +.##.# +.##.. +..#.. +..... + +##### +#.### +#.##. +#.##. +..##. +..#.. +..... + +..... +..... +#.... +#..#. +#.##. +##### +##### + +##### +#.### +#.### +#.### +#.#.# +..#.. +..... + +..... +..... +#..#. +#..## +##.## +##.## +##### + +..... +#..#. +#.### +#.### +#.### +##### +##### + +##### +.##.# +.#..# +.#... +.#... +.#... +..... + +##### +##.## +.#.#. +..... +..... +..... +..... + +##### +##### +#.### +#.#.# +....# +....# +..... + +##### +####. +#.##. +#.#.. +#.... +#.... +..... + +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +#.### +#.#.# +#.#.# +..#.# +....# +..... + +..... +#.... +#.... +#.... +##.#. +##.#. +##### + +##### +###.# +#.#.. +#.... +#.... +..... +..... + +..... +..... +#.... +#.#.# +#.### +##### +##### + +##### +##### +.#### +.#.## +.#.#. +...#. +..... + +##### +##### +####. +###.. +#.#.. +#.#.. +..... + +..... +..#.. +#.#.. +#.#.. +###.. +####. +##### + +..... +...#. +...#. +...#. +.#.## +.#.## +##### + +##### +#.#.# +..#.# +..#.# +..#.# +....# +..... + +##### +#.#.# +..#.# +..#.# +..#.# +..... +..... + +##### +##.## +.#.## +.#.## +...## +...#. +..... + +..... +..... +..... +.#..# +.#..# +.##.# +##### + +##### +##.## +##.## +##..# +#.... +#.... +..... + +##### +##### +##.## +.#.## +.#.## +.#..# +..... + +##### +##### +##### +#.### +#.##. +#..#. +..... + +..... +..... +...#. +.#.#. +.#.#. +####. +##### + +..... +..#.# +..#.# +.##.# +.#### +.#### +##### + +##### +.#### +.#### +.###. +..##. +...#. +..... + +..... +#.... +#...# +#.#.# +#.#.# +#.### +##### + +##### +#.### +#..## +#...# +#...# +..... +..... + +##### +##### +####. +##.#. +.#.#. +...#. +..... + +##### +####. +#.#.. +#.#.. +..... +..... +..... + +..... +.#... +.#... +.#... +.#.#. +##### +##### + +##### +###.# +.##.# +.##.# +.##.. +.#... +..... + +##### +#.### +#..## +...#. +...#. +...#. +..... + +..... +..... +..... +.#... +.#..# +.##.# +##### + +##### +##.## +##.## +.#.## +...## +....# +..... + +..... +....# +..#.# +..#.# +#.#.# +#.#.# +##### + +..... +..... +..... +#...# +#...# +##.## +##### + +..... +..#.# +#.#.# +#.#.# +#.#.# +#.#.# +##### + +##### +##### +##.## +##..# +#...# +....# +..... + +..... +.#... +.##.# +###.# +###.# +###.# +##### + +..... +..... +#.... +#...# +##..# +###.# +##### + +##### +#.### +#.##. +#.#.. +..#.. +..#.. +..... + +##### +##### +.###. +.###. +..#.. +..... +..... + +..... +.#... +.#... +.#... +.#... +##.#. +##### + +..... +..#.. +..#.. +..#.. +..#.# +.#### +##### + +..... +..... +.#... +##.#. +##.## +##### +##### + +##### +###.# +###.. +###.. +.##.. +..#.. +..... + +##### +##### +##### +#.### +#..## +...#. +..... + +..... +.#..# +.#..# +.##.# +###.# +###.# +##### + +..... +....# +.#..# +###.# +###.# +###.# +##### + +##### +#.### +#.### +..##. +..##. +..#.. +..... + +##### +.###. +.###. +.###. +..#.. +..#.. +..... + +..... +..... +#.... +##... +###.# +###.# +##### + +##### +#.#.# +..#.. +..#.. +..#.. +..#.. +..... + +##### +#.### +#..## +#...# +#...# +....# +..... + +##### +##### +#.### +#.#.# +..#.# +..... +..... + +..... +..... +..... +..... +.#.#. +.###. +##### + +..... +..#.. +..#.. +..#.# +..#.# +.##.# +##### + +##### +##.## +##.#. +#..#. +#.... +#.... +..... + +##### +.#### +.#.## +....# +....# +....# +..... + +..... +...#. +...#. +#..## +##.## +##### +##### + +##### +.#### +.#### +.##.# +..#.# +....# +..... + +##### +#.##. +#.##. +..##. +..##. +...#. +..... + +..... +..#.. +..##. +..### +.#### +##### +##### + +##### +###.# +#.#.. +..#.. +..#.. +..... +..... + +##### +###.# +.##.# +.##.. +.##.. +.#... +..... + +##### +##### +##### +##.## +##.#. +#.... +..... + +..... +#.... +#.#.. +#.#.# +#.#.# +##### +##### + +..... +..#.. +..#.. +.##.. +.###. +.#### +##### + +..... +..... +.#... +.##.. +.##.. +####. +##### + +##### +##### +.#### +..##. +..##. +...#. +..... + +..... +..... +.#... +.#... +.##.. +####. +##### + +##### +##.## +##.## +##..# +##..# +#...# +..... + +##### +##### +####. +####. +###.. +.#... +..... + +..... +..... +..... +.#.#. +.#.## +##### +##### + +..... +....# +...## +...## +#.### +#.### +##### + +##### +##### +.#### +.#### +.#### +..#.# +..... + +..... +#.... +#...# +#...# +#...# +#.#.# +##### + +..... +..... +..#.. +#.#.. +#.#.. +#.##. +##### + +..... +..... +...#. +..##. +..### +.#### +##### diff --git a/src/main.rs b/src/main.rs index fd0049a..887bb8e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ )] #![feature( iter_repeat_n, + iter_partition_in_place, slice_swap_unchecked, generic_const_exprs, iter_array_chunks, @@ -35,205 +36,47 @@ extern crate test; pub mod util; pub use util::prelude::*; -#[derive(Debug)] -struct Gate { - op: fn(u8, u8) -> u8, - inputs: [usize; 2], - out: usize, - run: bool, -} +const SIZE: usize = 5; +const H: usize = 7; #[no_mangle] -pub fn p1(x: &str) -> impl Display { - static mut wires: [u8; 15547] = [u8::MAX; 15547]; - let mut gates = Vec::with_capacity(128); - fn h(gate: [u8; 3]) -> usize { - // println!("{}", gate.p()); - if gate[1].is_ascii_digit() { - let [_, b, c] = gate.map(|x| (x - b'0') as usize); - 15547 + b * 10 + c - } else { - let [a, b, c] = gate.map(|x| (x - b'a') as usize); - a * 26 * 26 + b * 26 + c - } - } - let mut i_ = x.行(); - let mut i = x.as_ptr(); - let mut x = 0; - let mut y = 0; - for j in 0..45u64 { - x |= (unsafe { *i.add(5) - b'0' } as u64) << j; - unsafe { i = i.add(7) }; - } - for j in 0..45u64 { - y |= (unsafe { *i.add(5) - b'0' } as u64) << j; - unsafe { i = i.add(7) }; - } - let mut i = i_; - i.by_ref().take_while(|x| !x.is_empty()).for_each(drop); - fn gate(x: &[u8]) -> [u8; 3] { - x.try_into().unwrap() - } - fn and(a: u8, b: u8) -> u8 { - a & b - } - fn or(a: u8, b: u8) -> u8 { - a | b - } - fn xor(a: u8, b: u8) -> u8 { - a ^ b - } - let mut z = 0; - for connection in i { - let mut i = connection.split(|x| *x == b' '); - let [i1, op, i2, _, out] = std::array::from_fn(|_| i.Δ()); - let [i1, i2, out] = [i1, i2, out].map(gate); - let op = match op { - b"AND" => and, - b"OR" => or, - b"XOR" => xor, - _ => unreachable!(), - }; - if i1[0] == b'y' || i1[0] == b'x' { - let index = (i1[1] - b'0') * 10 + (i1[2] - b'0'); - let res = op((y & 1 << index != 0) as u8, (x & 1 << index != 0) as u8); - if out[0] != b'z' { - unsafe { wires[h(out)] = res }; - } else { - z |= (res as u64) << index; +pub unsafe fn p1(x: &str) -> impl Display { + let mut i = x.as_bytes().as_ptr(); + let mut keys = [0u64; 250]; + let mut ki = 0; + let mut locks = [0u64; 250]; + let mut li = 0; + for _ in 0..500 { + let mut acc = 0; + for y in 0..H { + for x in 0..SIZE { + acc <<= 1; + acc |= (i.add(y * 6 + x).read() == b'#') as u64 } + } + i = i.add(6 * 7 + 1); + if acc & 1 == 0 { + C! { keys[ki] = acc }; + ki += 1; } else { - gates.push(Gate { - op, - run: false, - inputs: [h(i1), h(i2)], - out: h(out), - }); + C! { locks[li] = acc }; + li += 1; } } - let mut all_run = false; - while !all_run { - all_run = true; - for gate in &mut gates { - if gate.run { - continue; - }; - unsafe { - let [a, b] = gate.inputs; - let a = wires[a]; - if a != u8::MAX - && let b = wires[b] - && b != u8::MAX - { - gate.run = true; - if gate.out > 15547 { - let index = gate.out - 15547; - z |= ((gate.op)(a, b) as u64) << index; - } else { - wires[gate.out] = (gate.op)(a, b); - } - } + let mut sum = 0; + for &k in &keys { + for &lock in &locks { + if k & lock == 0 { + sum += 1; } - all_run &= gate.run; - } - } - z -} - -#[no_mangle] -pub fn p2(x: &str) -> impl Display { - let mut gates = Vec::with_capacity(128); - let x = &x.as_bytes()[7 * 45 * 2 + 1..]; - fn gate(x: &[u8]) -> [u8; 3] { - x.try_into().unwrap() - } - const XOR: u8 = 0; - const AND: u8 = 1; - const OR: u8 = 2; - for connection in x.行() { - let mut i = connection.split(|x| *x == b' '); - let [i1, op, i2, _, out] = std::array::from_fn(|_| i.Δ()); - let [i1, i2, out] = [i1, i2, out].map(gate); - let op = match op { - b"XOR" => XOR, - b"AND" => AND, - b"OR" => OR, - _ => shucks!(), - }; - gates.push((i1, i2, out, op)); - } - let find = |i1, op: u8, i2| { - gates - .iter() - .find(|x| { - (x.0 == i1 && x.1 == i2 && x.3 == op) || (x.1 == i1 && x.0 == i2 && x.3 == op) - }) - .map(|x| x.2) - }; - let find_using = |op: u8, i2| { - gates.iter().find_map(|x| { - (x.1 == i2 && x.3 == op) - .then_some((x.0, x.2)) - .or((x.0 == i2 && x.3 == op).then_some((x.1, x.2))) - }) - }; - // search for full adders (this is a ripple carry adder) - // x ^ y -> t0 - // x & y -> t1 - // c0 & t0 -> t2 - // c0 ^ t0 -> z - // t1 | t2 -> c1 - let mut swaps = vec![]; - for [x, y, should_z] in const { - let input: [[[u8; 3]; 3]; 44] = car::from_fn!(|i| { - let i = i + 1; - let x = [b'x', (i as u8 / 10) + b'0', (i as u8 % 10) + b'0']; - let y = [b'y', (i as u8 / 10) + b'0', (i as u8 % 10) + b'0']; - let z = [b'z', (i as u8 / 10) + b'0', (i as u8 % 10) + b'0']; - [x, y, z] - }); - input - } { - let t0 = find(x, XOR, y).unwrap(); // x ^ y -> t0 - - // println!("{} ^ {} -> {} (t0)", x.p(), y.p(), t0.p()); - - let t1 = find(x, AND, y).unwrap(); // x & y -> t1 - - // println!("{} & {} -> {} (t1)", x.p(), y.p(), t1.p()); - - // c0 & t0 -> t2 - let Some((_c0, _t2)) = find_using(AND, t0) else { - swaps.push(t0); - swaps.push(t1); - // println!("swap {} with {}", t0.p(), t1.p()); - continue; - }; - // println!("(c0) {} & {} (t0) -> {} (t2)", c0.p(), t0.p(), t2.p()); - let (_, z) = find_using(XOR, t0).unwrap(); // c0 ^ t0 -> z - - // println!("(c0) {} ^ {} (t0) -> {} (z)", c0.p(), t0.p(), z.p()); - if z != should_z { - swaps.push(z); - swaps.push(should_z); - // println!("swap {} with {}", z.p(), format!("z{i:02}")); - continue; } - // t1 | t2 -> c1 - // let c1 = find(t1, b"OR", t2).unwrap(); - } - swaps.sort_unstable(); - let mut out = String::with_capacity(40); - for swap in swaps { - use std::fmt::Write; - _ = write!(out, "{},", swap.p()); } - out + sum } fn main() { let s = include_str!("inp.txt"); - println!("{}", unsafe { p2(s) }); + println!("{}", unsafe { p1(s) }); // dbg!(exec(&program, regi)); } |