From b6af1f3edb11304bdd04d7f7e5df60da4a7a3827 Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sat, 24 Sep 2022 18:48:20 +0200 Subject: [PATCH] 2019 day 5: Update results & README --- 2019/RESULTS.txt | 14 ++++++++ 2019/day05/README.org | 82 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/2019/RESULTS.txt b/2019/RESULTS.txt index 7e6f19a..6bd3ea6 100644 --- a/2019/RESULTS.txt +++ b/2019/RESULTS.txt @@ -53,3 +53,17 @@ aoc-c : res=2090 aoc-c : res=1419 time: 0:00.00 real, 0.00 user, 0.00 sys context-switch: 0+1, page-faults: 0+89 + +========================================= +================= day05 ================= +========================================= + ++++++++++++++++++ part 1 +aoc-c : res=10987514 + time: 0:00.00 real, 0.00 user, 0.00 sys + context-switch: 0+1, page-faults: 0+87 + ++++++++++++++++++ part 2 +aoc-c : res=14195011 + time: 0:00.00 real, 0.00 user, 0.00 sys + context-switch: 0+1, page-faults: 0+87 diff --git a/2019/day05/README.org b/2019/day05/README.org index be8dbea..080a03b 100644 --- a/2019/day05/README.org +++ b/2019/day05/README.org @@ -101,4 +101,84 @@ the diagnostic code, the diagnostic program ran successfully. After providing =1= to the only input instruction and passing all the tests, /what diagnostic code does the program produce?/ -To begin, [[file:5/input][get your puzzle input]]. +Your puzzle answer was =10987514=. + +** --- Part Two --- +The air conditioner comes online! Its cold air feels good for a while, +but then the TEST alarms start to go off. Since the air conditioner +can't vent its heat anywhere but back into the spacecraft, it's actually +making the air inside the ship /warmer/. + +Instead, you'll need to use the TEST to extend the +[[https://en.wikipedia.org/wiki/Spacecraft_thermal_control][thermal +radiators]]. Fortunately, the diagnostic program (your puzzle input) is +already equipped for this. Unfortunately, your Intcode computer is not. + +Your computer is only missing a few opcodes: + +- Opcode =5= is /jump-if-true/: if the first parameter is /non-zero/, it + sets the instruction pointer to the value from the second parameter. + Otherwise, it does nothing. +- Opcode =6= is /jump-if-false/: if the first parameter /is zero/, it + sets the instruction pointer to the value from the second parameter. + Otherwise, it does nothing. +- Opcode =7= is /less than/: if the first parameter is /less than/ the + second parameter, it stores =1= in the position given by the third + parameter. Otherwise, it stores =0=. +- Opcode =8= is /equals/: if the first parameter is /equal to/ the + second parameter, it stores =1= in the position given by the third + parameter. Otherwise, it stores =0=. + +Like all instructions, these instructions need to support /parameter +modes/ as described above. + +Normally, after an instruction is finished, the instruction pointer +increases by the number of values in that instruction. /However/, if the +instruction modifies the instruction pointer, that value is used and the +instruction pointer is /not automatically increased/. + +For example, here are several programs that take one input, compare it +to the value =8=, and then produce one output: + +- =3,9,8,9,10,9,4,9,99,-1,8= - Using /position mode/, consider whether + the input is /equal to/ =8=; output =1= (if it is) or =0= (if it is + not). +- =3,9,7,9,10,9,4,9,99,-1,8= - Using /position mode/, consider whether + the input is /less than/ =8=; output =1= (if it is) or =0= (if it is + not). +- =3,3,1108,-1,8,3,4,3,99= - Using /immediate mode/, consider whether + the input is /equal to/ =8=; output =1= (if it is) or =0= (if it is + not). +- =3,3,1107,-1,8,3,4,3,99= - Using /immediate mode/, consider whether + the input is /less than/ =8=; output =1= (if it is) or =0= (if it is + not). + +Here are some jump tests that take an input, then output =0= if the +input was zero or =1= if the input was non-zero: + +- =3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9= (using /position mode/) +- =3,3,1105,-1,9,1101,0,0,12,4,12,99,1= (using /immediate mode/) + +Here's a larger example: + +#+BEGIN_EXAMPLE + 3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31, + 1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104, + 999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99 +#+END_EXAMPLE + +The above example program uses an input instruction to ask for a single +number. The program will then output =999= if the input value is below +=8=, output =1000= if the input value is equal to =8=, or output =1001= +if the input value is greater than =8=. + +This time, when the TEST diagnostic program runs its input instruction +to get the ID of the system to test, /provide it =5=/, the ID for the +ship's thermal radiator controller. This diagnostic test suite only +outputs one number, the /diagnostic code/. + +/What is the diagnostic code for system ID =5=?/ + +Your puzzle answer was =14195011=. + +Both parts of this puzzle are complete! They provide two gold stars: **