added day 16
This commit is contained in:
parent
d6179dc2e6
commit
014e25c4f9
1
16/input01.txt
Normal file
1
16/input01.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
E20D72805F354AE298E2FCC5339218F90FE5F3A388BA60095005C3352CF7FBF27CD4B3DFEFC95354723006C401C8FD1A23280021D1763CC791006E25C198A6C01254BAECDED7A5A99CCD30C01499CFB948F857002BB9FCD68B3296AF23DD6BE4C600A4D3ED006AA200C4128E10FC0010C8A90462442A5006A7EB2429F8C502675D13700BE37CF623EB3449CAE732249279EFDED801E898A47BE8D23FBAC0805527F99849C57A5270C064C3ECF577F4940016A269007D3299D34E004DF298EC71ACE8DA7B77371003A76531F20020E5C4CC01192B3FE80293B7CD23ED55AA76F9A47DAAB6900503367D240522313ACB26B8801B64CDB1FB683A6E50E0049BE4F6588804459984E98F28D80253798DFDAF4FE712D679816401594EAA580232B19F20D92E7F3740D1003880C1B002DA1400B6028BD400F0023A9C00F50035C00C5002CC0096015B0C00B30025400D000C398025E2006BD800FC9197767C4026D78022000874298850C4401884F0E21EC9D256592007A2C013967C967B8C32BCBD558C013E005F27F53EB1CE25447700967EBB2D95BFAE8135A229AE4FFBB7F6BC6009D006A2200FC3387D128001088E91121F4DED58C025952E92549C3792730013ACC0198D709E349002171060DC613006E14C7789E4006C4139B7194609DE63FEEB78004DF299AD086777ECF2F311200FB7802919FACB38BAFCFD659C5D6E5766C40244E8024200EC618E11780010B83B09E1BCFC488C017E0036A184D0A4BB5CDD0127351F56F12530046C01784B3FF9C6DFB964EE793F5A703360055A4F71F12C70000EC67E74ED65DE44AA7338FC275649D7D40041E4DDA794C80265D00525D2E5D3E6F3F26300426B89D40094CCB448C8F0C017C00CC0401E82D1023E0803719E2342D9FB4E5A01300665C6A5502457C8037A93C63F6B4C8B40129DF7AC353EF2401CC6003932919B1CEE3F1089AB763D4B986E1008A7354936413916B9B080
|
6
16/input01_sample.txt
Normal file
6
16/input01_sample.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
D2FE28
|
||||||
|
38006F45291200
|
||||||
|
8A004A801A8002F478
|
||||||
|
620080001611562C8802118E34
|
||||||
|
C0015000016115A2E0802F182340
|
||||||
|
A0016C880162017C3686B18A3D4780
|
8
16/input02_sample.txt
Normal file
8
16/input02_sample.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
C200B40A82
|
||||||
|
04005AC33890
|
||||||
|
880086C3E88112
|
||||||
|
CE00C43D881120
|
||||||
|
D8005AC2A8F0
|
||||||
|
F600BC2D8F
|
||||||
|
9C005AC2F8F0
|
||||||
|
9C0141080250320F1802104A08
|
56
16/solve01.py
Normal file
56
16/solve01.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import copy
|
||||||
|
|
||||||
|
def decode_packet(packet):
|
||||||
|
|
||||||
|
# import pdb; pdb.set_trace()
|
||||||
|
|
||||||
|
result = 0
|
||||||
|
# get version
|
||||||
|
v = int(packet[:3], 2)
|
||||||
|
packet = packet[3:]
|
||||||
|
result += v
|
||||||
|
|
||||||
|
# get type
|
||||||
|
t = int(packet[:3], 2)
|
||||||
|
packet = packet[3:]
|
||||||
|
|
||||||
|
# literal, no other sub packets
|
||||||
|
if t == 4:
|
||||||
|
while True:
|
||||||
|
l = packet[:5]
|
||||||
|
packet = packet[5:]
|
||||||
|
if int(l[0],2) == 0:
|
||||||
|
break
|
||||||
|
return (result, packet)
|
||||||
|
|
||||||
|
i = int(packet[:1], 2)
|
||||||
|
packet = packet[1:]
|
||||||
|
if i == 0:
|
||||||
|
l = int(packet[:15], 2)
|
||||||
|
packet = packet[15:]
|
||||||
|
n_packet = packet[:l]
|
||||||
|
packet = packet[l:]
|
||||||
|
while (len(n_packet)):
|
||||||
|
(tmp_r, tmp_p) = decode_packet(n_packet)
|
||||||
|
n_packet = tmp_p
|
||||||
|
result += tmp_r
|
||||||
|
return(result, packet)
|
||||||
|
|
||||||
|
if i == 1:
|
||||||
|
l = int(packet[:11], 2)
|
||||||
|
packet = packet[11:]
|
||||||
|
for i in range(l):
|
||||||
|
(tmp_r, tmp_p) = decode_packet(packet)
|
||||||
|
packet = tmp_p
|
||||||
|
result += tmp_r
|
||||||
|
return (result, packet)
|
||||||
|
|
||||||
|
return (result, packet)
|
||||||
|
|
||||||
|
with open("input01.txt","r") as f:
|
||||||
|
for packet in f:
|
||||||
|
packet = bin(int('1'+packet.strip(), 16))[3:]
|
||||||
|
(result, packet) = decode_packet(packet)
|
||||||
|
print(result)
|
70
16/solve02.py
Normal file
70
16/solve02.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
def decode_packet(packet):
|
||||||
|
|
||||||
|
# import pdb; pdb.set_trace()
|
||||||
|
|
||||||
|
# get version
|
||||||
|
v = int(packet[:3], 2)
|
||||||
|
packet = packet[3:]
|
||||||
|
|
||||||
|
# get type
|
||||||
|
t = int(packet[:3], 2)
|
||||||
|
packet = packet[3:]
|
||||||
|
|
||||||
|
# literal, no other sub packets
|
||||||
|
if t == 4:
|
||||||
|
value = ''
|
||||||
|
while True:
|
||||||
|
l = packet[:1]
|
||||||
|
value = value + packet[1:5]
|
||||||
|
packet = packet[5:]
|
||||||
|
if int(l[0],2) == 0:
|
||||||
|
break
|
||||||
|
return (int(value, 2), packet)
|
||||||
|
|
||||||
|
values = []
|
||||||
|
i = int(packet[:1], 2)
|
||||||
|
packet = packet[1:]
|
||||||
|
if i == 0:
|
||||||
|
l = int(packet[:15], 2)
|
||||||
|
packet = packet[15:]
|
||||||
|
n_packet = packet[:l]
|
||||||
|
packet = packet[l:]
|
||||||
|
while (len(n_packet)):
|
||||||
|
(tmp_r, tmp_p) = decode_packet(n_packet)
|
||||||
|
n_packet = tmp_p
|
||||||
|
values = values + [tmp_r]
|
||||||
|
|
||||||
|
if i == 1:
|
||||||
|
l = int(packet[:11], 2)
|
||||||
|
packet = packet[11:]
|
||||||
|
for x in range(l):
|
||||||
|
(tmp_r, tmp_p) = decode_packet(packet)
|
||||||
|
values = values + [tmp_r]
|
||||||
|
packet = tmp_p
|
||||||
|
|
||||||
|
if t == 0:
|
||||||
|
return(sum(values), packet)
|
||||||
|
if t == 1:
|
||||||
|
return(numpy.prod(values), packet)
|
||||||
|
if t == 2:
|
||||||
|
return(min(values), packet)
|
||||||
|
if t == 3:
|
||||||
|
return(max(values), packet)
|
||||||
|
if t == 5:
|
||||||
|
return(int(values[0] > values[1]), packet)
|
||||||
|
if t == 6:
|
||||||
|
return(int(values[0] < values[1]), packet)
|
||||||
|
if t == 7:
|
||||||
|
return(int(values[0] == values[1]), packet)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
with open("input01.txt","r") as f:
|
||||||
|
for packet in f:
|
||||||
|
packet = bin(int('1'+packet.strip(), 16))[3:]
|
||||||
|
(result, packet) = decode_packet(packet)
|
||||||
|
print(result)
|
Loading…
x
Reference in New Issue
Block a user