From fc8320bdd00a112a8e9af642bf156c7873fb4e98 Mon Sep 17 00:00:00 2001 From: a Date: Fri, 11 Dec 2020 15:16:01 -0600 Subject: [PATCH] add 2019 --- 2019/00/00.py | 6 + 2019/00/input.txt | 0 2019/01/01.py | 15 + 2019/01/input.txt | 100 +++ 2019/02/02.py | 31 + 2019/02/input.txt | 1 + 2019/02/input_sample.txt | 1 + 2019/02/input_sample2.txt | 1 + 2019/04/04.py | 27 + 2019/04/input.txt | 1 + 2019/06/06.py | 33 + 2019/06/input.txt | 1799 +++++++++++++++++++++++++++++++++++++ 2019/06/input_sample.txt | 11 + 2019/06/input_sample2.txt | 13 + 2019/08/08.py | 32 + 2019/08/input.txt | 1 + 16 files changed, 2072 insertions(+) create mode 100644 2019/00/00.py create mode 100644 2019/00/input.txt create mode 100644 2019/01/01.py create mode 100644 2019/01/input.txt create mode 100644 2019/02/02.py create mode 100644 2019/02/input.txt create mode 100644 2019/02/input_sample.txt create mode 100644 2019/02/input_sample2.txt create mode 100644 2019/04/04.py create mode 100644 2019/04/input.txt create mode 100644 2019/06/06.py create mode 100644 2019/06/input.txt create mode 100644 2019/06/input_sample.txt create mode 100644 2019/06/input_sample2.txt create mode 100644 2019/08/08.py create mode 100644 2019/08/input.txt diff --git a/2019/00/00.py b/2019/00/00.py new file mode 100644 index 0000000..dc8d2c1 --- /dev/null +++ b/2019/00/00.py @@ -0,0 +1,6 @@ +with open("input.txt","r") as f: + input = f.read().split('\n') + +part1 = 0 +part2 = 0 +print(part1, part2) \ No newline at end of file diff --git a/2019/00/input.txt b/2019/00/input.txt new file mode 100644 index 0000000..e69de29 diff --git a/2019/01/01.py b/2019/01/01.py new file mode 100644 index 0000000..6986ed2 --- /dev/null +++ b/2019/01/01.py @@ -0,0 +1,15 @@ +with open("input.txt","r") as f: + masses = [int(x) for x in f.read().split('\n')] + +def fuel_required(mass): + return mass // 3 - 2 + +def fuel_required_recursive(mass): + fuel = mass // 3 - 2 + if fuel <= 0: + return 0 + return fuel + fuel_required_recursive(fuel) + +part1 = sum([fuel_required(mass) for mass in masses]) +part2 = sum([fuel_required_recursive(mass) for mass in masses]) +print(part1, part2) \ No newline at end of file diff --git a/2019/01/input.txt b/2019/01/input.txt new file mode 100644 index 0000000..9040b87 --- /dev/null +++ b/2019/01/input.txt @@ -0,0 +1,100 @@ +147077 +148686 +71851 +98056 +65024 +87254 +146003 +128542 +136657 +91885 +91904 +78806 +58210 +67520 +118393 +68344 +69593 +135370 +111892 +84153 +105683 +76166 +112780 +145179 +83811 +61481 +118277 +59732 +72222 +64606 +55645 +82168 +97590 +122479 +120365 +103057 +76225 +148099 +100610 +75592 +148678 +132756 +55335 +77094 +73992 +95097 +92382 +78885 +93657 +121709 +114261 +90565 +110043 +145497 +92066 +109833 +76107 +143941 +67084 +139407 +56730 +131457 +110026 +85632 +74239 +116964 +129806 +75030 +76317 +99523 +78069 +75685 +81279 +58287 +148135 +89313 +139141 +136066 +94046 +50430 +55242 +123494 +68410 +83716 +122608 +79343 +88826 +95968 +98603 +104895 +128814 +120473 +97504 +60990 +98132 +58895 +92987 +136301 +131747 +137498 \ No newline at end of file diff --git a/2019/02/02.py b/2019/02/02.py new file mode 100644 index 0000000..a7deeeb --- /dev/null +++ b/2019/02/02.py @@ -0,0 +1,31 @@ +def process(program): + i = 0 + while True: + opcode = program[i] + if opcode == 99: + break + elif opcode == 1: + program[program[i+3]] = program[program[i+1]] + program[program[i+2]] + elif opcode == 2: + program[program[i+3]] = program[program[i+1]] * program[program[i+2]] + else: + break + i += 4 + return program[0] + +def alarm(noun, verb): + with open("input.txt","r") as f: + program = [int(x) for x in f.read().split(',')] + program[1] = noun + program[2] = verb + return process(program) + +def part2(): + for noun in range(100): + for verb in range(1,100): + if alarm(noun, verb) == 19690720: + return 100 * noun + verb + +part1 = alarm(12,2) +part2 = part2() +print(part1, part2) \ No newline at end of file diff --git a/2019/02/input.txt b/2019/02/input.txt new file mode 100644 index 0000000..7d56ddc --- /dev/null +++ b/2019/02/input.txt @@ -0,0 +1 @@ +1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,10,1,19,1,6,19,23,1,23,13,27,2,6,27,31,1,5,31,35,2,10,35,39,1,6,39,43,1,13,43,47,2,47,6,51,1,51,5,55,1,55,6,59,2,59,10,63,1,63,6,67,2,67,10,71,1,71,9,75,2,75,10,79,1,79,5,83,2,10,83,87,1,87,6,91,2,9,91,95,1,95,5,99,1,5,99,103,1,103,10,107,1,9,107,111,1,6,111,115,1,115,5,119,1,10,119,123,2,6,123,127,2,127,6,131,1,131,2,135,1,10,135,0,99,2,0,14,0 \ No newline at end of file diff --git a/2019/02/input_sample.txt b/2019/02/input_sample.txt new file mode 100644 index 0000000..d3e6587 --- /dev/null +++ b/2019/02/input_sample.txt @@ -0,0 +1 @@ +1,9,10,3,2,3,11,0,99,30,40,50 \ No newline at end of file diff --git a/2019/02/input_sample2.txt b/2019/02/input_sample2.txt new file mode 100644 index 0000000..b689629 --- /dev/null +++ b/2019/02/input_sample2.txt @@ -0,0 +1 @@ +1,0,0,0,99 \ No newline at end of file diff --git a/2019/04/04.py b/2019/04/04.py new file mode 100644 index 0000000..5f457e8 --- /dev/null +++ b/2019/04/04.py @@ -0,0 +1,27 @@ +passwords = [str(p) for p in range(172851,675869+1)] + +def monotonic(password): + digits = list(password) + if digits == sorted(digits): + return True + return False + +def at_least_two_adjacent(password): + digits = list(password) + for i, digit in enumerate(digits): + if i+1 == len(digits): + return False + if digits[i+1] == digit: + return True + +def exactly_two_adjacent(password): + if not at_least_two_adjacent(password): + return False + digits = list(password) + for digit in digits: + if password.count(digit) == 2: + return True + +part1 = [p for p in passwords if monotonic(p) and at_least_two_adjacent(p)] +part2 = [p for p in passwords if monotonic(p) and exactly_two_adjacent(p)] +print(len(part1), len(part2)) \ No newline at end of file diff --git a/2019/04/input.txt b/2019/04/input.txt new file mode 100644 index 0000000..b3f8da5 --- /dev/null +++ b/2019/04/input.txt @@ -0,0 +1 @@ +172851-675869 \ No newline at end of file diff --git a/2019/06/06.py b/2019/06/06.py new file mode 100644 index 0000000..3c4b4b6 --- /dev/null +++ b/2019/06/06.py @@ -0,0 +1,33 @@ +with open("input.txt","r") as f: + lines = f.read().split('\n') + orbits = {} + for line in lines: + parent, child = line.split(')') + orbits[child] = parent + +def depth(node, graph): + depth = 1 + parent = graph[node] + while parent != "COM": + depth += 1 + parent = graph[parent] + return depth + +def parents(node, graph): + path = [] + parent = graph[node] + while parent != "COM": + path.append(parent) + parent = graph[parent] + return path + +def orbital_transfers(start, end, graph): + path1 = parents(start, graph) + path2 = parents(end, graph) + set1 = set(path1) + set2 = set(path2) + return len((set1 - set2) | (set2 - set1)) # union of differences + +part1 = sum([depth(x, orbits) for x in orbits.keys()]) +part2 = orbital_transfers("YOU", "SAN", orbits) +print(part1, part2) \ No newline at end of file diff --git a/2019/06/input.txt b/2019/06/input.txt new file mode 100644 index 0000000..1a725c0 --- /dev/null +++ b/2019/06/input.txt @@ -0,0 +1,1799 @@ +797)67Y +W32)48L +J31)N9K +QQ3)NVL +MP6)JBY +8T3)H27 +DRK)THF +BSN)7MD +Z2G)VRX +CVV)XDC +WVW)SV6 +D3H)QMG +9BM)NTH +4T7)FQS +F58)D1Q +CR7)B7L +4W8)T9Z +5SB)5JB +DRJ)YQD +76X)X1Z +WC9)LNG +52C)W7J +9ZS)KM7 +3RW)C8R +7RQ)TJW +HVN)ZNQ +SQK)CBT +GWC)N76 +KBQ)W44 +QD5)RVQ +SQF)N3K +RZ1)B2R +TB5)34W +J56)CQD +34Y)HLX +DTM)TD4 +2RF)SQV +GJT)TFD +CNK)88B +PJD)GD8 +4V8)FQN +HKH)6RS +7T4)2JT +DBM)DMQ +59X)137 +HK7)B62 +D34)K7Z +RR2)M74 +Q13)FC5 +1F1)8XJ +K1L)QZ9 +T73)4VT +Z7S)59X +1MQ)GB6 +BJT)4BZ +WW8)DT2 +JYL)6SH +R2K)WC9 +21H)4ZD +Z7Z)QWZ +F8N)LRZ +QZ9)9TD +3DP)VDT +GZK)ZGF +G3P)KLZ +7ZM)G3P +3VX)P4H +7T4)LNV +VVV)Q99 +BYX)87K +4C1)9XS +SB3)4SV +FYV)JQ4 +HQ4)ZMR +K7Z)LKT +TQM)BBH +9V5)PJD +7VB)H6L +66X)FDY +NT9)17R +K9Z)T26 +1BX)VRN +TJD)5ST +QWZ)5CT +MD6)GJT +TT1)W3Y +B2R)444 +MB8)NFN +FB1)4T3 +V3Y)DJ7 +2GQ)265 +SLV)G3B +THF)DC1 +HRR)LV1 +QZ7)ZR5 +VGS)ZCG +CRY)3L3 +3N2)CZ4 +Y1B)3WF +YK2)W5C +X15)8ZW +92C)3PV +7Z8)Y4B +PWF)NX2 +GPR)QVR +TDL)TRM +W4X)8TH +23H)6KK +4X2)TXV +HQ9)52C +LRG)RWM +38N)YVB +W7F)BSM +3VC)FQC +PS7)Z7Z +2YX)QSG +9PB)4KF +VRX)K9Z +TRM)R2K +WYB)NRD +HJ2)5LM +ZRJ)WWL +7TW)WZR +CBX)7S2 +V4N)FSN +17B)88D +F91)LWV +L54)9G4 +592)YC1 +J24)9KW +GNP)Y7T +KDP)22T +ZNQ)QFZ +8NW)MKC +VSJ)NTD +137)VQS +YB3)MP6 +38W)DLK +CJJ)683 +59N)GHZ +W3Y)P9Y +733)V2Q +WX6)4GM +RRP)HG8 +L6L)YZZ +QRW)YZX +1FD)RMT +HSJ)5V9 +RVQ)1KY +9K7)72H +V6S)75V +NB1)SDT +J5N)4R6 +QD7)1SR +J6W)3FL +2GQ)FQM +J5N)2K9 +2B4)R23 +4L5)QXX +7J4)42R +6X7)H2X +8D1)LH7 +592)J4Y +6CM)4GW +R6V)KSD +FDL)NKS +P4H)8RZ +46M)L1N +M64)M4K +6K3)KZ9 +FH8)1SS +DJ7)BMS +MG1)RQ9 +ZRH)5G1 +TMT)VQG +11V)W7N +ZM5)QHZ +DSL)8GB +YK5)38P +C1Y)YYJ +H61)8N2 +T7W)VVJ +THR)M7F +XXH)3H3 +TVX)595 +B2B)KBF +76Z)DGL +9PR)X23 +ST7)G8Q +1FP)FH8 +Q5F)7V2 +XKP)2VC +47G)1ZG +QXX)8XD +MNG)KNF +RF3)XD8 +K4F)PLX +66D)LXG +TQW)5SP +SBR)ZFT +NMH)8W7 +N79)YBM +BK8)JY9 +NKS)H8K +LQ5)SNS +TVR)N6T +QXP)M92 +YMD)HM8 +T84)25S +Q6K)M3K +R23)MZM +CTB)B9Z +DT2)718 +9ZD)GXG +KKV)N5K +GBK)TKG +TRG)GMW +KFY)PLY +LSP)RG9 +Z31)MBP +LXF)LFF +3JC)MS6 +CRY)6ZK +67H)Z6Y +B9Z)674 +TWJ)DW2 +1PR)4WW +X1J)QZR +128)FLG +GTT)75S +67Y)HNK +H2L)ZRX +9V6)RF3 +GRX)TDC +WJR)68N +129)QJ4 +FY1)PWF +F5D)RQM +S7K)PVL +88B)C23 +YV9)136 +5C8)X6V +LDQ)1FD +N55)WYB +WZB)ZT8 +SYH)QVB +FWZ)SFX +ZVJ)VXP +L5V)J31 +8ZW)4HG +49B)J24 +6LC)Z98 +G83)4V8 +BGX)J9B +6XF)MQJ +54P)BTC +83Z)KZP +BZZ)J9P +RL5)QXQ +YMQ)HH4 +3XQ)64P +3BG)SBJ +X7P)N8Y +3HN)L4S +T1P)H61 +ZJR)ZZR +1SH)JY7 +KTB)LYF +ZLF)BXG +G3B)BRS +8JV)46M +KDX)TP4 +DPC)T8P +VRQ)G56 +2JZ)M64 +YY2)1J2 +VSJ)G7W +SJ3)L68 +19W)SMN +KJX)GNP +7S3)RP1 +VCS)MKK +8C6)7TR +NY3)2LY +9N2)GVQ +9Y1)K9W +PLX)V6S +38P)QNP +V2D)J4Q +TGL)NMG +2N2)NXX +ZBW)G5C +88Y)QTV +NPD)B9Y +NFR)HHP +9Z9)Y49 +NTH)LG9 +RG9)HHS +Y3P)D7W +D38)4JL +MF5)XGZ +4BB)DJJ +1XF)BZ4 +F4Q)MHQ +7QN)FPZ +98T)DXP +MLJ)DMR +ZZC)7P2 +5G1)7T4 +J9B)VR4 +W7K)1LP +8Z2)4K2 +N1N)DS1 +T73)TQW +RQV)HCS +T8P)6XS +CNK)9WG +3RP)43B +S2K)Z2G +Z3H)P8G +BZ4)QVP +W7J)BN5 +ZNJ)91T +6V7)CLD +6SH)6L9 +XLQ)YBC +BWN)6RL +DRK)NBG +5ST)LR7 +BPM)DNV +3H7)WYV +WNF)BS9 +FY1)6K9 +3T2)3P4 +B45)S1Q +BKX)9ZD +Y7T)9PR +BRS)92N +QLQ)75L +XMQ)XTF +N8Y)LSJ +4Q1)2MG +NT9)NRL +7NT)F18 +NRD)CFJ +MDW)QXC +QMG)LCN +LSJ)L24 +44J)V5Y +186)18R +91T)RM1 +P4B)XVT +JN4)128 +JXZ)6PZ +Q36)3RP +6K1)T2C +3S8)3VX +42R)QSD +3WF)66X +LB2)XXH +G3Y)SB3 +44G)J99 +HPK)2X5 +7NH)HGJ +2W6)HTC +HM8)FS4 +XFD)9FK +643)L1R +3SQ)VB6 +8BQ)N5L +2X5)J3R +1ZS)8LF +21Z)SLK +YL7)FQH +RKK)DMZ +TNY)F96 +Y2F)FRV +MN7)BZZ +38X)KWN +75F)8WP +ZR5)N7W +F65)2VB +5PT)84N +F9Y)HRR +SVL)RXH +RB6)NFR +QTV)8CV +58Z)BWN +FQN)BK8 +WXC)MLY +683)HF6 +T5X)6X6 +BC5)WZB +J2H)SQF +DBM)LJQ +FQS)SWH +BFC)SLV +45B)7F8 +Z12)6DS +DP1)3T2 +SLK)BBN +34Q)6V7 +X66)DCJ +V1V)X6C +MR9)Z9T +PMF)VP9 +VCL)GNN +B7L)KQ2 +95C)F58 +2RF)YJJ +KNF)5X4 +GJT)YZJ +N9K)XTN +T84)HZW +TJN)6QJ +TB5)Z7W +YKV)YMQ +W6T)1CV +1G3)5ZB +LXG)3MK +YJN)TTD +2Z7)KJN +HHS)KKV +KQ2)D3W +M32)3SK +528)49L +CVH)LB6 +QSY)C6J +VQS)KFY +VPJ)95Q +2MG)GCK +B2N)9QV +6N5)5FX +F25)QJB +92Z)7QN +7XN)G62 +WQ8)61N +X8F)HG1 +6Z4)3YQ +MHQ)SAN +XR9)5XJ +891)H43 +VTD)1BJ +48L)MV7 +W7W)BQT +S9W)42J +7P2)ZV9 +TW7)DXK +CBG)2JK +7H8)KRG +GDW)W4X +G8X)2NW +J99)Y5T +VP9)83G +D17)DKJ +1YF)W9J +RSH)T43 +4SV)6V6 +M7D)QRQ +3WC)CJJ +45R)45B +WFN)21H +4HG)8C6 +NFN)BC5 +XWF)BWG +NHR)ST7 +H83)NXB +3SK)7GB +ZKW)D34 +VDT)1SH +33V)N7F +M8Z)4W8 +XPD)WXC +FRY)Z2V +JB4)WR2 +YPF)8T3 +C8R)LRK +V8L)WQ1 +28R)Q7Y +C52)Z18 +CBY)GLF +PXR)1F1 +4XM)CFG +J8G)V11 +RVN)9V6 +FZQ)B4V +775)3HN +1B2)X42 +VD7)6GY +5WS)91M +JJ2)3RW +3RG)8PX +H4W)KHD +B4Z)J56 +8XP)ZHJ +FZ4)6DZ +3QM)1XJ +KQD)WDC +BNV)87P +GHZ)B2J +J4Y)PXR +BMM)LVJ +4JK)WZN +TTD)KNL +TW2)9JZ +6KK)DPC +RZV)FK8 +3DR)VSR +PDP)76Z +N7H)X7P +J4L)7VB +2HT)DSL +MV7)ZL3 +Q7Y)FHP +7BM)2HT +4KF)FX7 +B62)DHN +FJ4)775 +Z1V)XFQ +N6T)7MV +136)F4M +FBW)FGV +W5G)Q7R +2G5)21B +F76)LLY +VCX)WJB +BN5)B2N +ZVF)9HQ +BMJ)D17 +1Q1)Y6J +6TV)MR9 +9FQ)1MQ +FC4)VCT +V2C)YDS +8N2)T7W +N5K)RY7 +YPH)WGN +RPY)TVY +6BQ)JJF +1SZ)KDP +1WL)DQW +ZXR)BT3 +MS6)JN4 +4ZD)DBM +3RL)BM4 +4DK)SVL +YZ4)XR1 +5R1)FMZ +8W7)JS1 +KWN)GZK +SR5)L9J +JX6)X5V +YBC)3S8 +H48)BTY +FL4)6WC +GB6)285 +64P)B4Z +HCS)LK1 +Q5F)R6V +JDC)HKH +PWR)916 +RDW)TRJ +V11)9L8 +HXY)9VS +RP1)CZD +B9Y)891 +P1G)FRZ +QTV)B92 +VB6)LYJ +3FL)7PW +QLM)L54 +LYQ)6LC +Y5Q)MD6 +KQ2)KJX +GQG)1K8 +SY7)WK9 +77W)K1H +65Z)RFV +H54)4P4 +95Q)KTB +VMB)DZS +F3C)1N5 +T26)7WW +MSL)CWB +QF5)6LN +TWH)MGK +73Z)7KR +VPP)LR8 +129)CBX +G8Q)L5V +9V7)RLB +B2X)YPR +T2D)M3M +TT1)4QD +89C)JCX +T7S)7QJ +6WC)SXQ +Z3H)YPM +MBP)7Z8 +D3W)G83 +QXX)74K +SSB)V2D +QVM)ZBL +WZ1)Z6G +D8J)GQG +9CF)F1C +YDP)TWH +FZ9)T3M +ZTQ)V9X +RX7)7F1 +L3H)6NF +BSM)TBV +Z2V)D6G +YS7)W32 +LWV)7ZB +PSP)YJR +49C)DWM +88D)3SZ +LX9)G2Z +46D)GKR +Z7W)1PR +PWK)NY3 +WDC)Z1V +ZGF)PBN +W28)HX3 +5WQ)49B +DYK)B5C +4R6)HK3 +HZ2)N7H +MN8)G4Y +SJW)B2X +4M5)6QW +YVC)PDW +D1Q)C97 +3SZ)7FW +N6M)MF5 +P53)XWC +G46)RDW +F6H)G9N +XTF)BNV +6LC)K8B +2XV)813 +7TR)J26 +HC4)K38 +9QV)VG8 +F7Y)58Z +N7W)V4N +YZX)35W +VCJ)1SN +R85)1FP +WHT)681 +QCJ)RHP +2T5)ZTX +VXP)XKP +DVZ)2VX +RDF)6FN +DLR)RXK +M66)F8N +BQD)TW1 +9L8)2BL +4T5)M36 +8FJ)3PK +MLF)7TW +LR8)VZJ +TMH)P2Z +8TH)LFP +FB6)66D +3P2)4T5 +BGZ)K4F +75V)F4Q +TP4)8K6 +4JL)KGH +N5L)LFC +F5D)WN4 +RMT)T5C +1JB)XSJ +MDB)WDX +Y4B)765 +1BY)MDW +KYQ)48R +KDD)6K3 +YZ2)517 +DC1)V5V +JS1)6C9 +FVR)3L7 +CCQ)HQ9 +LB6)JPM +SWH)W28 +WVM)K8N +L7T)GPF +4X5)98T +J1V)97M +XHZ)FZQ +J2L)CQ1 +Z9T)W7F +3XQ)F25 +XYS)M66 +PFM)92C +144)F91 +7ZB)PFM +GPK)HXY +BBN)MLJ +1KY)3QM +7FW)8BQ +NP8)N2C +CLY)QLQ +HN5)VD7 +1CV)H7D +QCJ)TDZ +G9N)HLN +WYK)8H7 +NRL)QXS +XMF)WHQ +SQV)2G5 +YQM)VZX +NMX)SR5 +T4P)6VG +3SQ)S47 +1BJ)Q36 +QXS)51X +HX3)KGJ +28V)GGC +2VC)6BL +4Q8)RVX +CKW)GTT +JX4)XCB +NDH)Z8W +HJ2)S2K +S6Z)NMX +N76)6TV +RLD)Q8V +R1Q)K7V +FRV)RQK +FJF)RLS +KBF)SWF +VJP)Y2F +LW6)PMF +7MD)67H +456)S3D +DW4)23D +KVT)CVH +NGC)1YF +FX7)JX4 +674)HBV +77G)7H8 +MZ6)528 +NX2)WGD +TZR)CLZ +YY7)4TQ +K8B)GR9 +S1Z)WF2 +H5F)CKS +W3R)J1V +DTH)28R +9SK)7NH +Q8V)X9B +WJB)4FK +5SP)VJP +3ZL)8Z2 +C6J)H85 +YR7)4JK +YS7)RVN +BPM)H83 +Q1Y)ZWH +4JM)561 +MVM)6X7 +T6Q)TW2 +TPT)47G +QVB)144 +VSR)H48 +GPS)FJF +RFB)T4B +VP7)3C9 +2D8)FZ4 +DWM)Y61 +YJN)C52 +1JB)ZG5 +2K9)J7F +3MK)4XM +YB3)PS7 +COM)WV2 +PDW)T1P +4YP)Q13 +BTC)ZBW +9FS)37V +87P)XP2 +7F1)RTN +HKR)ZKW +NHL)2XV +PP4)CBG +SDT)9CF +HLN)GBK +Y21)GPS +H42)FJ4 +FFZ)DDD +SF7)YZ2 +LP4)VSK +FK8)W5G +RFF)2FM +517)FDL +9FK)TW7 +83H)S1M +S4T)D8G +9TZ)89C +G7W)VMB +4TQ)V7H +JGP)Z95 +V9X)VCS +8P7)DN2 +WKZ)95C +L9J)Z8M +M36)FHD +BBH)T3G +XHZ)DP1 +VZJ)39J +FVR)YV9 +Z95)XK9 +D5Y)HTZ +8JH)ZXS +B9D)VHJ +YQD)XPD +9Z8)ZRT +285)X66 +F94)D5Y +C23)G3T +7SR)PWR +LK1)K79 +X42)8JV +3K2)LSP +DHH)QF5 +B92)H2L +7QJ)MPR +FYH)BYX +QCT)PFC +VQG)PQ8 +KNL)4SC +QJB)YOU +YKH)YY2 +S1M)T92 +6PW)11V +HMT)CQY +FHD)MTV +Z6G)PVR +4Q1)6N5 +N3M)38W +VCT)CCQ +9KW)BMF +QSG)4C1 +J7T)GST +FVN)TY8 +X6C)4YN +KRG)Q1Y +CDD)7FS +KDM)K1L +NXB)QR4 +XFQ)FZN +1T4)KYQ +QVR)34Q +W6S)TSK +XLD)YKH +75R)TH8 +T9Z)5NG +C97)YJF +PSZ)33Z +GNN)R49 +36J)N3H +MYL)N1Z +WPP)RHG +2VX)T6Q +XP2)DG9 +S21)Z1Q +NMG)YDV +SLV)BGZ +931)KQD +1DB)XGB +SXQ)WCX +K59)XBB +TXV)ZVF +DG9)Y3N +H27)3ZZ +XY8)ZZC +Q7R)V8L +W9J)WFN +8H7)J1X +QJ4)DXJ +GST)Q6K +YDS)JXP +GMW)83M +TFD)P3N +XTN)PKR +9HQ)5H6 +BTB)685 +3PN)D3H +6NT)F3C +JXP)77W +D8G)XHY +QZ9)L2J +75L)SQK +XWC)8YX +L1N)GS2 +JQ8)31Y +TZQ)FVK +DN2)YPH +DW2)8NW +RRQ)2T5 +S81)DT5 +S3X)V3Y +XBB)FVR +BFV)9DQ +9PR)Z3Z +92N)PLM +B5C)NZR +3C9)LJ5 +CQ1)HPK +LR7)BGX +37V)D61 +LRK)SP9 +JY1)HQ4 +RQM)WKZ +8X9)TJQ +DS4)KWB +LG9)JXZ +HG8)MN8 +KGJ)BYK +2JK)FMR +WB1)GB9 +WGD)TT1 +Z3Z)RTL +CDQ)6PW +8V8)2HD +CCC)W7K +YMQ)1WL +GRY)WB1 +4QK)DS4 +FQH)SSB +Z8W)648 +GPD)Q5F +ZBL)LCK +6RL)ZTM +7MV)6Z4 +QSY)B9D +N55)SVN +G62)1B2 +91R)Q1L +G3P)GX2 +PVL)1YW +J9B)JJ2 +TNS)PHY +MGK)XZG +RFV)3XQ +1XJ)23H +G3T)Z5H +3RK)T1W +T92)MXC +XDC)HG6 +WJQ)PRY +XCB)D8Z +K4R)K32 +XYS)46D +RK4)931 +7FS)442 +RQ9)YV4 +KFV)RDF +YC1)2B4 +CBT)WHT +JGZ)RTB +C19)HYY +RM1)PDP +SFX)RK4 +V5V)JYL +RXK)T57 +17R)3DR +CQL)JK6 +SP9)WVM +ZG5)T7N +QD7)YL7 +ZFT)3RG +PLM)SH8 +RP6)VPP +12T)K4R +G9F)KFV +MGG)72P +85L)DPB +GWP)L6L +NHD)WYK +XK8)9ND +T5X)ZXY +6QJ)8X9 +4MY)RP6 +WN4)W9L +7CW)JH8 +1JN)R7V +7KR)Q1G +YHT)5WR +GLP)FHT +59X)TLM +8LS)RKB +4MY)LKV +NQW)VPJ +J7F)R1Q +WWL)77G +LH7)YVC +LR2)SVZ +826)2Z7 +C8R)HJ2 +8WP)GFJ +X23)FB6 +RM1)76X +1Z6)BMJ +1FR)51P +LCK)VFT +ZL3)75R +KWB)L7T +6ZW)826 +NZR)3K2 +FQC)VHL +YPM)YPJ +2FM)CNL +4TQ)HTP +WGD)36J +PBN)9FQ +YVC)C2P +S49)YJN +QLX)SZC +Z8W)BFC +3ZZ)8D1 +WJV)JDP +Z7W)QPK +VZL)9VZ +KLZ)K5Q +SWS)TPT +R68)VFM +SXM)J4L +L71)BTB +8GB)6D5 +9WG)P6P +J52)SYH +D6G)T25 +TBV)F9Y +R3Y)NHL +5XF)S84 +VTZ)Z31 +HZW)XMT +DGL)W6S +7TN)QJN +2JT)WJQ +XSJ)9XN +YG4)X15 +JY7)DTM +B9Z)MGG +YJJ)Y8G +B4V)R6F +TFF)TDL +TNS)FYH +FDY)CCM +HG6)H2H +N5L)Z2N +FWZ)V1Z +CFG)GYM +23D)BJT +BGD)CLY +GXG)9FS +ZWH)T73 +J24)D4X +88N)BGJ +LH7)K5Y +3MC)7S3 +TJW)Z7S +ZK7)695 +1DM)19W +51P)DVX +N1Z)1SZ +JPM)3N2 +6D5)M32 +VVJ)KDM +FHP)19S +WCX)VZL +4FK)5XF +DZQ)SWS +QRQ)J52 +RHP)ZHT +5RR)92Z +3P4)D5N +1XJ)38N +YFB)C19 +1MT)S6T +8K5)QD8 +W86)NGC +ZV9)8FJ +GYM)GDP +7LS)HMT +LCN)S7K +K32)7RQ +NFR)S6Z +Q6K)CNK +LYF)RRP +8XJ)R6G +N1Y)DZQ +PQ8)H78 +HYY)J2H +8MB)5R1 +YDV)4GG +8YX)V62 +84V)46L +LNV)KVC +6X6)TMH +BPL)33V +6V6)YMM +JZJ)QWP +4T3)VSJ +DNH)JX6 +ZFT)VCX +KSD)YMD +HYR)F64 +GLF)7Q6 +FPT)84V +R6G)YK5 +NNT)H4W +TJD)WKD +RWZ)VMM +NLW)85L +4YN)SQR +8N2)9ZS +N3K)YHT +2S1)SYL +CCM)5MS +GVQ)HC4 +VM5)W3Q +WQ1)FWZ +RQK)GZM +HNK)8DX +D6J)GRY +TZQ)RZV +WHQ)SVY +WVM)3DP +Z7Z)PKM +C2K)N1Y +Z2N)9HB +CRZ)4YM +H78)MB8 +8RH)8LW +NBG)2BG +XSW)TMT +561)LRG +1N5)4M5 +FLW)YBZ +6RP)3QH +M92)R58 +CZ7)RDL +FGV)ZPV +RXF)CDQ +9XS)W7W +9VZ)4X2 +VRX)WPP +LYJ)VXH +681)YSC +PFC)5CQ +7G7)X8F +T57)FY1 +Z8Z)BKX +Z5P)YDP +CQD)T1D +8HF)BSN +YZJ)HVJ +KRL)N55 +4KR)4DK +P2D)KVT +RLC)YPF +GX2)4JM +V2Q)7F5 +FQM)L2G +SGD)WC5 +HTC)SJG +F1C)GDW +WDX)G21 +HBV)CVV +7F5)1Z6 +LNK)HFD +JB4)DFP +7S2)85B +S1Z)HKR +2LY)LX9 +T2C)DGK +HLX)Z6L +4FM)NDH +TRJ)TQM +49L)JY1 +MPR)3T6 +CWM)9SK +52C)9BX +JBY)DVW +V9C)DLR +ZHT)86L +MBH)NG2 +7SR)G4D +35M)MYL +NTD)QCT +2TX)1P3 +8RZ)8VK +WYP)N2S +7Z8)2RF +SJG)29X +7WW)GDT +VRN)QZ7 +7LG)YK2 +765)XLD +P3N)TRG +GCK)RSH +TLM)GPK +M79)4FX +XGB)RL5 +RXH)PKH +YHB)LR2 +265)1G3 +MCG)NHR +3PV)BPM +LM3)TFF +Y49)1BX +GB9)W1Q +GKR)45R +2LF)CHQ +595)X41 +W2G)7CW +YB6)83Z +8LF)2W6 +GJG)H42 +PKR)3Z6 +FLL)G7S +WZS)ZFJ +GB4)88N +8BK)CQM +9VS)W2G +5CT)YYD +G4Y)N79 +KJN)Y1T +RY7)LBS +K16)FLL +YPF)LW6 +SBJ)CRY +4DZ)186 +4GG)5WQ +KDV)4DZ +Q1L)H54 +R9Z)733 +YPJ)GLT +LNP)WVW +XPD)21Z +9V2)HK7 +4WW)37W +8K6)FBW +R3Y)LM3 +5M2)VM5 +ZNJ)DVZ +DVH)1NW +GLT)HM1 +SLK)PWK +84N)6K1 +GS2)88Y +K1H)GWP +4GW)ZRJ +DVX)PZG +VSF)5GL +WBS)4DV +8XD)S49 +V6J)4T7 +75S)YKR +GZM)BGD +NKS)LKD +29X)LYQ +JY9)2YX +HBY)73Z +BMF)LP4 +T4B)KC2 +87K)5M2 +QZR)FLW +GR9)KRL +TXB)6NT +4FK)4MY +B31)2LX +TG1)4YP +BQT)LNK +TW1)RB6 +3L7)T4P +Z8Z)N3M +6TF)CR7 +LFC)R33 +37W)1FL +CQY)J5N +S4G)VTD +ZT8)RZ1 +5CQ)1FR +BXG)FB1 +9G4)BPL +ZCG)F65 +ZZR)2NC +WZR)59N +6C9)V2C +ZFJ)P1G +CWB)KYN +SY4)R85 +DLK)9V2 +2LX)VGN +5JB)GPR +QHZ)9K7 +D8Z)2LF +395)NB1 +1FL)FBF +5MS)4XD +HF6)49C +JL7)YDQ +33Z)TG1 +CXL)X8Y +KYM)8XP +RTB)54P +LZ3)WJR +6DZ)969 +FC5)XH7 +DKJ)MCG +QCR)VCJ +W32)QXP +2XS)7LG +Z6G)KDX +H43)1SJ +R7V)G7M +YV4)8V8 +D4X)1Q1 +QSD)3KQ +SFX)M6F +DZ2)4DY +6K9)1DB +CZD)2TX +3Z6)RRQ +72H)3H7 +7BM)QRW +P1G)NPF +85B)71W +FRV)MMC +21B)5RR +CSL)VCL +XGZ)CDD +2B4)V9C +QD5)T2M +VMM)456 +G56)S1Z +NR6)C1N +NXX)HMR +H2H)XSW +D7W)GPD +JBY)ZNJ +WKD)KDV +7PN)MD2 +GDT)G6Q +LV1)7XN +3KQ)RHW +SWF)XLQ +YDS)FL4 +45R)Z8Z +K4F)K59 +HLJ)QD5 +11H)MX8 +MKC)VH3 +G21)NT9 +QXQ)L6Q +VJ2)GFS +HWJ)P4B +B33)3P2 +W28)2QR +C1N)8LS +9KW)PSZ +74K)6ZT +B23)WZ6 +PPG)GJG +PKM)4QK +BS9)T7S +F96)39P +444)RM5 +T6Q)BWD +S7K)M7D +YYD)M79 +D1P)116 +4DV)J6W +J7F)FRY +SVY)TZQ +8PX)1ZS +QFZ)NKW +FD8)YB6 +CLY)X6W +1YW)RFB +648)3MC +7D7)8TJ +DT5)B33 +T3M)5C8 +31Y)FYV +T43)75F +H46)RFF +3BR)J8G +7S7)WBS +G9F)C39 +2QR)12T +MKK)7LS +D1P)RX1 +X8Y)CS3 +7PN)CRZ +QMG)XNK +YMD)3JC +YSC)S21 +DKZ)VWQ +C1Y)G9Y +DS1)Z4P +T2M)9BM +38X)XMF +MZM)DZ2 +DXK)YQQ +HGJ)YZ4 +VCL)7BM +ZPV)SN4 +7J9)6XF +QWP)RKK +TSK)CQL +BMS)TVX +NPF)VJ2 +KC2)NP8 +MX8)YQM +TH8)RLD +KM7)F76 +ZRT)XJR +VWQ)V6J +MKC)SY7 +WGN)HLJ +CXL)4Q8 +1LP)8RH +MQJ)KD7 +7R8)R9Z +3H3)JL7 +Y8G)LNP +4VT)P51 +2NC)MLF +12H)HVN +HVJ)MN7 +SZC)7J4 +5X4)D1P +29N)NMH +8LW)L71 +YYJ)G46 +LDL)CQ3 +KHG)6MS +RR2)83H +35D)38X +SV6)XMQ +KHD)MSL +FGB)XFD +ZS2)LXF +DMQ)FZ9 +MMC)FGB +JW7)34Y +WGN)VRQ +LRZ)TB5 +6NF)4FV +DMR)9N2 +916)SY4 +83G)WJV +65M)12H +9HB)WSL +L1R)5SB +G9Y)1BT +J26)91R +WR2)H46 +2RC)K16 +QJN)VVV +4QD)G3Y +XBV)35M +QPK)RR2 +S72)T84 +Q2B)5PT +39J)MBH +VFM)QSY +G2Z)KDD +Y94)ZS2 +MTV)NPB +R49)B31 +RVX)TZR +MD2)V1V +9TD)MDB +WYV)YFB +FRZ)C2K +DPB)CTJ +5JB)M8Z +4DY)WQ8 +KGH)WZS +35W)3RK +1SN)PSP +VGN)5WS +BR8)8JH +N2Z)ZXR +TJY)29N +8JN)S81 +4FV)3Y3 +QFZ)F7Y +H7D)FFZ +TVY)BMM +8VK)395 +N3H)X1J +6RS)HQH +42J)FCX +6TF)R3Y +4K2)7R8 +BGJ)2JZ +7F8)G92 +BMS)6CM +HTZ)ZM5 +HQH)8P7 +MXC)7LR +M3K)YKV +54P)TJD +FS4)28V +7PW)WNF +HMR)SGC +V5V)HBY +RM5)Z12 +KZP)KCV +4P4)VWV +WZR)XYS +RNC)9Z8 +QR4)JQ8 +WSL)7S7 +S81)DHH +NGC)7SR +6L9)8MB +DNH)44J +PVR)124 +XZG)4X5 +M6F)CB8 +QJB)CZ7 +DQW)XBV +PKH)RX7 +GFS)7J9 +W7N)DVH +96G)DQC +BWG)W6T +2BG)129 +HHP)SJW +FGB)SBR +X6W)XHZ +5SB)MZ6 +L5G)65M +WC5)1MT +3T6)CTB +YJF)JGZ +124)LB2 +JDP)592 +WV2)4D6 +T7N)Y94 +1SJ)ZTQ +CKS)KHG +1SR)4L5 +6N5)3BR +22T)BQD +NBG)CSL +1ZG)DYK +P8G)DRK +LKD)RPY +7S3)9PB +ZTM)RNC +3QH)Y21 +VXH)LDQ +NVL)QD7 +TDC)TM4 +W5C)YHB +19S)MS9 +MNM)SJ3 +8MT)XY8 +6J1)GWC +T5C)KBQ +DC1)MVM +QXD)N8B +LKT)F5D +HM1)TNY +DQC)S9W +RTL)QGK +J1T)FPT +CZ7)2N2 +674)FC4 +FMR)NLW +TKG)1JN +1P3)GLP +HK3)VTZ +RHW)PG9 +LJQ)7B2 +5ZB)7ZM +LFP)PQW +TY8)YS7 +4BZ)QLX +9BX)TNS +S84)3PN +GGC)S4T +L5G)WX6 +25S)JZJ +WK9)L5G +LBS)9V5 +K7V)8MT +7Q6)G8X +4GN)HXM +VH3)XK8 +N8B)882 +83M)YG4 +P51)YR7 +CS3)YY7 +SVZ)N1N +X5V)G9F +G7M)GRX +39P)16T +YBM)JDC +WDC)8K5 +HLN)W9F +QVP)XR9 +442)VSF +YJR)LZ3 +86L)6TF +P2Z)LDL +PQW)PPG +CB8)1JB +W9F)CHH +VSK)RG1 +SXM)QCR +969)WYR +6VG)F69 +MLY)3VC +RDL)ZRH +X1Z)TWJ +1BT)RXF +4FX)T2D +L2J)LB5 +VHJ)MNM +Y3N)3BG +GD8)4KR +8TJ)C79 +CFJ)QVM +4YM)SXM +71W)2S1 +16T)NR6 +D5N)PC7 +S47)2RW +2Q3)QQ3 +6FN)9Y1 +PZG)6B3 +XD8)2D8 +C39)TJN +WYR)HWJ +HG1)RLC +CQM)7G7 +WF2)NPD +VWV)643 +JLZ)B2B +Z5H)BFV +LX9)1T4 +CBG)3ZL +9HQ)8JN +F18)Q7J +F4M)W86 +Q7J)YHM +6BQ)4FM +8CV)ZN4 +YPR)NW2 +VFT)FDW +DFP)JT7 +Y6J)ZK7 +C2P)CBY +3Y3)TVR +97M)JLZ +RG1)YB3 +1J2)DLX +V7H)D6J +6B3)8BK +NW2)F94 +PLY)D38 +J3R)WYP +4GM)9TZ +D34)44G +QXC)B23 +L68)797 +HH4)1XF +N2S)ZJR +JJF)CXL +L24)Z5P +YHM)JB4 +5FX)DW4 +5WR)KYM +1SS)QCJ +9V5)RWZ +ZXY)FD8 +VHL)6JG +RTN)Y5Q +JGP)H5F +2T5)7NT +LLY)TWZ +SYL)HSJ +BK8)3NR +VG8)D8J +Z18)T5X +G7S)N6M +9JZ)BR8 +BM4)8HF +DXP)7D7 +PG9)3SQ +P9Y)J7T +47G)TGL +9BX)JGP +HXM)7TN +JQ4)LQ5 +6MS)VP7 +2BL)3WC +T1W)WW8 +YDQ)NQW +1FL)Z3H +JCX)WHG +6ZK)L3H +DZS)TXB +Z4P)6BQ +Y5T)9V7 +5WQ)HN5 +DGK)C1Y +FSN)ZLF +72P)DNH +19S)K14 +QPK)FRL +6QW)VGS +5V9)2C7 +BYK)RQV +1JN)XWF +34W)6RP +QFS)SF7 +Y61)CKW +R33)NNT +MS9)4Q1 +M74)FVN +RX1)S4G +116)4BB +YQQ)MC2 +ZN4)1BY +RLS)BBC +B2J)11H +P6P)F6H +KD7)R9K +FCV)ZVJ +ZTX)HZ2 +VMM)SGD +5H6)Q2B +L1R)9Z9 +H83)FCV +F91)B45 +L4S)PP4 +2VB)R69 +YB6)4GN +5ST)1DM +3L3)J2L +ZRX)2RC +5GL)S3X +7LR)N2Z +3RL)P2D +ZHJ)TJY +DCJ)2XS +PHY)96G +MDB)QFS +SH8)LZ7 +VSF)CCC +XMT)35D +YKR)GB4 +X41)Y3P +MN8)2Q3 +LNG)NHD +K8N)DTH +H2X)J1T +5LM)Y1B +JT7)6J1 +VR4)P53 +813)JW7 +CNL)QXD +PRY)MG1 +S3D)R68 +JGZ)PXX +1NW)S72 +FYH)3RL +48R)CWM +2RW)6ZW +6DS)MNG +FD8)238 +FZN)HYR +NHL)THR +Z98)65Z +TRM)QLM +K38)W3R +4D6)WZ1 +BWD)2GQ +FRL)DKZ +WZ6)HC9 +BBN)7PN +DJJ)DRJ +3YQ)17B +KCV)YTH \ No newline at end of file diff --git a/2019/06/input_sample.txt b/2019/06/input_sample.txt new file mode 100644 index 0000000..d6db9b9 --- /dev/null +++ b/2019/06/input_sample.txt @@ -0,0 +1,11 @@ +COM)B +B)C +C)D +D)E +E)F +B)G +G)H +D)I +E)J +J)K +K)L \ No newline at end of file diff --git a/2019/06/input_sample2.txt b/2019/06/input_sample2.txt new file mode 100644 index 0000000..77456ed --- /dev/null +++ b/2019/06/input_sample2.txt @@ -0,0 +1,13 @@ +COM)B +B)C +C)D +D)E +E)F +B)G +G)H +D)I +E)J +J)K +K)L +K)YOU +I)SAN \ No newline at end of file diff --git a/2019/08/08.py b/2019/08/08.py new file mode 100644 index 0000000..3064615 --- /dev/null +++ b/2019/08/08.py @@ -0,0 +1,32 @@ +from textwrap import wrap +with open("input.txt","r") as f: + width = 25 + height = 6 + layersize = width * height + data = f.read() + + layers = wrap(data, layersize) + zeros = [layer.count("0") for layer in layers] + i = zeros.index(min(zeros)) + part1 = layers[i].count("1") * layers[i].count("2") + print(part1) + + top = [] + for i, pixel in enumerate(layers[0]): + n = 0 + while pixel == "2": + pixel = layers[n][i] + n += 1 + top.append(pixel) + + def print_image(layer, width, height): + output = '' + for x in layer: + output += x + output = output.replace("0","⠀") + output = output.replace("1","█") + output = wrap(output, width) + for line in output: + print(line) + + print_image(top, width, height) \ No newline at end of file diff --git a/2019/08/input.txt b/2019/08/input.txt new file mode 100644 index 0000000..02497eb --- /dev/null +++ b/2019/08/input.txt @@ -0,0 +1 @@ +222222222222222222222021022222222202002222222202222222220222222222222221222222202211220222102122202220212222222221222222202122210222222022222222222212222222222222222222222120022222222222122222222222222222220222222222222221222222202211220222102222222220202222222221222222212222220222222222222222222202222222222222222222222221122222222212202222222222222222221220222221222220222222212222220222222022212222212202222221222222200122220222222122222222222212222222222222222222222021122222222202212222222212222222220220222220222222222222202200220022012122222220222202222220222222202222222222222122222222222220222222222222222222222120122222222222122222222212222222220221222220222222222222212211220222122022212222202202222220222222220222221222222122222222222220222222222222222222222122022222222222022222222202222222221222222221222212222222222201221022012222202222212222222220222222211222221222222122222222222222222222222222222222222220222222222212212222222202222222222220222220222222222222222200221122012222222222222202222220222222200022201222222122222222222221222222222222222222222222122222222202122222222202222222221222222222222210222122212212220222102121202222202222222220222222222022112222222222222222222211222222222222222222222221222222222212112222222212222222220221222220222220222022202201222222102220222221222212222221212222211222121222222222222222222202222222222222222222222021022222222222022222222212222222220222222220222210220022212200222122002220212222202202222220002222211122011222222022222222222200222222222222222222222221222222222222212222222212222222222220222220222211220022222221222022012222212222202202222220022222222222202222222122222222222221222222222222222222222020122222222212012022222202222222220221222221022200222122212202220022102120212222202202222221002222211122211222222222222222222210222222222222222222222021222222222212012112222222222022221222222221122201222122222220220122012022222220202222222222212222202122100222222122222222222202222222222222222222222021122222222222112022222212222122222221222221022212222022202211220222112122202221222202222220022222211222201222222122222222222211222222222222222222222221122222222202122022222222222122220221222222222202220122202222220022112021202221202202222221012222200222201221222022222222222201222222222222222222222121122222222212102222222112222222221221222222222220221222212220220122112122222220222202222222102222222222102222222022222222222212222222222222222222222121222222222212212112222022222021220221222220022221222122212202220122022022212222202212222221202222210222201222222222222222222201222222222222222222222222022222222222022012222112222120220220222221022211220022202221222222122020222220202202222222202222202122201220222222222222222210222222222222222222222121122222222202102212222202222021221222222220022221221222202212221022012021222221202202222220102222220022221222222022222222222202222222222222222222222022122222222212222122222002222020222222222220022202220022222201220122222222202220202222222221222222222222211220222222222222222222222222222222222222222020122222202202202002222002122022220221222222022201221222202202221022212122202220212222222222022222210122102202222022222222222222222222222222222222222221122222222222112022222212222022222221222220022212220122202220220022212221212221212222222220012222212022102221222022222222222221222222222222222222222020022222222222112222012002022021220220222222222220221122212201221222212220212021212212222221122222220122022211222022222222222222222222222222222222222021222222212212002112002122122122222222222222222201221122202200220122102220202222222222222220212222212022221222222122222212222211222222222222222222222221222222222222002112022122222120220221222222222211222022222201220222012220202122202212222221222222202022122201222022222212222210222222222222222222222022222222222212202222202212222021221221222220122202220122202201221222102220202020212202222220102222212122001201222222222222222222222202222222222222222220122222202202112202212002022121221222222221122221220022212200221222102021202220202202222221012222201222210210222122222212222202222222222222222222222220222222202212022122212222122120220220222220122222221222212212221122102020212221002202222222102222220122020212222122222222222222222222220222222222222121022222212222022102222202122120222221222220122200221122222220220022202121222020002212222222212222222022011221222222222212222200222212221222222222222121122222222202022212122022222021221220222221122212222022212220221122012021202020102202222222022222210122022210222122222212222221222202221222222222222021120222222222212122012212222022221222222220222202220122222211221122022221202221102212222221002222201022220221222122222222222210222212221222222222122021221222212222212022222122122122222220222222122222221222212200220122122120212220022202222221022222201122212210222222222202222221222202220222222222122021121222212212202212202122222221220222222222122211121022212220222022202020202221022222222222102222202022011202222222222202222222222222221222222222122020220222212222022122002112222120220221222221022201021222202201220022202121212120022212222222012222210222021200222022222222222210222202222222222222222221121212212202002002002022222220220220222221122221020122222210220222002020202220002202222220122222222220120210222222222222222220222222221222222222222021022222212212102212012222222021222201222221122201120122202202221022002221202221002202222221012222211121011210222022222222222202222202221222222222122022021222202222022012022202022020221200222221122221221222212212220022202122212220122202222220212222210220012221222022222222222210222212220222222222122220222222212212222212102102022022220210222222222210120022202221220222202220202222112222222221112222200221221202222122222212222202222212221222222222122021122202222202012102212022122221221200222222122221022222222222221222202122202220022202222221122222221220220222222122222212222221222222220222222222022122220202212212112222122112122222220211222222022222021122202221220122202121212121002112222022212222221121110200222122222222222211222202220222222222122221022212212202122112222222222220222202222222122202222022212202220122022020222021012012222221002222211022012222222122222222222202222222222222222222222102122212212222112212022112022122222200222220222211220222202211021122122221222222012022122121102222201122110212222022222222222201222222220222222222122100120002202222202102202120122221221202222220022220120022212202111220022120212222102112122022102222220022122211222222222222222212222202221222222222121110221202202202002102022110022222220222222020022221020022202211110021112222212022222002222022122222220021121220222022222222222201222202221222222222120102120202212222102112002220222021220200222122222202121022222212112120102221212122122102122220012222201120110212222222222202222220222222222222222222220220020202222212102202112022222020222211222121022210220022212201222221022121222021022102022020122222200120001202222222222212222212222222222222222222021010021012202212212212022110022022220221222020122210221222202202020121022121222122122222022222122222200020111212222022222202222222222212222222222222121000121222212212112212212222022121220212222220022202222222222201020022002221222221212202222220112222210221210220222022222222222220222202221222220222221212222022212212002202222210022120222210202220122221222122202222210221102122202222002212122122212222200022212212222022222212222211222202220222221222120201020122212222102212022121022020222222202020222201022122202210102221102120202220222212022222222222221120220211222022222212222210222212220222220222222020021202212222202112002122122020221211212220122222022122212210102022112221202222102212222222222222220222221221222122222202222222222212222222220222120120022222212212002212112122122220220221222122222221020222212222012220002221222222212222222021222222202220122202222222202212222211222212221222221222122221021022202222212212202021222222220221220222122211120122202211221020020122212220202202122022102222221221212212222122222202222200222212222222222222021122221002212222222212212202122221220221212120222201122022222211100020221222202221222022222121022222212201200200212222212222222202222212222222221222121000121022212222212002002022122121220201211120022222220122212212010021001021202121012222222122022222201102212211212122202212222212222212221222222222020111022102202212212212202200222221222222201021022220222120212201111020212120202021022112102121222222200102022212212222222212222220222202222222220222120010022122222202122022102112222122220202201020222202221222211210011120200121212222112222102221002222202212022221222022212212222211222202220222222222120122222122212202102022102111122220221220210220022211221122212200010222012021222021022202202021012222200022201210212022212222222200222202221222220222221220020022202222122102102212122222220222221022222221021022212211010221112221222022002022222020202222202102212200212022212222222221222222222222222222021221020122202202212102102200022120220202201122222201220020212210121221000022202122002012002121122222200110100221222122212202222222222222221222221222121022120222202202201022002120222122220211221221222221121022210221201020211120212022102012002121112222201212022220202222212202222221222222221222221222222111122222222212210002112220222221220202212222222212121120210221112222220221212020022202021120212222220010010211202222202222222201222212222222220222020220021102212202121122122021122122222221212020022221221020202210102020210220222020212222001222122222202112201202222022212202222221222202121222220222220100122120202202112112202100222022220200220021222222221020221220202121222222222022112112210220102222211220200220222222222212222212222222221222220222022101120112202222002202012001222122222202212122222212021221202201211121100120202022212222111122202222212200012211202122212222222201222212120222220222121222021000212222201002222221121221221222200121022221122222201221220121101021222020202022200021212222200011211210202222202222222221222212220222220222021021221002112222122012012210221120222211211122022210221122212202112120110222202020202102220022222222200112010221202112202202222212222222121222220222222111222002002202002202222122220221221020221021222212222020220210011221122221202120212002100120202222212120202212212122202202222221222202220222220222222100121120002222102200102200021221220111221221121210221020212202010222100022202222222122022121000222221102001201212022202202222222222212122222220222121020021222002202122202022110222022220101200222221200020020201201121021102120202020112212111121120222222111111212222122212222022211222202121202202222122002022211222212000102202002120021221212200221222222221121212222010121110020212021112212221120222222211101112210202012222202122212222202122012202222021210021212022202201012002220120220222210200020120212220120210200002220102222222122022122010220212222211122220210222022222212222222222222120002202222221220020010202212220201002100220021220000221221120221022122202210101021212221222020112012201120020222222110220212202222212202022222222222221212202222220102020010002222222120102001220220220100201022122210120221212202200120022120212220102012211020111222222200021200212002222202222201222202221202210222120122122121112212020002102121220121221002200020222220122122212201211220212220212121202012012220210222202122201222202212202202120201222222122012220222020122020212212212120201022012222222211112202001022222021021200221212221001122212120222012210122022222212200222222212122222222121221222202120112201222020111020101112202021001202010020022200002221100121201022220201211211222102121212220222212021120000222100211202212212012202222121221222222021212201222021100220021002222021000102211122022201210221110220201222022200220120120100021212121002012210122110220222122222220202112212222022212222212220022200222221020120211202202010020202102221120201112212221022201120020210202200122112222222122212102002122222221001221021200202212222212222200222222121212210222222120021220022212211101022022221121221010212002121212222121210212101122010002212022112122020120120221210200001201222102202212220001222212222102202222021011120012112222121210212110022021200221222200121201121020211221020022012212202222012112201022102222222101012200202102222212222101222212121022201222220001021120102212112000002102021020220200201021220200121020210202201221111120212120122122201120201222121110100202212202212222120112222222220202221222220110222011002202221021222111222222210202201010221202020222200212012022021200222022102102011222000222222021022202222022222202120002222202120202201202020000120212022212110020222222022121211212200000022210021120210221102222121121202122012022120121210222221112001201212102002212022101222212222012220202121102221220022212101221112212022021200201121000120221222022201210111022101121212220122122011121000220220012220221212012112222222102222212122102211222022011221012012222021011022020020020202200020210020221222121211201002020110022222221022002221021222221211011002210212222002222221121122202020212200222020222022010022222220110002102020020210020211201022202122120212211010120112122212221222012212122002222021220102202212212022202022001022202220212211202020012022112122202012221202221022122201102122022220212220222221212220220210020202022012102000120122222100200000211110112222202021012022222120202222212220001222020022202210010012002221220211020102020200201121121220011121022101022222020212122020120210221101212211200221002212212120102222212221112212222022012121211002202012000202220022022202101212100122201020120222002221221201211212222222112201222202220212010020212222102102202020221222222020002221202222020121201202212110000012202021220201220000102220222022022212212210121121021202122012202101121110222220120201222011022122222121102122112022102212212220201120020202202101212012110121022221002121001220202020022222222222022000020202120212112110020121220120211100211221222202202122220222102220102220212020021210001012222112210012022122222202110121112021210021122211211010220022011202120222122222122111220221200100212122002222212121201022212021212221202122211210211002212210001002222221020222200020020210221021122220200111020001120212220122022202021221222101101022200020222202202022100122222121202211212020200202111102212220222022210122121200201212000100212021121220110120220102111202020102222222122220222011102120222111102220102122201222022021012201222021200220212002212110010212200122021212022220020110222121022212020010221021021212022202122022120220221121020012221211222110022020112002102022202202222021122102011002212002020022112222222220111012101012210120120212220000021022200202222102022212222200211001110020201220212211010121110012000220202202212122220112010202202022000112221020121222000102220201210121122201122001021011121222222102222021220110212220121112200100112202022020122112000021112221112220210022100022212210222022001021122202022012110002220221220222020212222111021222220212200201121212220100210212201200212201222120012100212110111102010100022220012200121100101020112102200021110020021101012112202100222112101021000011111220022100100221021210022212011010011000221211102 \ No newline at end of file