-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDEC02.cs
2247 lines (2202 loc) · 38.2 KB
/
DEC02.cs
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
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
//AdventOfCode01(InputData.InputLocations);
//Console.WriteLine(AdventOfCode01_2(InputData.InputLocations));
//AdventOfCode01_2(InputData.InputLocations);
AdventOfCode02bis();
static bool IsValidCouple(int left, int right, int sign, out bool changedSign)
{
int diff = left - right;
changedSign = false;
if (!(1 <= Math.Abs(diff) && Math.Abs(diff) <= 3))
{
return false;
}
else if (sign != Math.Sign(diff))
{
changedSign = true;
return false;
}
else
{
return true;
}
}
static bool IsValidLevels(List<int> levels, int sign)
{
for (int i = 0; i < levels.Count() - 1; i++)
{
if (!IsValidCouple(levels[i], levels[i + 1], sign, out bool changedSign))
{
return false;
}
}
return true;
}
static int GetBadLevel(List<int> levels, int sign)
{
for (int i = 0; i < levels.Count() - 1; i++)
{
if (!IsValidCouple(levels[i], levels[i + 1], sign, out bool changedSign))
{
if (changedSign)
{
if (sign != Math.Sign(levels[i] - levels[i + 1]))
{
return i + 1;
}
else
{
return i;
}
break;
}
}
}
//return -1;
}
static void AdventOfCode02bis()
{
string inputReports = @"7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9";
//inputReports = @"8 11 13 14 15 18 17";
//inputReports = InputData.InputReports;
string[] linesReport = inputReports.Split(Environment.NewLine, StringSplitOptions.None);
int safeReportCount = 0;
int unsafeReportCount = 0;
foreach (var lr in linesReport)
{
List<int> levelsByLine = Regex
.Matches(lr, @"\d+")
.Select(a => int.Parse(a.Value))
.ToList();
int sign = Math.Sign(levelsByLine.First() - levelsByLine.Last());
int badLevelPos = GetBadLevel(levelsByLine, sign);
if (badLevelPos >= 0)
{
List<int> newlevelsByLine = levelsByLine.ToArray().ToList();
newlevelsByLine.RemoveAt(badLevelPos);
if (GetBadLevel(newlevelsByLine, sign) >= 0)
{
unsafeReportCount++;
}
else
{
safeReportCount++;
}
}
else
{
safeReportCount++;
}
}
Console.WriteLine($"Safe Reports: {safeReportCount}");
}
static void AdventOfCode02()
{
string inputReports = @"8 6 4 4 1";
inputReports = InputData.InputReports;
string[] linesReport = inputReports.Split(Environment.NewLine, StringSplitOptions.None);
int safeReportCount = linesReport.Count();
foreach (var lr in linesReport)
{
List<Match> levelsByLine = Regex.Matches(lr, @"\d+").Where(l => !string.IsNullOrEmpty(l.NextMatch().Value)).ToList();
int sign = Math.Sign(int.Parse(levelsByLine[0].Value) - int.Parse(levelsByLine[1].Value));
foreach (Match lm in levelsByLine)
{
int currentLevel = int.Parse(lm.Value);
int nextLevel = int.Parse(lm.NextMatch().Value);
if (!IsValidCouple(currentLevel, nextLevel, sign, out bool changedSign))
{
safeReportCount--;
break;
}
}
}
Console.WriteLine($"Safe Reports: {safeReportCount}");
}
static int AdventOfCode01_2(string inputLocations)
{
/*
inputLocations = @"3 4
4 3
2 5
1 3
3 9
3 3";
*/
var matches = Regex.Matches(inputLocations, @"\d+");
int totalCouples = matches.Count / 2;
int[] evens = new int[totalCouples];
int[] odds = new int[totalCouples];
int[] similarityScores = new int[totalCouples];
for (int i = 0; i < matches.Count; i++)
{
if ((i + 1) % 2 == 0)
{
evens[i / 2] = int.Parse(matches[i].Value);
}
else
{
odds[i / 2] = int.Parse(matches[i].Value);
}
}
for (int i = 0; i < totalCouples; i++)
{
Console.WriteLine($"A:{odds[i]} B:{evens[i]} |A-B|={Math.Abs(odds[i] - evens[i])}");
}
int similarityScore = 0;
for (int i = 0; i < odds.Length; i++)
{
int occurences = 0;
for (int j = 0; j < evens.Length; j++)
{
if (odds[i] == evens[j])
{
occurences++;
}
}
similarityScore += odds[i] * occurences;
}
return similarityScore;
}
static class InputData
{
public static string InputLocations = @"77442 88154
71181 76363
49755 69158
38798 22488
89857 49242
96168 60034
68503 43760
52053 29173
27070 63754
78107 13305
18422 95805
34555 59209
52260 83075
35963 65961
92308 56524
25352 19586
87921 76287
21112 20450
40251 20187
66316 47227
10872 77651
78694 67481
80223 15216
69732 81168
38939 38777
34636 24551
10066 49751
21755 21498
59907 37042
40042 20430
10479 30302
92724 56653
49261 18139
14450 41684
20138 54577
49196 76287
78226 77472
55352 47752
73181 76363
88373 44539
55224 13454
78343 39913
50215 26340
93394 81365
12421 17637
30218 22488
60899 27070
53443 63193
78769 76287
34837 64955
57703 90260
84563 61551
95968 61321
18237 59051
88136 22597
75094 61551
14017 58846
18973 79651
45202 81168
67888 36454
58743 65364
65978 66336
27877 47227
23703 90563
63594 76363
19101 52928
49192 16770
78677 33277
74303 76324
56874 47227
90161 64736
39443 58067
59419 76363
16790 61551
23505 93360
70298 20187
64391 61321
62270 61551
12823 57714
83131 23208
29372 81168
21121 63648
22012 74365
42673 20187
81026 63754
96443 74839
30527 16770
88227 80574
43550 81327
83170 87067
97480 59239
57306 33168
12562 19586
70051 69573
23409 59209
98618 36335
55824 77218
26417 29173
47973 28702
88458 23040
78792 26612
49946 81708
80977 82477
64506 76324
51584 19586
74305 17617
29886 13430
66682 81168
25165 48749
58380 53467
69518 61551
13253 54169
47096 90256
30095 92342
53753 74679
18402 68884
96146 54906
78431 82348
58498 30348
48373 28719
84718 49196
60072 54268
82045 81168
11287 73806
37090 34498
38432 59686
13148 69158
29704 68950
45645 76324
68457 60034
66349 78117
72212 54196
16845 53315
49997 16770
56793 64874
27128 43619
92355 71300
76013 43778
20620 81868
23056 37042
82567 61327
13147 79444
70591 58074
68310 63193
36484 52913
97410 78373
31951 44983
65334 30896
14656 59209
91768 61551
56457 27850
57141 42263
18561 31760
75233 81868
73250 95805
14002 12467
42157 47227
34516 26033
55035 81168
13086 73119
43301 41775
38864 65779
95169 31728
73367 69158
53500 63193
81688 63754
93934 95142
54841 30896
66614 76324
52867 34526
92062 65386
74176 79531
75046 76363
64084 28284
17516 91401
58314 14259
30184 48803
82359 33277
83956 16770
87246 96540
66231 34404
42526 87428
96228 96903
70702 63193
72108 20187
62377 59209
72553 10468
57600 56860
16563 57459
35342 33277
29419 27070
22242 37042
81264 45944
27706 18763
11777 17623
96931 30714
27765 80535
65779 66518
82921 19432
87744 43619
85543 40341
56196 81132
34774 97741
93073 61787
37699 62712
45701 81380
60801 76363
66024 25646
38321 50162
32244 10468
95866 29173
91365 37520
96047 11889
60690 63193
40819 47227
19229 63551
56978 27070
84539 43393
50724 59209
90639 67420
70374 28146
83465 27150
67309 61321
56678 42545
91876 78117
11246 81868
66054 83337
40614 69158
56899 37042
65744 20551
80749 37042
74619 10468
60988 76287
84866 60034
45318 49196
14541 60910
79263 35253
48847 58067
73082 24937
79835 48742
62446 39600
62036 62719
13498 71733
18172 81168
35258 59209
60068 38731
43622 33109
23059 12770
61060 43807
45296 76363
31310 72036
69945 10468
89043 62946
44661 96601
32843 10468
83953 61321
44774 43897
47310 48153
96064 35936
79098 27177
11333 76324
31875 27736
92000 60034
60969 96903
37597 73631
97194 20187
90624 70413
15881 59845
29211 22488
19865 95805
37093 27070
85746 17347
88886 46767
94576 81868
59784 19770
98263 75790
47612 62157
27380 91120
33552 16758
72012 80611
18549 85133
23250 70963
43410 85770
55986 33277
62202 20187
86252 81868
76363 81168
39103 67989
94626 14656
11792 43619
62872 29173
66617 16770
76923 37042
54667 22488
80651 76324
24898 98262
78913 43619
86226 39913
41730 29173
62228 39913
20570 14090
48070 61321
89609 73535
21233 69158
67520 27006
69207 66474
80773 76363
98652 82728
77753 65779
61668 40001
49504 65779
90868 87612
50836 27501
34661 98114
36590 31091
29788 95805
36309 46751
45305 33147
77866 89262
26091 95805
73725 75617
89578 71004
62919 78373
18631 61551
65733 91526
63976 31808
57363 54799
63193 35481
93512 11640
22455 32469
12710 33277
80568 61321
82907 31518
70300 76363
65593 58067
66452 68846
81168 19586
81230 95805
15461 78373
99354 27070
97780 16770
11597 36795
86142 60034
22929 58067
72577 16770
87562 11734
15882 17423
18782 78117
21443 53759
97662 66320
26467 10468
12181 60034
99202 76363
92349 72225
20986 25419
85821 58067
70172 92060
54212 59209
42712 76324
90995 90226
62165 20187
70665 81168
23358 63754
82477 84396
71987 23192
95504 51191
40799 41278
35361 95805
10730 51728
43173 61551
28181 33277
23939 35592
38685 60717
36349 88861
38913 47227
36681 54470
34231 80208
84150 32348
53592 31390
90048 13692
56334 66336
92955 73054
26500 20187
11840 75286
23430 42085
79148 63193
60469 19586
15750 66336
51639 16201
66378 76287
33011 19586
74383 18079
13342 71848
43984 27950
78415 45783
37553 58067
86775 68642
34408 60406
53067 58239
83096 30991
59779 47641
92173 31090
93789 84819
34804 35005
86853 98556
19023 69269
24014 78373
88189 76324
96897 80598
71969 16770
57758 60034
84236 19912
39543 74542
45629 61518
46405 23011
88155 56357
39913 69880
58055 19586
67449 33277
97296 41994
11979 74945
97896 11294
16406 47227
33210 16770
22366 19586
14047 99638
62524 35305
85153 11167
35374 52130
76324 97224
50715 66545
30446 95805
75098 54539
60654 14555
92593 10468
37954 23752
67845 49196
18665 95058
46953 20187
22488 13898
76756 95805
52973 20187
88681 61321
67431 37042
58093 59209
61522 58067
19692 22314
55686 78373
75663 88193
75619 70326
83139 34779
96583 66996
76437 13367
19832 35599
32727 43276
64900 37042
99403 70388
20217 83512
68879 39957
55020 39913
22732 61321
70441 48560
35671 30896
87206 77391
15719 65627
70843 68981
80802 77969
60385 54937
68163 27874
51564 60034
14231 59293
10468 69158
58531 33277
89365 96591
65598 49196
30226 67781
13423 29173
43242 87650
45581 39913
55879 81168
28959 84631
67482 78373
21358 13041
40107 60034
56957 66336
68981 42504
45865 67267
83968 32642
36082 29173
51895 92287
97489 19909
13164 23658
43619 32643
80054 68277
43543 10468
21603 54219
29392 81168
79097 91391
91813 76324
27744 43619
66902 41779
84610 27070
63644 23335
63408 68981
71224 33277
48293 47227
57365 48719
13590 33277
34822 59209
90168 71625
88698 88553
59044 71011
64826 60877
46286 85678
49565 52138
89303 29173
57427 76287
84546 75928
68856 99211
44748 59209
18252 70479
32823 91526
36238 56724
34436 69158
25905 83377
11310 49196
71865 29173
31257 41046
82139 76324
66945 47714
23390 33277
95805 81168
53931 19586
46434 95805
75144 41705
88419 10648
99702 63193
38898 53110
83475 59209
57700 37042
42255 16770
68559 69158
48622 30896
48063 60034
36896 58465
61761 38881
45534 23509
84197 40976
10741 60540
57029 78300
61058 76363
16955 76324
95154 29173
20941 43072
76420 10654
57350 57933
37339 33049
11022 33630
11086 39913
64945 97536
95125 27070
70646 78373
70553 20187
52129 76287
35583 76287
52407 32158
21537 45488
49682 24598
20290 47227
66261 44764
90484 31261
25358 29173
59209 88778
21520 49196
46692 41896
83918 13692
68641 78373
93012 68295
10186 63414
84383 19586
33576 99070
42089 59209
76287 61321
63821 55986
17944 38193
57972 81168
51596 61321
22418 95805
68055 76287
19554 29173
59117 14656
17210 65375
61968 34453
22768 44020
22419 92236
33546 83847
34755 58136
17956 31634
19543 59209
85916 34705
66761 93059
30911 50479
12158 32771
91771 29981
87708 60034
70837 67717
27584 78373
67642 61551
62273 19018
16352 61551
41901 29173
25732 81298
75816 29212
25681 63754
86396 12643
44190 56820
58070 19742
44532 83582
47227 35357
36638 44159
15632 76363
72120 47309
32764 47227
51180 78117
49739 14656
66274 78739
61723 43619
59015 19586
21891 85648
18747 61551
86144 58938
39681 69158
38150 68516
61321 10468
38754 30896
70627 83718
91724 74971
91330 29173
38159 73587
78498 78373
24641 61551
12550 83211
70711 83416
17338 65779
56076 39000
21353 27070
61551 85619
42398 85167
80835 63559
69604 71196
76284 81168
73817 65125
35170 23254
52139 95805
40826 81168
85479 46622
56430 33363
67747 31755
25739 13587
17558 39762
89499 93764
78373 73981
95268 46534
33958 28798
12195 66209
63380 76287
60034 27070
80467 76324
98506 95805
58067 99459
75075 60524
43692 26965
17039 37042
97439 76324
79297 29173
68473 35985
47630 17932
61662 58771
86027 39235
62403 81835
24100 54006
87270 47227
35793 39913
91493 19398
55623 19898
82673 78117
15863 91070
57779 66587
45405 49196
93780 61551
99320 65779
40036 47227
33370 83360
82692 90756
78117 19586
68580 64705
57478 69158
15588 64663
73700 39913
81481 78593
49442 28165
61061 20187
37624 78760
90983 30919
60057 61171
80319 60632
99544 63754
14572 32678
35131 83311
90273 78373
19621 19897
88549 43398
90170 60034
35057 61321
34283 61551
24485 16250
41063 95805
47154 45332
87986 16770
36053 29173
20687 60034
66575 30896
81371 95805
91665 78117
51369 51581
19220 59209
45158 39913
61595 98095
79096 75715
72662 59209
10875 44090
99736 16480
85897 65779
83776 52163
40755 19553
80969 76363
53053 76363
58468 76324
68895 30896
10193 19586
51578 42226
59446 27070
98969 73952
15913 88063
95191 69158
27476 27070
94851 58067
47345 56070
35791 59209
56194 62759
71120 31064
42599 76860
33848 20187
68814 60034
25584 51942
85338 71636
77668 99601
82555 35041
44609 16770
73386 61321
30553 29173
35913 76363
70145 95805
99873 19236
32644 24024
15974 19406
70045 47227
37614 14925
70738 66336
96972 69158
71948 76363
18962 63193
22983 27070
50419 60034
92422 18415
29173 94253
17365 35447
76649 65307
72431 40771
46431 45281
25817 42605
83620 61152
83434 76363
25031 24195
31968 42631
31604 71439
94886 72284
88754 27196
14709 25431
40906 27070
89846 44931
29736 78373
62109 76363
41649 82052
13672 35541
58161 31191
63752 55104
22495 47227