72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Python!
 | 
						|
import collections
 | 
						|
 | 
						|
class robot:
 | 
						|
	def __init__(self, instructions):
 | 
						|
		words = instructions.split()
 | 
						|
		self.number = words[1]
 | 
						|
		self.chips = []
 | 
						|
		self.recipients = {
 | 
						|
			'low': words[5:7],
 | 
						|
			'high': words[10:]
 | 
						|
		}
 | 
						|
 | 
						|
	def give(self, value, recipient):
 | 
						|
		recip_type, recip_num = recipient
 | 
						|
		if recip_type == 'output':
 | 
						|
			outputs[recip_num].append(value)
 | 
						|
		else:
 | 
						|
			bots[recip_num].take(value)
 | 
						|
 | 
						|
	def take(self, value):
 | 
						|
		self.chips.append(value)
 | 
						|
		if len(self.chips) > 1:
 | 
						|
			xqueue.append(self)
 | 
						|
 | 
						|
	def execute(self):
 | 
						|
		if len(self.chips) > 2: 
 | 
						|
			print('Error, bot', self.number, 'has chips', self.chips)
 | 
						|
		elif len(self.chips) == 2:
 | 
						|
			low, high = min(self.chips), max(self.chips)
 | 
						|
 | 
						|
			if low == 17 and high == 61:
 | 
						|
				print('responsible bot is bot', self.number)
 | 
						|
				print('17 goes to', self.recipients['low'])
 | 
						|
				print('61 goes to', self.recipients['high'])
 | 
						|
 | 
						|
			del self.chips[:]
 | 
						|
			self.give(low, self.recipients['low'])
 | 
						|
			self.give(high, self.recipients['high'])
 | 
						|
 | 
						|
 | 
						|
with open('10.txt') as file:
 | 
						|
	instructions = file.read().splitlines()
 | 
						|
 | 
						|
get_instructions = []
 | 
						|
bot_definitions = []
 | 
						|
xqueue = []
 | 
						|
bots = {}
 | 
						|
outputs = collections.defaultdict(list)
 | 
						|
 | 
						|
for inst in instructions:
 | 
						|
	if inst[0] == 'v':
 | 
						|
		get_instructions.append(inst)
 | 
						|
	else:
 | 
						|
		bot_definitions.append(inst)
 | 
						|
 | 
						|
for definition in bot_definitions:
 | 
						|
	b = robot(definition)
 | 
						|
	bots[b.number] = b
 | 
						|
 | 
						|
for i in get_instructions:
 | 
						|
	words = i.split()
 | 
						|
	bot_num = words[5]
 | 
						|
	value = int(words[1])
 | 
						|
	bots[bot_num].chips.append(value)
 | 
						|
 | 
						|
bots['97'].execute()
 | 
						|
 | 
						|
while xqueue:
 | 
						|
	current_bot = xqueue.pop(0)
 | 
						|
	current_bot.execute()
 |