-
Notifications
You must be signed in to change notification settings - Fork 0
/
day1.go
2339 lines (2080 loc) · 11.4 KB
/
day1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
fmt.Println("part1 is", part1(input1))
fmt.Println("part1 is", part1(input2))
fmt.Println("part2 is", part2(input1))
fmt.Println("part2 is", part2(input2))
}
func part1(input string) int {
var tmp int
var max int
for _, row := range strings.Split(input, "\n") {
if row == "" {
if tmp > max {
max = tmp
}
tmp = 0
} else {
tmp += toInt(row)
}
}
if tmp > max {
return tmp
}
return max
}
func part2(input string) int {
var tmp int
var first, second, third int
for _, row := range strings.Split(input, "\n") {
if row == "" {
if tmp > first {
first, second, third = tmp, first, second
} else if tmp > second {
second, third = tmp, second
} else if tmp > third {
third = tmp
}
tmp = 0
} else {
tmp += toInt(row)
}
}
if tmp > first {
first, second, third = tmp, first, second
} else if tmp > second {
second, third = tmp, second
} else if tmp > third {
third = tmp
}
return first + second + third
}
func toInt(s string) int {
n, err := strconv.Atoi(s)
if err != nil {
panic(err)
}
return n
}
var input1 = `1000
2000
3000
4000
5000
6000
7000
8000
9000
10000`
var input2 = `3344
8938
7923
3979
2753
5730
4225
24216
7432
18284
3475
9177
6769
11335
8061
9302
8132
25796
20937
2039
4989
5932
5434
5088
7185
1271
8359
5489
8646
7796
1233
3529
4118
7093
7090
8757
2283
5562
3789
2296
2105
1978
2981
5682
1627
2285
5654
5596
2022
2733
3078
3176
4158
6294
3789
1863
5121
6122
7309
7063
4233
1717
6755
5505
2713
4988
5133
4933
6407
2897
2682
5328
4268
1518
4631
2736
1432
3812
1031
4553
1109
7214
2744
8389
3180
7464
5584
7689
6452
5645
6207
2497
1114
5747
2620
2621
1866
2334
1324
5879
6322
4954
8723
24316
4375
4051
6866
7417
4650
6035
6580
3881
3041
1443
6659
2951
2387
5606
1862
3300
6106
5944
2306
1935
5717
6204
1882
2455
4790
4534
4144
3278
5536
4686
4331
1750
1742
2103
6754
5417
2242
2374
5133
2315
34403
5574
2129
2846
5790
1428
1220
1523
5768
2226
1442
1139
3295
3831
3231
3998
5904
6878
3082
2159
2806
2388
1878
1393
6929
6812
18094
4972
4575
5522
5582
2776
3971
3595
1959
4161
4550
1987
4519
4551
3546
3562
4913
5328
2726
5349
6670
7650
7799
3818
5536
2765
1674
3454
5921
6170
3474
1401
5993
5098
3269
5671
5385
5418
4381
35451
1970
6227
6781
3622
2921
2360
5673
2344
5503
5006
6866
1804
2559
12473
1374
23850
7943
1442
3091
2907
1538
6027
1389
4851
3301
1324
6017
13712
11949
4399
1093
2546
6876
5429
1453
7989
9605
2344
10505
4563
3537
6061
1428
3435
5752
1097
3313
2318
1656
2206
6922
6612
2805
3123
2613
6493
3283
5206
4118
3058
1377
4453
6195
3371
5520
6197
5121
1622
8199
5761
6985
6058
8277
9247
8937
4739
5107
11764
13344
5462
4453
10616
8770
6014
6991
7898
5873
12987
16138
9294
8381
3175
1945
8195
2851
1780
6140
3655
3450
6771
4950
3491
6883
4408
4505
2513
6768
4868
3883
4458
39217
15599
1459
19930
6992
9392
6380
4470
5228
8009
7680
1815
4365
5529
8677
6381
10150
2299
2071
9364
5633
1778
5304
1883
2215
4288
4214
7602
2987
7011
1652
5977
2093
20240
18383
4600
2704
3915
3853
5659
2905
3480
3546
4647
6062
3613
6095
4079
6352
4362
5767
7708
2318
10738
1956
5581
6478
5624
3850
5025
3754
2559
4730
1299
1187
3771
1432
1590
5108
3412
10022
1478
3654
4938
3611
3455
5118
6647
7160
7244
2902
6305
1204
2124
5595
7040
5145
1502
8426
6808
9175
3902
5516
5310
4122
7357
8679
14080
23992
17036
1880
2799
3910
3661
3680
4159
5746
6249
2614
2012
7433
5092
3067
35016
24321
9575
2970
17157
3129
2954
2520
5998
2854
5823
2469
3786
2683
3300
3360
5413
3959
28905
4100
24304
7180
23566
5990
1740
1955
5498
1754
3458
4856
4499
3560
3275
1443
1815
1511
1106
1466
10351
8066
5699
4995
7451
7189
2348
3600
3320
3351
5857
6388
3787
1923
6228
6125
1302
6779
3279
13428
7624
41865
2353
11924
6498
10636
1592
3990
2269
7281
4294
3083
10444
4489
4468
1400
4482
63998
2373
2091
6067
3372
1996
6542
1423
5041
6251
4682
5574
2506
6784
1243
1014
1653
2960
1459
4820
4623
5541
3455
3260
1161
1395
3963
3299
1686
4068
7455
3737
6857
7771
7383
7769
4641
3105
8109
1367
5553
8315
8042
4244
6974
1062
50228
6657
22682
4093
5296
8752
9532
11488
3792
11225
2753
16207
10646
11950
1505
4569
6688
4674
7154
7342
4675
8434
5637
3789
5625
3177
2820
1075
3657
4862
3879
1954
3185
4563
1413
5323
6048
3166
4933
1874
5953
6528
6915
3449
6867
6892
6105
3012
2055
5516
3026
14676
25751
4615
3163
5888
4144
3845
6817
6989
6211
1620
7624
1390
5321
8348
2441
12492
12656
13889
6433
1032
2005
5844
3864
2370
6664
5540
2943
5135
3375
2236
4305
6269
3979
1844
3799
3947
5858
1338
2761
2285
5192
1358
1810
5009
1346
4183
3118
4232
5655
4391
4210
5644
3865
4049
1951
2839
5212
1862
5991
4452
4299
1037
3491
3002
6062
2026
1007
7398
1697
5797
5922
5352
53946
7483
3663
1134
4279
5315
2756
1280
5807
1892
3701
2848
21603
4098
21937
1914
1812
6990
2754
2459
5984
3895
7411
5240
1022
4323
4382
3803
1698
5774
1680
2122
2865
6470
2921
7619
4584
1788
28678
10385
12207
12265
3932
13284
12672
5559
5610
1230
5547
3945
1566
2589
1948
2313
4243
2472
1343
1317
5152
1953
1082
6063
1974
2054
2931
5433
4410
4584
4896
2825
3945
5849
3615
2464
1560
6494
7717
4697
3012
4515
3802
8621
6041
6939
3059
1747
8291
4058
2884
1775
8465
5889
4807
6263
7346
8014
8081
5361
4950
2721
5656
3858
7486
11877
5145
10149
2148
8389
4492
5074
9457
5132
4355
3254
9607
4059
5858
7062
9260
6672
2291
1448
7436
8943
6577
8042
2056
9801
9060
10243
10758
11606
6340
4468
4225
6861