Explorar o código

Solve 2020 day 9

Taddeus Kroes %!s(int64=5) %!d(string=hai) anos
pai
achega
23217d1c8b
Modificáronse 2 ficheiros con 1029 adicións e 0 borrados
  1. 29 0
      2020/09_xmas.py
  2. 1000 0
      2020/input/9

+ 29 - 0
2020/09_xmas.py

@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+import sys
+from collections import deque
+
+def find_invalid(seq, winsize):
+    win = seq[:winsize]
+    valid = deque([a + b for b in win if a != b] for a in win)
+
+    for i, num in enumerate(seq[winsize:]):
+        if not any(num in v for v in valid):
+            return num
+        valid.popleft()
+        valid.append([num + b for b in seq[i:i + winsize]])
+
+def weakness(seq, invalid):
+    win = deque()
+    total = 0
+    for num in seq:
+        while total > invalid:
+            total -= win.popleft()
+        if total == invalid:
+            return min(win) + max(win)
+        win.append(num)
+        total += num
+
+seq = list(map(int, sys.stdin))
+invalid = find_invalid(seq, 25)
+print(invalid)
+print(weakness(seq, invalid))

+ 1000 - 0
2020/input/9

@@ -0,0 +1,1000 @@
+34
+46
+47
+1
+21
+13
+31
+39
+3
+35
+49
+38
+32
+28
+14
+29
+23
+15
+27
+12
+40
+30
+5
+26
+18
+17
+22
+4
+6
+8
+9
+7
+31
+10
+11
+34
+13
+25
+38
+16
+14
+20
+19
+15
+21
+27
+52
+12
+23
+36
+18
+29
+17
+35
+28
+32
+22
+24
+45
+43
+30
+31
+33
+26
+53
+34
+37
+38
+61
+39
+40
+41
+42
+44
+78
+46
+47
+48
+50
+63
+52
+64
+54
+59
+80
+56
+57
+85
+72
+89
+71
+75
+77
+79
+81
+84
+83
+88
+90
+93
+139
+95
+98
+102
+106
+113
+135
+110
+115
+127
+128
+210
+182
+184
+172
+221
+152
+189
+163
+164
+188
+171
+190
+196
+193
+200
+208
+204
+212
+216
+263
+225
+237
+242
+394
+291
+315
+376
+316
+433
+455
+323
+406
+504
+613
+396
+657
+383
+404
+405
+408
+412
+441
+479
+453
+710
+462
+606
+533
+607
+614
+631
+808
+639
+706
+804
+858
+791
+779
+787
+795
+1262
+813
+1228
+1834
+861
+853
+1570
+986
+1418
+995
+1093
+1140
+1901
+1221
+1245
+1337
+1345
+1426
+1485
+1578
+1566
+1604
+2231
+1582
+2361
+1666
+1674
+1714
+1839
+1993
+3152
+1981
+2079
+2903
+2561
+5464
+3060
+2558
+3280
+2582
+2682
+2992
+4734
+3151
+4235
+4143
+3186
+4027
+3248
+3340
+3513
+3388
+4982
+3820
+3974
+4060
+6448
+5592
+5119
+5574
+5140
+5240
+6272
+5264
+5674
+6022
+6143
+9410
+6337
+9375
+10383
+6526
+12011
+11125
+6728
+6901
+7208
+7794
+7880
+11588
+11946
+10359
+15623
+10259
+11666
+13254
+18333
+21971
+11790
+13468
+13230
+12669
+16720
+24818
+31002
+19460
+13427
+19982
+13629
+19382
+14109
+24468
+15674
+18139
+20618
+21925
+22025
+22049
+26859
+26298
+24459
+53051
+25020
+27097
+35654
+25899
+26096
+43928
+27056
+27536
+27738
+29101
+32248
+39129
+29783
+49488
+46945
+33813
+40064
+42667
+43950
+80789
+48145
+49479
+50757
+50358
+51116
+131905
+54153
+76535
+61349
+53152
+54592
+71688
+95819
+78495
+180050
+62031
+84014
+80540
+73877
+101873
+76480
+82731
+86617
+104071
+97624
+98503
+99837
+126280
+101474
+105269
+107305
+107744
+124840
+176957
+115183
+116623
+158305
+148648
+135908
+146045
+142571
+150357
+169348
+156608
+174983
+159211
+234411
+218097
+196127
+197461
+223928
+230109
+250122
+206743
+212574
+222488
+292928
+231806
+251091
+252531
+259194
+301782
+299179
+427514
+288616
+365059
+410302
+430671
+383139
+334194
+628132
+393588
+459274
+402870
+404204
+419317
+429231
+435062
+438549
+444380
+661393
+484337
+784376
+697743
+718468
+726693
+786009
+702049
+818531
+772953
+848584
+867476
+797792
+1388086
+928717
+852862
+796458
+807074
+822187
+1591450
+848548
+864293
+1614989
+1245623
+1566342
+1145730
+1282129
+1629261
+1499646
+1420517
+2477809
+1488058
+2493554
+1569411
+1570745
+1594250
+2149605
+3057469
+1675049
+2052697
+3649251
+2455743
+4022085
+2109916
+3914071
+2094171
+3759938
+2566247
+3601473
+4626880
+2427859
+2702646
+3128907
+2920163
+3095566
+3058803
+3082308
+3140156
+4628214
+3164995
+6197625
+3727746
+4660418
+5510167
+4146868
+4883602
+4537775
+5837662
+4204087
+5176479
+4522030
+4994106
+6770334
+5622809
+5130505
+5348022
+5761449
+5978966
+6002471
+6177874
+9037769
+10125834
+6305151
+6892741
+9925371
+7874614
+7931833
+9654524
+8350955
+8668898
+8726117
+9380566
+9965536
+15302313
+9516136
+9652535
+10124611
+10478527
+11308379
+11109471
+11326988
+12284117
+12180345
+12307622
+12483025
+16282788
+14974049
+19505177
+29470713
+16225569
+15806447
+17019853
+17077072
+17395015
+20960914
+21234082
+26248324
+19168671
+19640747
+20979523
+23592496
+20603138
+21587998
+22417850
+29361189
+28566905
+40148194
+32089235
+47209238
+75776143
+30780496
+34414868
+32032016
+33620584
+32883519
+32826300
+34096925
+51994971
+40874829
+38809418
+32321523
+39771809
+40243885
+40620270
+41582661
+42191136
+49964327
+56832718
+63292679
+61450424
+59347401
+62812512
+82790627
+65205042
+63102019
+68035452
+64353539
+64915535
+65147823
+71130941
+66418448
+72565408
+73196352
+72093332
+74512659
+72941793
+139360241
+81826546
+82202931
+83773797
+131137471
+113257006
+127960335
+127382853
+120797825
+122159913
+125914531
+137480943
+128017554
+136918947
+129269074
+129501362
+136046476
+201156687
+137549389
+138511780
+144658740
+145035125
+146605991
+265456565
+154768339
+222285577
+164029477
+210220485
+282785893
+234054831
+235416919
+242957738
+250177467
+264064030
+248074444
+281954072
+257286628
+257518916
+272965423
+347762678
+265547838
+282584514
+276061169
+282208129
+283170520
+289693865
+291641116
+356826476
+523748696
+374249962
+456340408
+398084308
+444275316
+469471750
+485594386
+478374657
+738548537
+521039867
+564792643
+505361072
+514805544
+522834466
+631768878
+538513261
+541609007
+565378649
+1079598187
+983735729
+571901994
+581334981
+646520341
+863543110
+876458965
+843721712
+1006018840
+961701480
+920918774
+1307818426
+947846407
+1459432035
+999414524
+1188129348
+1020166616
+1028195538
+1037640010
+1086707538
+1985486417
+1080122268
+1579249017
+1608221821
+1211898990
+1218422335
+1153236975
+1227855322
+1838160445
+2671331025
+2092726378
+2249539000
+1941085390
+1882620254
+3592249799
+1868765181
+1947260931
+3168940712
+2767378365
+2292021258
+2048362154
+2239944513
+2108317806
+2117762278
+2166829806
+2365135965
+2307977590
+2371659310
+2991397420
+2381092297
+2446277657
+3785421376
+3096620503
+3946478251
+3751385435
+4176742771
+3809850571
+3995623085
+3816026112
+3917127335
+4754255247
+4055578737
+5863998868
+5007322878
+4156679960
+4226080084
+4275147612
+4479977116
+4498854575
+4474807396
+4689069887
+7962164147
+7680467307
+6908524755
+6327570548
+5542898160
+6848005938
+8706057200
+7756328822
+9696392765
+7625876683
+9163877283
+7733153447
+11496493419
+9234232363
+8212258697
+10231968047
+8382760044
+16008636727
+8501227696
+11959233531
+8749955008
+10807547664
+14581159385
+14870688902
+15496617551
+12390904098
+13175576486
+12451422915
+17735460059
+22856642665
+14473882621
+15359030130
+15382205505
+16115913491
+15838135380
+15945412144
+17616992407
+16595018741
+16713486393
+16883987740
+17132715052
+17251182704
+23223837629
+19308775360
+25633942748
+21201377923
+23198451762
+24842327013
+25566480584
+25626999401
+27810453045
+42817663288
+43301940643
+29832912751
+45778324895
+29856088126
+30741235635
+33732905898
+39314365253
+40787739157
+32829399884
+33308505134
+38085365663
+33597474133
+89080265538
+56931357660
+36559958064
+44942718108
+58439801146
+44399829685
+53054539888
+48040778775
+54675239764
+51193479985
+73588777940
+57643365796
+59689000877
+70055600888
+60574148386
+86566064052
+60597323761
+88408145662
+103653075021
+77708334819
+70914765547
+66137905018
+66905979267
+70157432197
+117528681421
+80959787749
+89342547793
+81502676172
+92440608460
+111305808952
+143746210137
+99234258760
+131512089308
+114364240641
+111790803746
+117332366673
+118217514182
+141557111510
+126712053404
+164250398782
+153472043319
+126735228779
+148623100366
+133043884285
+188576806553
+136295337215
+159499979990
+148408655439
+151117219946
+223952697768
+290180211876
+180736934932
+280184096723
+191674867220
+287412557161
+260199459185
+225946312164
+248086140961
+226155044387
+269334734128
+244067595452
+244929567586
+403567575442
+253447282183
+406919325502
+259779113064
+450071669060
+339694026499
+269339221500
+360248034983
+284703992654
+385655024377
+703518951243
+492153736413
+439761008181
+372411802152
+647635170894
+486354503572
+417829911607
+587780167460
+609028760627
+504708680650
+470222639839
+488997163038
+847559280524
+497514877635
+625859084335
+513226395247
+734775661714
+1216745346490
+529118334564
+554043214154
+609033247999
+629587256483
+1095387751571
+657115794806
+758066826529
+790241713759
+812172810333
+842634441991
+858766305724
+888052551446
+904184415179
+906827074645
+1002223558285
+1504675075330
+959219802877
+967737517474
+1792236966625
+1371992700971
+1303468109006
+1042344729811
+1576770765473
+1158705591047
+1083161548718
+1163076462153
+1949171804456
+1717286629406
+1286703051289
+2791378126619
+1415182621335
+2046758142493
+1602414524092
+1654807252324
+1749461516636
+1746818857170
+1863404218056
+2254440568763
+1866046877522
+1926957320351
+2001564532688
+2130813979627
+2010082247285
+2125506278529
+2201050320858
+2205421191964
+2246238010871
+2880363091559
+2241867139765
+3954454588772
+2765490986245
+3583333506928
+2701885672624
+2889117575381
+3069989873659
+3017597145427
+3257221776416
+3349233381262
+4881927624247
+4377051990498
+4764416002597
+3729451095578
+4256320258156
+3867611410210
+5019931555008
+5275411065623
+9020736260753
+11146242539282
+4326556599387
+4406471512822
+4447288331729
+6196321728537
+4943752812389
+5007358126010
+5467376658869
+9263678384166
+5591003248005
+10027289681018
+5906714720808
+7476461386481
+6274818921843
+7124833186626
+7216844791472
+7597062505788
+7985771353734
+8056007694965
+8123931668366
+8194168009597
+9951110938399
+9413829638832
+8733028112209
+8773844931116
+8853759844551
+10354003052537
+15990689722588
+13676780924598
+10411129471258
+10474734784879
+10598361374015
+16538662825458
+11497717968813
+11865822169848
+12181533642651
+13031547907434
+13399652108469
+17010892144620
+14341677978098
+15272852486437
+16109703022100
+16968012940713
+16909767539516
+16318099677963
+23195437822649
+22132680220678
+25839395946911
+24047355812499
+25174498893411
+27609253518635
+20765132523795
+33286112618676
+42850288091531
+24529265876247
+21073096158894
+22096079342828
+25213081550085
+27741330086567
+55418792839354
+25581185751120
+29509355130569
+42185391038031
+29614530464535
+30451381000198
+31382555508537
+41439033415763
+56032566751318
+33227867217479
+41492598571374
+41838228682689
+46143435155327
+64946367434359
+53190439269755
+58460611512087
+42861211866623
+43169175501722
+45602362035141
+51605434473397
+46286177708979
+56963741259657
+72475742331158
+71943979571572
+87582468571090
+55090540881689
+55195716215655
+137422109765517
+60065911464733
+60997085973072
+98056928082278
+116098478216051
+74666900633242
+74720465788853