aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2019-12-22 02:00:57 +0100
committerReiner Herrmann <reiner@reiner-h.de>2019-12-22 02:00:57 +0100
commit5ea7ef828207bab87d447bccfdf267612878e605 (patch)
tree0b0992b5770da58720466fb50f99e41daa7d2e5e
parente894185e742ab4b0acc85256dcc3ab6fc5ee1d1d (diff)
day21
-rw-r--r--input211
-rw-r--r--src/main.rs54
2 files changed, 53 insertions, 2 deletions
diff --git a/input21 b/input21
new file mode 100644
index 0000000..7503815
--- /dev/null
+++ b/input21
@@ -0,0 +1 @@
+109,2050,21102,1,966,1,21101,13,0,0,1105,1,1378,21102,20,1,0,1105,1,1337,21101,0,27,0,1105,1,1279,1208,1,65,748,1005,748,73,1208,1,79,748,1005,748,110,1208,1,78,748,1005,748,132,1208,1,87,748,1005,748,169,1208,1,82,748,1005,748,239,21102,1041,1,1,21102,73,1,0,1106,0,1421,21102,1,78,1,21102,1,1041,2,21102,88,1,0,1106,0,1301,21101,0,68,1,21101,0,1041,2,21101,103,0,0,1105,1,1301,1102,1,1,750,1105,1,298,21102,1,82,1,21101,0,1041,2,21101,0,125,0,1105,1,1301,1101,0,2,750,1106,0,298,21102,79,1,1,21102,1041,1,2,21102,147,1,0,1106,0,1301,21101,84,0,1,21101,0,1041,2,21101,0,162,0,1105,1,1301,1102,1,3,750,1105,1,298,21102,1,65,1,21101,0,1041,2,21102,1,184,0,1106,0,1301,21101,76,0,1,21101,1041,0,2,21102,1,199,0,1106,0,1301,21102,75,1,1,21101,0,1041,2,21102,214,1,0,1106,0,1301,21102,1,221,0,1106,0,1337,21102,10,1,1,21101,1041,0,2,21102,236,1,0,1105,1,1301,1105,1,553,21101,85,0,1,21101,1041,0,2,21101,0,254,0,1105,1,1301,21101,0,78,1,21101,0,1041,2,21102,269,1,0,1105,1,1301,21102,1,276,0,1105,1,1337,21102,10,1,1,21101,1041,0,2,21101,291,0,0,1105,1,1301,1102,1,1,755,1106,0,553,21101,32,0,1,21101,1041,0,2,21102,1,313,0,1105,1,1301,21102,1,320,0,1105,1,1337,21102,327,1,0,1105,1,1279,2102,1,1,749,21101,65,0,2,21101,73,0,3,21102,1,346,0,1105,1,1889,1206,1,367,1007,749,69,748,1005,748,360,1101,0,1,756,1001,749,-64,751,1105,1,406,1008,749,74,748,1006,748,381,1102,-1,1,751,1106,0,406,1008,749,84,748,1006,748,395,1101,0,-2,751,1105,1,406,21102,1100,1,1,21102,1,406,0,1105,1,1421,21101,32,0,1,21101,1100,0,2,21101,0,421,0,1105,1,1301,21102,1,428,0,1105,1,1337,21101,0,435,0,1105,1,1279,2101,0,1,749,1008,749,74,748,1006,748,453,1102,1,-1,752,1105,1,478,1008,749,84,748,1006,748,467,1102,-2,1,752,1106,0,478,21101,1168,0,1,21102,478,1,0,1105,1,1421,21102,1,485,0,1106,0,1337,21102,1,10,1,21101,0,1168,2,21102,500,1,0,1106,0,1301,1007,920,15,748,1005,748,518,21101,0,1209,1,21102,518,1,0,1105,1,1421,1002,920,3,529,1001,529,921,529,102,1,750,0,1001,529,1,537,102,1,751,0,1001,537,1,545,101,0,752,0,1001,920,1,920,1106,0,13,1005,755,577,1006,756,570,21102,1100,1,1,21102,570,1,0,1105,1,1421,21102,1,987,1,1106,0,581,21102,1,1001,1,21101,0,588,0,1105,1,1378,1101,0,758,594,102,1,0,753,1006,753,654,20101,0,753,1,21101,610,0,0,1105,1,667,21101,0,0,1,21102,621,1,0,1106,0,1463,1205,1,647,21102,1,1015,1,21101,635,0,0,1105,1,1378,21102,1,1,1,21102,1,646,0,1105,1,1463,99,1001,594,1,594,1106,0,592,1006,755,664,1101,0,0,755,1106,0,647,4,754,99,109,2,1102,1,726,757,22102,1,-1,1,21102,9,1,2,21102,1,697,3,21102,692,1,0,1105,1,1913,109,-2,2105,1,0,109,2,1001,757,0,706,2101,0,-1,0,1001,757,1,757,109,-2,2106,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,255,63,95,191,223,159,127,0,107,93,116,216,218,226,252,60,121,251,113,197,42,172,190,100,62,204,98,158,119,110,125,50,178,114,177,246,123,243,236,54,168,247,99,53,140,173,167,238,103,106,199,249,217,86,234,35,212,187,162,43,157,55,39,153,170,47,163,233,49,76,115,111,120,227,174,188,196,235,171,71,156,220,69,102,228,232,185,206,222,77,78,221,241,182,85,70,124,213,79,108,242,142,141,59,57,38,175,207,179,152,154,56,237,136,203,169,198,205,184,84,117,254,87,101,186,189,58,138,245,51,239,68,248,202,253,229,230,109,92,143,155,61,137,46,214,181,94,122,231,183,118,139,250,166,244,219,34,126,201,215,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,73,110,112,117,116,32,105,110,115,116,114,117,99,116,105,111,110,115,58,10,13,10,87,97,108,107,105,110,103,46,46,46,10,10,13,10,82,117,110,110,105,110,103,46,46,46,10,10,25,10,68,105,100,110,39,116,32,109,97,107,101,32,105,116,32,97,99,114,111,115,115,58,10,10,58,73,110,118,97,108,105,100,32,111,112,101,114,97,116,105,111,110,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,78,68,44,32,79,82,44,32,111,114,32,78,79,84,67,73,110,118,97,108,105,100,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,44,32,66,44,32,67,44,32,68,44,32,74,44,32,111,114,32,84,40,73,110,118,97,108,105,100,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,74,32,111,114,32,84,52,79,117,116,32,111,102,32,109,101,109,111,114,121,59,32,97,116,32,109,111,115,116,32,49,53,32,105,110,115,116,114,117,99,116,105,111,110,115,32,99,97,110,32,98,101,32,115,116,111,114,101,100,0,109,1,1005,1262,1270,3,1262,20102,1,1262,0,109,-1,2106,0,0,109,1,21101,1288,0,0,1106,0,1263,21002,1262,1,0,1101,0,0,1262,109,-1,2106,0,0,109,5,21101,0,1310,0,1106,0,1279,22102,1,1,-2,22208,-2,-4,-1,1205,-1,1332,21201,-3,0,1,21101,0,1332,0,1105,1,1421,109,-5,2105,1,0,109,2,21102,1,1346,0,1105,1,1263,21208,1,32,-1,1205,-1,1363,21208,1,9,-1,1205,-1,1363,1106,0,1373,21102,1,1370,0,1105,1,1279,1106,0,1339,109,-2,2105,1,0,109,5,1202,-4,1,1385,21002,0,1,-2,22101,1,-4,-4,21101,0,0,-3,22208,-3,-2,-1,1205,-1,1416,2201,-4,-3,1408,4,0,21201,-3,1,-3,1105,1,1396,109,-5,2105,1,0,109,2,104,10,21202,-1,1,1,21101,0,1436,0,1106,0,1378,104,10,99,109,-2,2105,1,0,109,3,20002,594,753,-1,22202,-1,-2,-1,201,-1,754,754,109,-3,2106,0,0,109,10,21101,5,0,-5,21102,1,1,-4,21102,1,0,-3,1206,-9,1555,21102,1,3,-6,21102,5,1,-7,22208,-7,-5,-8,1206,-8,1507,22208,-6,-4,-8,1206,-8,1507,104,64,1105,1,1529,1205,-6,1527,1201,-7,716,1515,21002,0,-11,-8,21201,-8,46,-8,204,-8,1105,1,1529,104,46,21201,-7,1,-7,21207,-7,22,-8,1205,-8,1488,104,10,21201,-6,-1,-6,21207,-6,0,-8,1206,-8,1484,104,10,21207,-4,1,-8,1206,-8,1569,21102,1,0,-9,1105,1,1689,21208,-5,21,-8,1206,-8,1583,21102,1,1,-9,1105,1,1689,1201,-5,716,1589,20101,0,0,-2,21208,-4,1,-1,22202,-2,-1,-1,1205,-2,1613,22101,0,-5,1,21102,1,1613,0,1106,0,1444,1206,-1,1634,22102,1,-5,1,21102,1627,1,0,1105,1,1694,1206,1,1634,21102,2,1,-3,22107,1,-4,-8,22201,-1,-8,-8,1206,-8,1649,21201,-5,1,-5,1206,-3,1663,21201,-3,-1,-3,21201,-4,1,-4,1105,1,1667,21201,-4,-1,-4,21208,-4,0,-1,1201,-5,716,1676,22002,0,-1,-1,1206,-1,1686,21101,0,1,-4,1106,0,1477,109,-10,2106,0,0,109,11,21102,1,0,-6,21101,0,0,-8,21102,1,0,-7,20208,-6,920,-9,1205,-9,1880,21202,-6,3,-9,1201,-9,921,1724,21002,0,1,-5,1001,1724,1,1732,21002,0,1,-4,22101,0,-4,1,21102,1,1,2,21102,9,1,3,21102,1,1754,0,1105,1,1889,1206,1,1772,2201,-10,-4,1766,1001,1766,716,1766,21002,0,1,-3,1106,0,1790,21208,-4,-1,-9,1206,-9,1786,21201,-8,0,-3,1105,1,1790,21202,-7,1,-3,1001,1732,1,1796,20102,1,0,-2,21208,-2,-1,-9,1206,-9,1812,22101,0,-8,-1,1106,0,1816,21202,-7,1,-1,21208,-5,1,-9,1205,-9,1837,21208,-5,2,-9,1205,-9,1844,21208,-3,0,-1,1105,1,1855,22202,-3,-1,-1,1106,0,1855,22201,-3,-1,-1,22107,0,-1,-1,1106,0,1855,21208,-2,-1,-9,1206,-9,1869,22102,1,-1,-8,1105,1,1873,22101,0,-1,-7,21201,-6,1,-6,1105,1,1708,22102,1,-8,-10,109,-11,2105,1,0,109,7,22207,-6,-5,-3,22207,-4,-6,-2,22201,-3,-2,-1,21208,-1,0,-6,109,-7,2105,1,0,0,109,5,1201,-2,0,1912,21207,-4,0,-1,1206,-1,1930,21102,1,0,-4,21202,-4,1,1,22102,1,-3,2,21101,0,1,3,21102,1949,1,0,1105,1,1954,109,-5,2105,1,0,109,6,21207,-4,1,-1,1206,-1,1977,22207,-5,-3,-1,1206,-1,1977,21202,-5,1,-5,1106,0,2045,22101,0,-5,1,21201,-4,-1,2,21202,-3,2,3,21102,1,1996,0,1106,0,1954,21202,1,1,-5,21101,1,0,-2,22207,-5,-3,-1,1206,-1,2015,21101,0,0,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2037,21201,-2,0,1,21101,0,2037,0,105,1,1912,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2105,1,0
diff --git a/src/main.rs b/src/main.rs
index 985a560..9d42f8d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1084,7 +1084,7 @@ fn day12() {
Moon::new(-1, 5, -1),
Moon::new( 4, 7, -7),
];
- let mut moons = initial_state.clone();
+ let mut moons = initial_state;
for _ in 0..1000 {
simulate_moons(&mut moons);
@@ -1889,8 +1889,58 @@ fn day19() {
}
}
+fn day21() {
+ let input = read_file("input21");
+ let input = input.trim_end();
+ let program: Vec<isize> = input.split(',')
+ .map(|x| x.parse::<isize>().unwrap())
+ .collect();
+
+ // !A OR (!C AND D)
+ let script = "NOT A J\n\
+ NOT C T\n\
+ AND D T\n\
+ OR T J\n\
+ WALK\n";
+
+ let mut computer = IntComputer::new(&program);
+ computer.input = script.bytes().map(|b| b as isize).collect();
+ computer.run_program();
+ if *computer.output.back().unwrap() > 127 {
+ println!("21a: {}", computer.output.back().unwrap());
+ } else {
+ for c in computer.output {
+ print!("{}", (c as u8) as char);
+ }
+ }
+
+ // (!A OR !B OR !C) AND D AND H OR !A
+ let script = "NOT A J\n\
+ NOT B T\n\
+ OR T J\n\
+ NOT C T\n\
+ OR T J\n\
+ AND D J\n\
+ AND H J\n\
+ NOT A T\n\
+ OR T J\n\
+ RUN\n";
+
+ let mut computer = IntComputer::new(&program);
+ computer.input = script.bytes().map(|b| b as isize).collect();
+ computer.run_program();
+
+ if *computer.output.back().unwrap() > 127 {
+ println!("21b: {}", computer.output.back().unwrap());
+ } else {
+ for c in computer.output {
+ print!("{}", (c as u8) as char);
+ }
+ }
+}
+
fn main() {
- day19();
+ day21();
}
#[cfg(test)]