]> aoc.elinar.fr Git - aoc_2025/commitdiff
day01 + folder setup
authoralex <>
Mon, 1 Dec 2025 12:21:27 +0000 (13:21 +0100)
committeralex <>
Mon, 1 Dec 2025 12:21:27 +0000 (13:21 +0100)
.gitignore [new file with mode: 0644]
Cargo.lock [new file with mode: 0644]
Cargo.toml [new file with mode: 0644]
input/day01.txt [new file with mode: 0644]
src/day01.rs [new file with mode: 0644]
src/main.rs [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..e337bb6
--- /dev/null
@@ -0,0 +1,3 @@
+/target
+.cookie
+html/
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644 (file)
index 0000000..27cb306
--- /dev/null
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "aoc_2025"
+version = "0.1.0"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644 (file)
index 0000000..2aba261
--- /dev/null
@@ -0,0 +1,6 @@
+[package]
+name = "aoc_2025"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/input/day01.txt b/input/day01.txt
new file mode 100644 (file)
index 0000000..a3b31f6
--- /dev/null
@@ -0,0 +1,4493 @@
+L1
+L8
+R35
+L50
+R12
+R34
+L25
+R37
+L29
+L16
+R48
+R43
+L5
+L16
+L23
+L1
+L46
+R40
+L47
+L34
+L21
+R36
+R48
+L19
+L12
+L50
+L15
+L30
+R10
+L30
+R6
+L9
+L15
+L14
+L22
+L35
+R28
+L46
+R2
+L22
+L34
+R8
+L20
+R15
+L23
+L46
+R12
+R2
+L43
+L59
+L82
+L18
+L42
+L17
+L81
+L69
+R20
+R61
+L72
+R27
+R5
+L28
+R95
+R1
+L63
+R63
+R10
+L10
+L30
+L78
+R5
+R46
+R15
+R64
+L93
+R97
+R3
+R71
+R17
+R54
+L13
+L58
+R66
+R87
+L23
+R67
+L97
+R51
+L64
+R62
+R5
+R89
+L43
+L82
+L52
+R22
+L88
+L55
+R71
+R88
+L58
+L5
+L62
+R29
+L465
+L420
+R602
+L550
+R56
+L63
+R90
+L58
+L238
+L62
+L67
+R21
+L11
+L61
+R18
+R25
+R249
+R726
+L68
+L754
+L507
+L44
+R73
+R30
+L30
+R52
+R4
+R41
+R83
+L80
+R11
+L62
+L49
+R60
+L464
+L46
+R30
+L75
+R375
+L80
+R60
+R770
+L30
+R63
+L63
+R98
+L98
+L52
+R90
+R7
+L95
+L15
+L93
+L659
+R17
+L689
+L56
+R45
+R87
+R3
+R10
+R667
+R81
+R5
+R47
+R29
+R571
+R658
+R695
+L30
+L23
+L30
+R264
+L91
+R57
+L51
+L49
+L97
+R715
+L58
+L82
+L23
+L62
+L92
+L1
+L12
+R96
+L884
+R24
+R24
+R43
+R733
+R76
+R86
+R35
+L13
+L8
+R10
+R90
+L447
+L97
+R944
+L27
+R527
+R11
+L77
+L57
+L97
+R89
+L8
+R84
+R55
+L684
+L30
+L86
+R43
+L91
+L52
+R51
+L777
+R525
+L872
+L72
+L55
+L10
+R70
+L60
+R164
+R85
+R53
+L102
+L278
+L22
+L73
+L21
+L69
+R36
+R83
+R206
+R38
+L56
+L44
+R34
+R29
+R1
+R59
+R77
+L68
+L32
+R34
+R66
+R31
+L92
+L39
+R949
+L523
+R47
+L2
+R17
+L298
+R10
+R589
+R11
+L50
+L37
+R87
+R245
+R64
+L77
+R409
+R59
+R330
+R70
+R60
+R56
+L16
+L72
+L98
+R50
+R376
+L56
+L93
+R83
+R83
+L69
+R8
+R888
+L24
+L713
+R7
+R10
+L91
+R258
+R853
+L831
+L31
+R6
+R256
+L96
+L54
+L73
+L18
+R76
+R70
+L98
+R256
+L63
+L85
+L15
+L86
+R86
+R86
+R26
+L612
+L93
+L678
+R320
+R10
+R59
+R229
+L16
+L31
+L520
+L34
+R15
+R839
+L715
+R6
+R209
+R344
+R19
+R92
+R45
+R24
+R76
+L23
+R23
+R31
+L31
+R36
+R64
+R12
+L33
+L73
+L28
+R622
+R21
+L62
+L59
+L309
+R12
+L76
+L76
+L57
+L25
+R31
+L25
+L18
+L57
+L36
+L665
+L99
+R945
+L11
+R19
+L53
+R53
+L853
+R91
+L91
+R15
+L15
+L83
+L92
+L25
+L77
+L23
+R254
+L54
+R73
+L27
+R53
+L79
+L20
+L638
+R38
+L86
+L14
+R186
+L10
+L847
+L469
+R39
+R46
+R55
+R225
+L888
+R63
+L27
+L573
+L82
+L47
+R819
+L422
+R52
+L70
+L150
+L10
+L90
+R77
+L77
+R22
+L22
+R59
+R76
+L35
+R834
+L475
+R41
+L170
+R74
+L49
+L99
+R44
+L42
+R24
+R18
+R53
+R33
+R14
+R98
+R54
+L52
+L69
+L15
+R352
+L441
+L680
+L89
+R3
+L961
+R83
+L66
+R483
+R34
+R66
+R937
+L37
+R369
+L653
+L89
+L29
+R135
+L64
+R90
+R11
+L950
+L80
+R60
+L786
+R98
+L412
+R44
+R326
+R4
+R8
+L52
+R10
+R62
+R98
+R65
+L475
+R33
+R57
+L80
+R88
+R49
+L87
+L22
+L218
+L10
+L24
+L76
+L74
+R74
+R18
+R13
+L28
+L79
+L423
+R99
+R77
+L184
+L877
+L49
+R14
+L93
+R106
+L12
+R818
+L6
+L64
+L80
+R40
+R10
+L505
+R5
+L27
+R27
+R33
+L37
+R72
+L77
+L91
+L174
+L26
+L843
+L77
+L944
+R64
+L11
+R97
+L115
+L59
+R22
+R266
+L77
+R58
+R104
+L85
+R23
+R577
+R19
+L18
+R99
+L87
+R36
+L949
+R713
+L47
+L66
+L9
+L991
+R77
+L458
+R756
+L21
+R117
+R53
+L24
+L27
+L99
+L74
+L40
+R74
+L786
+L42
+R39
+L33
+R50
+R96
+R31
+R82
+L15
+L54
+R96
+L98
+L517
+R32
+R34
+R7
+L657
+R1
+L3
+L97
+R76
+L88
+R609
+R54
+L51
+L857
+L45
+L69
+R71
+L687
+L525
+L88
+L7
+L18
+L21
+R390
+L15
+L29
+R46
+L67
+L199
+L6
+L74
+R930
+R61
+L65
+L880
+R64
+R690
+R92
+R8
+L873
+R1
+R972
+R85
+L859
+L80
+R57
+R61
+L92
+R29
+L1
+R66
+R34
+L73
+R25
+L52
+R79
+R54
+R32
+L213
+R48
+L349
+L52
+R1
+R86
+R88
+L33
+R67
+R45
+R66
+L19
+R752
+L22
+L30
+L292
+R56
+R36
+L12
+R11
+L84
+R85
+L46
+R6
+R14
+L74
+R66
+R76
+R91
+L733
+L73
+L327
+R2
+R78
+L79
+R16
+L35
+L447
+L35
+R97
+R63
+R140
+R645
+R326
+R29
+R31
+R37
+R32
+R44
+L60
+R55
+L39
+R65
+L45
+R48
+L525
+L729
+L1
+L13
+L35
+L865
+L5
+L95
+L28
+L72
+R86
+L47
+R61
+L74
+L3
+L63
+L46
+L70
+R56
+R68
+R632
+L32
+L68
+L21
+L581
+R36
+L97
+R6
+L91
+L652
+L66
+L980
+L54
+R35
+L75
+R10
+R787
+R743
+L81
+L15
+L4
+R53
+L853
+R36
+L96
+R60
+L12
+L24
+R15
+R721
+L13
+L87
+R21
+L21
+L59
+R58
+L66
+R13
+L46
+R96
+R4
+R33
+L41
+L96
+L96
+R195
+R5
+L62
+R75
+R37
+R78
+L65
+R96
+L59
+R515
+R33
+R852
+L91
+L18
+R95
+R14
+L14
+L46
+R60
+R12
+L912
+L91
+R201
+L210
+L570
+L30
+R112
+L12
+R13
+R87
+R77
+L377
+R254
+L54
+L57
+R457
+R939
+R161
+R14
+R86
+R31
+R762
+R207
+R739
+R269
+L8
+L59
+R29
+R10
+R35
+R81
+L44
+R73
+R75
+R12
+L12
+L924
+R24
+L91
+L89
+L4
+L16
+R968
+L68
+R33
+L657
+R85
+R89
+R450
+L99
+L1
+L552
+L76
+L72
+L77
+L485
+R85
+L23
+L12
+R392
+L80
+R61
+L89
+R88
+L21
+R95
+L454
+L36
+R256
+R75
+R90
+L21
+L44
+R95
+R523
+L667
+R8
+R41
+R974
+R40
+L86
+L655
+R27
+R123
+L97
+R38
+L70
+R6
+R97
+R904
+R34
+L55
+R68
+R815
+L93
+R30
+L67
+L33
+L16
+L44
+L71
+L14
+R45
+L7
+R39
+R475
+L31
+R108
+L203
+R619
+L19
+L66
+R31
+L46
+L15
+R61
+L46
+R66
+R6
+R19
+R555
+L83
+R37
+R27
+L334
+R607
+L19
+R7
+R58
+R80
+L26
+L80
+R80
+R51
+R843
+L60
+L34
+L19
+L37
+R32
+R66
+R58
+L48
+R548
+R77
+R23
+L83
+R97
+R16
+R72
+L64
+L38
+R90
+L190
+R657
+L57
+R74
+L74
+R42
+R63
+R90
+R43
+L15
+R77
+R45
+L20
+R75
+R238
+L38
+L47
+R92
+R51
+R11
+L91
+L216
+R598
+L98
+L63
+R74
+L146
+R65
+L27
+R30
+L33
+R73
+L27
+R12
+L41
+R29
+R54
+L491
+L18
+R9
+L57
+R169
+R614
+L26
+L41
+L18
+R41
+L882
+R41
+R59
+R43
+L57
+R38
+R76
+R69
+R331
+R87
+R63
+L277
+L73
+R47
+R60
+L71
+R56
+L29
+L230
+L33
+L2
+R9
+R32
+L39
+R14
+R86
+R57
+R30
+L5
+R845
+L927
+L92
+L8
+L72
+R40
+L8
+R61
+L72
+R51
+L83
+L17
+L9
+R9
+L22
+L78
+R95
+L70
+L462
+L63
+L10
+L4
+L508
+R22
+R83
+R517
+R610
+L10
+R985
+L85
+L87
+L332
+R19
+L537
+L63
+R21
+L821
+L97
+R74
+L50
+R26
+L253
+R14
+L58
+L58
+L65
+R15
+L1
+R30
+L69
+R92
+L509
+R8
+R1
+L76
+R17
+R59
+R210
+L59
+L51
+L88
+L183
+L29
+R88
+L756
+L56
+L24
+L52
+R76
+L76
+R74
+R88
+L36
+R74
+L90
+R18
+L28
+L82
+R10
+L93
+L35
+R85
+R80
+L94
+L671
+L62
+L19
+R81
+R43
+L46
+R208
+L35
+R30
+R20
+L70
+L39
+L11
+L53
+L47
+L90
+L91
+R481
+R50
+L54
+R604
+L19
+L981
+R98
+R602
+R353
+R79
+L91
+L570
+L53
+R382
+R44
+L474
+R88
+L58
+L67
+R50
+L94
+R263
+R73
+R69
+R6
+L55
+L89
+L461
+R80
+L24
+R24
+L75
+L35
+R935
+R28
+R670
+R2
+L51
+R182
+L97
+R32
+L66
+R55
+R945
+L60
+L45
+L39
+R488
+L36
+L15
+L502
+L307
+L38
+L46
+R167
+L97
+L72
+R29
+R73
+R23
+L23
+R817
+L5
+R888
+R5
+R48
+L83
+R94
+R26
+R11
+R31
+R68
+R99
+L998
+R755
+R335
+R9
+L58
+L42
+L45
+R4
+L46
+L37
+R71
+R383
+L73
+R43
+L50
+R89
+R80
+L819
+L46
+R46
+R42
+R91
+R67
+L10
+R12
+R928
+L62
+R32
+R50
+R17
+R93
+R73
+R67
+R55
+R50
+R95
+R24
+R76
+L94
+R8
+R86
+R47
+L171
+L62
+R70
+L863
+R79
+L53
+R19
+L42
+R51
+L75
+R93
+R7
+L805
+R5
+R69
+R56
+R69
+R8
+L2
+R539
+R161
+L51
+R19
+R31
+R48
+L47
+L54
+L546
+L93
+L425
+R50
+R68
+R69
+L69
+R55
+L66
+L89
+R58
+R913
+L39
+R42
+R26
+L27
+L30
+L76
+R18
+L385
+L36
+R36
+L56
+L859
+L85
+R859
+R58
+L649
+R32
+R37
+R94
+R69
+R7
+R93
+R46
+L46
+R85
+L569
+R9
+L460
+R25
+L90
+L92
+L8
+R53
+R47
+L796
+R96
+R99
+R21
+R280
+R59
+R91
+R392
+R58
+L82
+L21
+R39
+R83
+L10
+R91
+R56
+R66
+R99
+L42
+L96
+L83
+R65
+L65
+R87
+R72
+L48
+R49
+L19
+L22
+L20
+R95
+L286
+R92
+L99
+L462
+R15
+R46
+L69
+L31
+L19
+L677
+R141
+R855
+L99
+L53
+L48
+R81
+R11
+L75
+R50
+R98
+L65
+R35
+R13
+R24
+R38
+R90
+R912
+R12
+R376
+L24
+L80
+L55
+R1
+R50
+R85
+L77
+R817
+R11
+R872
+L4
+L28
+L65
+L69
+L17
+R83
+L31
+R63
+R68
+R568
+L30
+R62
+R99
+R322
+L721
+L33
+R59
+L96
+L61
+R31
+R98
+L64
+L68
+R988
+L54
+R83
+R286
+L4
+R35
+L8
+L785
+R887
+L81
+L634
+R29
+L108
+L55
+R78
+R69
+R752
+L544
+R74
+R26
+L28
+L72
+R228
+L28
+R335
+R31
+L41
+L25
+R78
+L121
+R543
+R9
+R91
+L1
+R60
+L80
+L79
+L177
+L76
+L13
+R66
+L441
+R911
+L498
+R28
+L24
+L14
+L52
+L632
+R82
+L60
+L37
+L63
+R70
+R30
+R68
+R9
+R407
+R16
+L886
+L47
+R468
+R806
+L65
+R97
+L70
+R40
+L43
+R28
+L982
+L646
+R98
+R53
+R90
+L78
+R447
+R86
+R4
+L70
+R99
+L29
+L84
+L16
+L318
+R68
+R93
+L34
+L52
+R452
+L9
+L19
+L42
+L39
+L29
+L71
+L274
+L26
+R41
+R20
+R72
+R91
+L98
+R174
+L1
+R787
+L86
+L42
+R42
+L49
+R49
+L54
+R375
+R79
+L407
+L93
+R50
+L24
+R74
+R61
+L6
+L56
+L352
+R632
+R21
+L58
+L32
+L39
+R29
+L99
+L11
+R10
+R44
+L18
+R74
+L24
+R60
+L38
+R2
+R72
+R862
+L51
+L94
+L26
+L62
+R32
+L233
+L98
+L41
+L7
+L12
+R77
+L19
+R25
+R3
+L12
+L41
+L88
+R13
+L95
+R95
+R53
+L15
+R735
+L73
+R948
+R98
+L186
+L36
+L824
+R28
+L49
+R854
+R15
+L22
+L26
+R27
+L66
+R21
+L82
+L98
+R55
+R67
+L34
+R703
+L20
+L644
+L56
+L56
+L80
+R763
+L128
+L72
+L754
+R54
+L31
+R531
+R616
+L19
+R3
+L26
+R36
+R90
+R32
+R68
+L26
+R526
+R1
+R99
+L3
+L768
+L29
+R44
+R79
+R77
+L51
+L844
+R95
+L4
+R13
+R81
+R10
+R44
+L36
+L57
+R49
+L44
+L64
+L88
+L4
+L24
+L84
+L33
+R913
+L72
+L363
+R46
+L77
+L806
+R85
+L85
+R14
+L114
+R51
+L73
+R86
+L20
+L47
+L97
+L52
+L62
+R56
+R58
+L82
+L55
+R905
+R32
+L16
+L84
+L27
+L68
+L5
+L15
+R1
+R80
+R34
+R257
+L62
+R12
+R70
+R882
+R43
+L828
+L52
+L22
+L38
+R638
+L62
+R59
+L97
+R43
+R112
+R45
+L525
+L14
+R1
+R38
+L53
+R818
+L65
+L91
+L8
+L2
+R1
+R86
+R14
+L30
+L57
+L51
+R38
+R1
+L1
+R4
+L43
+R80
+R95
+L686
+L46
+R96
+R89
+R26
+L13
+L47
+L55
+L87
+R87
+L2
+L79
+R381
+L30
+R30
+R258
+R58
+R84
+L45
+R16
+R29
+R49
+R33
+R64
+L928
+R482
+R84
+L505
+R21
+R97
+L97
+R97
+R98
+R696
+L94
+L730
+L94
+R27
+L29
+R64
+R71
+L6
+L74
+R68
+L51
+R384
+R73
+R478
+R22
+L85
+R90
+R95
+R65
+L178
+L645
+L742
+L33
+L67
+R532
+L23
+L678
+R69
+L69
+L991
+R60
+L16
+R16
+L12
+R25
+R10
+R91
+R386
+L259
+R94
+R465
+R4
+L749
+L53
+L55
+R75
+R71
+R1
+L26
+R764
+R20
+R85
+R864
+R104
+R34
+R99
+R69
+R94
+R21
+L18
+R83
+L87
+R48
+L48
+L59
+R87
+L436
+R62
+L797
+L57
+R99
+R42
+R93
+R21
+R1
+R65
+R79
+R680
+L11
+R124
+R27
+R59
+R221
+R14
+R68
+R13
+R84
+R96
+R25
+L78
+R46
+L34
+R66
+R70
+R61
+L163
+R461
+R171
+R66
+L96
+L42
+L28
+L52
+L48
+R16
+L65
+R549
+R31
+R945
+R224
+R438
+L938
+R69
+L52
+R883
+R392
+L92
+R5
+L166
+R461
+R785
+R430
+L715
+L275
+L25
+R81
+L18
+R719
+L82
+L10
+R74
+L47
+R91
+L69
+L42
+L397
+L96
+R996
+R84
+R52
+R64
+R35
+R60
+L195
+L818
+R418
+R620
+L266
+L23
+L31
+L45
+R45
+R77
+R23
+L678
+R639
+R82
+L43
+L4
+R71
+L67
+L84
+L16
+L485
+R85
+R15
+L16
+L96
+L66
+R54
+R28
+R154
+R48
+L52
+R167
+R30
+L7
+L59
+L85
+L15
+R78
+L72
+L106
+R21
+L75
+R54
+L41
+R93
+R784
+L36
+R39
+L97
+L479
+L63
+L49
+L18
+R84
+L217
+R817
+L94
+R7
+L30
+R610
+L10
+L84
+L51
+R81
+R54
+R45
+L42
+L62
+R86
+R476
+R97
+L58
+L3
+L339
+R34
+L64
+R30
+L35
+R96
+R94
+L63
+R789
+R11
+L92
+L62
+R39
+R53
+R13
+L43
+L5
+R84
+L79
+R53
+L76
+L77
+L745
+L76
+L52
+L39
+R31
+R179
+L998
+R43
+L43
+R19
+L74
+L145
+L538
+R83
+R86
+R87
+L96
+R78
+R760
+L46
+L414
+R43
+L321
+L522
+L76
+L16
+L87
+R79
+L10
+R377
+L67
+R88
+L88
+L631
+R118
+L6
+R307
+R146
+R730
+L51
+R46
+L88
+L37
+L62
+L6
+R20
+L86
+L95
+L684
+R88
+R91
+L99
+L101
+R39
+R34
+L548
+R58
+L83
+L55
+R655
+R30
+L97
+R36
+L271
+L353
+R89
+L34
+L65
+L135
+L732
+L80
+R141
+R576
+R64
+R887
+R80
+L44
+R8
+L78
+R55
+R30
+R828
+R924
+R41
+L628
+R41
+L13
+L91
+L9
+L81
+R384
+L71
+L33
+L3
+R7
+R74
+L40
+R352
+R1
+R10
+R68
+L62
+L67
+R56
+L44
+L81
+R6
+L2
+R72
+R82
+L928
+L44
+L17
+R71
+R119
+L83
+R73
+L119
+L41
+R93
+R80
+R68
+L287
+R187
+R63
+R370
+L33
+L81
+L60
+R41
+R37
+L59
+R3
+R19
+R49
+L3
+L711
+R51
+R314
+L703
+L97
+R52
+L36
+L57
+R611
+R30
+R66
+R34
+L80
+R84
+R13
+L373
+L28
+R13
+L29
+R364
+L11
+R68
+R14
+R444
+R111
+R10
+R86
+L46
+L26
+L73
+R32
+R94
+R65
+R65
+L97
+R1
+R63
+L42
+R98
+R756
+R24
+R17
+L78
+L17
+R78
+L72
+R28
+R41
+L72
+R39
+R36
+L41
+R2
+L38
+L64
+R641
+R14
+R29
+R57
+L34
+L362
+L4
+R62
+R48
+R90
+L38
+R16
+R322
+L25
+L478
+L272
+L42
+R64
+L47
+L32
+R47
+R85
+L538
+L62
+L55
+L74
+L771
+R378
+R44
+L21
+L10
+R9
+L56
+R876
+R80
+R18
+L18
+R772
+R28
+R78
+R33
+L31
+R190
+R41
+L11
+R47
+L76
+R47
+L49
+L30
+L74
+R46
+R7
+R7
+R41
+R77
+L43
+L42
+L1
+L522
+R50
+L368
+R31
+R372
+L520
+R53
+L53
+R731
+R85
+L70
+R354
+L428
+R28
+R79
+R147
+R16
+R73
+R85
+R15
+L18
+L97
+R395
+R72
+R612
+L779
+R90
+L13
+L16
+L77
+R16
+R35
+R44
+L26
+R5
+L13
+L45
+L34
+R34
+R775
+R19
+R6
+L94
+L32
+L501
+R127
+R134
+L734
+R4
+R983
+L87
+R41
+R79
+L36
+L784
+R92
+R8
+L45
+L55
+R89
+R789
+L78
+L45
+R558
+L54
+L59
+L11
+L89
+L31
+R38
+R64
+L71
+L55
+R55
+L11
+R11
+R55
+R45
+R69
+R31
+R30
+R776
+L71
+L22
+L33
+L80
+L94
+R294
+R394
+R6
+L62
+R18
+L2
+R63
+L17
+R66
+L36
+L34
+R33
+R55
+R16
+L75
+L30
+L95
+L6
+R404
+L98
+L601
+L90
+L9
+R572
+R51
+R95
+L44
+R626
+R67
+R133
+L30
+R630
+R20
+R80
+R59
+R41
+R91
+L1
+L36
+R569
+L98
+R40
+R98
+R61
+L19
+L31
+R595
+L69
+R10
+L346
+L280
+R16
+L474
+R827
+L40
+R25
+L61
+R35
+R63
+R10
+R402
+R8
+R48
+L467
+R39
+L54
+L67
+L48
+L29
+R405
+R85
+R40
+R44
+R41
+L32
+L410
+R123
+R283
+L54
+L42
+R209
+L9
+L80
+R59
+R21
+R15
+L59
+R12
+L85
+L34
+L49
+R47
+L47
+R831
+L31
+R28
+L91
+L60
+R23
+R41
+R59
+L94
+R60
+R34
+L86
+R87
+L80
+L938
+L52
+R47
+L96
+R18
+L505
+L122
+R27
+R75
+R25
+L14
+L86
+L401
+R2
+L1
+L93
+R46
+R47
+R602
+R279
+L30
+R225
+R81
+L57
+R433
+R415
+L48
+R59
+R32
+R26
+L16
+R24
+R25
+L23
+R273
+R4
+L28
+R24
+L335
+L55
+L96
+R86
+R863
+R56
+L75
+L64
+R55
+L81
+L373
+L81
+R6
+R94
+R153
+L96
+L201
+L83
+L98
+L775
+L22
+L94
+R91
+R92
+R33
+L26
+R57
+R3
+L316
+R92
+R90
+R31
+L31
+R69
+R31
+L1
+L997
+L13
+L94
+L4
+R9
+R830
+R170
+L45
+R45
+L43
+R43
+L73
+R5
+L56
+L74
+L66
+L36
+R48
+L16
+L88
+R56
+L90
+R65
+L38
+R61
+R2
+L56
+L528
+L16
+R48
+L60
+L8
+R32
+L712
+L63
+L38
+R16
+L5
+L97
+L13
+R60
+L304
+L51
+R95
+L194
+L38
+R46
+L41
+L59
+L14
+L17
+R12
+L95
+R58
+L80
+L29
+L49
+L87
+R87
+R29
+R88
+R443
+R98
+L57
+L1
+L79
+L71
+L92
+L43
+R52
+R89
+R744
+L918
+R8
+R37
+R160
+R74
+R73
+L634
+L14
+R14
+L74
+R74
+R18
+R31
+R85
+L44
+L90
+L678
+L84
+L95
+L56
+R13
+L344
+L37
+R82
+R71
+R37
+R91
+L87
+R87
+R13
+L13
+L24
+R160
+L636
+L30
+L70
+L6
+R97
+L591
+R11
+L41
+L11
+L55
+R596
+R13
+L13
+R85
+L67
+R820
+L38
+L43
+R43
+L198
+R87
+R11
+L717
+R59
+R47
+L43
+L34
+R88
+R13
+L905
+R358
+L66
+R44
+R56
+R64
+L50
+R86
+L41
+R9
+R433
+R3
+R20
+L15
+R30
+R76
+L78
+L71
+L16
+R35
+R335
+L57
+R42
+R22
+R23
+L74
+R20
+R761
+R43
+R81
+L91
+L90
+L42
+L58
+R61
+R48
+L9
+L77
+L523
+R53
+L387
+R77
+L26
+R23
+R60
+L17
+R72
+L11
+L28
+L40
+R294
+L70
+L24
+R24
+R77
+R523
+L75
+R375
+L36
+R55
+L937
+R21
+R137
+R53
+L86
+R93
+L219
+R19
+R37
+R6
+R257
+L748
+R45
+R55
+L64
+L88
+R63
+L18
+R55
+L27
+L1
+L72
+L50
+R25
+L63
+L12
+L81
+L19
+L91
+L746
+R81
+L49
+R84
+L52
+R63
+L48
+R18
+R2
+R338
+R428
+R74
+L502
+R54
+R46
+R43
+R57
+L6
+L49
+R633
+R56
+L21
+L66
+R81
+R92
+R77
+R3
+L20
+R94
+L74
+L38
+R38
+L93
+L534
+L84
+R996
+R15
+R873
+L94
+R45
+L524
+L82
+L218
+L761
+L89
+L92
+L24
+R59
+R86
+L9
+L70
+L72
+L110
+L64
+R546
+R2
+L2
+L52
+R455
+L3
+L911
+R3
+L53
+R102
+R24
+R11
+L78
+R81
+R21
+R122
+R74
+R18
+L714
+R14
+R65
+R21
+R905
+R93
+L80
+L4
+R86
+R84
+R16
+L57
+L83
+R37
+R6
+L39
+L73
+L93
+R702
+L25
+R31
+L606
+L40
+R40
+L89
+L90
+L996
+R76
+R99
+L94
+R94
+L39
+L14
+L78
+L69
+L68
+L932
+R31
+R85
+L911
+R58
+R48
+L13
+R37
+R65
+L61
+R61
+R738
+R80
+L53
+R135
+L65
+L88
+L47
+L59
+R19
+L80
+R20
+L57
+L43
+L56
+R48
+L96
+L96
+R369
+L69
+L6
+R36
+L54
+L476
+R34
+R66
+L98
+L93
+R18
+R73
+L868
+R68
+L1
+L37
+L24
+L51
+R13
+R963
+R64
+R838
+L79
+L586
+R73
+R327
+R46
+L46
+L19
+L81
+R19
+L78
+R459
+R225
+L99
+L28
+R2
+R19
+R1
+R683
+R67
+R59
+R25
+L92
+L62
+R90
+R52
+R58
+L80
+L20
+L10
+L19
+L73
+L98
+L10
+L90
+R927
+L96
+L31
+L56
+L20
+R17
+R59
+L813
+L87
+R254
+L81
+L673
+R43
+R857
+R8
+L15
+R5
+R173
+L46
+R75
+R47
+R53
+R61
+L40
+R79
+R17
+L7
+R90
+L15
+L48
+R29
+R434
+L64
+R64
+R92
+R40
+L99
+L14
+R29
+L47
+L70
+R69
+L89
+L95
+R884
+R219
+L19
+L97
+R23
+L64
+L516
+L26
+R98
+R82
+L23
+L19
+L52
+L56
+L33
+L17
+R99
+R40
+R88
+L99
+L28
+R1
+R99
+L55
+L45
+R28
+R54
+R13
+R5
+L72
+L37
+L91
+R61
+R60
+L521
+L530
+R30
+R87
+R68
+R86
+L51
+L87
+L3
+R705
+L27
+L24
+L54
+L53
+R53
+R561
+R91
+R18
+R45
+R485
+L82
+R33
+L51
+L74
+L70
+L81
+R38
+L13
+L70
+L270
+R93
+R47
+L79
+L819
+L2
+L6
+L742
+R48
+L3
+L597
+L15
+R398
+L83
+L77
+R77
+L18
+L3
+R37
+R46
+L18
+L51
+R321
+L110
+R67
+R16
+R18
+R96
+R471
+R810
+L10
+R86
+L747
+L11
+L92
+L42
+R78
+R756
+R80
+L80
+L88
+R97
+R76
+R255
+R991
+L31
+L58
+L742
+R76
+R47
+L341
+L82
+L30
+L24
+R35
+L19
+R52
+R86
+L76
+R89
+L65
+R2
+R50
+L31
+L67
+R98
+R7
+R75
+L3
+L993
+R14
+R50
+L50
+R24
+L635
+R62
+R71
+R48
+L390
+L80
+R53
+L53
+R62
+L62
+R61
+L69
+L41
+R31
+L87
+L48
+L65
+L8
+L74
+R773
+L52
+R984
+R86
+R88
+L85
+L78
+R57
+L95
+R22
+R39
+L70
+R47
+L65
+L69
+L55
+L48
+R8
+L30
+R88
+L40
+R62
+L58
+L9
+L87
+R87
+R60
+L38
+L99
+R77
+L252
+R61
+L9
+L95
+R95
+L392
+R92
+R79
+R33
+L78
+L34
+R183
+R78
+R39
+R18
+R53
+L71
+L244
+L26
+L6
+R766
+R10
+L738
+R39
+L49
+L51
+R28
+L2
+R922
+R51
+L356
+L382
+R38
+L77
+R26
+L37
+R27
+R61
+R219
+R49
+L642
+R10
+L11
+R48
+L73
+L87
+R833
+R79
+L25
+L16
+L25
+L59
+R91
+L91
+R69
+L25
+L91
+R39
+R908
+L17
+L83
+L50
+R28
+R22
+L33
+R33
+R17
+R48
+R786
+R51
+L493
+R91
+R90
+L29
+R103
+L653
+L71
+R22
+R76
+R62
+R77
+R70
+L47
+R531
+R89
+L20
+L542
+L272
+L12
+L74
+R24
+L78
+R54
+L997
+L96
+R93
+L95
+L83
+R78
+L635
+R35
+L95
+L14
+R9
+R47
+R53
+R579
+L70
+R801
+R53
+L865
+R702
+L40
+R88
+R13
+R639
+R57
+R9
+R531
+R130
+L27
+L74
+L26
+R256
+R66
+R78
+L60
+R28
+R52
+R80
+R91
+L14
+L80
+L56
+L250
+R3
+R136
+R884
+R71
+L45
+L110
+R1
+R70
+R94
+R13
+R92
+L85
+R79
+R406
+R93
+R34
+R74
+L45
+L56
+R682
+R28
+L10
+R37
+R163
+L68
+L29
+L50
+L31
+R78
+L393
+R403
+L10
+L49
+L5
+L84
+R89
+L535
+R84
+R177
+L80
+L75
+L16
+L685
+L26
+R299
+L97
+R851
+R20
+L68
+L80
+L8
+L12
+R859
+L59
+R58
+R30
+L550
+L38
+R90
+L90
+L5
+R89
+L50
+R688
+L26
+L96
+R80
+L72
+R992
+R27
+L80
+L13
+R36
+R30
+L56
+L44
+R80
+R20
+R23
+L23
+L98
+L2
+L75
+L38
+L45
+L13
+R71
+L78
+L22
+L86
+L15
+R31
+R944
+L30
+L8
+L642
+L94
+R987
+R12
+L99
+R43
+L42
+L1
+L9
+R88
+L86
+R795
+R94
+R21
+L3
+L12
+R328
+L80
+L336
+L17
+L288
+R554
+R33
+L225
+L57
+L72
+L28
+L1
+R206
+R816
+R37
+R42
+L55
+R93
+R24
+R73
+L35
+R42
+R83
+R13
+L19
+L60
+L59
+L81
+L74
+R755
+L92
+L38
+L98
+R31
+L17
+L44
+L2
+R69
+L38
+R54
+R975
+L28
+L72
+R89
+R11
+L458
+R81
+L23
+L60
+R60
+R44
+L35
+R57
+R74
+R60
+L263
+R63
+R82
+L39
+R71
+L93
+R679
+R49
+R51
+L893
+R97
+R396
+L70
+R70
+L456
+L97
+L54
+L793
+L2
+L24
+R26
+R54
+L19
+R65
+R2
+R98
+R83
+R317
+L556
+R74
+L18
+L883
+R75
+L92
+L23
+R12
+R93
+L37
+L245
+R52
+R647
+L598
+R32
+R15
+R54
+L72
+L81
+L30
+L119
+L72
+L996
+R35
+L967
+R22
+L82
+L874
+L77
+R711
+R60
+R50
+L10
+R77
+L277
+L41
+L84
+R80
+L83
+R941
+R811
+R76
+L23
+L96
+L44
+L37
+L32
+L89
+R16
+R5
+L17
+R77
+L60
+R49
+R51
+R460
+L55
+R16
+L21
+L85
+R85
+R84
+R97
+R15
+R8
+R96
+R74
+R26
+L15
+L83
+R91
+L88
+L39
+L66
+R899
+L48
+L51
+R306
+R92
+R2
+R68
+L68
+R73
+R27
+L49
+L444
+L35
+L51
+L52
+R31
+L70
+R69
+R1
+R59
+R41
+R34
+R57
+L14
+L594
+L69
+L345
+R31
+L175
+L40
+R15
+R21
+R986
+L52
+L55
+R85
+L617
+L63
+R406
+L11
+L48
+R966
+R33
+L164
+R235
+L48
+L16
+R42
+L18
+R15
+R93
+L90
+L319
+R852
+R67
+R86
+L586
+L554
+R54
+R1
+L2
+L60
+L33
+R43
+L449
+L35
+R446
+R28
+L11
+L1
+L27
+R74
+L68
+L6
+R84
+R16
+R3
+L72
+R41
+R65
+L43
+R163
+R53
+L17
+L93
+L66
+R97
+L47
+R81
+R335
+L30
+L47
+L96
+L27
+R92
+L34
+R42
+R58
+L58
+R1
+R99
+R16
+L41
+L575
+R72
+R12
+L78
+R284
+L217
+L73
+L94
+R294
+R9
+L960
+R51
+L20
+R20
+L4
+R6
+L29
+L35
+R62
+L24
+R69
+L45
+L56
+L77
+L11
+L86
+L96
+R26
+L660
+R63
+R22
+L763
+R767
+R10
+L106
+R41
+R526
+R473
+R367
+L85
+L695
+L299
+L82
+R21
+L94
+R94
+R99
+R1
+R393
+R45
+L98
+L40
+L98
+L406
+R304
+L572
+L482
+R32
+L78
+L12
+L288
+R84
+L41
+R78
+L479
+R18
+R10
+R52
+R51
+L73
+L60
+R16
+R547
+R27
+R39
+L592
+R386
+R32
+R554
+L48
+L69
+R224
+L39
+R716
+L29
+L97
+L52
+L55
+L28
+L372
+L12
+R553
+R14
+L96
+L60
+L2
+R19
+L72
+R49
+L93
+L199
+L83
+R383
+R52
+L53
+R276
+L986
+L785
+R66
+R771
+L10
+L32
+L31
+R97
+R34
+R13
+L60
+R47
+L594
+L16
+L90
+R69
+R631
+R38
+L35
+R97
+L803
+R196
+L707
+R340
+L26
+R60
+L926
+R66
+R613
+L33
+L6
+R92
+R65
+R69
+R292
+L92
+L96
+L4
+R186
+L22
+R36
+R289
+R11
+R67
+L89
+R29
+R743
+R50
+R196
+R4
+R39
+L39
+L55
+R73
+L3
+L16
+R22
+L97
+L18
+L6
+L4
+R4
+R43
+L43
+L33
+L13
+L854
+L37
+R14
+L77
+L80
+R707
+R60
+R13
+R28
+L28
+R27
+R98
+L25
+L6
+R7
+R99
+R96
+L85
+L11
+L11
+R11
+R60
+L87
+L73
+R51
+R80
+R46
+L37
+L62
+L725
+R28
+R66
+R51
+R95
+L93
+L54
+R80
+R74
+L612
+L83
+R95
+R13
+L213
+L449
+R58
+R295
+R99
+L48
+L44
+L11
+L79
+R81
+L2
+R56
+L39
+R47
+L748
+L31
+L4
+L76
+L63
+L61
+R52
+R4
+L194
+L43
+R43
+R96
+L39
+L19
+L42
+L94
+R94
+R61
+L40
+R54
+R86
+L33
+L97
+R30
+R74
+R26
+L59
+R83
+L24
+L53
+L47
+R61
+R457
+L58
+L799
+L761
+L761
+L39
+L959
+R811
+R49
+L49
+R234
+L7
+L207
+R28
+L54
+L90
+R544
+L671
+L11
+L866
+L61
+R57
+L30
+R938
+L7
+R51
+R51
+R22
+L53
+R80
+R77
+L77
+R393
+L60
+L7
+R74
+R604
+R96
+R81
+L81
+R66
+L49
+L284
+L37
+L19
+L41
+L17
+L19
+R44
+L14
+R70
+L262
+R35
+L210
+L96
+R33
+L23
+L77
+L69
+R469
+L17
+L67
+R580
+L7
+L71
+L818
+R42
+L24
+R21
+L39
+L102
+L17
+L21
+L60
+L7
+L93
+R891
+L91
+R55
+R228
+L83
+R11
+L31
+R72
+R915
+R33
+R41
+R1
+L24
+L89
+L29
+L28
+R62
+R63
+R3
+L72
+L573
+R22
+R67
+R48
+R10
+R63
+R65
+L361
+R31
+R40
+L540
+R476
+L39
+R68
+L14
+L30
+L29
+L322
+L40
+L515
+R6
+L680
+L281
+L53
+R419
+L66
+R64
+L34
+L30
+L1
+L44
+R45
+R51
+R49
+L54
+R54
+L845
+L81
+R91
+L63
+R96
+L98
+R46
+R54
+L99
+L1
+R776
+R51
+L45
+L70
+L905
+R16
+R22
+L715
+L30
+R98
+L12
+R14
+R96
+L96
+L15
+L760
+R69
+L78
+R84
+L37
+R66
+L91
+R78
+L945
+R48
+L73
+R82
+R72
+R49
+R3
+R23
+R25
+R27
+L27
+L38
+R38
+L69
+R69
+R90
+L56
+L40
+R6
+L13
+L910
+L77
+L93
+L7
+R56
+L96
+L11
+L21
+R70
+L98
+R37
+L78
+L950
+L9
+L56
+L597
+R84
+L6
+R201
+R734
+L451
+L90
+R81
+L38
+R38
+R24
+R76
+R28
+R79
+L69
+R62
+L64
+R29
+L27
+R534
+R28
+R78
+R70
+R60
+L31
+R223
+R56
+R30
+L70
+R84
+R26
+L643
+L78
+L5
+R936
+R64
+R91
+L66
+R163
+R612
+L95
+R95
+R569
+L34
+R665
+R13
+R20
+R32
+R87
+R3
+L71
+R16
+R39
+R83
+R93
+R80
+L60
+L235
+L58
+R38
+R17
+L283
+L17
+L68
+L29
+L32
+R32
+R67
+R4
+R295
+L66
+R185
+R815
+L10
+L34
+R40
+L327
+L269
+L3
+L228
+R847
+R94
+L210
+L8
+R8
+R1
+R90
+L91
+R55
+R86
+L41
+R28
+R66
+L18
+L976
+R3
+L403
+L68
+R67
+L21
+R22
+L37
+L63
+R83
+R17
+R27
+L5
+L68
+R23
+L27
+L87
+R37
+R84
+L41
+R21
+L64
+R82
+L93
+R24
+R7
+L20
+R5
+R95
+L75
+R44
+R41
+L10
+R66
+R949
+L77
+L30
+L218
+L38
+R27
+L433
+L915
+L366
+R254
+R726
+R86
+R69
+L633
+L64
+R57
+R96
+R86
+R99
+R59
+R46
+L24
+R78
+L22
+R50
+R47
+R738
+L613
+L82
+R7
+R75
+R70
+R47
+R46
+R37
+R15
+L44
+R991
+R59
+L21
+R64
+R36
+L97
+L38
+R35
+L4
+R92
+L27
+L29
+L28
+L83
+R87
+L280
+L28
+L49
+L401
+L50
+R164
+R24
+R12
+L87
+R58
+R41
+R62
+R68
+L89
+R58
+L52
+L59
+R12
+L19
+R7
+L57
+L945
+L298
+R84
+L88
+R4
+L17
+R28
+L92
+L274
+L45
+R17
+R6
+R41
+R36
+R27
+R498
+L225
+R30
+R57
+R13
+R95
+L62
+L220
+R87
+R71
+R45
+L16
+R8
+R92
+L91
+L33
+L176
+R24
+R76
+L145
+R45
+R72
+R668
+L770
+R88
+R99
+L81
+L18
+R185
+L967
+L76
+R85
+R271
+R74
+L279
+L951
+R17
+L17
+L12
+L73
+L315
+R74
+L74
+R40
+L40
+L9
+L46
+R55
+L86
+L998
+L16
+L65
+R18
+R773
+L12
+R49
+R9
+R28
+L715
+L85
+R890
+R944
+R66
+L47
+L91
+L62
+R62
+R38
+R690
+R392
+R18
+R71
+L871
+R75
+R325
+R95
+R249
+R183
+L27
+L52
+R3
+L51
+L21
+R84
+R37
+R21
+R46
+R218
+R321
+L28
+L53
+R70
+L14
+R6
+R20
+L3
+L46
+L84
+R78
+R15
+L56
+R89
+L14
+L11
+R42
+L17
+R5
+R95
+R31
+R14
+L1
+R39
+R61
+L62
+R56
+L38
+L75
+L25
+L84
+R12
+L66
+L20
+R58
+L27
+R65
+L48
+L88
+L98
+R8
+L12
+R99
+R40
+L65
+R96
+R86
+L56
+R41
+L41
+L67
+L71
+L4
+R3
+R9
+R5
+R48
+R39
+L47
+L11
+R5
+L14
+L11
+L5
+L24
+R17
+L9
+R17
+R26
+R10
+R16
+R47
+R4
+R18
+L21
+L22
+R24
+L33
+L30
+L2
+L1
+L49
+L5
+L29
+R47
+L8
+L26
+R8
+R23
+R23
+L34
+R50
+R40
+R7
+R30
+L37
+L43
+R21
+R31
+L24
+R24
+L43
+R47
diff --git a/src/day01.rs b/src/day01.rs
new file mode 100644 (file)
index 0000000..f84557a
--- /dev/null
@@ -0,0 +1,90 @@
+use std::error::Error;
+
+pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
+    println!("part 1: {}", part1(input)?);
+    println!("part 2: {}", part2(input)?);
+    Ok(())
+}
+
+fn part1(input: &str) -> Result<i32, Box<dyn Error>> {
+    let mut res = 0;
+    let mut pos = 50;
+    for l in input.lines() {
+        let (dir, step) = l.split_at(1);
+        let mut step = step.parse::<i32>()?;
+        if dir == "L" {
+            step *= -1;
+        }
+        pos = (pos + step) % 100;
+        if pos < 0 {
+            pos += 100;
+        }
+        if pos == 0 {
+            res += 1;
+        }
+    }
+
+    Ok(res)
+}
+
+fn part2(input: &str) -> Result<i32, Box<dyn Error>> {
+    let mut click = 0;
+    let mut pos = 50;
+    let mut pos_last = 50;
+    for l in input.lines() {
+        let (dir, step) = l.split_at(1);
+        let mut step = step.parse::<i32>()?;
+        if dir == "L" {
+            step *= -1;
+        }
+        click += step.abs() / 100; // number of turns
+        step = step % 100;
+        if step == 0 {
+            continue;
+        }
+        pos += step;
+        if pos == 0 {
+            click += if pos_last == 0 { 0 } else { 1 };
+        }
+        else if pos < 0 {
+            click += if pos_last == 0 { 0 } else { 1 };
+            pos += 100;
+        }
+        else if pos >= 100 {
+            click += if pos_last == 0 { 0 } else { 1 };
+            pos -= 100;
+        }
+        pos_last = pos;
+    }
+
+    Ok(click)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    static TEXT_INPUT: &str = "\
+L68
+L30
+R48
+L5
+R60
+L55
+L1
+L99
+R14
+L82";
+
+    #[test]
+    fn test_part1() {
+        assert_eq!(3, part1(TEXT_INPUT).unwrap());
+    }
+    #[test]
+    fn test_part2() {
+        assert_eq!(6, part2(TEXT_INPUT).unwrap());
+    }
+    #[test]
+    fn test_part2_r1000() {
+        assert_eq!(10, part2("R1000").unwrap());
+    }
+}
diff --git a/src/main.rs b/src/main.rs
new file mode 100644 (file)
index 0000000..d64487e
--- /dev/null
@@ -0,0 +1,27 @@
+use std::env;
+use std::process;
+use std::error::Error;
+use std::fs::File;
+use std::io::Read;
+
+pub mod day01;
+
+fn main() {
+    let args: Vec<String> = env::args().collect();
+    if let Err(e) = run(&args[1], &args[2]) {
+        println!("Error: {e}");
+        process::exit(2);
+    }
+}
+
+fn run(day: &str, input_file: &str) -> Result<(), Box<dyn Error>> {
+    let mut f = File::open(input_file)?;
+    let mut input = String::new();
+    f.read_to_string(&mut input)?;
+
+    match day {
+        "day01" => day01::run(&input)?,
+        _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()),
+    }
+    Ok(())
+}