2019 day 5: Update results & README
This commit is contained in:
@@ -53,3 +53,17 @@ aoc-c : res=2090
|
|||||||
aoc-c : res=1419
|
aoc-c : res=1419
|
||||||
time: 0:00.00 real, 0.00 user, 0.00 sys
|
time: 0:00.00 real, 0.00 user, 0.00 sys
|
||||||
context-switch: 0+1, page-faults: 0+89
|
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
|
||||||
|
@@ -101,4 +101,84 @@ the diagnostic code, the diagnostic program ran successfully.
|
|||||||
After providing =1= to the only input instruction and passing all the
|
After providing =1= to the only input instruction and passing all the
|
||||||
tests, /what diagnostic code does the program produce?/
|
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: **
|
||||||
|
Reference in New Issue
Block a user