85 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Advent of Code
 | |
| 
 | |
| --- Day 23: Category Six ---
 | |
| 
 | |
|    The droids have finished repairing as much of the ship as they can. Their report indicates that this was a Category 6
 | |
|    disaster - not because it was that bad, but because it destroyed the stockpile of Category 6 network cables as well as most
 | |
|    of the ship's network infrastructure.
 | |
| 
 | |
|    You'll need to rebuild the network from scratch.
 | |
| 
 | |
|    The computers on the network are standard Intcode computers that communicate by sending packets to each other. There are 50
 | |
|    of them in total, each running a copy of the same Network Interface Controller (NIC) software (your puzzle input). The
 | |
|    computers have network addresses 0 through 49; when each computer boots up, it will request its network address via a single
 | |
|    input instruction. Be sure to give each computer a unique network address.
 | |
| 
 | |
|    Once a computer has received its network address, it will begin doing work and communicating over the network by sending and
 | |
|    receiving packets. All packets contain two values named X and Y. Packets sent to a computer are queued by the recipient and
 | |
|    read in the order they are received.
 | |
| 
 | |
|    To send a packet to another computer, the NIC will use three output instructions that provide the destination address of the
 | |
|    packet followed by its X and Y values. For example, three output instructions that provide the values 10, 20, 30 would send a
 | |
|    packet with X=20 and Y=30 to the computer with address 10.
 | |
| 
 | |
|    To receive a packet from another computer, the NIC will use an input instruction. If the incoming packet queue is empty,
 | |
|    provide -1. Otherwise, provide the X value of the next packet; the computer will then use a second input instruction to
 | |
|    receive the Y value for the same packet. Once both values of the packet are read in this way, the packet is removed from the
 | |
|    queue.
 | |
| 
 | |
|    Note that these input and output instructions never block. Specifically, output instructions do not wait for the sent packet
 | |
|    to be received - the computer might send multiple packets before receiving any. Similarly, input instructions do not wait for
 | |
|    a packet to arrive - if no packet is waiting, input instructions should receive -1.
 | |
| 
 | |
|    Boot up all 50 computers and attach them to your network. What is the Y value of the first packet sent to address 255?
 | |
| 
 | |
|    Your puzzle answer was 19530.
 | |
| 
 | |
| --- Part Two ---
 | |
| 
 | |
|    Packets sent to address 255 are handled by a device called a NAT (Not Always Transmitting). The NAT is responsible for
 | |
|    managing power consumption of the network by blocking certain packets and watching for idle periods in the computers.
 | |
| 
 | |
|    If a packet would be sent to address 255, the NAT receives it instead. The NAT remembers only the last packet it receives;
 | |
|    that is, the data in each packet it receives overwrites the NAT's packet memory with the new packet's X and Y values.
 | |
| 
 | |
|    The NAT also monitors all computers on the network. If all computers have empty incoming packet queues and are continuously
 | |
|    trying to receive packets without sending packets, the network is considered idle.
 | |
| 
 | |
|    Once the network is idle, the NAT sends only the last packet it received to address 0; this will cause the computers on the
 | |
|    network to resume activity. In this way, the NAT can throttle power consumption of the network when the ship needs power in
 | |
|    other areas.
 | |
| 
 | |
|    Monitor packets released to the computer at address 0 by the NAT. What is the first Y value delivered by the NAT to the
 | |
|    computer at address 0 twice in a row?
 | |
| 
 | |
|    Your puzzle answer was 12725.
 | |
| 
 | |
|    Both parts of this puzzle are complete! They provide two gold stars: **
 | |
| 
 | |
|    At this point, all that is left is for you to admire your Advent calendar.
 | |
| 
 | |
|    If you still want to see it, you can get your puzzle input.
 | |
| 
 | |
| References
 | |
| 
 | |
|    Visible links
 | |
|    . https://adventofcode.com/
 | |
|    . https://adventofcode.com/2019/about
 | |
|    . https://adventofcode.com/2019/events
 | |
|    . https://adventofcode.com/2019/settings
 | |
|    . https://adventofcode.com/2019/auth/logout
 | |
|    . Advent of Code Supporter
 | |
| 	https://adventofcode.com/2019/support
 | |
|    . https://adventofcode.com/2019
 | |
|    . https://adventofcode.com/2019
 | |
|    . https://adventofcode.com/2019/support
 | |
|    . https://adventofcode.com/2019/sponsors
 | |
|    . https://adventofcode.com/2019/leaderboard
 | |
|    . https://adventofcode.com/2019/stats
 | |
|    . https://adventofcode.com/2019/sponsors
 | |
|    . https://en.wikipedia.org/wiki/Category_6_cable
 | |
|    . https://adventofcode.com/2019/day/9
 | |
|    . https://en.wikipedia.org/wiki/Blocking_(computing)
 | |
|    . https://adventofcode.com/2019
 | |
|    . https://adventofcode.com/2019/day/23/input
 |