Advent of code 2025 (not proud)

Compare changes

Choose any two refs to compare.

1/1

This is a binary file and will not be displayed.

-71
1/1.c
···
-
#include <math.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
-
int to_int(char* line, ssize_t nread) {
-
-
-
line = realloc(line, (nread-2)*sizeof(char));
-
line++;
-
-
return atoi(line);
-
-
-
}
-
-
-
int sign(int num) {
-
return ((num%2)+((num+1)%2));
-
}
-
-
int main(int argc, char *argv[]) {
-
-
FILE *f = fopen(argv[1], "rw");
-
char *line = NULL;
-
char m;
-
size_t size = 0;
-
int move;
-
ssize_t nread;
-
int password = 0;
-
int dial = 50;
-
-
-
while ((nread = getline(&line, &size, f))!= -1) {
-
printf("%s, ",line);
-
m = line[0];
-
move = to_int(line, nread);
-
if (m == 'R' ) {
-
for (int i = 0; i<move; i++) {
-
dial++;
-
if (dial==100) {
-
dial = 0;
-
password++;
-
}
-
}
-
} else {
-
for (int i = 0; i<move; i++) {
-
dial--;
-
if (dial==0) {
-
password++;
-
}
-
if (dial == -1) {
-
dial = 99;
-
}
-
}
-
}
-
-
-
-
printf("%d, dial at :", to_int(line, nread));
-
printf("%d\n", dial);
-
}
-
-
printf("password: %d",password);
-
-
free(line);
-
fclose(f);
-
-
return 0;
-
}
-
···
-4317
1/input.txt
···
-
R19
-
R5
-
R29
-
R30
-
L24
-
L12
-
R24
-
R2
-
R35
-
L18
-
R22
-
L20
-
L1
-
R12
-
R46
-
L31
-
L38
-
L27
-
L33
-
L6
-
R50
-
L22
-
L37
-
L18
-
R7
-
L28
-
R50
-
L44
-
R5
-
L24
-
L5
-
R36
-
L38
-
R16
-
L50
-
R5
-
R17
-
R32
-
R33
-
R23
-
R12
-
R39
-
L48
-
R28
-
R50
-
L49
-
R5
-
L44
-
L41
-
R62
-
L90
-
R19
-
L15
-
R4
-
R96
-
L6
-
R6
-
L40
-
R55
-
R11
-
R69
-
R5
-
R29
-
R14
-
R57
-
R23
-
L76
-
L15
-
L32
-
R98
-
L58
-
L1
-
R61
-
R67
-
L67
-
L18
-
R61
-
L27
-
R84
-
R16
-
L37
-
R21
-
R44
-
R95
-
L27
-
R47
-
R68
-
R95
-
R78
-
R87
-
L87
-
R66
-
L82
-
R63
-
L84
-
L63
-
L85
-
L15
-
L19
-
L96
-
R805
-
R710
-
L73
-
R46
-
L31
-
R14
-
R28
-
L54
-
L87
-
R62
-
L60
-
R5
-
R27
-
R42
-
L19
-
R69
-
R35
-
L57
-
L47
-
R99
-
L199
-
L62
-
L43
-
R98
-
L21
-
R12
-
R671
-
R45
-
L81
-
L943
-
L76
-
L95
-
L605
-
L20
-
R92
-
L2
-
L79
-
L343
-
L79
-
L56
-
R29
-
R61
-
R308
-
R237
-
L36
-
L12
-
R50
-
L27
-
R292
-
L15
-
R48
-
L97
-
R49
-
L26
-
L36
-
R38
-
L44
-
L42
-
L90
-
R95
-
R51
-
L46
-
R73
-
R1
-
R26
-
L704
-
L53
-
L43
-
R944
-
R56
-
R230
-
R29
-
R45
-
R96
-
R71
-
L642
-
R71
-
L92
-
R456
-
L82
-
L83
-
L51
-
L51
-
L88
-
R7
-
L16
-
L88
-
R95
-
R66
-
R27
-
L68
-
L32
-
L306
-
L91
-
L87
-
R73
-
R11
-
L49
-
L90
-
R41
-
L202
-
R31
-
L83
-
R247
-
L97
-
L38
-
L20
-
R95
-
R65
-
R34
-
L34
-
R44
-
R50
-
L803
-
L97
-
R452
-
R61
-
L90
-
L17
-
R3
-
L803
-
R34
-
L217
-
R57
-
R394
-
R32
-
L84
-
R74
-
L90
-
R29
-
R71
-
L293
-
L40
-
R33
-
L66
-
R66
-
R37
-
L80
-
L57
-
R86
-
R14
-
R219
-
L97
-
L85
-
L37
-
L26
-
R92
-
R3
-
L69
-
R40
-
R538
-
R22
-
R16
-
R275
-
L616
-
L931
-
R856
-
R44
-
R56
-
L93
-
R95
-
R49
-
R12
-
L63
-
R13
-
R87
-
R15
-
R753
-
R332
-
R479
-
R67
-
R69
-
L40
-
L75
-
R88
-
R12
-
R9
-
R35
-
L79
-
R446
-
L11
-
L54
-
R63
-
R92
-
L16
-
L66
-
R20
-
L917
-
L5
-
R83
-
R8
-
L1
-
R32
-
R562
-
L73
-
R62
-
R26
-
L752
-
L39
-
R604
-
R71
-
L63
-
L86
-
L84
-
R39
-
R684
-
R113
-
L3
-
R69
-
R60
-
L786
-
R49
-
L19
-
L373
-
L93
-
R93
-
L76
-
L610
-
L68
-
L46
-
R12
-
R721
-
R67
-
R62
-
L62
-
L12
-
R56
-
R85
-
L427
-
L385
-
R82
-
L11
-
L478
-
L810
-
R2
-
R4
-
L57
-
L149
-
R17
-
R83
-
L98
-
L64
-
R73
-
L80
-
L31
-
L559
-
L41
-
R66
-
R93
-
R41
-
R559
-
L84
-
R32
-
L839
-
R14
-
L82
-
R36
-
R30
-
L18
-
L48
-
R83
-
R2
-
L27
-
L93
-
L65
-
R51
-
R49
-
R70
-
L270
-
R39
-
R61
-
R75
-
L75
-
L88
-
L53
-
R22
-
L87
-
L994
-
R88
-
R812
-
R81
-
R19
-
R11
-
R18
-
R71
-
R296
-
L729
-
R12
-
L979
-
R295
-
R5
-
L19
-
R22
-
R26
-
R71
-
L2
-
R86
-
R81
-
L65
-
R86
-
R52
-
R1
-
L628
-
L740
-
R73
-
R56
-
R73
-
R27
-
L566
-
R33
-
R81
-
R91
-
L39
-
R54
-
L67
-
L418
-
L84
-
L51
-
R828
-
L782
-
L80
-
L384
-
L4
-
L73
-
R70
-
L87
-
R60
-
R18
-
R64
-
R36
-
L10
-
L92
-
L98
-
L19
-
R82
-
R37
-
R689
-
L19
-
L70
-
L3
-
L47
-
R50
-
R17
-
L70
-
L47
-
R1
-
L94
-
L58
-
L802
-
L47
-
L185
-
R67
-
L82
-
R19
-
R14
-
R24
-
R43
-
L17
-
R56
-
L239
-
R26
-
R574
-
L18
-
R16
-
L726
-
L72
-
L944
-
R44
-
R24
-
R92
-
R31
-
R92
-
R41
-
L31
-
R9
-
L69
-
L46
-
L30
-
R87
-
R2
-
R61
-
R15
-
L84
-
L94
-
L42
-
L58
-
L427
-
L85
-
L4
-
L226
-
R842
-
R80
-
R90
-
R30
-
L423
-
L30
-
L21
-
L86
-
R12
-
R68
-
R73
-
R213
-
R94
-
L210
-
R50
-
R60
-
L971
-
L50
-
R19
-
R66
-
R36
-
R11
-
R9
-
R175
-
L96
-
L84
-
L74
-
R382
-
L811
-
L20
-
L1
-
R9
-
L12
-
L77
-
R789
-
R1
-
L85
-
L16
-
L96
-
R17
-
L17
-
L24
-
R163
-
R62
-
R60
-
L83
-
L74
-
L48
-
L59
-
R93
-
R6
-
L759
-
L77
-
L64
-
L28
-
R32
-
R87
-
R716
-
L7
-
R55
-
R36
-
L91
-
R22
-
L1
-
R35
-
L56
-
R54
-
R962
-
R515
-
R969
-
R88
-
R85
-
L73
-
R991
-
R99
-
L37
-
R47
-
L14
-
L28
-
L58
-
L78
-
L12
-
R12
-
L22
-
L2
-
L50
-
L48
-
L32
-
R32
-
L13
-
L3
-
L584
-
L16
-
R45
-
R71
-
R38
-
R718
-
L8
-
R152
-
R31
-
R78
-
R813
-
L422
-
R390
-
R877
-
L42
-
L515
-
L88
-
L1
-
R203
-
L24
-
L44
-
L156
-
L104
-
L60
-
R64
-
L4
-
R2
-
R2
-
L1
-
L10
-
R89
-
R17
-
L64
-
L59
-
L69
-
L13
-
R92
-
R1
-
L68
-
R85
-
R395
-
L95
-
R46
-
R82
-
L73
-
L43
-
R88
-
R39
-
L57
-
L10
-
L772
-
L82
-
R97
-
R85
-
R63
-
L33
-
L30
-
L19
-
L10
-
R9
-
R467
-
L581
-
L666
-
L19
-
R819
-
R466
-
L575
-
R655
-
R754
-
R70
-
R37
-
L51
-
R40
-
L85
-
R89
-
L80
-
R47
-
L67
-
R48
-
L19
-
L49
-
L17
-
R37
-
L19
-
R89
-
L76
-
L62
-
L89
-
R8
-
R651
-
L2
-
R234
-
L97
-
R63
-
R610
-
R90
-
L68
-
R68
-
L310
-
R71
-
R414
-
R9
-
R91
-
R25
-
R24
-
R48
-
L11
-
L58
-
L3
-
L8
-
R54
-
R74
-
L84
-
L436
-
R69
-
R31
-
L74
-
R74
-
R21
-
L87
-
R32
-
R73
-
R72
-
L45
-
R20
-
R314
-
R88
-
L18
-
R19
-
R11
-
R309
-
L409
-
L88
-
R25
-
L637
-
L10
-
L98
-
R90
-
L97
-
L685
-
R96
-
R740
-
R59
-
L29
-
R34
-
R19
-
L19
-
R78
-
L271
-
L7
-
R864
-
L764
-
R42
-
R58
-
R59
-
L11
-
R54
-
L42
-
R40
-
L298
-
L35
-
L91
-
L876
-
R69
-
L79
-
L41
-
R913
-
L26
-
R59
-
L71
-
R65
-
L24
-
R735
-
L31
-
L79
-
R910
-
L65
-
R65
-
R67
-
R49
-
R84
-
R750
-
R491
-
L41
-
L73
-
L31
-
R4
-
L9
-
R9
-
R46
-
R7
-
L12
-
R58
-
R151
-
R50
-
L372
-
L25
-
R58
-
L90
-
L8
-
L33
-
R15
-
L17
-
R26
-
L26
-
R817
-
R98
-
L902
-
L59
-
R18
-
R807
-
L607
-
L41
-
R77
-
R564
-
L68
-
R6
-
R631
-
R931
-
R12
-
R29
-
L41
-
L81
-
L19
-
L45
-
R21
-
L90
-
R24
-
L84
-
L26
-
R10
-
L29
-
L81
-
L379
-
L21
-
L676
-
R16
-
R633
-
L35
-
R108
-
L746
-
R934
-
R66
-
L89
-
R85
-
L36
-
L62
-
L587
-
L721
-
R31
-
L21
-
R26
-
R92
-
L41
-
L92
-
R15
-
R18
-
R82
-
R57
-
L347
-
L52
-
L58
-
L56
-
R70
-
R86
-
L37
-
R337
-
L840
-
L613
-
R21
-
R132
-
L87
-
L513
-
L31
-
R768
-
R63
-
R25
-
R7
-
L90
-
R32
-
L78
-
L96
-
R87
-
R78
-
R75
-
R77
-
R92
-
L49
-
L52
-
L86
-
L22
-
R73
-
R37
-
L10
-
R65
-
R43
-
L3
-
L76
-
R26
-
L366
-
L47
-
R42
-
L70
-
L62
-
L98
-
R3
-
R43
-
L228
-
R12
-
R49
-
L33
-
R24
-
R76
-
L33
-
L2
-
L12
-
L50
-
L103
-
L38
-
R72
-
L209
-
L209
-
L48
-
R29
-
L897
-
L19
-
R203
-
L92
-
L192
-
L55
-
L47
-
L866
-
R68
-
L221
-
R17
-
R45
-
L61
-
L3
-
R72
-
L667
-
L26
-
R31
-
L87
-
R44
-
R82
-
R7
-
L67
-
R4
-
L63
-
L1
-
L63
-
R28
-
L10
-
R487
-
R952
-
L59
-
R50
-
L423
-
R32
-
L72
-
L629
-
R88
-
L50
-
R19
-
R44
-
L17
-
L48
-
R65
-
R2
-
L78
-
R576
-
L991
-
R91
-
R76
-
R924
-
L18
-
L82
-
L10
-
L85
-
R45
-
L27
-
R95
-
R651
-
R62
-
R269
-
R41
-
R59
-
R99
-
R537
-
R64
-
L28
-
R928
-
L21
-
L98
-
L22
-
L59
-
L92
-
R92
-
L624
-
L34
-
L242
-
R59
-
L17
-
L42
-
R82
-
L632
-
R50
-
R57
-
L82
-
R988
-
L63
-
L70
-
R34
-
L29
-
R93
-
R72
-
L74
-
L17
-
L9
-
L749
-
L13
-
L138
-
L191
-
R91
-
L78
-
R818
-
L94
-
L674
-
L458
-
R985
-
L43
-
L56
-
R65
-
R35
-
R30
-
R844
-
R443
-
R609
-
R58
-
R778
-
R19
-
R19
-
R51
-
R49
-
R49
-
R451
-
L87
-
R33
-
L46
-
L551
-
R51
-
L998
-
R17
-
R13
-
L32
-
L59
-
R59
-
R3
-
R12
-
L43
-
R1
-
L6
-
L42
-
L25
-
R705
-
R95
-
L89
-
L38
-
R77
-
L25
-
R75
-
L32
-
R30
-
L19
-
L814
-
R35
-
R33
-
L56
-
L16
-
R39
-
R68
-
L368
-
L42
-
L91
-
L468
-
L86
-
L85
-
L41
-
L87
-
L14
-
R97
-
L4
-
R47
-
R74
-
L89
-
L36
-
R12
-
R214
-
R63
-
R36
-
L98
-
R98
-
R12
-
L708
-
L92
-
R13
-
R975
-
R25
-
L469
-
L637
-
L59
-
L160
-
L182
-
L99
-
R3
-
L122
-
L81
-
L76
-
R57
-
R615
-
L479
-
L570
-
R34
-
R64
-
L964
-
R99
-
L99
-
L77
-
R77
-
R70
-
R98
-
L10
-
R642
-
R7
-
L97
-
L39
-
L55
-
L16
-
L70
-
L23
-
L27
-
L91
-
R91
-
R137
-
R37
-
R46
-
L74
-
L96
-
L46
-
L14
-
L980
-
R83
-
L73
-
L295
-
L92
-
R44
-
R278
-
L39
-
R76
-
R34
-
R14
-
L64
-
R344
-
R609
-
L1
-
R527
-
L87
-
L86
-
R57
-
R81
-
L28
-
R64
-
R64
-
R90
-
R5
-
L958
-
R64
-
L301
-
L128
-
R28
-
R97
-
L68
-
R730
-
R41
-
L139
-
L45
-
R84
-
L537
-
L38
-
R75
-
R106
-
R683
-
L94
-
L95
-
R28
-
R72
-
L43
-
R46
-
R39
-
L3
-
R36
-
L38
-
R51
-
L88
-
R10
-
R44
-
R16
-
L60
-
L95
-
L72
-
R57
-
R16
-
L10
-
L6
-
R221
-
L202
-
L87
-
R168
-
R46
-
L70
-
L32
-
L51
-
L84
-
L9
-
L17
-
L83
-
L76
-
L97
-
R1
-
R84
-
L12
-
R17
-
R83
-
L72
-
R72
-
R88
-
L78
-
L22
-
R12
-
L433
-
L8
-
L52
-
R18
-
R75
-
L89
-
R89
-
R62
-
R38
-
L82
-
R48
-
L466
-
R18
-
L118
-
R29
-
R747
-
R24
-
L403
-
R3
-
R9
-
L39
-
R30
-
L331
-
R73
-
L12
-
R75
-
R95
-
L781
-
R89
-
L8
-
L230
-
L17
-
L75
-
R91
-
L75
-
L43
-
R677
-
L472
-
L79
-
L77
-
L3
-
R68
-
L45
-
R80
-
L41
-
L40
-
R60
-
R26
-
L73
-
L78
-
R64
-
R94
-
R40
-
R48
-
L18
-
R239
-
L21
-
R97
-
R80
-
R23
-
R37
-
L73
-
L44
-
L220
-
R55
-
L15
-
R60
-
R61
-
L72
-
R125
-
R404
-
L542
-
R553
-
R71
-
R73
-
L42
-
R43
-
L10
-
L39
-
L25
-
L7
-
R260
-
L53
-
L47
-
R87
-
R60
-
L667
-
R67
-
R34
-
L34
-
R35
-
R82
-
R81
-
R69
-
L83
-
L84
-
R14
-
L96
-
R90
-
L66
-
R75
-
R76
-
R80
-
R4
-
L77
-
R84
-
L17
-
R44
-
L622
-
L50
-
L123
-
L16
-
L4
-
R27
-
R80
-
R11
-
R54
-
R86
-
R46
-
R54
-
L17
-
R63
-
R35
-
L35
-
R98
-
L7
-
L91
-
R20
-
R17
-
L37
-
R20
-
L43
-
L58
-
L19
-
L887
-
L18
-
L18
-
R23
-
R57
-
R43
-
L132
-
R51
-
L24
-
R48
-
R879
-
R64
-
R31
-
R638
-
R38
-
R184
-
L34
-
R57
-
L51
-
L71
-
L78
-
R448
-
L48
-
L48
-
R48
-
L131
-
R66
-
L935
-
L13
-
L87
-
L28
-
R901
-
R50
-
L87
-
R64
-
L83
-
L17
-
R702
-
L61
-
L9
-
R27
-
L30
-
L11
-
R77
-
R921
-
R84
-
L27
-
L55
-
L190
-
L41
-
R28
-
L14
-
R99
-
L8
-
L72
-
L20
-
R41
-
R20
-
L79
-
R77
-
L59
-
R851
-
R49
-
L415
-
R15
-
L13
-
L458
-
R10
-
L39
-
L36
-
R8
-
L72
-
R29
-
R10
-
L41
-
R2
-
R60
-
R40
-
L93
-
R93
-
L68
-
L95
-
R16
-
R47
-
L84
-
R15
-
R69
-
R962
-
R19
-
R30
-
L6
-
R2
-
L24
-
R47
-
R70
-
L3
-
L60
-
L37
-
L30
-
L501
-
L87
-
L69
-
R87
-
R86
-
L7
-
R223
-
L2
-
R791
-
R9
-
R643
-
R99
-
L842
-
L580
-
R80
-
L49
-
R90
-
L695
-
R54
-
L116
-
L84
-
L990
-
L86
-
R972
-
R56
-
R87
-
R42
-
R37
-
L219
-
L999
-
L74
-
L26
-
L70
-
R70
-
L98
-
R548
-
L382
-
R21
-
R866
-
R86
-
R159
-
L10
-
L87
-
L20
-
R3
-
R19
-
R21
-
L26
-
L66
-
L391
-
L343
-
R15
-
L15
-
L75
-
L525
-
R13
-
R717
-
R70
-
L91
-
L218
-
R20
-
L776
-
L536
-
R24
-
L23
-
L974
-
R74
-
R18
-
R82
-
R16
-
R72
-
L7
-
R16
-
L97
-
L72
-
R72
-
L63
-
L784
-
L53
-
L63
-
L91
-
R92
-
L88
-
R15
-
L765
-
L29
-
R37
-
R83
-
R964
-
L21
-
R57
-
L66
-
L30
-
L895
-
R31
-
L92
-
L72
-
L89
-
L194
-
R716
-
L261
-
L639
-
R48
-
R76
-
L45
-
L79
-
R996
-
R4
-
L28
-
R803
-
L35
-
R74
-
L2
-
L37
-
L15
-
L60
-
R76
-
R69
-
L196
-
L849
-
L9
-
R9
-
R61
-
L20
-
L41
-
R7
-
L207
-
R24
-
L13
-
R89
-
L455
-
L64
-
L647
-
R66
-
R21
-
R79
-
L36
-
R36
-
L14
-
L70
-
R84
-
R73
-
L14
-
L13
-
L7
-
L661
-
L78
-
L37
-
L63
-
L499
-
L975
-
R74
-
R72
-
L24
-
L91
-
L85
-
R6
-
R353
-
R809
-
R60
-
L12
-
R68
-
L283
-
R27
-
L73
-
L27
-
R20
-
R80
-
L12
-
R17
-
L5
-
L56
-
R8
-
R73
-
L25
-
R34
-
L34
-
L458
-
L42
-
L64
-
L23
-
L13
-
L539
-
R539
-
L695
-
L72
-
L33
-
R927
-
L27
-
R9
-
L9
-
L68
-
R364
-
R22
-
R82
-
R65
-
R18
-
L83
-
L945
-
L71
-
L55
-
L29
-
R91
-
R57
-
L448
-
R59
-
R126
-
L27
-
R101
-
L59
-
R51
-
L51
-
L881
-
L19
-
R85
-
R3
-
L38
-
R42
-
L55
-
L33
-
R96
-
R62
-
R38
-
L304
-
L3
-
L93
-
R57
-
L50
-
L26
-
R82
-
R67
-
R70
-
L1
-
L58
-
L869
-
L952
-
L20
-
L68
-
R84
-
L16
-
R38
-
R36
-
L122
-
L18
-
L809
-
L36
-
L66
-
R53
-
R24
-
L29
-
R193
-
L25
-
R38
-
L777
-
L439
-
L61
-
L48
-
R76
-
R872
-
R2
-
L35
-
L46
-
R502
-
R77
-
R40
-
L40
-
R11
-
L40
-
R49
-
L20
-
L23
-
R323
-
R21
-
R56
-
L777
-
R58
-
L202
-
L50
-
R35
-
L830
-
R44
-
L10
-
R55
-
L85
-
R60
-
R96
-
R129
-
R56
-
R544
-
R949
-
R98
-
R40
-
R73
-
R12
-
L31
-
L41
-
L76
-
L60
-
R76
-
R91
-
L15
-
R56
-
L18
-
L80
-
R926
-
L99
-
R61
-
R532
-
L94
-
R204
-
R296
-
R41
-
R12
-
L75
-
R64
-
L42
-
L85
-
L15
-
L3
-
L97
-
L329
-
L71
-
R11
-
L3
-
L11
-
R3
-
R22
-
R81
-
R897
-
L15
-
L70
-
R19
-
R16
-
R450
-
L95
-
R54
-
L59
-
L44
-
L42
-
R22
-
R69
-
L760
-
L712
-
L7
-
R374
-
L16
-
L78
-
L6
-
L42
-
L29
-
R71
-
L8
-
R63
-
R45
-
R40
-
R50
-
L956
-
L41
-
L582
-
L3
-
R92
-
R90
-
R710
-
L578
-
R78
-
L39
-
R22
-
R36
-
L19
-
L34
-
R34
-
L580
-
L68
-
R41
-
L93
-
R521
-
L38
-
L83
-
R84
-
R37
-
L21
-
R68
-
L568
-
R22
-
R78
-
R675
-
R125
-
L39
-
L879
-
R49
-
L31
-
R71
-
R4
-
R575
-
R50
-
L96
-
L904
-
R7
-
R793
-
R6
-
L6
-
L15
-
R93
-
L54
-
L10
-
L45
-
R51
-
R48
-
L98
-
L70
-
R986
-
R22
-
R696
-
R96
-
R71
-
L8
-
L763
-
R30
-
L53
-
L30
-
L47
-
R21
-
L74
-
R248
-
L68
-
L17
-
R90
-
R49
-
R16
-
L65
-
L3
-
L49
-
R52
-
R84
-
L84
-
R93
-
R932
-
R75
-
R74
-
R38
-
L12
-
R55
-
L649
-
L72
-
R61
-
R4
-
L56
-
L43
-
L28
-
R328
-
L29
-
R29
-
L8
-
R52
-
R56
-
R47
-
L47
-
L39
-
R239
-
R42
-
R58
-
R222
-
R92
-
R286
-
R54
-
L854
-
L76
-
R76
-
R16
-
R16
-
L43
-
R11
-
L53
-
L75
-
R938
-
R19
-
L52
-
R23
-
L26
-
L366
-
L366
-
L35
-
R93
-
L455
-
R4
-
L6
-
L43
-
R29
-
L29
-
R44
-
L53
-
L31
-
R7
-
R43
-
R51
-
L262
-
R36
-
R256
-
L685
-
L828
-
R70
-
L48
-
R7
-
L744
-
R55
-
R25
-
L843
-
L11
-
L76
-
R385
-
R170
-
L30
-
L438
-
L24
-
L591
-
R41
-
R54
-
R20
-
R347
-
L47
-
R906
-
L68
-
L38
-
R36
-
L21
-
R85
-
R74
-
R46
-
R60
-
R520
-
R759
-
R99
-
L52
-
L67
-
R761
-
L30
-
R56
-
L94
-
L32
-
R60
-
R40
-
L9
-
R878
-
R35
-
R96
-
R723
-
R315
-
R62
-
L77
-
L43
-
R60
-
L68
-
R28
-
L591
-
L364
-
L14
-
R69
-
R65
-
R35
-
R17
-
L11
-
L96
-
L10
-
R3
-
R457
-
L94
-
L70
-
L996
-
R4
-
R96
-
L175
-
R10
-
R965
-
L19
-
L40
-
R759
-
R1
-
L18
-
R17
-
L221
-
L79
-
L178
-
L22
-
L50
-
R50
-
R73
-
L98
-
L75
-
R27
-
R73
-
L836
-
L64
-
L10
-
R810
-
L85
-
R687
-
R95
-
L47
-
L91
-
R86
-
R255
-
R32
-
R10
-
L62
-
R98
-
L78
-
L21
-
L4
-
L60
-
R85
-
R743
-
R73
-
R24
-
R40
-
L22
-
R34
-
L76
-
R46
-
L62
-
R40
-
R65
-
R2
-
L27
-
R20
-
R56
-
R11
-
L51
-
L30
-
R14
-
R54
-
R46
-
R691
-
L590
-
L1
-
R86
-
L248
-
R62
-
L45
-
L61
-
L373
-
R879
-
R44
-
L44
-
L94
-
L930
-
R915
-
R253
-
R46
-
R42
-
L4
-
R43
-
R249
-
R12
-
R39
-
L553
-
L65
-
L79
-
R983
-
R43
-
R97
-
R36
-
R67
-
R93
-
R7
-
R84
-
L16
-
R32
-
L34
-
L46
-
R80
-
R70
-
R33
-
R197
-
R646
-
L277
-
L99
-
R55
-
R49
-
R26
-
R99
-
R901
-
R203
-
L62
-
L41
-
R98
-
R187
-
R45
-
L8
-
R287
-
L21
-
L95
-
R7
-
R334
-
R88
-
L38
-
L84
-
R524
-
R63
-
L381
-
L432
-
L74
-
R87
-
L58
-
R20
-
L49
-
L79
-
R19
-
R630
-
L86
-
R16
-
R60
-
R97
-
L60
-
L897
-
L818
-
L82
-
R26
-
R55
-
L81
-
R3
-
R255
-
R76
-
L55
-
L471
-
L24
-
L784
-
R29
-
L64
-
L48
-
L15
-
R98
-
L41
-
L33
-
L26
-
R21
-
L21
-
L80
-
L95
-
R12
-
L637
-
R31
-
R69
-
L77
-
R77
-
L14
-
L86
-
R26
-
L89
-
R81
-
L18
-
R261
-
R85
-
L35
-
L11
-
R8
-
R68
-
R68
-
R982
-
L3
-
L23
-
L185
-
L972
-
L706
-
L37
-
L351
-
L49
-
R74
-
R81
-
R88
-
R60
-
R64
-
R27
-
L94
-
L1
-
L99
-
R41
-
L589
-
L952
-
R42
-
R58
-
R68
-
L68
-
L806
-
L69
-
L70
-
L38
-
R64
-
L87
-
L97
-
R49
-
R6
-
L92
-
R97
-
L12
-
R946
-
R9
-
R94
-
R33
-
R73
-
R237
-
L65
-
R36
-
L66
-
L59
-
L183
-
R13
-
R501
-
L36
-
R847
-
L968
-
L19
-
R89
-
R73
-
L62
-
R311
-
R51
-
L30
-
R50
-
L56
-
L64
-
L64
-
R15
-
L57
-
R42
-
L28
-
R28
-
L36
-
L8
-
R8
-
R15
-
L15
-
L181
-
R81
-
L94
-
L69
-
L93
-
L724
-
R36
-
R844
-
R13
-
R515
-
L4
-
R76
-
L17
-
L83
-
R26
-
R74
-
R7
-
L65
-
L415
-
R73
-
R53
-
L736
-
L17
-
L204
-
R17
-
R87
-
R501
-
L1
-
R85
-
L68
-
R164
-
R19
-
R17
-
R94
-
L134
-
R195
-
L72
-
L85
-
R85
-
L12
-
R31
-
L750
-
L375
-
L20
-
R48
-
L22
-
R22
-
R3
-
R291
-
R78
-
R79
-
R27
-
R85
-
L85
-
L26
-
R931
-
R4
-
L9
-
L714
-
R14
-
R11
-
R89
-
R83
-
L71
-
R743
-
L93
-
L54
-
L656
-
R94
-
L663
-
R82
-
L45
-
L20
-
R78
-
L659
-
L714
-
R89
-
R971
-
L65
-
L915
-
R715
-
R75
-
R25
-
R2
-
R33
-
L74
-
R439
-
R14
-
L1
-
L13
-
R27
-
L50
-
R88
-
R35
-
L426
-
L74
-
R50
-
L6
-
R56
-
L58
-
R21
-
L184
-
R43
-
R837
-
R40
-
R1
-
R76
-
L46
-
L30
-
R11
-
L76
-
L39
-
R32
-
R1
-
R59
-
R34
-
R81
-
R30
-
R67
-
R48
-
R79
-
L97
-
R14
-
R47
-
L91
-
L32
-
R98
-
L50
-
L697
-
L19
-
R26
-
R74
-
R17
-
R610
-
L702
-
L225
-
L839
-
L898
-
R42
-
R483
-
R89
-
R55
-
R68
-
L35
-
L865
-
R6
-
R9
-
L93
-
R78
-
L29
-
R52
-
R9
-
R868
-
R80
-
R20
-
R75
-
L25
-
L152
-
L1
-
L97
-
L27
-
L83
-
R46
-
L14
-
L122
-
R23
-
R842
-
L758
-
R31
-
R8
-
L21
-
R75
-
R885
-
R15
-
R38
-
L38
-
R19
-
L94
-
L25
-
R84
-
L15
-
L39
-
R970
-
R29
-
R13
-
R58
-
R15
-
R16
-
R69
-
R42
-
L42
-
L742
-
R47
-
R918
-
L95
-
R64
-
R57
-
R14
-
R37
-
R23
-
R68
-
R639
-
R78
-
L28
-
L80
-
R18
-
R610
-
R896
-
R95
-
L519
-
R43
-
L743
-
L34
-
L766
-
L24
-
L494
-
R918
-
R83
-
R219
-
R2
-
R28
-
R98
-
R691
-
L67
-
R294
-
L1
-
R54
-
R57
-
R42
-
R52
-
L55
-
L37
-
L660
-
L51
-
L17
-
L928
-
R75
-
R21
-
R23
-
L23
-
R528
-
L40
-
R46
-
L734
-
L903
-
L97
-
R59
-
R49
-
R73
-
L81
-
L46
-
L54
-
L229
-
L711
-
L37
-
R67
-
R96
-
L76
-
L40
-
L48
-
L22
-
L70
-
L30
-
L54
-
L46
-
R595
-
R5
-
R95
-
R84
-
L31
-
L48
-
L99
-
R17
-
R82
-
R89
-
L81
-
L15
-
L489
-
R8
-
L15
-
R3
-
R65
-
R689
-
L804
-
R30
-
L63
-
L75
-
R5
-
R253
-
R77
-
R38
-
R85
-
L1
-
R1
-
L53
-
L37
-
R90
-
L56
-
L46
-
L162
-
L657
-
L79
-
R17
-
R83
-
R60
-
R11
-
R63
-
L96
-
L38
-
R2
-
R598
-
R71
-
L71
-
L79
-
L835
-
R82
-
R85
-
L27
-
L52
-
L74
-
R963
-
L44
-
R76
-
R34
-
R14
-
R49
-
L27
-
L110
-
L55
-
L95
-
L47
-
R303
-
R63
-
R41
-
R35
-
L74
-
L26
-
L791
-
L201
-
R55
-
R68
-
L31
-
L66
-
R66
-
L17
-
R334
-
R7
-
R176
-
R75
-
R98
-
R80
-
R174
-
L84
-
L85
-
R95
-
L53
-
L1
-
L7
-
R32
-
R76
-
L767
-
L418
-
L886
-
L32
-
R3
-
R85
-
R31
-
R58
-
R63
-
L32
-
R8
-
L416
-
L78
-
L47
-
R84
-
L15
-
L541
-
L593
-
R54
-
R16
-
L16
-
R499
-
R290
-
L50
-
L73
-
R73
-
R35
-
R65
-
L73
-
R73
-
L82
-
R30
-
L88
-
R763
-
L83
-
L95
-
R55
-
R40
-
R60
-
L68
-
R322
-
L754
-
R92
-
L98
-
R84
-
L76
-
R11
-
L13
-
R94
-
R68
-
R4
-
L94
-
L8
-
L64
-
L8
-
L692
-
R42
-
R58
-
L7
-
R21
-
L106
-
R68
-
L76
-
L22
-
R17
-
R49
-
L96
-
R52
-
L57
-
R76
-
R81
-
L9
-
L91
-
L847
-
R647
-
L781
-
L74
-
L845
-
R66
-
R83
-
L87
-
R194
-
R19
-
R992
-
R75
-
R58
-
R37
-
L37
-
L72
-
R43
-
L19
-
L17
-
R11
-
L48
-
L898
-
L85
-
L29
-
L9
-
R306
-
R22
-
L27
-
L78
-
L67
-
L33
-
L42
-
L15
-
R35
-
L678
-
L612
-
L88
-
L49
-
L24
-
L55
-
L672
-
R62
-
R12
-
L74
-
L872
-
R637
-
R343
-
R21
-
R71
-
R932
-
R168
-
L86
-
R850
-
R86
-
R65
-
R39
-
L54
-
L62
-
L125
-
L57
-
R39
-
R65
-
R40
-
L83
-
L17
-
L284
-
R84
-
R75
-
R19
-
R6
-
L99
-
L92
-
R98
-
L7
-
L1
-
L99
-
R301
-
R899
-
L66
-
R66
-
R99
-
R12
-
R89
-
R6
-
R94
-
L62
-
R1
-
R293
-
L68
-
L768
-
R663
-
L899
-
R12
-
R28
-
R31
-
R69
-
L54
-
R54
-
L11
-
R81
-
L92
-
R80
-
L58
-
R72
-
R728
-
R44
-
R56
-
R45
-
R55
-
L58
-
L13
-
L29
-
R536
-
L66
-
R8
-
R92
-
R42
-
L95
-
R66
-
R34
-
L12
-
L22
-
R57
-
R4
-
R79
-
R10
-
R67
-
L92
-
R92
-
R50
-
R17
-
R98
-
L65
-
L432
-
R32
-
L65
-
R13
-
R154
-
R11
-
L64
-
L69
-
L80
-
L43
-
R48
-
R54
-
L298
-
L79
-
R72
-
L54
-
L141
-
R67
-
R74
-
L19
-
R16
-
L219
-
R27
-
R94
-
L38
-
L27
-
L534
-
R14
-
R86
-
L87
-
R25
-
R62
-
L83
-
R683
-
L34
-
R39
-
R283
-
R513
-
R99
-
R47
-
L48
-
R95
-
R70
-
L28
-
R28
-
L86
-
L78
-
R41
-
R94
-
R65
-
L82
-
L5
-
R26
-
L14
-
R21
-
L11
-
L36
-
L79
-
R97
-
L570
-
R42
-
R87
-
R24
-
R82
-
R7
-
L365
-
L24
-
L18
-
R18
-
R29
-
R971
-
L240
-
L96
-
L36
-
L28
-
L960
-
R95
-
L44
-
R9
-
L41
-
L59
-
L5
-
L21
-
L287
-
R13
-
R524
-
R97
-
R79
-
L55
-
R22
-
R33
-
R54
-
R87
-
R218
-
R54
-
L13
-
L11
-
L46
-
R60
-
L3
-
R73
-
R227
-
R80
-
R20
-
R49
-
R82
-
L31
-
L23
-
R423
-
R345
-
R61
-
L30
-
L35
-
L41
-
L26
-
L53
-
R2
-
L23
-
L33
-
L79
-
R312
-
L81
-
R817
-
L26
-
R98
-
L8
-
R39
-
R19
-
L47
-
R89
-
R24
-
L124
-
L4
-
L47
-
R17
-
R95
-
R233
-
R88
-
R491
-
L673
-
L66
-
R672
-
R53
-
R80
-
L39
-
R36
-
L36
-
L4
-
R4
-
R87
-
R13
-
R33
-
R52
-
L687
-
L98
-
R91
-
R646
-
L22
-
R278
-
L26
-
R67
-
L34
-
R96
-
R504
-
R24
-
L3
-
R938
-
R41
-
L94
-
L606
-
L13
-
R13
-
R4
-
L4
-
R35
-
R78
-
L37
-
L76
-
L98
-
L2
-
L940
-
R63
-
L56
-
R33
-
L86
-
L3
-
R89
-
L14
-
L718
-
R76
-
L96
-
L72
-
L25
-
L34
-
L30
-
L91
-
L96
-
L1
-
R705
-
L4
-
R80
-
R20
-
L33
-
L27
-
R60
-
L19
-
L81
-
L56
-
R15
-
R741
-
R548
-
R52
-
R15
-
R9
-
L25
-
L88
-
L359
-
R48
-
L81
-
R481
-
L55
-
R155
-
R22
-
L22
-
R565
-
R69
-
R81
-
R85
-
R3
-
R4
-
L10
-
L97
-
R71
-
L6
-
L65
-
L92
-
L68
-
R92
-
L32
-
L70
-
L46
-
L84
-
R32
-
R68
-
L61
-
L39
-
L58
-
L83
-
R43
-
R713
-
L15
-
R6
-
R18
-
R876
-
R48
-
R21
-
R47
-
R84
-
L39
-
R39
-
L67
-
L65
-
R65
-
L33
-
R5
-
R96
-
L95
-
R94
-
R71
-
L71
-
R6
-
R48
-
R46
-
L53
-
R53
-
L85
-
R985
-
L47
-
L7
-
R29
-
R64
-
L24
-
L207
-
R92
-
R92
-
L58
-
R66
-
R765
-
L54
-
R4
-
L15
-
L290
-
L10
-
R24
-
L98
-
L85
-
R59
-
L35
-
R35
-
R81
-
R273
-
R646
-
R76
-
R438
-
R510
-
R45
-
L2
-
L7
-
R240
-
L724
-
R56
-
R416
-
R531
-
L79
-
L61
-
L839
-
R16
-
L35
-
L42
-
R1
-
R78
-
R11
-
R71
-
R406
-
R4
-
R93
-
R397
-
L21
-
L79
-
R26
-
R74
-
R67
-
L67
-
L81
-
L519
-
L80
-
L50
-
R42
-
R58
-
R830
-
L476
-
L24
-
L48
-
L746
-
R94
-
L50
-
R161
-
L99
-
R59
-
L6
-
L65
-
L97
-
L10
-
R768
-
L761
-
L68
-
R141
-
R27
-
R79
-
L579
-
R61
-
L256
-
R70
-
R60
-
L35
-
L61
-
L139
-
R687
-
R89
-
R24
-
L32
-
L25
-
L11
-
L75
-
L63
-
L846
-
L848
-
R87
-
L83
-
L4
-
R28
-
L28
-
L66
-
R88
-
L76
-
R58
-
L99
-
R50
-
R45
-
R88
-
L69
-
L772
-
R653
-
L199
-
R70
-
L54
-
L35
-
R48
-
L530
-
L54
-
R970
-
L16
-
R749
-
L582
-
R52
-
R581
-
R36
-
L889
-
R22
-
R31
-
L495
-
R95
-
L91
-
R201
-
R90
-
L66
-
L34
-
L96
-
L4
-
L29
-
R27
-
R22
-
L74
-
R56
-
L67
-
L35
-
L271
-
L29
-
L93
-
L164
-
R892
-
L35
-
L651
-
L49
-
L88
-
L12
-
R38
-
L38
-
R75
-
L75
-
L23
-
L44
-
L10
-
L56
-
L67
-
R734
-
R66
-
R28
-
L92
-
L11
-
L510
-
R97
-
R48
-
R32
-
L92
-
L526
-
R85
-
R175
-
L34
-
L310
-
L490
-
R623
-
R17
-
L17
-
L73
-
L50
-
L624
-
R78
-
L71
-
L83
-
L58
-
R9
-
R55
-
L46
-
R44
-
R14
-
R74
-
L92
-
L33
-
L22
-
R93
-
R41
-
R758
-
L67
-
L70
-
L439
-
L415
-
L81
-
L57
-
R165
-
L94
-
L609
-
L41
-
R71
-
L218
-
L94
-
L45
-
L45
-
R33
-
R69
-
L36
-
L33
-
L31
-
L89
-
R15
-
R50
-
R224
-
L77
-
L87
-
L847
-
R10
-
R1
-
R25
-
R75
-
L190
-
L39
-
L25
-
R54
-
L28
-
R28
-
R18
-
R98
-
L16
-
L84
-
R21
-
R7
-
R56
-
L83
-
R83
-
R337
-
L239
-
R44
-
R64
-
L820
-
R225
-
R91
-
L72
-
R70
-
L84
-
L16
-
L472
-
R57
-
R78
-
R18
-
R13
-
R71
-
R20
-
R72
-
L40
-
R37
-
L403
-
L201
-
L50
-
L94
-
L35
-
R29
-
R20
-
R554
-
L23
-
L51
-
L19
-
R96
-
R94
-
R29
-
R74
-
L55
-
L719
-
L74
-
L26
-
R13
-
L13
-
R28
-
R54
-
R56
-
L38
-
R77
-
R23
-
R11
-
R89
-
R45
-
L45
-
R42
-
L1
-
L9
-
L69
-
R37
-
L7
-
L97
-
L996
-
L13
-
L57
-
L6
-
L24
-
R682
-
L82
-
R20
-
R80
-
L664
-
R64
-
R48
-
R85
-
R67
-
R19
-
R84
-
L28
-
L41
-
L67
-
L99
-
R32
-
R24
-
R97
-
L78
-
R57
-
R96
-
L2
-
L94
-
R53
-
R43
-
L12
-
R628
-
L280
-
L67
-
R92
-
L363
-
R6
-
L11
-
L423
-
L49
-
L17
-
R137
-
R96
-
L85
-
R59
-
R93
-
L895
-
R95
-
L56
-
R80
-
L24
-
L29
-
L42
-
L85
-
R594
-
L38
-
L89
-
R69
-
L80
-
L81
-
R81
-
L60
-
L686
-
L54
-
R22
-
L22
-
L34
-
L66
-
L78
-
R89
-
L211
-
R39
-
L39
-
R7
-
R10
-
L317
-
R70
-
R91
-
L61
-
R66
-
L66
-
R59
-
R862
-
L52
-
L18
-
R34
-
R15
-
L10
-
R45
-
R98
-
L10
-
R999
-
R78
-
L23
-
R45
-
R78
-
L585
-
R209
-
R676
-
L9
-
L3
-
L171
-
R83
-
L57
-
R957
-
L237
-
R37
-
L83
-
R83
-
L64
-
R87
-
R77
-
R9
-
R20
-
L380
-
R7
-
L83
-
R527
-
R71
-
R29
-
R83
-
R987
-
L275
-
L3
-
R36
-
R32
-
R73
-
R67
-
L36
-
L25
-
R61
-
R52
-
L41
-
R889
-
L40
-
L62
-
R83
-
R419
-
R47
-
L63
-
L57
-
R44
-
R397
-
R88
-
R44
-
R890
-
R10
-
R28
-
R72
-
L58
-
L53
-
L57
-
L21
-
R33
-
R56
-
R429
-
L63
-
R83
-
L749
-
L49
-
L851
-
R666
-
R53
-
R64
-
R78
-
L13
-
L348
-
R126
-
R74
-
R48
-
L31
-
R99
-
R43
-
L59
-
L91
-
R807
-
L16
-
L19
-
L33
-
L10
-
R81
-
L64
-
R49
-
R63
-
L997
-
R70
-
L29
-
R89
-
L663
-
R79
-
L642
-
R366
-
R61
-
L84
-
L17
-
L66
-
L710
-
R40
-
L7
-
R43
-
L394
-
R94
-
L7
-
R58
-
R49
-
R83
-
L83
-
L96
-
L4
-
R30
-
R70
-
L75
-
R75
-
L587
-
L514
-
L99
-
R22
-
L22
-
R90
-
L6
-
R31
-
L15
-
L34
-
L66
-
L45
-
L355
-
L17
-
L37
-
L93
-
L53
-
L70
-
L889
-
L92
-
R12
-
R31
-
L48
-
L46
-
L93
-
R95
-
R759
-
L78
-
R34
-
L25
-
L37
-
R77
-
L34
-
L43
-
L53
-
L91
-
L22
-
L324
-
L63
-
R35
-
L135
-
R171
-
R29
-
R849
-
L22
-
L27
-
L79
-
R79
-
R75
-
R2
-
R23
-
R36
-
R684
-
L52
-
R6
-
R426
-
L62
-
L85
-
L52
-
R28
-
L29
-
R16
-
R84
-
L20
-
R92
-
R36
-
R92
-
L60
-
L32
-
L8
-
L12
-
R52
-
L86
-
R904
-
L58
-
R69
-
R33
-
R499
-
L501
-
L727
-
R60
-
R74
-
L55
-
L52
-
R16
-
L67
-
L46
-
L3
-
R11
-
R10
-
L10
-
L11
-
L627
-
L15
-
L73
-
R379
-
L863
-
R11
-
L90
-
R2
-
R10
-
R29
-
R137
-
R284
-
R616
-
R59
-
R30
-
R816
-
R48
-
L430
-
L84
-
L97
-
R147
-
R11
-
L261
-
R61
-
R76
-
R24
-
L652
-
L24
-
L24
-
R656
-
L56
-
L22
-
L978
-
R797
-
R3
-
R620
-
R80
-
L25
-
L75
-
L94
-
R65
-
L75
-
R304
-
L26
-
R26
-
L26
-
R31
-
R72
-
L77
-
L835
-
R97
-
R38
-
L85
-
L12
-
R232
-
L35
-
L142
-
R3
-
L261
-
L27
-
R27
-
R71
-
L71
-
L71
-
R511
-
L44
-
L489
-
R89
-
L163
-
L169
-
R696
-
R40
-
R62
-
L95
-
R60
-
R73
-
R185
-
L51
-
R82
-
L20
-
R4
-
R54
-
L54
-
L93
-
R693
-
L19
-
R19
-
L472
-
R58
-
L686
-
L88
-
R35
-
R25
-
L72
-
L38
-
L8
-
R46
-
R63
-
L63
-
R150
-
L12
-
R62
-
R80
-
L80
-
R40
-
L1
-
L245
-
L94
-
L75
-
L58
-
L67
-
L29
-
R29
-
L97
-
L617
-
L58
-
L39
-
R29
-
L73
-
L167
-
L7
-
R91
-
R657
-
L47
-
L672
-
L392
-
R44
-
R19
-
R82
-
R594
-
R24
-
L62
-
L99
-
L29
-
R64
-
L45
-
R91
-
R88
-
R921
-
R70
-
L83
-
R74
-
L75
-
R7
-
R26
-
R81
-
L68
-
R761
-
L21
-
R828
-
R70
-
R19
-
L89
-
L73
-
L20
-
L51
-
L56
-
R138
-
R65
-
R467
-
R64
-
L55
-
R682
-
R31
-
L65
-
L27
-
L45
-
L55
-
L99
-
R520
-
L8
-
R78
-
R427
-
L718
-
R36
-
R76
-
R88
-
R53
-
R13
-
R34
-
R27
-
R30
-
R23
-
R63
-
L22
-
R49
-
L3
-
R595
-
L62
-
L10
-
L90
-
L90
-
R90
-
R63
-
R599
-
R38
-
R8
-
L12
-
L96
-
L52
-
L755
-
R91
-
L834
-
R50
-
R62
-
L62
-
L886
-
R94
-
L134
-
R674
-
L889
-
L12
-
L425
-
R50
-
L72
-
R90
-
L95
-
R563
-
L58
-
L61
-
R361
-
R25
-
R80
-
L89
-
L51
-
L65
-
L94
-
R69
-
R62
-
R3
-
L40
-
L870
-
R770
-
L69
-
R69
-
R404
-
L4
-
R86
-
R44
-
L90
-
R42
-
L82
-
R65
-
R18
-
R142
-
R96
-
R79
-
L53
-
R53
-
R64
-
R24
-
L18
-
L470
-
L99
-
L19
-
L972
-
R52
-
L62
-
L94
-
L46
-
L82
-
R22
-
L89
-
L83
-
L801
-
R9
-
R12
-
L126
-
R85
-
R58
-
L765
-
R91
-
R37
-
R72
-
L3
-
L1
-
R97
-
L81
-
L58
-
R485
-
R361
-
L93
-
L7
-
R12
-
R288
-
R24
-
L24
-
L11
-
L60
-
R71
-
L98
-
L15
-
L42
-
L44
-
L1
-
R53
-
R913
-
L66
-
R3
-
L3
-
L20
-
L4
-
R30
-
L44
-
L391
-
R29
-
L38
-
L62
-
L908
-
L26
-
R9
-
L84
-
R9
-
L71
-
R90
-
R81
-
R35
-
R28
-
L19
-
R67
-
L11
-
R46
-
R36
-
L382
-
R20
-
L20
-
L79
-
R615
-
R55
-
R9
-
R98
-
R66
-
L6
-
L38
-
L60
-
L60
-
R18
-
L84
-
L807
-
L58
-
L54
-
L31
-
R16
-
R90
-
L12
-
L78
-
R81
-
R119
-
R72
-
R28
-
R57
-
L657
-
L8
-
L98
-
L313
-
R56
-
R26
-
L75
-
L3
-
R15
-
R6
-
R95
-
R25
-
L26
-
R82
-
R57
-
R61
-
R70
-
L70
-
R46
-
R39
-
R98
-
L452
-
L616
-
L35
-
R20
-
L795
-
L5
-
R38
-
R62
-
L27
-
R99
-
R49
-
L48
-
R39
-
L36
-
R7
-
L57
-
R84
-
R90
-
L77
-
R89
-
R88
-
R51
-
L4
-
L47
-
L432
-
R32
-
R66
-
L66
-
R9
-
R91
-
L96
-
R96
-
L38
-
R38
-
R827
-
L527
-
R77
-
L930
-
R53
-
L75
-
L50
-
R88
-
L959
-
L94
-
L78
-
R68
-
L59
-
L41
-
L95
-
R195
-
L99
-
L20
-
L32
-
L53
-
R67
-
L63
-
L74
-
L26
-
L58
-
R31
-
R90
-
L163
-
R10
-
R64
-
R18
-
L43
-
R51
-
R67
-
R54
-
L175
-
R36
-
L131
-
L83
-
R832
-
L36
-
L84
-
R820
-
L99
-
R99
-
L39
-
L285
-
R624
-
R86
-
R14
-
R66
-
L37
-
L83
-
R41
-
L87
-
R97
-
R6
-
L3
-
L953
-
L247
-
L949
-
L95
-
L2
-
R43
-
L97
-
L66
-
R66
-
L3
-
L97
-
R92
-
R69
-
R39
-
L55
-
L45
-
R62
-
L62
-
R62
-
R24
-
R86
-
R69
-
R59
-
R5
-
R43
-
L60
-
R65
-
L50
-
L51
-
R48
-
L82
-
R83
-
R99
-
L36
-
L64
-
R20
-
R36
-
L40
-
R40
-
L19
-
L37
-
L13
-
L87
-
R66
-
R22
-
L30
-
L39
-
R81
-
R46
-
L46
-
R73
-
R94
-
L86
-
L81
-
R37
-
L86
-
R49
-
L17
-
R17
-
L31
-
L22
-
L33
-
L2
-
L47
-
R4
-
R35
-
L36
-
L49
-
L30
-
R49
-
R50
-
L33
-
R50
-
L11
-
R18
-
R44
-
R36
-
L29
-
R8
-
L46
-
R37
-
L4
-
R35
-
R44
-
R32
-
L37
-
L16
-
L42
-
L32
-
R1
-
R25
-
L31
-
L15
-
R36
-
R47
-
R40
-
R28
-
L29
-
R35
-
L6
-
L4
-
L4
-
R48
-
R23
-
L16
-
L32
-
L10
-
R35
-
R17
-
R41
···
-10
1/smol.txt
···
-
L68
-
L30
-
R48
-
L5
-
R60
-
L55
-
L1
-
L99
-
R14
-
L82
···
2/2

This is a binary file and will not be displayed.

-120
2/2.c
···
-
#include <math.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
-
-
int count_digit(unsigned long long num){
-
int len = 0;
-
while (num!=0) {
-
num /= 10;
-
len++;
-
-
}
-
return len;
-
}
-
-
int part_one_invalid(unsigned long long num) {
-
int answer = 0;
-
-
int len = count_digit(num);
-
if (len%2) {
-
answer = 0;
-
}
-
-
//it gonna be pair so no worry
-
unsigned long long halfer = pow(10, len/2);
-
-
if (num/halfer == num%halfer) {
-
answer = 1;
-
}
-
return answer;
-
-
}
-
-
-
int part_two_invalid(unsigned long long num) {
-
int answer = 0;
-
int len = count_digit(num);
-
int j;
-
-
for (int i =1; i<=len/2; i++) {
-
if (!((len%i)==0)) {
-
continue;
-
}
-
int chunk_num = len/i;
-
// use / and % to isolate chunks, with powers of 10 to the i
-
long long first = num % (long long)pow(10, i);
-
-
for (j = 1; j< chunk_num; j++) {
-
long long chunk = num % (long long)pow(10,i*(j+1))/ (long long)pow(10,i*j);
-
if (chunk != first) {
-
break;
-
-
}
-
}
-
if (j == chunk_num) {
-
answer=1;
-
}
-
-
-
}
-
-
-
-
return answer;
-
}
-
-
int main (int argc, char* argv[]) {
-
-
FILE* f = NULL;
-
char* line = NULL;
-
-
unsigned long long start = 0;
-
unsigned long long end = 0;
-
long long front_part = 0;
-
long long end_part = 0;
-
unsigned long long invalid_sum = 0;
-
ssize_t nlength;
-
size_t size = 0;
-
-
f = fopen(argv[1],"r");
-
-
while ((nlength = getdelim(&line, &size, ',', f) != -1)) {
-
start = atoll(strsep(&line, "-"));
-
end = atoll(strsep(&line, "-"));
-
-
printf("start: %llu ",start);
-
printf("end: %llu\n",end);
-
-
-
-
-
for (unsigned long long i = start; i<=end; i++) {
-
-
-
-
if (part_two_invalid(i)) {
-
invalid_sum += i;
-
printf("invalid number found: %llu\n",i);
-
-
}
-
-
-
-
-
-
}
-
-
-
-
}
-
-
-
printf("invalid sum: %llu", invalid_sum);
-
-
-
free(line);
-
free(f);
-
return 0;
-
}
···
-1
2/input.txt
···
-
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
···
-1
2/large_input.txt
···
-
3335355312-3335478020,62597156-62638027,94888325-95016472,4653-6357,54-79,1-19,314-423,472-650,217886-298699,58843645-58909745,2799-3721,150748-178674,9084373-9176707,1744-2691,17039821-17193560,2140045-2264792,743-1030,6666577818-6666739950,22946-32222,58933-81008,714665437-714803123,9972438-10023331,120068-142180,101-120,726684-913526,7575737649-7575766026,8200-11903,81-96,540949-687222,35704-54213,991404-1009392,335082-425865,196-268,3278941-3383621,915593-991111,32-47,431725-452205
···
-1
2/mini.txt
···
-
11-22,95-115,998-1012,2121212118-2121212124
···
+10
README.md
···
···
+
# Advent of code
+
+
How is this the first advent of code I do.
+
+
+
## No idea
+
+
please pelase please dont judge me .
+
+
Its just C code which i hope to then translate to haskel (I never used that language it will go great.)
day_1/1

This is a binary file and will not be displayed.

+71
day_1/1.c
···
···
+
#include <math.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
+
+
int to_int(char* line, ssize_t nread) {
+
+
+
line = realloc(line, (nread-2)*sizeof(char));
+
line++;
+
+
return atoi(line);
+
+
+
}
+
+
+
int sign(int num) {
+
return ((num%2)+((num+1)%2));
+
}
+
+
int main(int argc, char *argv[]) {
+
+
FILE *f = fopen(argv[1], "rw");
+
char *line = NULL;
+
char m;
+
size_t size = 0;
+
int move;
+
ssize_t nread;
+
int password = 0;
+
int dial = 50;
+
+
+
while ((nread = getline(&line, &size, f))!= -1) {
+
printf("%s, ",line);
+
m = line[0];
+
move = to_int(line, nread);
+
if (m == 'R' ) {
+
for (int i = 0; i<move; i++) {
+
dial++;
+
if (dial==100) {
+
dial = 0;
+
password++;
+
}
+
}
+
} else {
+
for (int i = 0; i<move; i++) {
+
dial--;
+
if (dial==0) {
+
password++;
+
}
+
if (dial == -1) {
+
dial = 99;
+
}
+
}
+
}
+
+
+
+
printf("%d, dial at :", to_int(line, nread));
+
printf("%d\n", dial);
+
}
+
+
printf("password: %d",password);
+
+
free(line);
+
fclose(f);
+
+
return 0;
+
}
+
+4317
day_1/input.txt
···
···
+
R19
+
R5
+
R29
+
R30
+
L24
+
L12
+
R24
+
R2
+
R35
+
L18
+
R22
+
L20
+
L1
+
R12
+
R46
+
L31
+
L38
+
L27
+
L33
+
L6
+
R50
+
L22
+
L37
+
L18
+
R7
+
L28
+
R50
+
L44
+
R5
+
L24
+
L5
+
R36
+
L38
+
R16
+
L50
+
R5
+
R17
+
R32
+
R33
+
R23
+
R12
+
R39
+
L48
+
R28
+
R50
+
L49
+
R5
+
L44
+
L41
+
R62
+
L90
+
R19
+
L15
+
R4
+
R96
+
L6
+
R6
+
L40
+
R55
+
R11
+
R69
+
R5
+
R29
+
R14
+
R57
+
R23
+
L76
+
L15
+
L32
+
R98
+
L58
+
L1
+
R61
+
R67
+
L67
+
L18
+
R61
+
L27
+
R84
+
R16
+
L37
+
R21
+
R44
+
R95
+
L27
+
R47
+
R68
+
R95
+
R78
+
R87
+
L87
+
R66
+
L82
+
R63
+
L84
+
L63
+
L85
+
L15
+
L19
+
L96
+
R805
+
R710
+
L73
+
R46
+
L31
+
R14
+
R28
+
L54
+
L87
+
R62
+
L60
+
R5
+
R27
+
R42
+
L19
+
R69
+
R35
+
L57
+
L47
+
R99
+
L199
+
L62
+
L43
+
R98
+
L21
+
R12
+
R671
+
R45
+
L81
+
L943
+
L76
+
L95
+
L605
+
L20
+
R92
+
L2
+
L79
+
L343
+
L79
+
L56
+
R29
+
R61
+
R308
+
R237
+
L36
+
L12
+
R50
+
L27
+
R292
+
L15
+
R48
+
L97
+
R49
+
L26
+
L36
+
R38
+
L44
+
L42
+
L90
+
R95
+
R51
+
L46
+
R73
+
R1
+
R26
+
L704
+
L53
+
L43
+
R944
+
R56
+
R230
+
R29
+
R45
+
R96
+
R71
+
L642
+
R71
+
L92
+
R456
+
L82
+
L83
+
L51
+
L51
+
L88
+
R7
+
L16
+
L88
+
R95
+
R66
+
R27
+
L68
+
L32
+
L306
+
L91
+
L87
+
R73
+
R11
+
L49
+
L90
+
R41
+
L202
+
R31
+
L83
+
R247
+
L97
+
L38
+
L20
+
R95
+
R65
+
R34
+
L34
+
R44
+
R50
+
L803
+
L97
+
R452
+
R61
+
L90
+
L17
+
R3
+
L803
+
R34
+
L217
+
R57
+
R394
+
R32
+
L84
+
R74
+
L90
+
R29
+
R71
+
L293
+
L40
+
R33
+
L66
+
R66
+
R37
+
L80
+
L57
+
R86
+
R14
+
R219
+
L97
+
L85
+
L37
+
L26
+
R92
+
R3
+
L69
+
R40
+
R538
+
R22
+
R16
+
R275
+
L616
+
L931
+
R856
+
R44
+
R56
+
L93
+
R95
+
R49
+
R12
+
L63
+
R13
+
R87
+
R15
+
R753
+
R332
+
R479
+
R67
+
R69
+
L40
+
L75
+
R88
+
R12
+
R9
+
R35
+
L79
+
R446
+
L11
+
L54
+
R63
+
R92
+
L16
+
L66
+
R20
+
L917
+
L5
+
R83
+
R8
+
L1
+
R32
+
R562
+
L73
+
R62
+
R26
+
L752
+
L39
+
R604
+
R71
+
L63
+
L86
+
L84
+
R39
+
R684
+
R113
+
L3
+
R69
+
R60
+
L786
+
R49
+
L19
+
L373
+
L93
+
R93
+
L76
+
L610
+
L68
+
L46
+
R12
+
R721
+
R67
+
R62
+
L62
+
L12
+
R56
+
R85
+
L427
+
L385
+
R82
+
L11
+
L478
+
L810
+
R2
+
R4
+
L57
+
L149
+
R17
+
R83
+
L98
+
L64
+
R73
+
L80
+
L31
+
L559
+
L41
+
R66
+
R93
+
R41
+
R559
+
L84
+
R32
+
L839
+
R14
+
L82
+
R36
+
R30
+
L18
+
L48
+
R83
+
R2
+
L27
+
L93
+
L65
+
R51
+
R49
+
R70
+
L270
+
R39
+
R61
+
R75
+
L75
+
L88
+
L53
+
R22
+
L87
+
L994
+
R88
+
R812
+
R81
+
R19
+
R11
+
R18
+
R71
+
R296
+
L729
+
R12
+
L979
+
R295
+
R5
+
L19
+
R22
+
R26
+
R71
+
L2
+
R86
+
R81
+
L65
+
R86
+
R52
+
R1
+
L628
+
L740
+
R73
+
R56
+
R73
+
R27
+
L566
+
R33
+
R81
+
R91
+
L39
+
R54
+
L67
+
L418
+
L84
+
L51
+
R828
+
L782
+
L80
+
L384
+
L4
+
L73
+
R70
+
L87
+
R60
+
R18
+
R64
+
R36
+
L10
+
L92
+
L98
+
L19
+
R82
+
R37
+
R689
+
L19
+
L70
+
L3
+
L47
+
R50
+
R17
+
L70
+
L47
+
R1
+
L94
+
L58
+
L802
+
L47
+
L185
+
R67
+
L82
+
R19
+
R14
+
R24
+
R43
+
L17
+
R56
+
L239
+
R26
+
R574
+
L18
+
R16
+
L726
+
L72
+
L944
+
R44
+
R24
+
R92
+
R31
+
R92
+
R41
+
L31
+
R9
+
L69
+
L46
+
L30
+
R87
+
R2
+
R61
+
R15
+
L84
+
L94
+
L42
+
L58
+
L427
+
L85
+
L4
+
L226
+
R842
+
R80
+
R90
+
R30
+
L423
+
L30
+
L21
+
L86
+
R12
+
R68
+
R73
+
R213
+
R94
+
L210
+
R50
+
R60
+
L971
+
L50
+
R19
+
R66
+
R36
+
R11
+
R9
+
R175
+
L96
+
L84
+
L74
+
R382
+
L811
+
L20
+
L1
+
R9
+
L12
+
L77
+
R789
+
R1
+
L85
+
L16
+
L96
+
R17
+
L17
+
L24
+
R163
+
R62
+
R60
+
L83
+
L74
+
L48
+
L59
+
R93
+
R6
+
L759
+
L77
+
L64
+
L28
+
R32
+
R87
+
R716
+
L7
+
R55
+
R36
+
L91
+
R22
+
L1
+
R35
+
L56
+
R54
+
R962
+
R515
+
R969
+
R88
+
R85
+
L73
+
R991
+
R99
+
L37
+
R47
+
L14
+
L28
+
L58
+
L78
+
L12
+
R12
+
L22
+
L2
+
L50
+
L48
+
L32
+
R32
+
L13
+
L3
+
L584
+
L16
+
R45
+
R71
+
R38
+
R718
+
L8
+
R152
+
R31
+
R78
+
R813
+
L422
+
R390
+
R877
+
L42
+
L515
+
L88
+
L1
+
R203
+
L24
+
L44
+
L156
+
L104
+
L60
+
R64
+
L4
+
R2
+
R2
+
L1
+
L10
+
R89
+
R17
+
L64
+
L59
+
L69
+
L13
+
R92
+
R1
+
L68
+
R85
+
R395
+
L95
+
R46
+
R82
+
L73
+
L43
+
R88
+
R39
+
L57
+
L10
+
L772
+
L82
+
R97
+
R85
+
R63
+
L33
+
L30
+
L19
+
L10
+
R9
+
R467
+
L581
+
L666
+
L19
+
R819
+
R466
+
L575
+
R655
+
R754
+
R70
+
R37
+
L51
+
R40
+
L85
+
R89
+
L80
+
R47
+
L67
+
R48
+
L19
+
L49
+
L17
+
R37
+
L19
+
R89
+
L76
+
L62
+
L89
+
R8
+
R651
+
L2
+
R234
+
L97
+
R63
+
R610
+
R90
+
L68
+
R68
+
L310
+
R71
+
R414
+
R9
+
R91
+
R25
+
R24
+
R48
+
L11
+
L58
+
L3
+
L8
+
R54
+
R74
+
L84
+
L436
+
R69
+
R31
+
L74
+
R74
+
R21
+
L87
+
R32
+
R73
+
R72
+
L45
+
R20
+
R314
+
R88
+
L18
+
R19
+
R11
+
R309
+
L409
+
L88
+
R25
+
L637
+
L10
+
L98
+
R90
+
L97
+
L685
+
R96
+
R740
+
R59
+
L29
+
R34
+
R19
+
L19
+
R78
+
L271
+
L7
+
R864
+
L764
+
R42
+
R58
+
R59
+
L11
+
R54
+
L42
+
R40
+
L298
+
L35
+
L91
+
L876
+
R69
+
L79
+
L41
+
R913
+
L26
+
R59
+
L71
+
R65
+
L24
+
R735
+
L31
+
L79
+
R910
+
L65
+
R65
+
R67
+
R49
+
R84
+
R750
+
R491
+
L41
+
L73
+
L31
+
R4
+
L9
+
R9
+
R46
+
R7
+
L12
+
R58
+
R151
+
R50
+
L372
+
L25
+
R58
+
L90
+
L8
+
L33
+
R15
+
L17
+
R26
+
L26
+
R817
+
R98
+
L902
+
L59
+
R18
+
R807
+
L607
+
L41
+
R77
+
R564
+
L68
+
R6
+
R631
+
R931
+
R12
+
R29
+
L41
+
L81
+
L19
+
L45
+
R21
+
L90
+
R24
+
L84
+
L26
+
R10
+
L29
+
L81
+
L379
+
L21
+
L676
+
R16
+
R633
+
L35
+
R108
+
L746
+
R934
+
R66
+
L89
+
R85
+
L36
+
L62
+
L587
+
L721
+
R31
+
L21
+
R26
+
R92
+
L41
+
L92
+
R15
+
R18
+
R82
+
R57
+
L347
+
L52
+
L58
+
L56
+
R70
+
R86
+
L37
+
R337
+
L840
+
L613
+
R21
+
R132
+
L87
+
L513
+
L31
+
R768
+
R63
+
R25
+
R7
+
L90
+
R32
+
L78
+
L96
+
R87
+
R78
+
R75
+
R77
+
R92
+
L49
+
L52
+
L86
+
L22
+
R73
+
R37
+
L10
+
R65
+
R43
+
L3
+
L76
+
R26
+
L366
+
L47
+
R42
+
L70
+
L62
+
L98
+
R3
+
R43
+
L228
+
R12
+
R49
+
L33
+
R24
+
R76
+
L33
+
L2
+
L12
+
L50
+
L103
+
L38
+
R72
+
L209
+
L209
+
L48
+
R29
+
L897
+
L19
+
R203
+
L92
+
L192
+
L55
+
L47
+
L866
+
R68
+
L221
+
R17
+
R45
+
L61
+
L3
+
R72
+
L667
+
L26
+
R31
+
L87
+
R44
+
R82
+
R7
+
L67
+
R4
+
L63
+
L1
+
L63
+
R28
+
L10
+
R487
+
R952
+
L59
+
R50
+
L423
+
R32
+
L72
+
L629
+
R88
+
L50
+
R19
+
R44
+
L17
+
L48
+
R65
+
R2
+
L78
+
R576
+
L991
+
R91
+
R76
+
R924
+
L18
+
L82
+
L10
+
L85
+
R45
+
L27
+
R95
+
R651
+
R62
+
R269
+
R41
+
R59
+
R99
+
R537
+
R64
+
L28
+
R928
+
L21
+
L98
+
L22
+
L59
+
L92
+
R92
+
L624
+
L34
+
L242
+
R59
+
L17
+
L42
+
R82
+
L632
+
R50
+
R57
+
L82
+
R988
+
L63
+
L70
+
R34
+
L29
+
R93
+
R72
+
L74
+
L17
+
L9
+
L749
+
L13
+
L138
+
L191
+
R91
+
L78
+
R818
+
L94
+
L674
+
L458
+
R985
+
L43
+
L56
+
R65
+
R35
+
R30
+
R844
+
R443
+
R609
+
R58
+
R778
+
R19
+
R19
+
R51
+
R49
+
R49
+
R451
+
L87
+
R33
+
L46
+
L551
+
R51
+
L998
+
R17
+
R13
+
L32
+
L59
+
R59
+
R3
+
R12
+
L43
+
R1
+
L6
+
L42
+
L25
+
R705
+
R95
+
L89
+
L38
+
R77
+
L25
+
R75
+
L32
+
R30
+
L19
+
L814
+
R35
+
R33
+
L56
+
L16
+
R39
+
R68
+
L368
+
L42
+
L91
+
L468
+
L86
+
L85
+
L41
+
L87
+
L14
+
R97
+
L4
+
R47
+
R74
+
L89
+
L36
+
R12
+
R214
+
R63
+
R36
+
L98
+
R98
+
R12
+
L708
+
L92
+
R13
+
R975
+
R25
+
L469
+
L637
+
L59
+
L160
+
L182
+
L99
+
R3
+
L122
+
L81
+
L76
+
R57
+
R615
+
L479
+
L570
+
R34
+
R64
+
L964
+
R99
+
L99
+
L77
+
R77
+
R70
+
R98
+
L10
+
R642
+
R7
+
L97
+
L39
+
L55
+
L16
+
L70
+
L23
+
L27
+
L91
+
R91
+
R137
+
R37
+
R46
+
L74
+
L96
+
L46
+
L14
+
L980
+
R83
+
L73
+
L295
+
L92
+
R44
+
R278
+
L39
+
R76
+
R34
+
R14
+
L64
+
R344
+
R609
+
L1
+
R527
+
L87
+
L86
+
R57
+
R81
+
L28
+
R64
+
R64
+
R90
+
R5
+
L958
+
R64
+
L301
+
L128
+
R28
+
R97
+
L68
+
R730
+
R41
+
L139
+
L45
+
R84
+
L537
+
L38
+
R75
+
R106
+
R683
+
L94
+
L95
+
R28
+
R72
+
L43
+
R46
+
R39
+
L3
+
R36
+
L38
+
R51
+
L88
+
R10
+
R44
+
R16
+
L60
+
L95
+
L72
+
R57
+
R16
+
L10
+
L6
+
R221
+
L202
+
L87
+
R168
+
R46
+
L70
+
L32
+
L51
+
L84
+
L9
+
L17
+
L83
+
L76
+
L97
+
R1
+
R84
+
L12
+
R17
+
R83
+
L72
+
R72
+
R88
+
L78
+
L22
+
R12
+
L433
+
L8
+
L52
+
R18
+
R75
+
L89
+
R89
+
R62
+
R38
+
L82
+
R48
+
L466
+
R18
+
L118
+
R29
+
R747
+
R24
+
L403
+
R3
+
R9
+
L39
+
R30
+
L331
+
R73
+
L12
+
R75
+
R95
+
L781
+
R89
+
L8
+
L230
+
L17
+
L75
+
R91
+
L75
+
L43
+
R677
+
L472
+
L79
+
L77
+
L3
+
R68
+
L45
+
R80
+
L41
+
L40
+
R60
+
R26
+
L73
+
L78
+
R64
+
R94
+
R40
+
R48
+
L18
+
R239
+
L21
+
R97
+
R80
+
R23
+
R37
+
L73
+
L44
+
L220
+
R55
+
L15
+
R60
+
R61
+
L72
+
R125
+
R404
+
L542
+
R553
+
R71
+
R73
+
L42
+
R43
+
L10
+
L39
+
L25
+
L7
+
R260
+
L53
+
L47
+
R87
+
R60
+
L667
+
R67
+
R34
+
L34
+
R35
+
R82
+
R81
+
R69
+
L83
+
L84
+
R14
+
L96
+
R90
+
L66
+
R75
+
R76
+
R80
+
R4
+
L77
+
R84
+
L17
+
R44
+
L622
+
L50
+
L123
+
L16
+
L4
+
R27
+
R80
+
R11
+
R54
+
R86
+
R46
+
R54
+
L17
+
R63
+
R35
+
L35
+
R98
+
L7
+
L91
+
R20
+
R17
+
L37
+
R20
+
L43
+
L58
+
L19
+
L887
+
L18
+
L18
+
R23
+
R57
+
R43
+
L132
+
R51
+
L24
+
R48
+
R879
+
R64
+
R31
+
R638
+
R38
+
R184
+
L34
+
R57
+
L51
+
L71
+
L78
+
R448
+
L48
+
L48
+
R48
+
L131
+
R66
+
L935
+
L13
+
L87
+
L28
+
R901
+
R50
+
L87
+
R64
+
L83
+
L17
+
R702
+
L61
+
L9
+
R27
+
L30
+
L11
+
R77
+
R921
+
R84
+
L27
+
L55
+
L190
+
L41
+
R28
+
L14
+
R99
+
L8
+
L72
+
L20
+
R41
+
R20
+
L79
+
R77
+
L59
+
R851
+
R49
+
L415
+
R15
+
L13
+
L458
+
R10
+
L39
+
L36
+
R8
+
L72
+
R29
+
R10
+
L41
+
R2
+
R60
+
R40
+
L93
+
R93
+
L68
+
L95
+
R16
+
R47
+
L84
+
R15
+
R69
+
R962
+
R19
+
R30
+
L6
+
R2
+
L24
+
R47
+
R70
+
L3
+
L60
+
L37
+
L30
+
L501
+
L87
+
L69
+
R87
+
R86
+
L7
+
R223
+
L2
+
R791
+
R9
+
R643
+
R99
+
L842
+
L580
+
R80
+
L49
+
R90
+
L695
+
R54
+
L116
+
L84
+
L990
+
L86
+
R972
+
R56
+
R87
+
R42
+
R37
+
L219
+
L999
+
L74
+
L26
+
L70
+
R70
+
L98
+
R548
+
L382
+
R21
+
R866
+
R86
+
R159
+
L10
+
L87
+
L20
+
R3
+
R19
+
R21
+
L26
+
L66
+
L391
+
L343
+
R15
+
L15
+
L75
+
L525
+
R13
+
R717
+
R70
+
L91
+
L218
+
R20
+
L776
+
L536
+
R24
+
L23
+
L974
+
R74
+
R18
+
R82
+
R16
+
R72
+
L7
+
R16
+
L97
+
L72
+
R72
+
L63
+
L784
+
L53
+
L63
+
L91
+
R92
+
L88
+
R15
+
L765
+
L29
+
R37
+
R83
+
R964
+
L21
+
R57
+
L66
+
L30
+
L895
+
R31
+
L92
+
L72
+
L89
+
L194
+
R716
+
L261
+
L639
+
R48
+
R76
+
L45
+
L79
+
R996
+
R4
+
L28
+
R803
+
L35
+
R74
+
L2
+
L37
+
L15
+
L60
+
R76
+
R69
+
L196
+
L849
+
L9
+
R9
+
R61
+
L20
+
L41
+
R7
+
L207
+
R24
+
L13
+
R89
+
L455
+
L64
+
L647
+
R66
+
R21
+
R79
+
L36
+
R36
+
L14
+
L70
+
R84
+
R73
+
L14
+
L13
+
L7
+
L661
+
L78
+
L37
+
L63
+
L499
+
L975
+
R74
+
R72
+
L24
+
L91
+
L85
+
R6
+
R353
+
R809
+
R60
+
L12
+
R68
+
L283
+
R27
+
L73
+
L27
+
R20
+
R80
+
L12
+
R17
+
L5
+
L56
+
R8
+
R73
+
L25
+
R34
+
L34
+
L458
+
L42
+
L64
+
L23
+
L13
+
L539
+
R539
+
L695
+
L72
+
L33
+
R927
+
L27
+
R9
+
L9
+
L68
+
R364
+
R22
+
R82
+
R65
+
R18
+
L83
+
L945
+
L71
+
L55
+
L29
+
R91
+
R57
+
L448
+
R59
+
R126
+
L27
+
R101
+
L59
+
R51
+
L51
+
L881
+
L19
+
R85
+
R3
+
L38
+
R42
+
L55
+
L33
+
R96
+
R62
+
R38
+
L304
+
L3
+
L93
+
R57
+
L50
+
L26
+
R82
+
R67
+
R70
+
L1
+
L58
+
L869
+
L952
+
L20
+
L68
+
R84
+
L16
+
R38
+
R36
+
L122
+
L18
+
L809
+
L36
+
L66
+
R53
+
R24
+
L29
+
R193
+
L25
+
R38
+
L777
+
L439
+
L61
+
L48
+
R76
+
R872
+
R2
+
L35
+
L46
+
R502
+
R77
+
R40
+
L40
+
R11
+
L40
+
R49
+
L20
+
L23
+
R323
+
R21
+
R56
+
L777
+
R58
+
L202
+
L50
+
R35
+
L830
+
R44
+
L10
+
R55
+
L85
+
R60
+
R96
+
R129
+
R56
+
R544
+
R949
+
R98
+
R40
+
R73
+
R12
+
L31
+
L41
+
L76
+
L60
+
R76
+
R91
+
L15
+
R56
+
L18
+
L80
+
R926
+
L99
+
R61
+
R532
+
L94
+
R204
+
R296
+
R41
+
R12
+
L75
+
R64
+
L42
+
L85
+
L15
+
L3
+
L97
+
L329
+
L71
+
R11
+
L3
+
L11
+
R3
+
R22
+
R81
+
R897
+
L15
+
L70
+
R19
+
R16
+
R450
+
L95
+
R54
+
L59
+
L44
+
L42
+
R22
+
R69
+
L760
+
L712
+
L7
+
R374
+
L16
+
L78
+
L6
+
L42
+
L29
+
R71
+
L8
+
R63
+
R45
+
R40
+
R50
+
L956
+
L41
+
L582
+
L3
+
R92
+
R90
+
R710
+
L578
+
R78
+
L39
+
R22
+
R36
+
L19
+
L34
+
R34
+
L580
+
L68
+
R41
+
L93
+
R521
+
L38
+
L83
+
R84
+
R37
+
L21
+
R68
+
L568
+
R22
+
R78
+
R675
+
R125
+
L39
+
L879
+
R49
+
L31
+
R71
+
R4
+
R575
+
R50
+
L96
+
L904
+
R7
+
R793
+
R6
+
L6
+
L15
+
R93
+
L54
+
L10
+
L45
+
R51
+
R48
+
L98
+
L70
+
R986
+
R22
+
R696
+
R96
+
R71
+
L8
+
L763
+
R30
+
L53
+
L30
+
L47
+
R21
+
L74
+
R248
+
L68
+
L17
+
R90
+
R49
+
R16
+
L65
+
L3
+
L49
+
R52
+
R84
+
L84
+
R93
+
R932
+
R75
+
R74
+
R38
+
L12
+
R55
+
L649
+
L72
+
R61
+
R4
+
L56
+
L43
+
L28
+
R328
+
L29
+
R29
+
L8
+
R52
+
R56
+
R47
+
L47
+
L39
+
R239
+
R42
+
R58
+
R222
+
R92
+
R286
+
R54
+
L854
+
L76
+
R76
+
R16
+
R16
+
L43
+
R11
+
L53
+
L75
+
R938
+
R19
+
L52
+
R23
+
L26
+
L366
+
L366
+
L35
+
R93
+
L455
+
R4
+
L6
+
L43
+
R29
+
L29
+
R44
+
L53
+
L31
+
R7
+
R43
+
R51
+
L262
+
R36
+
R256
+
L685
+
L828
+
R70
+
L48
+
R7
+
L744
+
R55
+
R25
+
L843
+
L11
+
L76
+
R385
+
R170
+
L30
+
L438
+
L24
+
L591
+
R41
+
R54
+
R20
+
R347
+
L47
+
R906
+
L68
+
L38
+
R36
+
L21
+
R85
+
R74
+
R46
+
R60
+
R520
+
R759
+
R99
+
L52
+
L67
+
R761
+
L30
+
R56
+
L94
+
L32
+
R60
+
R40
+
L9
+
R878
+
R35
+
R96
+
R723
+
R315
+
R62
+
L77
+
L43
+
R60
+
L68
+
R28
+
L591
+
L364
+
L14
+
R69
+
R65
+
R35
+
R17
+
L11
+
L96
+
L10
+
R3
+
R457
+
L94
+
L70
+
L996
+
R4
+
R96
+
L175
+
R10
+
R965
+
L19
+
L40
+
R759
+
R1
+
L18
+
R17
+
L221
+
L79
+
L178
+
L22
+
L50
+
R50
+
R73
+
L98
+
L75
+
R27
+
R73
+
L836
+
L64
+
L10
+
R810
+
L85
+
R687
+
R95
+
L47
+
L91
+
R86
+
R255
+
R32
+
R10
+
L62
+
R98
+
L78
+
L21
+
L4
+
L60
+
R85
+
R743
+
R73
+
R24
+
R40
+
L22
+
R34
+
L76
+
R46
+
L62
+
R40
+
R65
+
R2
+
L27
+
R20
+
R56
+
R11
+
L51
+
L30
+
R14
+
R54
+
R46
+
R691
+
L590
+
L1
+
R86
+
L248
+
R62
+
L45
+
L61
+
L373
+
R879
+
R44
+
L44
+
L94
+
L930
+
R915
+
R253
+
R46
+
R42
+
L4
+
R43
+
R249
+
R12
+
R39
+
L553
+
L65
+
L79
+
R983
+
R43
+
R97
+
R36
+
R67
+
R93
+
R7
+
R84
+
L16
+
R32
+
L34
+
L46
+
R80
+
R70
+
R33
+
R197
+
R646
+
L277
+
L99
+
R55
+
R49
+
R26
+
R99
+
R901
+
R203
+
L62
+
L41
+
R98
+
R187
+
R45
+
L8
+
R287
+
L21
+
L95
+
R7
+
R334
+
R88
+
L38
+
L84
+
R524
+
R63
+
L381
+
L432
+
L74
+
R87
+
L58
+
R20
+
L49
+
L79
+
R19
+
R630
+
L86
+
R16
+
R60
+
R97
+
L60
+
L897
+
L818
+
L82
+
R26
+
R55
+
L81
+
R3
+
R255
+
R76
+
L55
+
L471
+
L24
+
L784
+
R29
+
L64
+
L48
+
L15
+
R98
+
L41
+
L33
+
L26
+
R21
+
L21
+
L80
+
L95
+
R12
+
L637
+
R31
+
R69
+
L77
+
R77
+
L14
+
L86
+
R26
+
L89
+
R81
+
L18
+
R261
+
R85
+
L35
+
L11
+
R8
+
R68
+
R68
+
R982
+
L3
+
L23
+
L185
+
L972
+
L706
+
L37
+
L351
+
L49
+
R74
+
R81
+
R88
+
R60
+
R64
+
R27
+
L94
+
L1
+
L99
+
R41
+
L589
+
L952
+
R42
+
R58
+
R68
+
L68
+
L806
+
L69
+
L70
+
L38
+
R64
+
L87
+
L97
+
R49
+
R6
+
L92
+
R97
+
L12
+
R946
+
R9
+
R94
+
R33
+
R73
+
R237
+
L65
+
R36
+
L66
+
L59
+
L183
+
R13
+
R501
+
L36
+
R847
+
L968
+
L19
+
R89
+
R73
+
L62
+
R311
+
R51
+
L30
+
R50
+
L56
+
L64
+
L64
+
R15
+
L57
+
R42
+
L28
+
R28
+
L36
+
L8
+
R8
+
R15
+
L15
+
L181
+
R81
+
L94
+
L69
+
L93
+
L724
+
R36
+
R844
+
R13
+
R515
+
L4
+
R76
+
L17
+
L83
+
R26
+
R74
+
R7
+
L65
+
L415
+
R73
+
R53
+
L736
+
L17
+
L204
+
R17
+
R87
+
R501
+
L1
+
R85
+
L68
+
R164
+
R19
+
R17
+
R94
+
L134
+
R195
+
L72
+
L85
+
R85
+
L12
+
R31
+
L750
+
L375
+
L20
+
R48
+
L22
+
R22
+
R3
+
R291
+
R78
+
R79
+
R27
+
R85
+
L85
+
L26
+
R931
+
R4
+
L9
+
L714
+
R14
+
R11
+
R89
+
R83
+
L71
+
R743
+
L93
+
L54
+
L656
+
R94
+
L663
+
R82
+
L45
+
L20
+
R78
+
L659
+
L714
+
R89
+
R971
+
L65
+
L915
+
R715
+
R75
+
R25
+
R2
+
R33
+
L74
+
R439
+
R14
+
L1
+
L13
+
R27
+
L50
+
R88
+
R35
+
L426
+
L74
+
R50
+
L6
+
R56
+
L58
+
R21
+
L184
+
R43
+
R837
+
R40
+
R1
+
R76
+
L46
+
L30
+
R11
+
L76
+
L39
+
R32
+
R1
+
R59
+
R34
+
R81
+
R30
+
R67
+
R48
+
R79
+
L97
+
R14
+
R47
+
L91
+
L32
+
R98
+
L50
+
L697
+
L19
+
R26
+
R74
+
R17
+
R610
+
L702
+
L225
+
L839
+
L898
+
R42
+
R483
+
R89
+
R55
+
R68
+
L35
+
L865
+
R6
+
R9
+
L93
+
R78
+
L29
+
R52
+
R9
+
R868
+
R80
+
R20
+
R75
+
L25
+
L152
+
L1
+
L97
+
L27
+
L83
+
R46
+
L14
+
L122
+
R23
+
R842
+
L758
+
R31
+
R8
+
L21
+
R75
+
R885
+
R15
+
R38
+
L38
+
R19
+
L94
+
L25
+
R84
+
L15
+
L39
+
R970
+
R29
+
R13
+
R58
+
R15
+
R16
+
R69
+
R42
+
L42
+
L742
+
R47
+
R918
+
L95
+
R64
+
R57
+
R14
+
R37
+
R23
+
R68
+
R639
+
R78
+
L28
+
L80
+
R18
+
R610
+
R896
+
R95
+
L519
+
R43
+
L743
+
L34
+
L766
+
L24
+
L494
+
R918
+
R83
+
R219
+
R2
+
R28
+
R98
+
R691
+
L67
+
R294
+
L1
+
R54
+
R57
+
R42
+
R52
+
L55
+
L37
+
L660
+
L51
+
L17
+
L928
+
R75
+
R21
+
R23
+
L23
+
R528
+
L40
+
R46
+
L734
+
L903
+
L97
+
R59
+
R49
+
R73
+
L81
+
L46
+
L54
+
L229
+
L711
+
L37
+
R67
+
R96
+
L76
+
L40
+
L48
+
L22
+
L70
+
L30
+
L54
+
L46
+
R595
+
R5
+
R95
+
R84
+
L31
+
L48
+
L99
+
R17
+
R82
+
R89
+
L81
+
L15
+
L489
+
R8
+
L15
+
R3
+
R65
+
R689
+
L804
+
R30
+
L63
+
L75
+
R5
+
R253
+
R77
+
R38
+
R85
+
L1
+
R1
+
L53
+
L37
+
R90
+
L56
+
L46
+
L162
+
L657
+
L79
+
R17
+
R83
+
R60
+
R11
+
R63
+
L96
+
L38
+
R2
+
R598
+
R71
+
L71
+
L79
+
L835
+
R82
+
R85
+
L27
+
L52
+
L74
+
R963
+
L44
+
R76
+
R34
+
R14
+
R49
+
L27
+
L110
+
L55
+
L95
+
L47
+
R303
+
R63
+
R41
+
R35
+
L74
+
L26
+
L791
+
L201
+
R55
+
R68
+
L31
+
L66
+
R66
+
L17
+
R334
+
R7
+
R176
+
R75
+
R98
+
R80
+
R174
+
L84
+
L85
+
R95
+
L53
+
L1
+
L7
+
R32
+
R76
+
L767
+
L418
+
L886
+
L32
+
R3
+
R85
+
R31
+
R58
+
R63
+
L32
+
R8
+
L416
+
L78
+
L47
+
R84
+
L15
+
L541
+
L593
+
R54
+
R16
+
L16
+
R499
+
R290
+
L50
+
L73
+
R73
+
R35
+
R65
+
L73
+
R73
+
L82
+
R30
+
L88
+
R763
+
L83
+
L95
+
R55
+
R40
+
R60
+
L68
+
R322
+
L754
+
R92
+
L98
+
R84
+
L76
+
R11
+
L13
+
R94
+
R68
+
R4
+
L94
+
L8
+
L64
+
L8
+
L692
+
R42
+
R58
+
L7
+
R21
+
L106
+
R68
+
L76
+
L22
+
R17
+
R49
+
L96
+
R52
+
L57
+
R76
+
R81
+
L9
+
L91
+
L847
+
R647
+
L781
+
L74
+
L845
+
R66
+
R83
+
L87
+
R194
+
R19
+
R992
+
R75
+
R58
+
R37
+
L37
+
L72
+
R43
+
L19
+
L17
+
R11
+
L48
+
L898
+
L85
+
L29
+
L9
+
R306
+
R22
+
L27
+
L78
+
L67
+
L33
+
L42
+
L15
+
R35
+
L678
+
L612
+
L88
+
L49
+
L24
+
L55
+
L672
+
R62
+
R12
+
L74
+
L872
+
R637
+
R343
+
R21
+
R71
+
R932
+
R168
+
L86
+
R850
+
R86
+
R65
+
R39
+
L54
+
L62
+
L125
+
L57
+
R39
+
R65
+
R40
+
L83
+
L17
+
L284
+
R84
+
R75
+
R19
+
R6
+
L99
+
L92
+
R98
+
L7
+
L1
+
L99
+
R301
+
R899
+
L66
+
R66
+
R99
+
R12
+
R89
+
R6
+
R94
+
L62
+
R1
+
R293
+
L68
+
L768
+
R663
+
L899
+
R12
+
R28
+
R31
+
R69
+
L54
+
R54
+
L11
+
R81
+
L92
+
R80
+
L58
+
R72
+
R728
+
R44
+
R56
+
R45
+
R55
+
L58
+
L13
+
L29
+
R536
+
L66
+
R8
+
R92
+
R42
+
L95
+
R66
+
R34
+
L12
+
L22
+
R57
+
R4
+
R79
+
R10
+
R67
+
L92
+
R92
+
R50
+
R17
+
R98
+
L65
+
L432
+
R32
+
L65
+
R13
+
R154
+
R11
+
L64
+
L69
+
L80
+
L43
+
R48
+
R54
+
L298
+
L79
+
R72
+
L54
+
L141
+
R67
+
R74
+
L19
+
R16
+
L219
+
R27
+
R94
+
L38
+
L27
+
L534
+
R14
+
R86
+
L87
+
R25
+
R62
+
L83
+
R683
+
L34
+
R39
+
R283
+
R513
+
R99
+
R47
+
L48
+
R95
+
R70
+
L28
+
R28
+
L86
+
L78
+
R41
+
R94
+
R65
+
L82
+
L5
+
R26
+
L14
+
R21
+
L11
+
L36
+
L79
+
R97
+
L570
+
R42
+
R87
+
R24
+
R82
+
R7
+
L365
+
L24
+
L18
+
R18
+
R29
+
R971
+
L240
+
L96
+
L36
+
L28
+
L960
+
R95
+
L44
+
R9
+
L41
+
L59
+
L5
+
L21
+
L287
+
R13
+
R524
+
R97
+
R79
+
L55
+
R22
+
R33
+
R54
+
R87
+
R218
+
R54
+
L13
+
L11
+
L46
+
R60
+
L3
+
R73
+
R227
+
R80
+
R20
+
R49
+
R82
+
L31
+
L23
+
R423
+
R345
+
R61
+
L30
+
L35
+
L41
+
L26
+
L53
+
R2
+
L23
+
L33
+
L79
+
R312
+
L81
+
R817
+
L26
+
R98
+
L8
+
R39
+
R19
+
L47
+
R89
+
R24
+
L124
+
L4
+
L47
+
R17
+
R95
+
R233
+
R88
+
R491
+
L673
+
L66
+
R672
+
R53
+
R80
+
L39
+
R36
+
L36
+
L4
+
R4
+
R87
+
R13
+
R33
+
R52
+
L687
+
L98
+
R91
+
R646
+
L22
+
R278
+
L26
+
R67
+
L34
+
R96
+
R504
+
R24
+
L3
+
R938
+
R41
+
L94
+
L606
+
L13
+
R13
+
R4
+
L4
+
R35
+
R78
+
L37
+
L76
+
L98
+
L2
+
L940
+
R63
+
L56
+
R33
+
L86
+
L3
+
R89
+
L14
+
L718
+
R76
+
L96
+
L72
+
L25
+
L34
+
L30
+
L91
+
L96
+
L1
+
R705
+
L4
+
R80
+
R20
+
L33
+
L27
+
R60
+
L19
+
L81
+
L56
+
R15
+
R741
+
R548
+
R52
+
R15
+
R9
+
L25
+
L88
+
L359
+
R48
+
L81
+
R481
+
L55
+
R155
+
R22
+
L22
+
R565
+
R69
+
R81
+
R85
+
R3
+
R4
+
L10
+
L97
+
R71
+
L6
+
L65
+
L92
+
L68
+
R92
+
L32
+
L70
+
L46
+
L84
+
R32
+
R68
+
L61
+
L39
+
L58
+
L83
+
R43
+
R713
+
L15
+
R6
+
R18
+
R876
+
R48
+
R21
+
R47
+
R84
+
L39
+
R39
+
L67
+
L65
+
R65
+
L33
+
R5
+
R96
+
L95
+
R94
+
R71
+
L71
+
R6
+
R48
+
R46
+
L53
+
R53
+
L85
+
R985
+
L47
+
L7
+
R29
+
R64
+
L24
+
L207
+
R92
+
R92
+
L58
+
R66
+
R765
+
L54
+
R4
+
L15
+
L290
+
L10
+
R24
+
L98
+
L85
+
R59
+
L35
+
R35
+
R81
+
R273
+
R646
+
R76
+
R438
+
R510
+
R45
+
L2
+
L7
+
R240
+
L724
+
R56
+
R416
+
R531
+
L79
+
L61
+
L839
+
R16
+
L35
+
L42
+
R1
+
R78
+
R11
+
R71
+
R406
+
R4
+
R93
+
R397
+
L21
+
L79
+
R26
+
R74
+
R67
+
L67
+
L81
+
L519
+
L80
+
L50
+
R42
+
R58
+
R830
+
L476
+
L24
+
L48
+
L746
+
R94
+
L50
+
R161
+
L99
+
R59
+
L6
+
L65
+
L97
+
L10
+
R768
+
L761
+
L68
+
R141
+
R27
+
R79
+
L579
+
R61
+
L256
+
R70
+
R60
+
L35
+
L61
+
L139
+
R687
+
R89
+
R24
+
L32
+
L25
+
L11
+
L75
+
L63
+
L846
+
L848
+
R87
+
L83
+
L4
+
R28
+
L28
+
L66
+
R88
+
L76
+
R58
+
L99
+
R50
+
R45
+
R88
+
L69
+
L772
+
R653
+
L199
+
R70
+
L54
+
L35
+
R48
+
L530
+
L54
+
R970
+
L16
+
R749
+
L582
+
R52
+
R581
+
R36
+
L889
+
R22
+
R31
+
L495
+
R95
+
L91
+
R201
+
R90
+
L66
+
L34
+
L96
+
L4
+
L29
+
R27
+
R22
+
L74
+
R56
+
L67
+
L35
+
L271
+
L29
+
L93
+
L164
+
R892
+
L35
+
L651
+
L49
+
L88
+
L12
+
R38
+
L38
+
R75
+
L75
+
L23
+
L44
+
L10
+
L56
+
L67
+
R734
+
R66
+
R28
+
L92
+
L11
+
L510
+
R97
+
R48
+
R32
+
L92
+
L526
+
R85
+
R175
+
L34
+
L310
+
L490
+
R623
+
R17
+
L17
+
L73
+
L50
+
L624
+
R78
+
L71
+
L83
+
L58
+
R9
+
R55
+
L46
+
R44
+
R14
+
R74
+
L92
+
L33
+
L22
+
R93
+
R41
+
R758
+
L67
+
L70
+
L439
+
L415
+
L81
+
L57
+
R165
+
L94
+
L609
+
L41
+
R71
+
L218
+
L94
+
L45
+
L45
+
R33
+
R69
+
L36
+
L33
+
L31
+
L89
+
R15
+
R50
+
R224
+
L77
+
L87
+
L847
+
R10
+
R1
+
R25
+
R75
+
L190
+
L39
+
L25
+
R54
+
L28
+
R28
+
R18
+
R98
+
L16
+
L84
+
R21
+
R7
+
R56
+
L83
+
R83
+
R337
+
L239
+
R44
+
R64
+
L820
+
R225
+
R91
+
L72
+
R70
+
L84
+
L16
+
L472
+
R57
+
R78
+
R18
+
R13
+
R71
+
R20
+
R72
+
L40
+
R37
+
L403
+
L201
+
L50
+
L94
+
L35
+
R29
+
R20
+
R554
+
L23
+
L51
+
L19
+
R96
+
R94
+
R29
+
R74
+
L55
+
L719
+
L74
+
L26
+
R13
+
L13
+
R28
+
R54
+
R56
+
L38
+
R77
+
R23
+
R11
+
R89
+
R45
+
L45
+
R42
+
L1
+
L9
+
L69
+
R37
+
L7
+
L97
+
L996
+
L13
+
L57
+
L6
+
L24
+
R682
+
L82
+
R20
+
R80
+
L664
+
R64
+
R48
+
R85
+
R67
+
R19
+
R84
+
L28
+
L41
+
L67
+
L99
+
R32
+
R24
+
R97
+
L78
+
R57
+
R96
+
L2
+
L94
+
R53
+
R43
+
L12
+
R628
+
L280
+
L67
+
R92
+
L363
+
R6
+
L11
+
L423
+
L49
+
L17
+
R137
+
R96
+
L85
+
R59
+
R93
+
L895
+
R95
+
L56
+
R80
+
L24
+
L29
+
L42
+
L85
+
R594
+
L38
+
L89
+
R69
+
L80
+
L81
+
R81
+
L60
+
L686
+
L54
+
R22
+
L22
+
L34
+
L66
+
L78
+
R89
+
L211
+
R39
+
L39
+
R7
+
R10
+
L317
+
R70
+
R91
+
L61
+
R66
+
L66
+
R59
+
R862
+
L52
+
L18
+
R34
+
R15
+
L10
+
R45
+
R98
+
L10
+
R999
+
R78
+
L23
+
R45
+
R78
+
L585
+
R209
+
R676
+
L9
+
L3
+
L171
+
R83
+
L57
+
R957
+
L237
+
R37
+
L83
+
R83
+
L64
+
R87
+
R77
+
R9
+
R20
+
L380
+
R7
+
L83
+
R527
+
R71
+
R29
+
R83
+
R987
+
L275
+
L3
+
R36
+
R32
+
R73
+
R67
+
L36
+
L25
+
R61
+
R52
+
L41
+
R889
+
L40
+
L62
+
R83
+
R419
+
R47
+
L63
+
L57
+
R44
+
R397
+
R88
+
R44
+
R890
+
R10
+
R28
+
R72
+
L58
+
L53
+
L57
+
L21
+
R33
+
R56
+
R429
+
L63
+
R83
+
L749
+
L49
+
L851
+
R666
+
R53
+
R64
+
R78
+
L13
+
L348
+
R126
+
R74
+
R48
+
L31
+
R99
+
R43
+
L59
+
L91
+
R807
+
L16
+
L19
+
L33
+
L10
+
R81
+
L64
+
R49
+
R63
+
L997
+
R70
+
L29
+
R89
+
L663
+
R79
+
L642
+
R366
+
R61
+
L84
+
L17
+
L66
+
L710
+
R40
+
L7
+
R43
+
L394
+
R94
+
L7
+
R58
+
R49
+
R83
+
L83
+
L96
+
L4
+
R30
+
R70
+
L75
+
R75
+
L587
+
L514
+
L99
+
R22
+
L22
+
R90
+
L6
+
R31
+
L15
+
L34
+
L66
+
L45
+
L355
+
L17
+
L37
+
L93
+
L53
+
L70
+
L889
+
L92
+
R12
+
R31
+
L48
+
L46
+
L93
+
R95
+
R759
+
L78
+
R34
+
L25
+
L37
+
R77
+
L34
+
L43
+
L53
+
L91
+
L22
+
L324
+
L63
+
R35
+
L135
+
R171
+
R29
+
R849
+
L22
+
L27
+
L79
+
R79
+
R75
+
R2
+
R23
+
R36
+
R684
+
L52
+
R6
+
R426
+
L62
+
L85
+
L52
+
R28
+
L29
+
R16
+
R84
+
L20
+
R92
+
R36
+
R92
+
L60
+
L32
+
L8
+
L12
+
R52
+
L86
+
R904
+
L58
+
R69
+
R33
+
R499
+
L501
+
L727
+
R60
+
R74
+
L55
+
L52
+
R16
+
L67
+
L46
+
L3
+
R11
+
R10
+
L10
+
L11
+
L627
+
L15
+
L73
+
R379
+
L863
+
R11
+
L90
+
R2
+
R10
+
R29
+
R137
+
R284
+
R616
+
R59
+
R30
+
R816
+
R48
+
L430
+
L84
+
L97
+
R147
+
R11
+
L261
+
R61
+
R76
+
R24
+
L652
+
L24
+
L24
+
R656
+
L56
+
L22
+
L978
+
R797
+
R3
+
R620
+
R80
+
L25
+
L75
+
L94
+
R65
+
L75
+
R304
+
L26
+
R26
+
L26
+
R31
+
R72
+
L77
+
L835
+
R97
+
R38
+
L85
+
L12
+
R232
+
L35
+
L142
+
R3
+
L261
+
L27
+
R27
+
R71
+
L71
+
L71
+
R511
+
L44
+
L489
+
R89
+
L163
+
L169
+
R696
+
R40
+
R62
+
L95
+
R60
+
R73
+
R185
+
L51
+
R82
+
L20
+
R4
+
R54
+
L54
+
L93
+
R693
+
L19
+
R19
+
L472
+
R58
+
L686
+
L88
+
R35
+
R25
+
L72
+
L38
+
L8
+
R46
+
R63
+
L63
+
R150
+
L12
+
R62
+
R80
+
L80
+
R40
+
L1
+
L245
+
L94
+
L75
+
L58
+
L67
+
L29
+
R29
+
L97
+
L617
+
L58
+
L39
+
R29
+
L73
+
L167
+
L7
+
R91
+
R657
+
L47
+
L672
+
L392
+
R44
+
R19
+
R82
+
R594
+
R24
+
L62
+
L99
+
L29
+
R64
+
L45
+
R91
+
R88
+
R921
+
R70
+
L83
+
R74
+
L75
+
R7
+
R26
+
R81
+
L68
+
R761
+
L21
+
R828
+
R70
+
R19
+
L89
+
L73
+
L20
+
L51
+
L56
+
R138
+
R65
+
R467
+
R64
+
L55
+
R682
+
R31
+
L65
+
L27
+
L45
+
L55
+
L99
+
R520
+
L8
+
R78
+
R427
+
L718
+
R36
+
R76
+
R88
+
R53
+
R13
+
R34
+
R27
+
R30
+
R23
+
R63
+
L22
+
R49
+
L3
+
R595
+
L62
+
L10
+
L90
+
L90
+
R90
+
R63
+
R599
+
R38
+
R8
+
L12
+
L96
+
L52
+
L755
+
R91
+
L834
+
R50
+
R62
+
L62
+
L886
+
R94
+
L134
+
R674
+
L889
+
L12
+
L425
+
R50
+
L72
+
R90
+
L95
+
R563
+
L58
+
L61
+
R361
+
R25
+
R80
+
L89
+
L51
+
L65
+
L94
+
R69
+
R62
+
R3
+
L40
+
L870
+
R770
+
L69
+
R69
+
R404
+
L4
+
R86
+
R44
+
L90
+
R42
+
L82
+
R65
+
R18
+
R142
+
R96
+
R79
+
L53
+
R53
+
R64
+
R24
+
L18
+
L470
+
L99
+
L19
+
L972
+
R52
+
L62
+
L94
+
L46
+
L82
+
R22
+
L89
+
L83
+
L801
+
R9
+
R12
+
L126
+
R85
+
R58
+
L765
+
R91
+
R37
+
R72
+
L3
+
L1
+
R97
+
L81
+
L58
+
R485
+
R361
+
L93
+
L7
+
R12
+
R288
+
R24
+
L24
+
L11
+
L60
+
R71
+
L98
+
L15
+
L42
+
L44
+
L1
+
R53
+
R913
+
L66
+
R3
+
L3
+
L20
+
L4
+
R30
+
L44
+
L391
+
R29
+
L38
+
L62
+
L908
+
L26
+
R9
+
L84
+
R9
+
L71
+
R90
+
R81
+
R35
+
R28
+
L19
+
R67
+
L11
+
R46
+
R36
+
L382
+
R20
+
L20
+
L79
+
R615
+
R55
+
R9
+
R98
+
R66
+
L6
+
L38
+
L60
+
L60
+
R18
+
L84
+
L807
+
L58
+
L54
+
L31
+
R16
+
R90
+
L12
+
L78
+
R81
+
R119
+
R72
+
R28
+
R57
+
L657
+
L8
+
L98
+
L313
+
R56
+
R26
+
L75
+
L3
+
R15
+
R6
+
R95
+
R25
+
L26
+
R82
+
R57
+
R61
+
R70
+
L70
+
R46
+
R39
+
R98
+
L452
+
L616
+
L35
+
R20
+
L795
+
L5
+
R38
+
R62
+
L27
+
R99
+
R49
+
L48
+
R39
+
L36
+
R7
+
L57
+
R84
+
R90
+
L77
+
R89
+
R88
+
R51
+
L4
+
L47
+
L432
+
R32
+
R66
+
L66
+
R9
+
R91
+
L96
+
R96
+
L38
+
R38
+
R827
+
L527
+
R77
+
L930
+
R53
+
L75
+
L50
+
R88
+
L959
+
L94
+
L78
+
R68
+
L59
+
L41
+
L95
+
R195
+
L99
+
L20
+
L32
+
L53
+
R67
+
L63
+
L74
+
L26
+
L58
+
R31
+
R90
+
L163
+
R10
+
R64
+
R18
+
L43
+
R51
+
R67
+
R54
+
L175
+
R36
+
L131
+
L83
+
R832
+
L36
+
L84
+
R820
+
L99
+
R99
+
L39
+
L285
+
R624
+
R86
+
R14
+
R66
+
L37
+
L83
+
R41
+
L87
+
R97
+
R6
+
L3
+
L953
+
L247
+
L949
+
L95
+
L2
+
R43
+
L97
+
L66
+
R66
+
L3
+
L97
+
R92
+
R69
+
R39
+
L55
+
L45
+
R62
+
L62
+
R62
+
R24
+
R86
+
R69
+
R59
+
R5
+
R43
+
L60
+
R65
+
L50
+
L51
+
R48
+
L82
+
R83
+
R99
+
L36
+
L64
+
R20
+
R36
+
L40
+
R40
+
L19
+
L37
+
L13
+
L87
+
R66
+
R22
+
L30
+
L39
+
R81
+
R46
+
L46
+
R73
+
R94
+
L86
+
L81
+
R37
+
L86
+
R49
+
L17
+
R17
+
L31
+
L22
+
L33
+
L2
+
L47
+
R4
+
R35
+
L36
+
L49
+
L30
+
R49
+
R50
+
L33
+
R50
+
L11
+
R18
+
R44
+
R36
+
L29
+
R8
+
L46
+
R37
+
L4
+
R35
+
R44
+
R32
+
L37
+
L16
+
L42
+
L32
+
R1
+
R25
+
L31
+
L15
+
R36
+
R47
+
R40
+
R28
+
L29
+
R35
+
L6
+
L4
+
L4
+
R48
+
R23
+
L16
+
L32
+
L10
+
R35
+
R17
+
R41
+10
day_1/smol.txt
···
···
+
L68
+
L30
+
R48
+
L5
+
R60
+
L55
+
L1
+
L99
+
R14
+
L82
day_2/2

This is a binary file and will not be displayed.

+120
day_2/2.c
···
···
+
#include <math.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
#include <string.h>
+
+
+
int count_digit(unsigned long long num){
+
int len = 0;
+
while (num!=0) {
+
num /= 10;
+
len++;
+
+
}
+
return len;
+
}
+
+
int part_one_invalid(unsigned long long num) {
+
int answer = 0;
+
+
int len = count_digit(num);
+
if (len%2) {
+
answer = 0;
+
}
+
+
//it gonna be pair so no worry
+
unsigned long long halfer = pow(10, len/2);
+
+
if (num/halfer == num%halfer) {
+
answer = 1;
+
}
+
return answer;
+
+
}
+
+
+
int part_two_invalid(unsigned long long num) {
+
int answer = 0;
+
int len = count_digit(num);
+
int j;
+
+
for (int i =1; i<=len/2; i++) {
+
if (!((len%i)==0)) {
+
continue;
+
}
+
int chunk_num = len/i;
+
// use / and % to isolate chunks, with powers of 10 to the i
+
long long first = num % (long long)pow(10, i);
+
+
for (j = 1; j< chunk_num; j++) {
+
long long chunk = num % (long long)pow(10,i*(j+1))/ (long long)pow(10,i*j);
+
if (chunk != first) {
+
break;
+
+
}
+
}
+
if (j == chunk_num) {
+
answer=1;
+
}
+
+
+
}
+
+
+
+
return answer;
+
}
+
+
int main (int argc, char* argv[]) {
+
+
FILE* f = NULL;
+
char* line = NULL;
+
+
unsigned long long start = 0;
+
unsigned long long end = 0;
+
long long front_part = 0;
+
long long end_part = 0;
+
unsigned long long invalid_sum = 0;
+
ssize_t nlength;
+
size_t size = 0;
+
+
f = fopen(argv[1],"r");
+
+
while ((nlength = getdelim(&line, &size, ',', f) != -1)) {
+
start = atoll(strsep(&line, "-"));
+
end = atoll(strsep(&line, "-"));
+
+
printf("start: %llu ",start);
+
printf("end: %llu\n",end);
+
+
+
+
+
for (unsigned long long i = start; i<=end; i++) {
+
+
+
+
if (part_two_invalid(i)) {
+
invalid_sum += i;
+
printf("invalid number found: %llu\n",i);
+
+
}
+
+
+
+
+
+
}
+
+
+
+
}
+
+
+
printf("invalid sum: %llu", invalid_sum);
+
+
+
free(line);
+
free(f);
+
return 0;
+
}
+1
day_2/input.txt
···
···
+
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124
+1
day_2/large_input.txt
···
···
+
3335355312-3335478020,62597156-62638027,94888325-95016472,4653-6357,54-79,1-19,314-423,472-650,217886-298699,58843645-58909745,2799-3721,150748-178674,9084373-9176707,1744-2691,17039821-17193560,2140045-2264792,743-1030,6666577818-6666739950,22946-32222,58933-81008,714665437-714803123,9972438-10023331,120068-142180,101-120,726684-913526,7575737649-7575766026,8200-11903,81-96,540949-687222,35704-54213,991404-1009392,335082-425865,196-268,3278941-3383621,915593-991111,32-47,431725-452205
+1
day_2/mini.txt
···
···
+
11-22,95-115,998-1012,2121212118-2121212124
day_3/3

This is a binary file and will not be displayed.

+60
day_3/3.c
···
···
+
#include <stddef.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
int main(int argc, char* argv[]) {
+
FILE* f = NULL;
+
size_t size = 0;
+
char* line = NULL;
+
ssize_t nread = 0;
+
+
unsigned long long bat_sum = 0;
+
+
f = fopen(argv[1], "r");
+
+
while ((nread = getline(&line, &size, f)) != -1) {
+
unsigned long long bat_n = 0;
+
int number_of_batteris = 12;
+
int b_i = 0;
+
int a_i_1 = 0;
+
int a_i = -1;
+
int b = 0;
+
printf("line: %s",line);
+
// go through each line (we can keep as chars) get the largest number, get its index,
+
// go through second loop starting from that index, get the largest number there.
+
// i love loops within loops
+
+
+
//generalizing for n amount of battteris
+
+
for (int n = number_of_batteris; n>0; n--) {
+
a_i_1 = a_i;
+
a_i = 0;
+
int a = 0;
+
for (int i = a_i_1+1; i< nread-1-n+1; i++) { // we dont need line end char i think., and we cant choose the last one since then there will be no place for the second battery
+
if (a < line[i] - '0') {
+
a_i = i;
+
a = line[i] - '0';
+
}
+
}
+
bat_n = bat_n*10;
+
bat_n += a;
+
}
+
+
+
+
+
+
+
printf("digits :(%llu)\n\n",bat_n);
+
+
bat_sum += bat_n;
+
}
+
+
+
printf("bat summ: %llu\n",bat_sum);
+
+
+
free(f);
+
free(line);
+
return 0;
+
}
+200
day_3/input.txt
···
···
+
2213322222223222132231233322432224423222226232323522232215252332221122222231232224232722131522422232
+
9869755494885236452767647548826258555668838497687557968652485746757835445145546687436356799481798587
+
1333642233323333373233223535543332333343733333323333333333315334333323343343333333332321233332333333
+
2412331232332223332211413223433332213222252142221323322122212223222321231322513323122332321233233222
+
7233333554333634354333355353442655334523373532334435335733343124433353732333236335456441345343535443
+
2542623755573343945454412366525442424744334132133146357442166333737542732631343535567546644733453327
+
3223423125721322245221313311333222222222322321672232321322215121332232323522331112523842131211222231
+
1341524443834221222553325236443534253327533543493534348242333119334424249244524325448544522322512344
+
2122222234421423322222232231221455261322312321232223321232322112233222233223322222121221322232225222
+
2172228252452422574523272252246532513514251543422251252233622213162235313243341322723224223472223342
+
4333333322374312333333442252233332323343236421333332132232233523333223643444244332233333333314343374
+
5564564445425635543326425252871657266475435535644335444428545455444345414454654413464444444543452332
+
7454483454246843436686564547347643444463364743844643844454433455547944454424656442455444258453453949
+
3545239364734434356884585159793673287754643667512332857278643456465359873642643268698837552366444279
+
2222614212122412212232521222222222322162224122212255224652222252322242352254132522221123221222222222
+
4654734524468553536655551947342343744798353537531365525555255373383337465222438553556563343546674795
+
4223343232434234223443433132443232333433233241333323334444234334443434435341513522333132223342423334
+
2434743225152133244934233332223333342332742413225323434322133133342225263461325222442331344323333621
+
4363333625436326121432327152115232112437232426739557622735333213153454854223553223332333163322332262
+
3291224524551531661124222122232433443332372352223452323152254212524224475353217335338132112225138382
+
2532334224334412444233531343333232434672372334424223232433234233235242243334444434532142565432224543
+
6575467444354636644724356545439443727633232211663455734655446347433346552413539455535454456546344467
+
2212123522212256112142223212223223926221423333322111142121322246521222623231121222222233122682282232
+
2427422153354454221223483334425221233131444333342323144413423342141422222343422242225233412322852334
+
2223222262222351122221222542222356232422221312224223222121224242221142612223533222222326212112222231
+
1122221221423121122222221122242426222322222218222222222122222424232223133224227122232222225212322431
+
2223225222263221223122232222231322132249422122222222212343223233221231112333321122224822122212112221
+
2234133242122472222333323231152222313322242231321234122233314332232125212342222222141222224223222243
+
3222421121132228332482223722323212227931233222232311122728212342422323911121332241322122212225222224
+
3342221445144453253254314734532247546356242543223144334535244724343441632342442234353332554531544544
+
6644254436227552262158566262526533915631231552333722416565536354544652263755643341664563253253335325
+
2212221212221266252415512232524121224221462212225225525255242115212235231241252544312222525112533222
+
1212222242222222122121231123212212232222221112225222122222212212222222222322221222222333222222232121
+
8437515934322544325244332733235426312213422543233274311523432242324234425333225643164333335325158723
+
4955559385766953565255766876476558356667683243721462495465455956585541549636358359356553352726754357
+
2321212231311222332231233622451222223233632131325333155422313242233246235373323463222222233151352225
+
5554455544442245353244364445444442964455743554423443344234626245334485444521454444353644544434348444
+
3584546435435438362463553335553744339333343334752434593543434442333333333374362737434422835322244974
+
2224322223132222332322223422213222223821212223222243223232222232232222362222323122422922222223222321
+
7532213233323334215212222423122123222322425222323732234174212342242222239222238232423135916233324313
+
4725333553331231732334534535433413336333334433335633862233333333343434333253574633253313333533322533
+
2222122222233222222212322321212122221322122123122322232112231321222234222233122122113113222142221222
+
7618667762444757529352444283355721866946122758937266864545275866446765437263255944277544354266743555
+
8775885395735793768798676737467545866325994734656888365669834844567693699478564767598836687838775796
+
2323222163231422333232265212225222433552125522231421223232222242111255222111234232222234643453222212
+
3212222223211242222322222423924221333231242222215221222222222412222332242222342226222112342222222423
+
2312517442152222775232225322152322134642256726212312232253122631232442222322774322261522237322225221
+
1412232232122132322214222245123232224232423122523323323512434322222122322223232324512223213223221225
+
4624745444557739264643334474753442344576454464364444542355443444953574753765466446534445555247546645
+
4444445543553433353354455144453453542444435444454565454246452554274346433345434464454144453534444454
+
5222221211223232461222322221422324122212222121524122122224222221222226222282222211433212232262313272
+
4443424217342232322234144234322244432422332123432122562423442343241152444222734444343343324245233331
+
4625363444334325314433134332342626273324257534444232232533221335211222233354622142319633834554323252
+
6411222232214222222522522212115422324312321212512352222222222521221222222422213215222323222542332225
+
4443435744444443443454344444553646453444473243634337443343333445443444444444544642353434424344143344
+
4222322212142222131123232424122212623122325223232222122222324172123313113213221112221214131212326232
+
3628228272226822792212222291522222262281252222222122523312222224388323226222431232246223822272242222
+
6452232522272722232314236322514222212124422122363122133442752472323254631272561324232244232223412433
+
2232232212252263221723231243261132732225353342123222262123232223621135231232353226314132222321322523
+
2234532142534352552432224445238325213424373452334233522333242532331322332283352427475226322153223244
+
9472212243122222252422922222363422333321126243222123963224222212173222233224252234412121222122821213
+
8687898777877956884675896696763989727598788596888366975787785653266667396852928885385879777658746578
+
4742438327346661542272567435214432666247432532364464374423432252594887642242783264284248334549366538
+
2843543444552553332333549456453152452655123452245534625343434434394353525145545815233325253353558525
+
3244334344333322333336326524543522543353334524333542335243334463433424253344265152434334435422433433
+
5123213122132653223552342918633223322124141221532722222222633832112321232362321212223224311252232323
+
2254522224536212312521242224331285151323234522312332222153222222233213252422324212324255413222233635
+
6932637327758743246546437713551343621222422345652667325366263533277364672223242653614462113113621452
+
2664332353263783333136373783525676334732434213262462433235335292339233763346833362333754633332336332
+
1223222424223252223213121222322322216422412224222612422223221222312122222125212222415122232226422521
+
3542584332435333333233354353545344224553534123354453332523352334552335453523343512333213234387634133
+
6477957673773844477447976677777779677788757572445797735766653875666759654537677675353627655576767927
+
2122863223233922223222231121222335332223122512323122233223421212114232222322232221223392322222521322
+
4312524534123246451432343643224311242447241134644264223443332245433262232641376442432172472222642235
+
2275325124326274246343242342674425241126422624221639763313155173323211554216434553212654542522244512
+
1538376354635334634345152866523443431672342341845227336436433755352916223414454255126676464326465453
+
2462132262212214732224191166344355414456333232523325425323262172634333344212243223136153134622523124
+
2631319623233673572328447522142326723725312315363222557334327382237347133534333342445538226351733877
+
6674525765645736755277426478666374433478565771746335482576661384446336527753576379765114777324835247
+
1445214354534443124443143152322124342543358432243223532332224344453244325421233463452464443336435444
+
3723543344762463142452771243123333533262534743357433433442333434323237223413433322343122246434425297
+
2522212232142222322222221222222123222513232222522212222241212423221222221232222422123182421222222352
+
4649425575652455655345524446535555664456453353551334555552535554525353745544253454663345473375355545
+
2634673446446644485645555244654443495523355587664334545525752374784735443457755455456485493456463553
+
2242233312853232212222233154124241433323223342432114322372333333333232333133312323424253242333222527
+
2252222222122622131222221211221252222222262122342222322122323222252212223225224113322222213227122112
+
7145153421321212213232213242421325372523143232242542622222334162232643213463222315224332241623233632
+
3324124233321322222222324392322321322222222224223432342142234421321364212212331212326242323313313333
+
2472266245644522634774327358522262635513323335182372254462662143946277975225436422277562365266655423
+
3454443243442454643335544534416344433344445654442214445434214514463442433444324544444345444345543344
+
4367979552245565165576424776225962637573364823785465568368636312742298786276647827575676469244525653
+
3225626443313133323723323323333314253554364347343365333323333336333733232322233333323433327322332332
+
2573343343233434433434335363345452556353493431488327365413335557454378339752343364644435453325754543
+
3332172133227223334324253377332133233323223333532233333322112735223232322223234272123323333632212223
+
3454534475343444535444424745434444444344455444623375454534443434344544444438232474343544535454434444
+
2644342235344483342633422636454456365233515643444645826444442446956214445156322264445433443453544256
+
2223435334423434443323343432344434441333333333334433523433332124432343243433314444324423343343444233
+
3212252222442321323221225293213122528329522211182223418222232142225234221221222222423222321246232122
+
4353432493542334325235547332734383332234542144323893258347384435444429271453353353448434142247423122
+
8337935245577558348845559668464454534353766484438335543755757443777274244484345834388345496944455467
+
3443463333334453433232243443222334133233433234432324222432323533323324433242132332332124242343233322
+
1435542554154543564533441335544555244531645445572234345443345431434433534143565444437433564233354423
+
3333312334342233331223233234233423333333333222332233423337233233333323213132222322314332323333244443
+
3144453439443334333662444343463453336433435352354493435346436453383544432444466337453337853423233436
+
2621273163344422333343232136211636224222434231116342222542232213433324642324241176224342723221422332
+
3233236263233353563335231233252323223521334126123623332512327322312223333223215221283522467362232326
+
2232223222222222223224222222222221221211221222123322422321223212222221322222212221222221222222342222
+
4443435431454234435334436543423453441422434424434246438432132274643321323342524533232532212314424334
+
3434222234424123524222452333431221233121324331412242454221434433122432415442443243322313221343241245
+
2321552222525121432422322331221528511324222222222223251323221222325322125252122222212222223233125422
+
2113322212122312221212122222122232221222332422312233422223123112132122232232231222235122334122222212
+
3732434222332433314434542433334343433225344323314343343423334323322433232435323333324234332413313341
+
2243352221342443222271236434365322934422234223125222337624122643272322622437441322243413243473882412
+
2527574826427351353683632227267232139241272336778354926836323453363482545233625417243233594635373371
+
2352124323843333323253365635322233542433122438331432234333233233552321434213213222343343494522232371
+
1322321231222372222321132512312222322322224462222223322222222221223222233121722212522142211233221233
+
5444455244355434653244514353733425555432435524445462355644544453443433445226446336553853553454444444
+
3332233333334338391321272312134322233863322333432334333383232342334223332333234786233333432424325933
+
1423223524424321433522322244232223331233231333313336222333934223422133232353433212332232224322322433
+
3846414434329535333324434434463744365584534935533343538345434362733943434244645366346976364533243345
+
4643437654442357354452643453433595563365355434644545556753685648354446745633345454324745655324554344
+
2131424213433334334241312123344324133131413343442431244222441243341422141411322341334123242221356789
+
7416322321423422532433252263461535237341336423224758925417544133763249354532465584557477436637134868
+
3532232342543633244356234447125413363324323324222289345334243223343344349423623323132345434545334456
+
2222222223122224523322222414412221222312521311252212471135216121622212122422823223224222252322223322
+
6844572852724766364376246428458471423425425655656355452483274422366737555436524246373644225524226684
+
3242324353115355355323223333323433133532332325223553622433333532532333223134223363333333733357422553
+
3626353353644274241533142456273326314323662575363324353232556433624425644535422316323346623244545532
+
2724454534154225253459433524763422545426423332642224232423242219414234215362382511227546231223755232
+
7442133222243344231433423324322522433233342443244242433423242443424324213224132442463664334134342334
+
3463633243546333375266535312435244564434333724665664625374363683533955743535443448446155363433352435
+
2264222222213232253131424222232214292212282234282122225323422451223621252222122222122222532326531252
+
7615864866564643665565345652664464866686665436644563376466655765566766633576745646454764727756626448
+
3232682631537442445212595232662334363343227323835122465351345356353233643332543416323346345346643365
+
2477354147362541612246656262342473335717542264534245221467537422444573332674431531423425215312544289
+
2334432533153324242344341754352431132342242483614364474473434824424423481248441342313143738143793223
+
2453444254242142424354527214334534514423135772455224332544144347235744422234224425443544453243344614
+
5212223252122422331232123222142312233422245334462222222225244224221242232221512243232224234433555222
+
4663361654535434444435333426543336213653424435533654435334427263236324336542736224533733545413433239
+
3363338333145338474323437333462332324223453341452444327323423238343353864322373218432131334133331333
+
6252146332321485753632148626252215423622661447732432532425663473353884553422633662223652246821433466
+
6323212434222112525725474243264325545472241252227222635137276274422143227243432646722261633476517122
+
2292128532222284521512222622221222422421324224222681233623522223223262427233231272222123235231221181
+
4286246955215254312515631624225942342242521826335223234535339245216232525515324431229213242425522424
+
2622122232123521122122322223322225522212213235316222222233213212622122172232222411222222312122211732
+
2392322272325242232246227222232731732621613276422282332227135645532724216422152724335327741242231462
+
2133344331342334353334326416233445424328334428226343632383533126256345224276253624433232223322429335
+
1313445155233335142345133432424315243344534322414122115152312323134555232124514425531444334531116789
+
2176422423121432443422442232123322224224142721224212222312511322231432233234223323244211222332222122
+
1323212331222132233231423322222222214333233212344223434312442222492221354321222342223332373533322621
+
4664434362444745561444535453345435524434346435454274864444654324476633565349444454455353443364156363
+
1638584275546117346163717254773527552852888544638242767347444874466266733617618166164466374362765419
+
6484454656734464566656446354242553953738747675494353263545534655932284732414565465456217445446466422
+
3485414422321524833475231333422824247332244623522414142222262253355414452434234344554242224422224624
+
2333263233433521134582215333224332925436375333333336732316531375333522444212233753383365335354643243
+
2322132222223221323111333232222233332322122232221312232253222222232322332431323222322231242312325223
+
5335322444334334442443232426223323234447129221322222234335221422223321222322222324423233342232233364
+
2233232223252234233222422323332233122122213133422132233223243122322122142422223322242222332521212211
+
2243222246232222212215234223244341293823233413422262122231434142334224211122243244723212111327343722
+
3313433324333323233333323332233423333523353312313633334213233333425232634123313333625322322224342122
+
2223221221321122424222323113232211222413233225122222222312222222225361224122154344233232252313223232
+
6426445154869355363363722336455335472343572534323456253645532493615956527636643453556642545246266326
+
4342252241221222341214232232226432422223222214311224253224847131242221312222431142152243223533228364
+
3122222221312333212221331241133322212322122433312122322332322212332222212322222142232224224432241333
+
4758777554587868737644678898656677787655757385768789874455858856835848887478458889776575587488744887
+
2222222322222222132444434221222223222211212222421221422124222221223422331422622421122212232221222222
+
5543453232434923234235323433433652346343532235133533353325643323414321344433315332531344244423332533
+
1422222221222222212122311222212124122222322232222122112222222222122221212242222322212222211512242221
+
5624318328343613762342133122287362233222333228233526432235723228212317225232222321322843831822233343
+
4745555462555745374333447645563565846565658565674475358542453455774373535925543556456253364455655565
+
2231323341221332332231232222211222122232242312343424133212222221221623132213242312314213213122222113
+
2342415122621132242242322221225542255222222222112241222232223222323213522222122246221231225232243224
+
6223131445352273462225532517237771421222422217426141752312626563272261233221417286234434252324661125
+
5222222212212422212223223322211422113212222441222322222222432222222222222222132132522224131242222451
+
3422323526233255413253234422122625354565276426242722342264341342322432242227231221345261423232251243
+
4455444352444254693544224343146552455424553454457554355354334375444452434455453544443455535455225454
+
6695865665676765678566666576961755966654564567555567567556642646397966556665359666465757356556757769
+
8357544347353366537753222233513443263326227543433534321424453266343553435425423918643343433235261323
+
2222222222222221222113122221132222411225322222222222222441122332222222232132115232313221145522221221
+
2224124212242232553331122222231252712234224682324732533127244253223113212252422561212242222267412142
+
2155131243437642435225242233334327262528545127324323242251223242215932221342512431224563331215223232
+
3233233821422242243223423226322333331221244225322333614732324322164332232342254245324342223324333333
+
5323233433722283363642223343334264332334256668558433344333335344774523223633116853423338533332265733
+
6636218835567665856535755855763526554865876567668671763558535573733875754666654864563576447378687647
+
3242212222532222453222221222221414445243225223253221212124423422213112225222222212136322222122223223
+
3246242324335263534434465364444433354444733144444444634444442415237463482176214523646425165642842254
+
2222122121452242222112223321223211222122412432421222323122222422224234323112221412442225322222244223
+
5555533353644375536354623527576345645257454546563754453235344566547743535526353443675773695567647537
+
3333334233422333245534448312255264263533563132333625233423334335232332233333924442432512333355242243
+
5335324246344212334344347222166443335324633214664133136352235644245321635434234446546333352834514533
+
3232232233742222122234123363441422152241262422235221425422492124252122242244323222152522222164124334
+
3462333528242224232212331221524224225335332337777262223233218633225162762134332832833282226832233352
+
2632332326122221121112263242232222122432223221342223342224123122112324132321112262322121522112113221
+
2643223122321323333222122131322331333331122234423732236222323333323223232221311311224272231332243223
+
1222223121241124122212232223223222122522221122332123122232231322212311251223333222513332338312123112
+
2152323434738233433164425517324546331332242235424332433322422413432633344543243344744343237342432312
+
4131322231422253332322233423433322322232222122431221333113333223333234213123233223231323332233334323
+
2463363425242612416264341654545345115236122326652335252424331225332623114245461624526144136446312789
+
5832235534333334323334233312133213343133323333875344483233343683364244333343536273324539333242273393
+
5336252424463368242344342182144524854253313325351235445322225455244424225253125634815634443442624924
+4
day_3/mini.txt
···
···
+
987654321111111
+
811111111111119
+
234234234234278
+
818181911112111
+134
day_4/4.c
···
···
+
#include <stddef.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
+
+
int get_acces(int** matrix,int i,int j,int last_i,int last_j) { // last_{i,j} are bools to indicate we are in the last row}
+
int neighbors = -1;
+
int i_0 = 0;
+
int i_last = 0;
+
int j_0= 0;
+
int j_last = 0;
+
+
if (i == 0) {
+
i_0 = 1;
+
} else if (last_i) {
+
+
i_last = 1;
+
}
+
if (j==0) {
+
+
j_0 = 1;
+
} else if (last_j) {
+
+
j_last = 1;
+
}
+
+
// for step 2 we will be working modulus 2. during the run, once we establish a roll as accesible it will get replaces with 3.
+
// while counting it for the neighbors it will still result in true for %2.
+
// once a run is over, we iterate over the whole matrix again and reduce all 3's by 1.
+
for (int ii = -1+i_0; ii<=1-i_last; ii++) {
+
for (int jj = -1+j_0; jj<=1-j_last ; jj++) {
+
if (matrix[i+ii][j+jj]%2) {
+
neighbors++;
+
}
+
}
+
}
+
if (neighbors<4) {
+
return 1;
+
} else {
+
return 0;
+
}
+
}
+
+
int main(int argc, char* argv[]) {
+
+
+
FILE* f = NULL;
+
char* line = NULL;
+
size_t size = 0;
+
ssize_t nread = 0;
+
int len = 0;
+
int w = 0;
+
int access = 0;
+
int accesible_rolls = 0;
+
int total_accesible_rolls = 0;
+
+
int** matrix_ptr = NULL;
+
+
+
f = fopen(argv[1], "r");
+
+
+
while ((nread = getline(&line, &size, f)) != -1) {
+
w = nread-2;
+
matrix_ptr = (int **)realloc(matrix_ptr, (len+1) * (nread-2)*sizeof(int));
+
matrix_ptr[len] = (int *)malloc((nread-2)*sizeof(int));
+
for (int i = 0; i< nread-1; i++) {
+
if (line[i] == '@') {
+
matrix_ptr[len][i] = 1;
+
+
} else {
+
matrix_ptr[len][i] = 0;
+
}
+
// printf("%d",(&matrix_ptr)[j][i]);
+
}
+
len++;
+
}
+
+
// just a matrix out of input.
+
+
//
+
// [(i-1,j-1)][(i-1,j)] [(i-1,j+1)]
+
// [(i,j-1)] [(i,j)] [(i,j+1)]
+
// [(i+1,j-1)][(i+1,j)] [(i+1,j+1)]
+
// check all of those in clockwise order
+
//
+
+
do {
+
accesible_rolls=0;
+
for (int i = 0; i<len; i++) {
+
for (int j = 0; j<w+1; j++) {
+
if(matrix_ptr[i][j]==1) {
+
access = get_acces(matrix_ptr, i, j, (i==len-1), (j==w));
+
if (access) {
+
matrix_ptr[i][j]+=2;
+
accesible_rolls++;
+
printf("x");
+
}else {
+
+
printf("@");
+
}
+
} else {
+
printf(".");
+
}
+
+
}
+
printf("\n");
+
}
+
+
+
for (int i = 0; i<len; i++) {
+
for (int j = 0; j<w+1; j++) {
+
if(matrix_ptr[i][j]==3) {
+
matrix_ptr[i][j]--;
+
+
}
+
}}
+
+
printf("\n\n accesible rolls: %d\n",accesible_rolls);
+
total_accesible_rolls+=accesible_rolls;
+
}while (accesible_rolls>0);
+
+
+
+
+
+
printf("\n\n total accesible rolls: %d\n",total_accesible_rolls);
+
+
+
free(matrix_ptr);
+
free(f);
+
free(line);
+
return 0;
+
}
+136
day_4/input.txt
···
···
+
@@@@@@@@.@.@@@@.@@@@@@@@..@..@@@@.@.@.@..@@.@@@@@.@@.@@@@@@@@.....@.@.@..@@@.@@@@@@@.@@......@.@@@@...@.@@.@.@...@@@.@....@.@@@@..@@@.@@
+
@..@.@@@@@@@.@@@.@@@@@@.@@@@@@.@...@....@.@.@.@....@@@...@..@..@@@..@@@@@@@@@@.@..@.@..@.@.@@@.@.@@@.@@.@@@...@@.@@@.@@@@.@@.@.@@@@.@@.@
+
@.@@.@.@..@@@..@.@@@@@.@.@@.@@.@.@@...@.@.@.@@@@.@@@.@@@@@@@@@@@@.@@..@@.@@@@@@@..@@.@.@@@.@@..@@@@@@@.@@@.@..@@@@@@.@@@@..@@.@.@@..@@.@
+
@@..@@@@@..@@@@@..@@@.@@.@@.@@@@@@@.@@.@@.@@..@.@@.@..@.@@...@@@@@@@@.@@@.@@@.@@@@@@.@@@.@..@..@..@.@@.@.@@@@.@@@.....@@..@@...@@@.@@.@@
+
@..@..@@..@@.@@.@@@@@.@@@.@.@@@@@@.@@@..@.@@@@@..@.@@..@@@.@@@@@@.@@.@@@@@@@.@@@@@..@@.@@@.@@@@@@@.@..@.@@@@@@@@....@@@.@@@@..@@@@@@.@@.
+
@@@@.@@@.@.@@.@@..@@@@@.@.@..@.@..@@@@@@.@@.@@@@@@.@@@...@.@.@@...@.@@.@.@.@.@.@@...@@@..@@@@...@.@.@@..@@@.@@@@.@@@@.@@@.@@@..@....@@@@
+
@@@..@.@@@@@@@@@@...@@@@@@@@@@.@@.@....@.@@.@.@@..@@.@@@@@@@....@@@.@@@@.@.@@@@@@@@@@..@@.@@.@@.@@@.@.@@..@@@.@@..@@@@.@@@@@.@@.@@..@@.@
+
@@@.@@@@@..@..@.@..@@.@@.@@@@@.@@@@...@@@...@@@@@.@@@@@@@@@@..@@@@@@@@@@@@@.@@@@@@@@@.@..@.@@@.@...@@@@.@.@.@.@@@@@.@..@.@.@@@@.@.@@.@@@
+
@.@....@@@@@@@.@.@.@.@.@@@@...@....@@@.@@@.@@@@.@@..@@@@@@@@@@.@@@@.@@.@@.@@.@@@.@@@@....@@@@@@.@@@@@.....@.@.@@.@.@@@.@.@@@@.@@.....@@@
+
@@@@@...@..@@.@.@@@@.@@@@@@.@...@.@.@@.@..@@.@.@.@@@@@..@@.@.@@@@..@@@..@.@@..@@@@@@..@@@...@@@@@.@@@.@@@.@.@@@@.@@@@.@@@@@@@@@@.@@@..@@
+
@@@.@@.@@.@@@@@@@@..@@@.@@@@@@@@@.@@.@@@@@.@@@@@@@.....@@@@.@@@..@.@@....@@@@.@@..@@.@@.@@@@..@@@.@@@.@@@@@@@..@@@@@@@....@.@.@@@@@@.@@@
+
@@@@@@@...@@@.@@@.....@@@..@...@...@.@@@@.@@@@@@@@.@@.@.@@@@@.@..@@@@@@@@@@....@@@@@@@..@.@..@@@..@@..@@..@.@.@@...@@@@@..@@@..@@.@@@@@.
+
@@@@@@@@@@@.@@@@..@@.@@@.@@..@@..@@.@.@@@@@@.@@@.@@@@@...@@.@@@@...@@@@..@..@@@.@@.@@@@.@..@.@.@@@.@@@@@@@.@.@@.@@@@.@@.@@.@@.@...@@@...
+
@.@.....@@.@@@@@@@.@@@@@@@..@@..@@@..@@.@..@..@@@@.@.@@@@.@..@@@@@@.@@@.@@@@@@.@.@@@@@.@@@@@@.@@.@@..@@@@@@@@.@@@.@@@@@.@.@.@@..@..@@.@.
+
@@....@@.@@@.@.@@.@@@@@..@@@@@.@@@@@.@@@..@@@.@..@@@@@@.@.@.@@@@@.@@@.@@@@@@@@.@.@@.@.@@@@.@@@..@@.@@@@....@@@@@.@@@@.@@@@@@@@@.@@.@@...
+
@@...@@@@@@@.@@@.@..@..@@@..@@@@@@@.@@@@.@.@.@@@@@@@@..@@@@.@.@.@@.@@@..@.@@@.@@@@@@.@.@@@@...@.@@@.@..@@@@@@.@@@@@@@..@@..@.@..@@.@@..@
+
@@@@@@@.@@.@.@@@....@.@.@.@@@@@@@@@@@@@.@...@@.@@.@@..@@..@..@@@@@@@.@@..@@@@@@@@.@@@@@@..@.@@.@@@@@.@@...@...@@@@@@@..@@@@@@@..@@@.@.@@
+
@@@.@@@@@@@...@@@.@@.@@@@@.@.@@@...@...@@@@.@@.@@@..@@@.@@@.@@@@.@@@@@@.@@...@@@@@@@@@.@.@@.@.@@@@@.@..@@..@@..@.@@...@@@.@@@@@.@@@@@@..
+
@@@...@@@@@@@..@.@.@@@@@@@.@@@@@@@@@..@@@@...@@@@.@..@...@..@@@..@@@.@.@@.@@..@..@@..@@.@..@@.@..@@.@...@@@@@@...@@@@...@......@@@@@@@.@
+
..@.@@.@@@@.@.@@@@..@@@.@@..@.@@@.@.@..@.@@.@.@.@.@@.@..@.@.@@@@@@.@@@.@@@.@@@@@@..@..@..@@.@@@..@.@.......@.@..@..@@@..@..@@@@@@@@@.@@.
+
@...@.@.@@@@@@@.@@@@.@@.@@@@@.@...@@@@@.@@.@@@.....@@@@.@@@@.@@@..@@.....@@.@@@@@@@@...@@@@@@...@@.@@@@@@@@@@@@@.@@.@@@.@@@@@@@.@@@..@@@
+
@...@@.@@.@@.@@@@.@@@.@@@@@.@@.@.@.@@.@@.@@.@@..@@@@@@@.@.@@@.@@@.@@.@@.......@.@@@@.@@@..@@..@@@@@@..@@@@@.@@@@....@..@@@@.@@@....@@..@
+
.@@@@@@.@@@@@.@..@@.@@.@@.@.@@@.@.@..@@@@@@.@@@@@@@.@@.@.@@@.@@.@.@.@@..@..@@@@@@@.@@@@@.@@@@@..@@@@.@..@@.@.@@.@...@..@.@.@@@.@.@.@@@@.
+
..@@@@@@@.@.@.@@@@.@@..@@@@@.@@.@.@@..@@...@.@.@@.@@..@.@..@@@.@..@....@@@@.@.@.@.@.@@@@@..@.@@@.@@@@...@@@@@@@@@@@@.@@@@.@@@@.@.@@@...@
+
..@..@...@@@.@.@@@.@@@@@@@@@@@.@@...@@@@@.@@@@@...@.@@@@..@@@@.@@@@@.@@@@.@....@@@@@.@.@@@@@.@@@@.@..@.@@.@@@..@@.@@.@.@@@@@.@@@@@..@...
+
..@@@...@..@@@@..@.@@.....@@@@@@@.@@..@@@..@@@@@..@@@@@@@@@.@@.@@...@.@@@.@@.@.@@@..@@.@@@..@@.@....@@@.@.@@@.@.@@...@..@@.@@..@.@@@.@@@
+
@@@..@@@@.@@@.@.@.@@.@@@@@..@@.@@@@@..@..@@@.@@@..@.@@.@@@..@@@..@@.@@.@...@.@@@@@.@@@@@@@.@@..@..@@@@..@.@@..@.@@.@.@@@@@@@@..@..@@@@@@
+
@@.@@@@@.@@@@@.@@@@@@@.@@..@@.@@@@@@@@@@.@.@..@@@.@@...@.@@@@..@@@@.@.@...@.@@@.@.@@.@@@@@@@.@.@@.@@@@@@@@.@@@...@@@.@@@@@@.@....@@..@@@
+
@@@...@@@.@.@...@@@@@@@@@@@@@.@@.@@@@@.@@@@@@@@@@@.@@@..@@@@.@..@.@.@.@@@@@@.@..@@..@.@..@.@.@@...@.@@@.@@@@@@.@@..@@@.@.@..@@.@.@@@..@@
+
.@.@@.@.@.@@.@@@@.@@@..@@..@..@@.@.@.@.@@..@.@@@@@.@@@@@@@@@@.@.@@.@@@@@@@.@@@.@@@@..@@@@@@@.@@@@@.@@@@.@@@.@@@@@.@@@..@@@@@@@@@@..@@@@.
+
.@..@.@@..@@@..@@@...@@@@@@@@.@.@@@.@.@@.@@@@.@.@@@.@@@@.@@.@@@@...@@@@...@@.@@.@@.@@@@@@@@@@@@@.@.@@.@@@@@@@..@@@@@@..@...@.@.@@@@@@@@@
+
..@@..@@..@@.@@@@@@@@@@.@@@@@@@@@.@.@@..@.@@@@@@@@@@...@@@@..@@@@@@.@@@@@.@.@@.@@.@..@@@@@@@@@.@@@@..@@@...@@@@@..@@@@.@@@@@@.@@@.@.@.@.
+
..@.@.@...@@@@@@.@.@....@..@@@.@@@@@@@.@.@.@@@@.@.@@@.@@@@@.@.@@@@.@..@@@@.@@@@@.@.@@@@.@@@@@@..@@.@.@@@@@@@@@@@.@.@.@@.@...@@@@@...@@@@
+
@.@@@@@..@.@@@.@@@..@.@@@@@@..@.@..@.@@..@.@.@@@@@@.@.@@@@.@.@.@@@@@@@.@.@@@@.@.@@.@@@@..@@@.@@@...@.@@@@@.@@@....@@@......@....@@@@@@@@
+
@.@...@@@.@@@@@@.@@@@..@..@@@@@@.@@@@.@@.@.@.@@.@@@@.@.@.@@.@@.@.@..@....@@@@....@.@.@@@@.@.@.@@@..@@.@...@.@.@@@.@@@.@@@@@.@@@.@@@@...@
+
.@@.@@.@@@..@@@@@..@@.@@@@@@@.@@@@@@@@@@@@.@.@@@@@.@@.@@..@@@.@@@@@@@.@@@.@.@..@@@@@..@.@.@@..@..@@@.@@@@@@..@...@.@@@.@@@@@@@@.@...@...
+
.@@.@..@@@@@@@@@@@.@@@@..@.@@.@@@@@@@@...@.@@@.@@.@@...@@@@@@@@@@.@@.@..@@@.@..@@.@....@..@@@@@@@..@.@@@@.@@.@@@.@@@..@@@@@@.@@@@@@@.@.@
+
@@@@.@.@.@@@@.@@@@@@...@@@.@.@.@@....@@....@..@@@@.@.@@.@..@.@@@@.@@@@@....@@@.@@.@.@@@.@@@@.@.@@@@@...@...@@..@@..@.@@@@@@@@...@@..@@..
+
.@@@@.@@@@.@@@.@.@@@@.@@..@.@.@@@@@@@@@@...@@...@@.@@.@@.@@@@.@@.@@.@@.@@@.@@..@..@.@.@..@..@.@@.@.@@@@@@@@..@@.@@@@@@@.@.@.@.@..@.@@..@
+
.@@..@@..@@@@@@@@.@@@@@@.@.@@..@.@.@.@...@@@@@@@@@..@@@.@@@@@@@@@@@.@@@@.@@@.@@@@.@@@..@..@.@@.@..@@@@@@.@@.@@@@@.@@.@@@@@.@.@.@.@@@.@.@
+
@.@@@@.@@.....@@.@@@@@@@.@@@@.....@.@@@@.@@@@@@.@@@@..@.@@@..@@.@@@@@@@@@@@@@@....@@@.@@@@.@@@@@@@@..@..@@@@.@.@@...@.@@@@.@@@.@@.@@@@..
+
@@..@@@@@@@@@@.@.@..@@.@.@@@@...@@@..@@..@..@.@.@@@@@@.....@@.@@.@@.@...@@.@@@@...@@@..@@@@@@@@@@@@..@@.@@.@@.@.@..@@@.@@@..@@@.@....@.@
+
.@@@@@@@@@@@@.@@@.@.@@@@.@@@@.@.@.@.@@@@@.@..@..@@..@@@@@@.@.@..@..@@@@@@@.@@@@@@..@@.@@@...@@@@@.@....@@@@@.@@@@.@.@..@.@.@@.@.@@@@.@.@
+
@..@@@@.@@@@@@..@.@@..@@@.@@@@@@.@.@@@.@@@@@.@.@.@.@@.@@@@.@@.@@@.@@@@@@@..@@.@@..@@...@.@@@@@.@@.@@@.@@...@@@@.@@.@@@.@..@@.@.@@@@@..@@
+
@@@@.@@...@@..@.@@@@@@@.@.@@@@@@...@.@@.@@@@@@@.@@@...@@@@.@@....@@.@@@@@@.@@.@.@@.@.@@@..@@@@@....@@@@@...@@@@@@@@@@.@...@.@@@@...@.@@@
+
@@.@@@@...@.@@@@.@@.@..@@@@@.@@@.@...@@..@..@@@@@.@@@@@@@.@.@@.@@@@@@.@@@@@@@@@@..@.@@@@...@.@@.@@@@@@@@.@.@@@@@@.@..@.@@@@@.@@.@@.@.@..
+
@.@@@@@@@@@.@@@..@.@..@@.@@@...@@.@@@.@.@..@@@@.....@.@@.@.@@@@..@..@@..@..@@..@@...@@..@@@@@@@.@@.@...@@@@...@@@@.@@@@@.@..@@.@@@@@@...
+
@@@.@..@.@..@..@.@.@..@@.@..@@@@@.@..@@@@.@@@.@@@.@...@.@@.@.@@@@....@@.@.@@.@@...@@@..@@....@@@@@...@@...@.@.@@.@.@..@@@@..@@..@@..@@.@
+
@@.@@.@@@@@.@@@@@@@@@@@@.@.@@@@..@@@@@@@@@...@@@@@.@.@.@@@@.@..@@@.@....@@.@@@..@@@@..@@@.@.@@@@.@...@@.@@@..@.@..@@@@.@@..@@.@.@@..@@@.
+
@@@.@@@.@@@@@.@@@@..@.@.@@@..@..@@@@@@@@@@@@@@@@@@.@@.@.....@@@@@@@.@@@.@@@.@@@@@@@@.@@@..@@@.@.@@.@@.@.@@..@@@@...@@@@@.@@@.@@@@@@@@.@@
+
@@@@@.@..@@@.@.@.@.@@@...@@@.@@@@@@@.@@@@@@@@.@.@.@@@.@@.@@@.@.@@.@@@@@.@@@@@..@..@.@@@..@.@.@@.@@.@.@..@@@.@@@@@@.@.@...@@@@@@.@@.@@.@@
+
@@@@.@@.@@@@@@@..@...@@@.@@@.@@.@@@@@@@@@@.@@@.@@@@..@@...@@.@.@@.@@@@@.@@@.@@@@.@@.@..@@@@@@.@@.@@@@@@@@@@..@@.@@@@@@.@..@@.@@@@@@@.@.@
+
.@@@@@@@@@@.@@.@@@..@..@.@@@@@@@@....@@....@@.@@@@.@@@@.@.@@@@@@@.....@@@@@@.@...@..@@@.@.....@@.@@@.@@.@@.@...@@@@@@@.@@@@.@@@@...@.@@.
+
..@..@@.@@@.@..@@..@@@.@..@.@@....@@@@.@@.@.@@....@.@.@.........@@...@@@..@@@@...@@..@.@@@@@...@@.@@@...@.@..@.@@@@@@@.@@@@...@@..@.@@..
+
.@@@@@..@.@@@@@@.@@@.@@@@@.@@@@.@@@@@@@...@@.@.@@..@@@@@@.@@@@@.@@@..@@@@@@.@@.@.@@@@@...@@@@@@@@@@@@.@.@@.@.@@@.@@.@@.@.@@@.@@@@.@.@@.@
+
@@@@@@@@@.@.@@@@@.@..@@@...@@.@@@@..@.@.@@@.@@@@..@@.@@@@@.@@@@@..@@..@@@.@@@@@@@.@..@..@@.@@.@..@@@...@.@@.@@..@@@.@@@@.@.@...@@.@@..@.
+
@@...@@@@@..@@@.@@.@@@@.@@..@@..@@@@.@@@..@..@@@@@@.@@@.@@@@@@@@@...@.@.@@..@@@@.@@@..@...@...@@.@@@.@.@.@@.@.@@@@.@@@@..@@@@@@..@@@@@@@
+
..@.@...@@@@@@.@@.@@.@@@.@@..@@@.@@@...@.@@...@@@@.@@.@@@@@..@.@.@@@@..@@@@@@.@@..@.@...@.@.@@@.@@.@@.@@....@@.@@.@@@.@@@@.@@@@.@@@@@..@
+
@.....@@@@@..@@.@@@@@@@.@@@@@@..@@.@.@@.@@@@@@...@@..@..@@@.@.@@@.@@@@@@@..@@@..@.@@@@..@@@@@.@.@@...@@...@.@.@@.@@@.@@@.....@...@@@@@@@
+
@@..@@@@.@.@@@@@..@@@@@@@.@...@@@@@@.@@@...@@@@..@.@@@@.@..@@@.@@.@@@@.@.@@..@@..@..@@.@@@@@@@..@.@@...@....@@@.@@.@@@.@.@@@...@@@....@@
+
@.@@.@@.@..@@.@@.@@@.@@@@.@@@.@@.@@....@@@@.@@@@.@@.@.@.@@@.@.@@@@@@@@.@.@@.@@@.@.@@@@@@@.@@.@.@.@.@.@@@@.@@@@@.@@@.@..@.@@....@@..@@.@@
+
.@@@@.@@@.@@@@.@@...@@.@@@@.@@@.@@@@@.@..@.@.@@.@....@@@@@@.@@.@@@..@@.@.@@.@@.@.@@@@..@@@.@..@@@@@@.@@@@@@@@.@...@.@.@@.@@.@@....@@@@.@
+
@..@@@.@.@@@@@.@@...@@@@.@@@.@@.@@@@@.@@@@.@.@.@.@@.@.@.@@@@.@@.@@@@@@...@@@@.@@....@@@@...@@@...@...@@.@@...@.@@.@@@@..@@@@@@.@.@@..@.@
+
@.@.@..@..@....@@@@@@.@@@.@.@@@.@@@@@@@@@@@@@.@@@@@.@@...@.@@...@@@@@..@.@@.@@.@@@..@@@@.@@@.@@...@@@.@@.@@@.@@@.@@@@.@@@@@@@@@@@@@.@@@@
+
@@.@@.@@@@....@@@..@@.@@@@@@@.@@.@.@@@@@@@@@@@.@..@@.@@@.@.@@@@.@@@..@.@@..@@.@@.@@@@@@..@@@.@@.@@..@@@@.....@.....@.@.@.@.@@.@@.@@@@@@@
+
@@@@..@@..@@@@.@@@@.@.@@@@.@.@@.@.@@@.@.@@@.@@.@.@@@@.@@@@@..@..@..@.@.@@@.@.@@...@@.@@@@@@@@@@@@@@@.@@@@@@.@@.@@@@@@@@..@@@@@..@@.@@@@@
+
@@@@.@....@@@@..@@@@@@..@@@@@@@@@@@@@.@.@@@@@...@@...@@...@.@....@.@@.@.@@@@.@@.@@@@@..@.@@@@@@@..@@.@.@...@@@@.@@..@@@@@.@@@@@.@.@@.@.@
+
@..@@@@@@..@@@@@..@@.@@@..@.@@@....@@@@@@.@..@@..@.@@@@@.@.@@@...@.@@@..@..@@..@@@@.@@@@@....@.@@.@..@...@@@@@@@@@@@@.@@@.@......@@@..@.
+
@@..@@@@@@@.@.@@..@@..@@...@@..@@@..@.@@@@@.@.....@@@@@@@@@@...@@.@@@@..@@.@@@@@@@@.@.@.@@@.@@@@@@@.@@@@@.@.@@@@@@.@@.@@@@.....@...@@...
+
@.@.....@@@@@.@@@..@.@..@.@@@@@@@@@@@@.@.@.@.@..@@@.@.@.@@@@@..@@@.@...@@@....@@.@@@@@@@@@@@@.@@.@@@@..@@.@...@@@@@.@@.@...@@@..@@@@@@.@
+
..@@.@@@.@..@.@..@@@@.@@.@@@@@@..@.@@@@...@@.@@@.@..@@@.@.@@@@@@@@.@@.@@@@...@.@..@@@@@.@@@@@@@@@...@..@@@.@@...@@@@@@.@@@@@@..@.@.@.@..
+
@.@@@@@.@.@@@@@.@..@..@@@@...@@.@...@.@@@...@.@@@@@@@@@@@@@@.@@@@.@@.@..@....@@@.@@@@.@@@.@@..@...@.@@@@@.@@@@....@@@@..@@@.@..@.@.@.@@@
+
..@@@@.@..@@@@@.@@.@@@.@@@@@@.@@..@@@..@.@@@@@.@.@@@@.@..@@.@.@@@@.@@@@.@.@@@.@..@.....@.@@@.@@..@@.@..@@.@@@@@@..@.@..@@.@..@@@@@@.@..@
+
@@..@@..@.@.@@@@.@@@@.@@@@@@@@@...@@@..@@@.@@@@.@.@@@@@...@@.@..@.@@@@@@@.@@@@@@@@..@.@.@@@@@.@..@@.@@@@@@@..@@@@@.@@@.@@.@@.@.@....@@..
+
@.@@@..@@@@@.@@@@@@@.@@....@@@..@.@@.@.@@...@.@...@@.@@@@@@@@@@@@@.@@.@@@.@.@@...@@.@@@.@.@@@.@.@.@.@....@@@@.@@@@.@@@@@@@.@.@.@@@@@.@@@
+
@..@@..@.@.@@@@@@@..@.@@.@@@@@.@.@.....@@@..@.@@..@@@..@@.@..@.@@@.@.@@@@..@......@.@@..@@@.@@..@@.@@@@..@@@@@.@@@.@@..@@@@@@@@.@@@@@@@@
+
.@@..@...@@@@@@@.@@@@@@@..@...@@@..@@@.@@@@..@@@@@@@..@@.@.@@.@@@.@@@@......@......@.@@@@.@@@@@@...@.@@@...@.@.@@@@@@.@.@@@@@..@@@@.@@@@
+
..@@.@..@@@.@.@.@@.@.@@@@@...@@@..@.@@.@@.@@@@@@@@@.@@@.@..@...@.@.@@@@@.....@@@@@@@@..@@@@.@@@.@@@@@....@.@@.@.@@@@@@@@..@@@@...@@...@.
+
@@.@.@.@@.@@.@@..@@@@@@.....@..@@@.@@.@@@@@@.@@@@.@@@@@@@@.@@@..@.@@@.@..@...@..@@@@@.@@@@.@..@@.@@....@..@.@@@@@@.@..@@@@@@..@.@@@...@.
+
@@.@@@@@@..@@.....@@.@@@@@@@@@..@@.@@.@@@@@@...@@@@@.@.@@@@..@@@@.@@@.@.@.@@@@.@.@@@@@@.@@@@@@@@.@@@@@@@@@...@@.@@@..@.@@@.@.@..@@..@...
+
@@@.@...@.@@@@@@@.@@.@@@@@@@@@.@@.@@@@@@@.@.....@@@..@.@@.@.@@....@@@.@@@@..@@@...@...@@@@@@....@@@@.@@..@.@@@@@.@..@.@@@@@@@.@....@..@.
+
..@@@@@..@@.@.@..@@@.@@.@@@@@@.@@@.@.@@@@@@@@@@.@@.@@@@@..@@@@.@@.@.@@@@.@@.@@@@@@@.@@.@@.@@.@@@.@@@@.@@@.@@@@@..@.@.@..@@..@@@@@...@.@@
+
@@@@@@.@@@.@..@.@@@@@.@@...@..@.@@@@@..@@@..@@@.@.@@@..@@.@@@.@@..@@.@@.@@@@@.@@@@.@@.@.@@@........@@..@@.@@@.@@@..@@@@@@@.@@@@@@.@.@@.@
+
...@@@@@@@.@.@@...@@@.@..@@.@..@@@@@@@@@@@.@.@.@@@@@@@@@@@.@@..@@.@@@@@@@@....@@.@..@.@@..@.@.@@@.@.@.@.@@.@@@...@...@@@@@@@@@@@@.@@.@@@
+
@.@@@@..@@@@@@.@.@@..@@@@.@@@@@@@.@..@.@.@@.@@@.@@.@.....@@.@@@@@@@@.@@@@@@@@.@@.@@.@@@..@..@@@@.@@@..@@@@..@@..@@...@.@@@@@@@@.@...@.@@
+
.@@@@@@@@...@.@@.@@@@@@@@.@@.@.@@.@.@@@@@@@@..@@@.@@@@@.@@@@.@.@..@...@.@@.@@@@@@@@@.@.@@@@.@.@@..@@@@.@.@@@.@.@@..@@..@@@@@.@@@@..@...@
+
.@@@.@...@..@..@@.@@..@..@@@@.@.@@@@@@@@@@.@.@@.@..@.@@@@@@@@@..@@@@@..@@@@...@.@.@@@@.@.@.....@@..@@@@@@@.@@@@@.@.@@@.@@@@@@@@@@.@@@@@@
+
@@.@..@@@@.@.@@@@@@.@.@..@@@.@@@@@.@@.@@.@@@@@...@..@.@@.@@..@...@@@.@@.@.@@@.@.@@@@@@@@@@@@@..@....@@..@.@@..@@.@.@.@.@@..@.@@@@@@@@@@@
+
.@@.@@@@@.@.@@@.@@..@@@.@@@@@@.@@.@@@@@@@@.@@@@.@@...@.@.@@@@@....@@.....@.@.@.@@@@@.@@@@.@@@@@@@.@...@.@@.@.@.@.@@.@.@@@.@@...@@....@@@
+
@..@@@..@@@@..@@@@@@.@@@..@@@@@@@@@@@..@@@@@@.@@@@..@@..@@@@@..@@@.@.@@@@..@.@@..@@.@@@@@@@@..@@@@@@@@@@@.@@..@.@@.@@@@.@.@@@.@....@@@.@
+
.@@.@@...@.@@....@@.@.@@@@@.@@@@...@..@@@@@@@@@.@@@@@.@@.@@..@.@@...@.@@@@@.@@@@@...@....@@@@..@@@@@@@@@.@.@.@@@@@@..@...@..@@@@.@..@@@@
+
@@@@@@@@..@@@@.@.@@..@@@@..@.@@...@@.@@@...@@@.@@.@...@..@@@@@.@@@..@.@@@@@@@@..@..@..@..@@.@@@.@@.@@....@@@@@@.@@@.@@@@@.@....@@@@@@@@@
+
@.@@.@@@@@.@@@....@@@..@@..@.@@..@@@@@.@....@@@@@.@.@@.@@..@..@@..@@@@.@@@.@@@@@@@@@@.@@@@@.@.@.@@@.@.@@@.@@@@@..@@@@..@@...@..@@@@@@@@@
+
@@@@@.@.@@@@@@...@@....@@@.@@...@@.@@@@@@@.@.@@.@@..@@@..@.@..@@@@.@@.@.@..@@@..@.@.@.@.@@@@.@@@...@@.@@@@@@@@@@..@@..@.@@@@@@@.@...@.@.
+
.@.@..@@@@@@..@@@..@@..@@@@@..@@@.@@@@@.@..@.@.@@@.@...@@@@@..@...@@.@.@.@.@@@@@@@@@.@.@@@@.@...@@.@@@.@.@@@..@.@@@@.@.@@@.@...@...@..@@
+
.@@..@@@@@.@@@@@@@@@..@@@@@@.@@..@@@@@@@@@@@..@.@....@@.@@@.....@@.@@@@@@@@.@@@.@@@.@@@@@@@@@@@@@@@@...@@@@.@..@@...@.@@@@...@@.@.....@.
+
..@.@@@.@@@@@..@@@@@@@@...@@@.@.@@@.@@@@@.@@@.@.@@.@@@....@@...@@@.@@@@..@.@@@@.@@@@@@@@@@@..@@@.@@@@.@.@..@@@.@@@@.@.@..@@@@..@@@.@...@
+
@@.@.@@@@.@.@@.@@@@.@.@@.@.@@@@@..@@@@...@.@@@@@@@...@.@@.@@@@.@@@.@..@@.@..@@@@@.@.@@.@@@..@.@@@@..@.@@@@@@..@@@.@.@@.@@@.@@.@@@@.@.@@@
+
.@@.@.@@@@.@@..@@.@@.....@@@@@@@@@@..@@..@@@@...@@.@@..@.@@.@@@@@@..@@.@@@.@@@@@@...@@.@@@@@@..@@@@@.@@@@@..@@@@@.@..@@.@@@@@@@..@@@.@@@
+
@@@@@.@@.@@@.@.@@...@....@...@@@@..@@@@.@@@@...@@..@@@@@...@@@@@...@.....@@..@@@..@@@@@@.@.@@@@.@@@@.@.@@.@@.@@@.@.@@.@...@@..@@@@.@@.@@
+
..@@.@.@@@@@@.@@@@@.@@..@@.@@@...@.@@.@.@.@@.@@.@.@.@@@.@.@@@@@@@@@@.@.@.@.@@@@@....@@.@@@@@@@@@@@.@@@.@@@@@@.@@....@.@..@@...@..@@...@@
+
@@@.@@.@@...@@..@@..@@@.@@.@.@.@@...@.@.@..@..@..@@.@@@..@@@@@.@.@.@@..@@@@....@@.@@@@.@@.@@..@@..@@@..@@...@@@@....@@@.@@@@@...@@.@@.@@
+
.@.@.@@@.@@@@@@@@@.@@@@@@@@@@@...@@@@@@@@..@@@.@.@@.@@@@...@@@.@@.@.@@.@@@@@@@@@.@.@@..@@..@@@@@@..@@.@@@@@@.@@@@.@@@@@@@@@.@@@.@..@.@@@
+
@@...@@.@.@@...@.@.@@@@@@.@..@@@@..@...@@..@@@@..@@@@...@@@@..@.@@.@@.....@@@@@@.@@@@@@@@@@..@.@.@@@@@@@@...@.@.@@@@@@@.@@.@@@..@.@@@.@.
+
@@..@@@@.@@@@@.@.@.@@@@@@@@@..@@@@@@@@@@.@@@@@.@@@.@@@.@@.@@@@@@@.@@@..@@@.@.@@@.@.@.@@@@@@@..@@.@@@.@@.@@@.@@@@.@@@@.@@@@@@@@.@@@@.@.@@
+
@..@.@..@@@@@..@@..@.@@@.@@@.@.....@..@@..@.@..@@@@.@...@...@@@@..@@.@.@..@@@...@....@@.@@@..@..@@.@.@@@@@.@.@@@@@@@@@...@@@.@@.@.@..@@@
+
@@.@@@.@@@@@..@.@@@.@@@...@.@@@@.@@@@@.@@.@@.@@..@@@..@.@@@@.@@@@@@@@@@@.@@@.....@@@@@@......@@.@...@@@.@@@@.@.@@@@@@@@@.@...@..@@.@@.@@
+
.@..@.@@@.@@@@@@.@@@@.@@.@.@.@@@.@@@@@..@.@@@.@@@@@@@@@@.@.@@@@..@.....@.@@@.@...@@@@@@@@.@..@@.@..@.@@@...@@@@@..@@@.@.@@@.@@@.@...@@@.
+
.@.@..@@..@@....@.@@.@..@@.@.@....@@@...@.@@..@.@@.@@@...@@@.@.@@@.@@.@.@@@.@@@@...@@.@@@@@@..@@.@@.@@@@.@@@@@@@.@@@@@@.@@@@..@@@..@@@@@
+
@@@.@@.@@@@@@@@@@..@@@.@@@@@@..@@@.@@@@@.@@@@@@.@.@.@.@@@@.@@..@@..@@@.@.@@.@..@...@@@..@@.@@@@.@.@.@@@@.@@.@@@.@...@@.....@@.@.@@@@..@@
+
.@@...@@.@.@@@@.@@@@@@@@@@@...@@@@@.@@@.@@@@@@@@.@.@@@@@@@@@@@@@.@@...@@..@@@@@@.@@.@@@@@.@.@.@@@@@@@@...@..@@@@@@.@@@@@@..@.@..@@@.@.@@
+
.@@..@.@@.@.@.@.@@.@@@.@@@@.@@@.@.@@@@@..@...@@@.@@@@@..@@@@..@.@@@@.@.@@@@.@@@@@@@@@..@.@@.@@.@.@@@@@@@@@@@@@@@@..@@..@@@.@..@@@@.@@@@.
+
.@@@@@@.@@@.@@@@@....@@@.@@@@@.@@@@.@..@@@@.@@@.@@....@@@@@@..@@@@..@.@@@@@@.@@@@@@@@@...@@...@@@..@@@@@@@@@.@.@@@@.@..@@@.@@@@@@@..@...
+
@@.@@.@@@@@@@@@@....@@@@@@.@..@..@.@.@@.@@.@...@.@@@@.@@.@.@@@.@@..@.@@@@@@..@...@@@.@@.@@@.@.......@@@@..@@@..@@.@@@@..@@@..@@@@.....@.
+
.@.@@@@..@.@@@.@@..@..@@@.@.@@@@@@@@@@@@@.@@@@@@@@@...@.@@@@..@@@@@@......@@@@@.@@@@@.@@@..@.@.....@@.@@.@@@@@@.@.@@@.@@@.@@@.@.@.@...@@
+
.@@.@.@..@@@@@.@@@@@..@@@@@@@@@@@.....@.@@@@@..@@@.@@.@@..@..@@@@@@.....@@..@@@@@@..@@@.@.@...@@@..@@@@.@@@@@@.@.@..@@..@@..@.@@...@.@@.
+
@.@@@@@@....@...@@@.@@.@@@@..@@@@@@@@@.@@@..@@.@@@@@@@..@.@@@...@.@@@.@@@...@@@@@@@@@..@@@@@@@.@@@.@.@@..@.@@..@@@....@@@@....@@@@@.....
+
@@@@..@@.@.@@@@..@@@@@...@@@@.@@..@.@@@@@@..@@.@.@.@@@@@@.@.@..@@.@@.@@@@.@@..@......@@@@@.@@@@.@@@.@.@.@@@@@@@@@@@@@@@@.@@@@@@@@@.@@@@@
+
...@..@@@@@@@..@@.@@@@..@.@@.@@@@@@.@@@@@....@@..@@.@@@.@.@@.@@@.@@@@.@@@.@.....@@@@@@@@@@@@@@..@.@@@@.@@@@.@@..@.@@@@.@@@@@.@.@.@@@@@@@
+
@@@@.@@@@.@.@@@@@@@@@...@..@@@.@.@@@@.@@@.@..@@.@@@@..@@@@.@@@@@@@@.@.@@.@@@@.@@@.@@@@@..@@@.@.@.@..@.@.@.@@@@.@@@@@@@@..@@@@@..@..@.@@@
+
.@.@@@.@@..@@@@@..@@.@@@.@@.@@.@@@@@.@..@@@@@.@@@@@.@.@.@@@@@.@@..@@@@.@.@..@@..@@@.@@.@..@..@@.@..@@@@.@.@.@.@@@@@@@@@.@@@@@.@@@@..@.@@
+
@@@..@.@@.@@@.@.@@@...@.@@@.@@@..@@..@@@..@.@@@...@..@@@.@@.@...@@@.@@.@@@.@@.@@@.@@@@.@@@@@@@@.@...@.@.@.@@@.@@@.@@@@@@@..@@@.@@@@@.@@.
+
@@..@@@@@.@@@@@.@@@@@.@@@@..@@@@@.@@@.@@.@@@@@...@..@.@@@@@@@.@@.@@.@.@@@@..@@@@.@@.@@@.@.@...@@@..@.@.@@@.@@@.@@.@..@@@@@..@@@@.@.@@@@.
+
@@@..@.@@@@..@@.@@@.@.@@..@@@@@.@@@.@@@.@..@@@@@@@@.@@@@@@@.@@.@@@@.@@@.@@@@..@@@..@@@..@@@@...@@.@.@@@@@.@@.@@.@@@@@....@.@@.@@@.@@@.@@
+
@@.@@@..@@@@@@.....@@@@.@....@@@@.@@.@@@@@@.@@@.@@.@@@.@@@.@@@@@@@@.@..@@@@@.@.@@@@@..@@@@@@@@@....@@.@@@@.@@@@@@@...@.@..@@@@@@.@@@@@..
+
@@.@.@@.@@@@@@@.@@@@@@@@@@.@..@....@@@@..@.@@@@...@@.@.@@.@@.@@@@..@@@@.@..@@..@@@@@..@@@@.@.@.@..@@.@@@@.@...@@@@@@..@@.@.@@@..@@@@.@@@
+
@@@@@.@@.@@@.@@.@.@@.@@@.@@.@@@.@@...@@.@@@@@..@@.@@@@.@..@@@.@@.@@@@@@@@@.@.@@@@.@@.@@@@.@@@@@@..@@.@.@..@@@@@@@.@@@..@.@@@@@..@....@..
+
.@@@@@@..@@.@.@@.@@@@..@.@.@@@@@@@.@@.@..@@@@@@@.@@@@@....@.@..@.@@@@@.@@@.@.@..@@@..@@@..@@@@@@@@.@@@.@.@@@@..@.@...@@@@@@@.@@@.@@...@@
+
@@@@..@.@..@@@@@@.@@..@@..@.@@@.@@@@@@@@@@.@@@@@@@@@@.@.@@@@@.@@@...@@.@@@@.@@.@@.@.@.@.@.@@@...@@@@@@.@.@@.@.@.@@.@@@.@@@@.@.@@....@.@.
+
@.@@@@@.@@@@.@@..@@@.@@@.@@@@@@..@.@@.@@@@@@@@.@@@@@@..@@@@@@...@@..@.@@@.@@..@@@@@.@@@.@.@.@.@.@@@.@.@.@..@@..@@@..@@...@.@@@@@@@.@@@@@
+
@.@@.@..@@@@@.@.@@.@@.@@.@....@@@@..@@..@.@@.@..@@...@@@@@@.@@.@@@..@@@@@..@@..@@@.@@@....@@@@@@..@.@@@@.@@@....@@...@@@@...@@@@@@@..@.@
+
@@@...@@@@@.@....@@@@@@@..@@@@..@@@@@.@@.@..@@@@@@@.@.@.@@.@.@@.@.@..@@@@@@@@@@@.@..@..@@@@@@@@@@@..@..@@.@@.@@@@.@@@@@@..@@@@.@@@..@@@@
+
@@@.@@@@@@@@@@.@@.@@..@...@.@..@.@...@@.@..@@@@@..@.@@.@@@@@@@@...@@@@.@.@.@@@..@@.@...@@.@@@@.@@@@@@@@@..@..@.@.@.@.@@.@..@@...@.@.@...
+
.@@@@@@@..@.@..@@@.@@@@@..@@.@@.@@@.@@@@@@@.@@@@@@@@..@@@@.@@.@@.@.@@..@@@@.@@@@.@@@@@..@@@@@@@...@@@@.@@.@@@@.@@@..@@@@@@..@@@@..@..@@@
+
.@..@@@@@@.@....@@.@@@@@..@@@@..@@.@.@@@@...@@@@@@.@@@.@.@..@@@@.@@@@@...@@@@@@.@..@.@@.@.@@.@...@..@@@@@.@@@@@@.@@..@..@@@@@@@@@..@.@.@
+
@@@@@@@@@@@@.....@..@@@@@.@..@@.@.@.@.@@@.@.@@..@..@@.@@@@..@.@@@@@..@@@@@@..@.@@.@@.@@@@@@@@.@....@.@@@@@.@...@.@@@.@.@.@.@@@@@..@@@@@@
+10
day_4/mini.txt
···
···
+
..@@.@@@@.
+
@@@.@.@.@@
+
@@@@@.@.@@
+
@.@@@@..@.
+
@@.@@@@.@@
+
.@@@@@@@.@
+
.@.@.@.@@@
+
@.@@@.@@@@
+
.@@@@@@@@.
+
@.@.@@@.@.
+178
day_5/5.c
···
···
+
#include <stdio.h>
+
#include <stdlib.h>
+
#include <string.h>
+
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
+
#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y))
+
typedef struct {
+
long long min;
+
long long max;
+
} tuple;
+
+
+
tuple* remove_element(tuple* arr,int i,int* len) {
+
for (int j = i; j<*len; j++) {
+
arr[j] = arr[j+1];
+
+
}
+
arr = realloc(arr, (*len-1)*sizeof(tuple));
+
(*len)--;
+
return arr;
+
+
}
+
+
+
+
int main(int argc, char* argv[]) {
+
+
tuple* limits_arr = NULL;
+
int limits_arr_len = 0;
+
+
FILE* f = NULL;
+
ssize_t nread = 0;
+
size_t size = 0;
+
char* line = NULL;
+
long long start;
+
long long end;
+
long long ingridient;
+
int fresh_ingridients = 0;
+
int fresh = 0;
+
unsigned long long total_fresh_num = 0;
+
+
f = fopen(argv[1], "r");
+
+
while ((nread = getline(&line, &size, f)) > 1) {
+
printf("%s",line);
+
+
// add to the list of min and max values in typle format
+
//
+
start = atoll(strsep(&line, "-"));
+
end = atoll(strsep(&line, "-"));
+
int add_new_entry = 1;
+
+
//check overlaps ~ish~ if new range is bridging two other ranges it still results in overlaps.
+
//however reduces the original amount of ranges.
+
if (limits_arr_len>0) {
+
for (int i = 0; i<limits_arr_len; i++) {
+
if (start<=limits_arr[i].max && start >= limits_arr[i].min) {
+
//[a,start,b],end
+
// if
+
if (end >= limits_arr[i].max) {
+
limits_arr[i].max = end;
+
add_new_entry = 0;
+
break;
+
} else {
+
add_new_entry = 0;
+
break;
+
}
+
+
} else if (start < limits_arr[i].min) {
+
if (end > limits_arr[i].max) {
+
limits_arr[i].max = end;
+
limits_arr[i].min = start;
+
add_new_entry = 0;
+
break;
+
} else if (end<=limits_arr[i].max && end >= limits_arr[i].min) {
+
limits_arr[i].min = start;
+
add_new_entry = 0;
+
break;
+
}
+
}
+
}
+
}
+
if (add_new_entry) {
+
limits_arr_len++;
+
limits_arr = realloc(limits_arr, limits_arr_len*sizeof(tuple));
+
+
limits_arr[limits_arr_len-1].min = start;
+
limits_arr[limits_arr_len-1].max = end;
+
}
+
}
+
+
+
// behold, as i am about to write the worst overlap search algorithm known to humankind.
+
int large_repeat = 0;
+
+
do {
+
+
large_repeat = 0;
+
// as long as we do mergets, we run the whole thing again.
+
+
for (int i = 0; i<limits_arr_len; i++) { // limit_arr_len will be changing as this goes i have no idea if this is optimal
+
start = limits_arr[i].min;
+
end = limits_arr[i].max;
+
int repeat = 0; // if a merge happened, we will set repeat to true, and so will run the cycle again to check for new overlaps
+
do {
+
repeat = 0;
+
for (int j = i+1; j<limits_arr_len; j++) {
+
//this is horrible
+
// we go over every entry in limit_arr.
+
// if another entry has one of the ends inside, we set the other end equal to the appropriate value, whichever gives the largest range.
+
// then delete it.
+
if (limits_arr[j].min >= start && limits_arr[j].min <= end) {
+
limits_arr[i].max = MAX(end, limits_arr[j].max);
+
limits_arr = remove_element(limits_arr, j, &limits_arr_len);
+
repeat = 1;
+
large_repeat = 1;
+
j--;
+
}
+
else if (limits_arr[j].max >= start && limits_arr[j].max <= end) {
+
limits_arr[i].min = MIN(start, limits_arr[j].min);
+
limits_arr = remove_element(limits_arr, j, &limits_arr_len);
+
repeat = 1;
+
large_repeat = 1;
+
j--;
+
}
+
else if (limits_arr[j].min <= start && limits_arr[j].max >= end) {
+
limits_arr[i] = limits_arr[j];
+
limits_arr = remove_element(limits_arr, j, &limits_arr_len);
+
repeat = 1;
+
large_repeat = 1;
+
j--;
+
}
+
}
+
}while (repeat);
+
}
+
+
+
}while(large_repeat);
+
+
+
+
+
+
+
for (int i = 0; i<limits_arr_len; i++) {
+
total_fresh_num += limits_arr[i].max - limits_arr[i].min +1;
+
printf("min %lld, max %lld, num: %lld\n",limits_arr[i].min,limits_arr[i].max,(limits_arr[i].max - limits_arr[i].min +1));
+
}
+
+
//not we go through ingridients
+
+
while ((nread = getline(&line, &size, f)) != -1) {
+
printf("%s",line);
+
fresh = 0;
+
ingridient = atoll(line);
+
for (int i = 0; i<limits_arr_len; i++) {
+
if (ingridient >= limits_arr[i].min && ingridient <= limits_arr[i].max) {
+
fresh= 1;
+
fresh_ingridients++;
+
// printf("ingridient %lld is fresh in range %lld-%lld\n", ingridient,limits_arr[i].min,limits_arr[i].max);
+
break;
+
}
+
}
+
+
}
+
+
+
+
printf("total %d fresh ingridients",fresh_ingridients);
+
printf("total fresh ingridients possible: %lld\n",total_fresh_num);
+
+
free(limits_arr);
+
+
free(f);
+
free(line);
+
+
+
return 0;
+
}
+1178
day_5/input.txt
···
···
+
213743501161200-213743501161200
+
221359789392478-222960432116258
+
553905700373062-561794342755365
+
388351876706917-388578461376678
+
263685821321516-270464997549766
+
384957836075964-385057316204755
+
86932924454422-88726115602910
+
64713316693400-65189382496202
+
68179610157787-68454649435444
+
143154545648377-145980913110898
+
390250299542523-390843409397977
+
392162789636707-394167531415509
+
467795551515047-469145316638624
+
73412860995201-78319783604609
+
174577844186025-180222947242739
+
34889394659118-37852045203256
+
506719917120116-506719917120116
+
64999889315593-65189382496202
+
62511033442122-62882231057991
+
169629548448978-169629548448978
+
195991726717561-200347594718591
+
80800364897743-82410540424990
+
157966143122749-158625789879543
+
414893276002289-420734433214551
+
468854880571347-470178150823398
+
293047529057561-293047529057561
+
526293793744803-526800435871324
+
154610263545675-155018832807006
+
85676500485010-87494001551296
+
404052468013478-411059540873663
+
529805857574316-530354749652142
+
282126028703430-287392631951184
+
536612716581558-542001885354658
+
224389325429033-225956850054114
+
389327354686290-389941649666180
+
226458176996215-227998751964573
+
466681105242973-468035461798180
+
132182495488136-136864510598769
+
158625789879543-158943957000511
+
222498723695457-223722626496659
+
24396986945805-29009989981082
+
387070084421471-387699738663307
+
463761550427134-465101663712718
+
244484473250009-249824444617715
+
235682381324440-239428507922589
+
356542431952285-357218504633271
+
528809160802420-529163494010802
+
203275761047276-207893046967514
+
65189382496202-65740304733466
+
84564501332038-86342507935742
+
528809160802420-529739126171581
+
430824287436458-430824287436458
+
270464997549767-270464997549767
+
73412860995201-73412860995201
+
203275761047276-207893046967514
+
465765531974637-467339424840641
+
88308683283200-90314897336701
+
506719917120116-509378158464998
+
154610263545675-155018832807006
+
436351058276905-441549428537929
+
390250299542523-390501802123222
+
464766089052130-465995972804612
+
153723748856595-154247928476913
+
524957458539564-525444885761624
+
193355047594087-195991726717559
+
68057027039766-68454649435444
+
114292754379846-114292754379846
+
476176387291714-479287347759176
+
68727093315072-69054421292865
+
374010991378735-378095042001312
+
396702787271742-398555495412596
+
92985559435331-99083983384255
+
524317721420090-524645436296520
+
470916081729043-472406223184007
+
307193970359996-309957481846034
+
83208072709351-85336482970086
+
61908006035935-62767933777530
+
12440214380075-19413829756369
+
158268094987535-158625789879543
+
323855611951188-327225842492665
+
232121351950005-235682381324439
+
104580961113313-109652180451852
+
155719620755384-156378640409574
+
225242642256272-226838958939168
+
126345620041269-129628037616258
+
272979306019768-272979306019768
+
229571449179868-230955409924473
+
15572428843108-19413829756369
+
486438625661094-489174884685392
+
399063478386186-400626043814074
+
61434917885505-61908006035935
+
442807002499434-447467590937981
+
153470274802250-153891356149723
+
548528649335253-552132613556960
+
302406550101741-307193970359994
+
284836416410676-290905691766532
+
134736737710827-138821293926430
+
524645436296520-525444885761624
+
347299925469182-350731461622425
+
333121507005172-333121507005172
+
257633973479609-259311991697339
+
418350619486212-420734433214551
+
523873015780814-524032209716334
+
424331863324814-430824287436457
+
143154545648377-148152467497972
+
156770859353106-157228370844559
+
523401105399726-524032209716334
+
3672218268426-9069958349825
+
41190120499524-48710502110828
+
171431709160547-176780839877720
+
65740304733466-66283299959280
+
3672218268426-9069958349825
+
157444284967581-157743465985657
+
99083983384256-99083983384256
+
114292754379847-118122243442587
+
32783805912506-34889394659117
+
495774309849622-495774309849622
+
385597213338484-386130309524989
+
66422129062863-66711994098586
+
390501802123222-390843409397977
+
227420995218497-229137292369316
+
518765954978807-520809013033287
+
81872566000969-83813851796454
+
272979306019768-280055074059068
+
394469512488834-396279958092492
+
469546011173175-471346897231698
+
442807002499434-451270889383530
+
184738598610317-187210601572675
+
364359970290004-369109081626630
+
327225842492665-327225842492665
+
353087698181504-361406479744402
+
293047529057561-299710639297794
+
486438625661094-489174884685392
+
472788183962691-480272823246663
+
152000130191943-152486238796869
+
386858817856261-387699738663307
+
462503261552047-464039809812541
+
183175626133351-189172211000972
+
163807315460788-169629548448978
+
393534536834350-394918686174827
+
344389995827602-347299925469181
+
159774306485562-160419960771595
+
544514849402253-552132613556960
+
65400483278322-66283299959280
+
63641646788533-63945948546021
+
228387323493940-230123402570745
+
223334527687062-225118219054282
+
398001413033472-399528430973758
+
389120143291068-389327354686290
+
251886663550811-259311991697339
+
69054421292865-69216943568303
+
109652180451852-109652180451852
+
53011962076696-56344039055008
+
400162615237818-402020110303086
+
43204303716398-46879070810322
+
314744608126757-318669297711175
+
432956413748504-436351058276903
+
374010991378735-379580541653265
+
53011962076696-58576758868523
+
151246265148187-151690444980057
+
67160465476009-67649438641309
+
333121507005173-341135415342898
+
456177793236387-461879349449355
+
395508284503006-397494347386228
+
533093622413503-538889692659981
+
561794342755365-561794342755365
+
515616143391792-518765954978806
+
69696292125615-70040914201079
+
68727093315072-69401400390266
+
495774309849623-500237151028475
+
369109081626631-369109081626631
+
529163494010802-529436944344583
+
404052468013478-411059540873663
+
121847024509459-126345620041267
+
522880293422404-523179474172233
+
158459878825465-159131956260867
+
213743501161201-219471291456959
+
+
494837294376908
+
435660505746994
+
99786817997391
+
472909760977579
+
463484249547475
+
273865746097567
+
546948282990871
+
313905748059736
+
389220642255587
+
264910144325219
+
194634550937143
+
452503195637112
+
38664030641468
+
8643898228674
+
408947325836900
+
56337977420387
+
174507776974605
+
140836347671248
+
47631986998014
+
235031396283281
+
343857671631037
+
252684431369877
+
561260764726582
+
13377139290760
+
335659611077426
+
305254801428350
+
23068609919756
+
358157740175632
+
336124567002906
+
499856499644500
+
245581152411526
+
4607628398578
+
113989649477446
+
261695855054656
+
54145308170978
+
23643219088083
+
288564055768829
+
76218205231423
+
383056969666651
+
206049039348792
+
362866693952230
+
447390838499260
+
269419273985840
+
495173666576593
+
475030519522818
+
12103270345560
+
107629037149479
+
393860930903512
+
141626771549297
+
250924689541736
+
5883371952028
+
423912703644535
+
302546348630570
+
436937082048731
+
494664825705194
+
448188584703582
+
254291468010192
+
221243211979987
+
350545951774103
+
393592820188728
+
32794726074237
+
215351251387887
+
18789663384866
+
546887929110328
+
229634965624793
+
26225821034784
+
175436974010271
+
330555143105279
+
540559732802993
+
146048634742198
+
457763885033022
+
255063532513955
+
523233693563579
+
520111841799148
+
554058843495886
+
318786207342405
+
377363192140595
+
99808601402762
+
18925946943601
+
114133861116596
+
466658719803329
+
239088721753669
+
437089455846288
+
368941022635265
+
396739332676075
+
136405831558024
+
56176226086142
+
89188104356081
+
522069015255255
+
321118023164859
+
9031526519848
+
426715696390470
+
525707768388028
+
152077432064905
+
409969738179310
+
413539799236118
+
394325762684221
+
152819990377936
+
394401954863928
+
126602621671422
+
504598064766126
+
458638902263336
+
326459124993522
+
419281996008737
+
490842973818114
+
146271762366396
+
22503238293943
+
537920215050605
+
559195645649780
+
53366531225879
+
147488127813515
+
87770751897444
+
355793262392237
+
29238551733499
+
480135691758946
+
538362412784828
+
450359874870348
+
173926045560484
+
401263245119900
+
469761746266259
+
517263368251455
+
49071456365129
+
137992440004065
+
414963191734774
+
478773793672052
+
323893963358308
+
346609563056966
+
528752351256778
+
296671648977112
+
374729839695085
+
454860071033636
+
467162739020170
+
507732258880396
+
230301737270720
+
289177397090688
+
528799065232012
+
165854989903172
+
406394881004817
+
481447401833724
+
516889448667819
+
554061619704684
+
392059778405048
+
175159258924467
+
463421480856860
+
544635640616828
+
309477164734560
+
231037323484799
+
340860687007580
+
448875290293314
+
127397009585739
+
246830806645075
+
518431937476941
+
3732761639887
+
147285882576699
+
396422419852454
+
27478056069416
+
286717356301433
+
236893740878667
+
290016489594859
+
298887079519963
+
461497186313441
+
235329424183967
+
556647097855604
+
261197438978660
+
118073942807968
+
285360172331044
+
169445091271339
+
418603412598323
+
416679342584654
+
163804209188500
+
167161416515668
+
300589656673348
+
84155065043548
+
298520045126168
+
154549118044364
+
509513039742643
+
406174906841001
+
239965534880610
+
264241638530762
+
326907134654161
+
148801284014366
+
252845684706962
+
538160202161003
+
396627759613700
+
546079642043457
+
75651194219911
+
432586855556463
+
96802942627830
+
25041440445919
+
107116271154358
+
303702054634544
+
398781252434901
+
503172397854082
+
379315602131933
+
236979084549993
+
451397490649019
+
279868894290565
+
524617891089775
+
136961187947989
+
136429946001689
+
76950346304543
+
306928041509744
+
312915314588031
+
298998035287402
+
34760223536011
+
446404886235072
+
197388407848521
+
333191332684099
+
221740779665886
+
309416371878888
+
158477659448444
+
516680333458799
+
44853377628995
+
278888606895658
+
278420982927684
+
175703803052425
+
470568172737830
+
236084777219214
+
397984966672806
+
473425480788950
+
522025578442624
+
427215517454322
+
198299794101146
+
349413337275427
+
125618902680777
+
89314589371888
+
368825410886351
+
330191130666564
+
387752207575580
+
440138070603836
+
227890254261097
+
44488299718077
+
29751481585745
+
25028650437464
+
547595768878
+
174236076333058
+
133712293361829
+
540096229159911
+
360206980499620
+
258011259781602
+
549364690524601
+
10091206687143
+
470374190930049
+
179075060473731
+
377242979825409
+
352690157476711
+
278488530349263
+
384422855896670
+
49811728480863
+
267349043407318
+
489564767823505
+
73008037929843
+
124299946430397
+
217882757871908
+
108999668545307
+
20703850023939
+
496246608935789
+
541069367118771
+
305122372020761
+
115492357896852
+
193492845516396
+
417751256829819
+
285658063335359
+
246744409069648
+
351755993275651
+
98127769000175
+
482372026370776
+
457710650905360
+
18026862445928
+
108534833075078
+
169824794939485
+
559142599641987
+
2085564400281
+
309173175821638
+
456153160917877
+
293414602125014
+
547198783459634
+
76444012948089
+
529290472539497
+
355365766193271
+
287986193982431
+
173227908416238
+
551806007985042
+
186471826913763
+
121801161824669
+
97800001698241
+
342494173599273
+
12505387404524
+
306058580091348
+
318867143656603
+
428585013529288
+
256312606382787
+
366239026804887
+
51539372147365
+
66134064995673
+
79041166640102
+
75784996215689
+
287522598289639
+
332881462196418
+
520053787194950
+
297834256156760
+
46395714814142
+
478528279216500
+
283333063204819
+
245859459924907
+
473660316927145
+
307732071267576
+
277227366442821
+
390581386350646
+
376021035764980
+
463341164063984
+
185816349933763
+
241632149492477
+
289330190978899
+
476909402388343
+
458026449622767
+
257790586910592
+
174516863536188
+
285936912577790
+
401130002886351
+
458803825528219
+
478494606977638
+
345725593786871
+
138388443036459
+
282300697387892
+
71713317490775
+
556366167372211
+
456995326804110
+
247592812172057
+
494021760846937
+
371537593769295
+
170534224078136
+
42472063541628
+
8253779665434
+
372548475874699
+
9789888924117
+
405774436581168
+
108848101351560
+
356331145749819
+
102658847092504
+
497003148825168
+
202359692308749
+
378179874893748
+
288190427639734
+
67215625812110
+
93836607837463
+
39963768403407
+
461513540873237
+
54758410728278
+
469151923616890
+
166921111216013
+
172094825320701
+
401988768026836
+
72359177616839
+
73996848337616
+
156027952163011
+
80550172897080
+
272407697592724
+
319010392655020
+
105513600420820
+
162726193523288
+
535986651356692
+
436612082177264
+
212069750441845
+
524009300711044
+
3906518069903
+
511762793424455
+
435458211326830
+
182645647469308
+
386479321392427
+
547154129474513
+
189861778530296
+
538429181270504
+
507550826426915
+
444356931927172
+
358258263704862
+
479009393218306
+
124637474760302
+
48105008177613
+
79260117487309
+
174911990213797
+
500298985584761
+
326954412173914
+
295336439807937
+
395949666733917
+
443370872863471
+
318697699565865
+
427947513844159
+
511045858671785
+
203280107417109
+
6700597080245
+
348384357592517
+
374376031983939
+
260753794641180
+
56191981851288
+
97355512125554
+
60506801192793
+
84565744031887
+
488814694065249
+
161260860939794
+
337637633215227
+
173783730103701
+
142086002223119
+
207574240730436
+
436871109820151
+
461408177154461
+
382258137884632
+
440730273321561
+
159229941436332
+
166460057869524
+
15683339825778
+
68381063771276
+
143598887912420
+
96653310252281
+
234747364980280
+
128261783917087
+
103021515222116
+
477480443511452
+
114836796393351
+
176449720440695
+
275945902507716
+
99018309358801
+
254514953778996
+
471192665544357
+
358710048656100
+
469155211803836
+
203392280667538
+
192303210311382
+
15133914751416
+
263057847298987
+
304201025028695
+
109141830415556
+
62185120729939
+
347423458432248
+
1593697889240
+
4336364389626
+
249534740021091
+
245022245155666
+
378597629224414
+
217930033733263
+
47800102644184
+
138075535369981
+
357729021453863
+
349551010555520
+
414887370914099
+
395344795419827
+
521156568954976
+
272534129891028
+
371964108827244
+
227896489799466
+
249887136596757
+
16884793154524
+
317821877138354
+
81898773447364
+
443073486047140
+
247847253283552
+
315251502366423
+
102188123805733
+
303075733196562
+
557745658198349
+
206799637439489
+
451334768708210
+
97037065675992
+
257278920415657
+
56437781998953
+
44288968074472
+
113292234978530
+
151922731113530
+
391052761602056
+
267944508540614
+
343200180160422
+
288399431199285
+
93273619500930
+
75721595033881
+
550871884021335
+
149604081990381
+
512742597104092
+
455839846395368
+
445378642797525
+
16014807365216
+
30695616425451
+
43049956446441
+
270535131219725
+
4693914659902
+
335914961222544
+
272323132654404
+
528950169623633
+
445047908810129
+
419646793721765
+
213936570355528
+
395125528944776
+
141671410426457
+
453372985670055
+
222478883363391
+
439875818936907
+
303299784024612
+
56388748078988
+
318257306432227
+
215338536256842
+
532406515670856
+
172904036406734
+
25079121055090
+
326898571184918
+
383895798528344
+
416303301754527
+
490848856553941
+
320988109028453
+
223845273980771
+
94966656581935
+
190179292225210
+
419218075147010
+
230508834223536
+
548901527044748
+
297819409510702
+
464859798986245
+
118169686522273
+
207497906150129
+
512346201207054
+
1158097103310
+
459046195527588
+
186759288128078
+
96944724188350
+
392594151513159
+
234466454560389
+
68623818756541
+
246226233532203
+
114619533725580
+
493869659303676
+
313637481743263
+
534137643816612
+
264642463242404
+
377529710233522
+
87155833011856
+
35770041890308
+
516647262550256
+
265354534106177
+
406005422023368
+
272642225302759
+
85930020547676
+
284783735206766
+
436630505082911
+
15951172389804
+
444797637969258
+
97363222190880
+
133445802169347
+
272305925709773
+
548458915170143
+
430806456961455
+
245507121943314
+
160249013035249
+
527709486106910
+
367001001737708
+
518162583986624
+
183225672376704
+
296993625361143
+
231639876629108
+
407962526353092
+
67393637407153
+
85833159363453
+
49339824913993
+
28400800168478
+
15327853771250
+
354370364188649
+
201574969117946
+
552709965745032
+
213632623033074
+
312504618210213
+
327125906582053
+
144452289727950
+
203987516214332
+
479509321715515
+
88372152498413
+
307473270739765
+
245675091013202
+
336432122026158
+
41324911865648
+
458457956208945
+
542446938157188
+
89589403513696
+
24781388955739
+
305437870582706
+
348288413987487
+
431709614168751
+
276141784590342
+
466981918128601
+
372707468387142
+
102568457788486
+
349718918963076
+
104093272014233
+
265342553887934
+
339579325422624
+
516419655842307
+
325305930926652
+
409419378044930
+
290691078464777
+
538500176586611
+
104911135244051
+
460656158588869
+
19085848624265
+
550573802219161
+
22745479349256
+
65579588599422
+
254111896868958
+
43567781834275
+
90573006423916
+
45561710350423
+
149209374428586
+
446575143276470
+
550306254135662
+
181025204938463
+
97330974107531
+
379402147450993
+
241506356892172
+
168713148733973
+
48466869897953
+
528008864607078
+
393115054851961
+
165787328717415
+
287310392177289
+
551681935207092
+
122167522220188
+
132105403007176
+
317705294863715
+
109910998040619
+
446000068071441
+
235531799669044
+
146356734397746
+
47298585536802
+
42273110218235
+
444603089915716
+
241465851395725
+
109573813906530
+
231274862902914
+
537319538622584
+
157414189612508
+
221642178690563
+
245610078329995
+
528325158959332
+
145325570078081
+
12079144762793
+
531588757842283
+
547678261102872
+
127153144140359
+
305742973421716
+
8011027076203
+
477661996505800
+
466477744603636
+
403328720663418
+
507927453967381
+
538069184299013
+
214768582354766
+
137397594359581
+
187613809609389
+
357880338028129
+
433487759782156
+
487471717210901
+
180006387715886
+
326002409470383
+
76444888756813
+
444254908195532
+
148806304277047
+
479844016063762
+
330052487223106
+
240176280384525
+
411385336296896
+
354792309945488
+
305594460678296
+
40995915706785
+
39394966701507
+
89548663321944
+
548307369875750
+
488506179147436
+
121924775887669
+
148038179339071
+
338537681759411
+
468669066514854
+
184481225100823
+
360687191874324
+
489917124737512
+
183480059346292
+
210032333691837
+
415012143178873
+
425782508042329
+
206536230476631
+
69446550967892
+
456998663839841
+
487684484253300
+
132781025275839
+
51299076795592
+
214996080875736
+
395997740442896
+
229801883331266
+
410891218970154
+
44342335653173
+
468644958332092
+
133694753338744
+
15324257575984
+
382577259399786
+
371176455304440
+
273103366140744
+
473864877490707
+
348672546656929
+
346325654887690
+
204798752414288
+
205451628438977
+
2248039977575
+
236557577288755
+
246505641659146
+
441573876295181
+
554299527848615
+
368147889057080
+
337980441560978
+
108843538156956
+
214211872574501
+
222501948465259
+
199340300341502
+
57751894058447
+
387301004745509
+
555684169567228
+
444161010809973
+
44274057183558
+
457484483808702
+
299118893791597
+
278770127821305
+
19364490860923
+
269877412509975
+
362138446785346
+
407915043906975
+
110542007795632
+
351373538617793
+
178613301456939
+
419145884127302
+
337724653316807
+
273150978486771
+
314964765668119
+
471968715772891
+
357610841553825
+
22133316659832
+
208155444980927
+
509198516401694
+
411253902813469
+
227031471430627
+
446602597121154
+
271273314812585
+
415798095859971
+
561190340020923
+
336975452894927
+
143875972527564
+
290796527780450
+
562533759378622
+
116821329895853
+
386671228899496
+
317327089314224
+
183632275635096
+
273373429456521
+
129515707014799
+
110676169506793
+
233033183096270
+
318333250308412
+
112033225565880
+
519454679823055
+
55656519297819
+
377451642372971
+
338691010626694
+
64777634972758
+
436208855797645
+
415156993450774
+
98020363049302
+
42655570576535
+
34400406221986
+
290610597270086
+
537265183350038
+
400911093968583
+
525318854899855
+
248415410979120
+
418842405171486
+
411566017836771
+
425657631898340
+
354259572729994
+
268446068326870
+
296070266615673
+
136227729615321
+
120047629033730
+
406964876482178
+
137521850223080
+
92611826977927
+
331877322852943
+
479781531711867
+
266206661846269
+
347578536598669
+
89240023766690
+
529174586943339
+
84839756252558
+
419979950328255
+
547500684314327
+
280045500991504
+
215483226398738
+
441596111446605
+
302694962708225
+
273892147226306
+
482132415192397
+
102702250742943
+
223089452700980
+
457807726448257
+
384562645765746
+
277781338567261
+
439822548783525
+
183776192242043
+
301325514128398
+
70021389620076
+
336918674037773
+
68295253195049
+
543695343432503
+
111249314175356
+
7690585447477
+
309542200032252
+
103628229231634
+
73718547163740
+
159803357847773
+
430786036978468
+
415204380827690
+
48045918311352
+
517000580666897
+
325917367515042
+
426507802694299
+
526144643790360
+
513035119218192
+
315794526632610
+
285574806997324
+
276841825017615
+
179635895379213
+
325755181311001
+
524060550844191
+
91712045450912
+
77966935288136
+
264428541284938
+
524847707306416
+
111105350913783
+
346301400064114
+
556613923238451
+
472099250670418
+
371207522154824
+
451823217286595
+
357256514424263
+
372048331394790
+
434691928665739
+
560829027337169
+
16136507872053
+
282364153898411
+
154085261680230
+
254154288276590
+
514028216189442
+
545333427544222
+
476497025736792
+
242355804527146
+
561598070577352
+
118400176536972
+
375682605796962
+
399133654154343
+
201628057251316
+
217572056496332
+
533395907107346
+
47345345286797
+
7408156832896
+
522616875123776
+
349641074502968
+
345818104113036
+
438218046900677
+
31628293548083
+
351605047809133
+
359444834536162
+
290228149997469
+
135905576277424
+
84612883197372
+
189982680788991
+
450138577332891
+
136439932241119
+
187799240856577
+
68578204608926
+
134334871260185
+
291561127203042
+
273974000047959
+
174624183735646
+
18383048241682
+
556252702946152
+
387793821456466
+
298566510001603
+
172815513476927
+
33902411018515
+
555994633611969
+
289184312520430
+
436658715830883
+
470864228533567
+
164090356849964
+
98782919658558
+
97942176959956
+
112901798817150
+
35208936896656
+
14353996552438
+
471473766116537
+
480180311744636
+
499204584847002
+
80611198707461
+
544525064031093
+
229232247132363
+
162849540618442
+
492975074294900
+
166448581711132
+
114764389841759
+
63292143206629
+
98480857792796
+
157851646383721
+
253474206387522
+
354978928842494
+
278747160618146
+
4530472691471
+
58079854789591
+
66267035140727
+
311056476691269
+
557762351202903
+
197758525541161
+
437268149565806
+
313236543511296
+
302427918967126
+
400691760604857
+
399668277458282
+
223494949882340
+
46570814488202
+
204451824914507
+
345698026918708
+
497928342405563
+
325773432317635
+
93545891401889
+
5585896974427
+
356380459100139
+
264230752597112
+
426543387431711
+
387146966449194
+
41228535640790
+
509087992955574
+
489729610164135
+
416479576139310
+
28845488051941
+
522009267546744
+
271000859618955
+
283750554123411
+
410419160607446
+
185499005938127
+
471551666427620
+
58626479872089
+
42972264624877
+
524613104175528
+
27852888528989
+
237204455550497
+
288326266418244
+
63065149157014
+
553756535652764
+
282436178910576
+
88402747933723
+
400823646916103
+
223363824772513
+
525071673732969
+
537259982319875
+
276682773539699
+
398451590620752
+
245054501306549
+
464479921104086
+
457043633831813
+
516586215954486
+
64884357708824
+
56128129974389
+
152412022204482
+
222723024889271
+
199274377091885
+
477985828686667
+
461997935560695
+
544878475633187
+
173350091865783
+
28043191569632
+
550154791633306
+
95957091506410
+
148749440627953
+
363647261163259
+
137891120244035
+
292700540347170
+
7279385311717
+
127148348879474
+
470000742634139
+
144166016173754
+
394128803397657
+
361074837077952
+
126989419234613
+
420362060242891
+
404091808985110
+
118996430880710
+
108513159619332
+
245110820984873
+
404371687077287
+
92684280085493
+
109303133175033
+11
day_5/mini.txt
···
···
+
3-5
+
10-14
+
16-20
+
12-18
+
+
1
+
5
+
8
+
11
+
17
+
32
+25
day_6/6.c
···
···
+
#include <stddef.h>
+
#include <stdio.h>
+
#include <stdlib.h>
+
+
+
int main(int argc, char* argv[]) {
+
FILE* f = NULL;
+
char* line = NULL;
+
size_t size = 0;
+
ssize_t nread = 0;
+
+
f = fopen(argv[1], "r");
+
+
while ((nread = getline(&line, &size, f)) != -1 ) {
+
printf("%s",line);
+
}
+
+
+
+
free(f);
+
free(line);
+
+
+
return 0;
+
}
+5
day_6/mini.txt
···
···
+
123 328 51 64
+
45 64 387 23
+
6 98 215 314
+
* + * +
+