summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2021-12-13 21:12:04 +0000
committerYann Herklotz <git@yannherklotz.com>2021-12-13 21:12:04 +0000
commit9d945796591d2bf42ea3e78e84f927d93b3bffbc (patch)
tree36efe9567ddbd649f40917fa4972faa3994ca96b
downloadaoc21-9d945796591d2bf42ea3e78e84f927d93b3bffbc.tar.gz
aoc21-9d945796591d2bf42ea3e78e84f927d93b3bffbc.zip
Adding initial files
-rw-r--r--inputs/01.txt2000
-rw-r--r--inputs/02.txt1000
-rw-r--r--inputs/03.txt1000
-rw-r--r--src/01.lisp24
-rw-r--r--src/02.lisp33
-rw-r--r--src/03.lisp45
6 files changed, 4102 insertions, 0 deletions
diff --git a/inputs/01.txt b/inputs/01.txt
new file mode 100644
index 0000000..56f4f8b
--- /dev/null
+++ b/inputs/01.txt
@@ -0,0 +1,2000 @@
+159
+170
+171
+170
+168
+167
+166
+164
+163
+154
+155
+158
+146
+153
+167
+166
+182
+188
+189
+201
+205
+212
+220
+228
+229
+230
+214
+221
+224
+226
+227
+237
+233
+236
+242
+214
+226
+233
+237
+233
+244
+246
+255
+256
+246
+247
+252
+265
+266
+267
+269
+270
+264
+269
+285
+298
+307
+308
+313
+318
+319
+312
+306
+314
+340
+341
+349
+364
+363
+362
+350
+352
+356
+358
+359
+350
+382
+384
+385
+373
+364
+366
+370
+373
+400
+402
+442
+459
+434
+435
+454
+470
+474
+479
+484
+485
+487
+497
+538
+541
+544
+512
+520
+530
+529
+532
+538
+556
+557
+560
+557
+525
+533
+525
+528
+533
+540
+546
+539
+536
+539
+545
+542
+567
+595
+604
+616
+608
+609
+612
+613
+621
+622
+624
+625
+633
+632
+634
+627
+631
+632
+640
+646
+648
+649
+646
+647
+655
+657
+658
+654
+655
+656
+655
+659
+658
+662
+664
+665
+667
+668
+667
+670
+675
+686
+687
+691
+694
+687
+701
+690
+693
+703
+702
+703
+702
+709
+710
+719
+743
+754
+752
+753
+769
+775
+772
+771
+768
+765
+766
+767
+769
+783
+777
+782
+793
+809
+808
+815
+817
+792
+798
+800
+802
+780
+781
+776
+778
+779
+771
+762
+760
+761
+770
+768
+773
+776
+784
+793
+807
+823
+825
+831
+832
+834
+844
+845
+852
+844
+835
+837
+838
+834
+839
+840
+848
+842
+873
+883
+904
+903
+905
+911
+929
+928
+957
+960
+961
+960
+965
+964
+950
+952
+943
+937
+941
+936
+937
+938
+945
+967
+954
+953
+950
+951
+960
+961
+962
+964
+970
+971
+972
+946
+952
+956
+953
+966
+967
+964
+982
+997
+998
+995
+994
+1003
+992
+994
+988
+1005
+1009
+1015
+1016
+1017
+1021
+1019
+1036
+1037
+1038
+1031
+1034
+1035
+1024
+1027
+1049
+1045
+1052
+1012
+1009
+1020
+1031
+1033
+1036
+1032
+1022
+1023
+1024
+1016
+1017
+1021
+1034
+1031
+1011
+1013
+1015
+1016
+1030
+1043
+1044
+1048
+1053
+1054
+1077
+1078
+1080
+1083
+1084
+1083
+1112
+1124
+1125
+1126
+1118
+1117
+1116
+1122
+1125
+1130
+1136
+1140
+1137
+1128
+1157
+1158
+1144
+1146
+1144
+1127
+1145
+1147
+1146
+1125
+1133
+1134
+1133
+1156
+1143
+1160
+1156
+1158
+1160
+1159
+1185
+1201
+1184
+1196
+1198
+1193
+1195
+1204
+1205
+1224
+1235
+1230
+1231
+1229
+1214
+1221
+1225
+1227
+1228
+1223
+1226
+1227
+1239
+1261
+1264
+1265
+1279
+1278
+1271
+1288
+1290
+1288
+1293
+1297
+1300
+1307
+1327
+1332
+1330
+1327
+1304
+1324
+1327
+1328
+1330
+1344
+1330
+1328
+1330
+1331
+1328
+1317
+1320
+1310
+1311
+1322
+1326
+1314
+1313
+1317
+1306
+1312
+1322
+1315
+1318
+1310
+1313
+1314
+1319
+1306
+1302
+1305
+1303
+1305
+1303
+1306
+1303
+1271
+1277
+1283
+1299
+1310
+1328
+1313
+1328
+1332
+1338
+1353
+1346
+1355
+1356
+1353
+1370
+1365
+1367
+1370
+1377
+1374
+1376
+1378
+1386
+1384
+1386
+1387
+1403
+1404
+1405
+1411
+1420
+1421
+1423
+1413
+1411
+1404
+1402
+1413
+1432
+1431
+1446
+1436
+1435
+1432
+1444
+1459
+1482
+1481
+1482
+1481
+1505
+1507
+1511
+1517
+1530
+1531
+1522
+1532
+1538
+1540
+1544
+1546
+1548
+1554
+1555
+1558
+1527
+1529
+1530
+1523
+1508
+1510
+1512
+1509
+1514
+1526
+1527
+1531
+1539
+1570
+1584
+1608
+1637
+1643
+1651
+1660
+1671
+1672
+1674
+1679
+1687
+1685
+1678
+1681
+1692
+1698
+1728
+1734
+1725
+1724
+1751
+1756
+1765
+1775
+1778
+1791
+1793
+1788
+1819
+1824
+1830
+1831
+1830
+1852
+1854
+1844
+1848
+1879
+1898
+1914
+1922
+1927
+1930
+1929
+1943
+1947
+1948
+1965
+1934
+1937
+1939
+1947
+1948
+1944
+1949
+1956
+1954
+1984
+2004
+2008
+2019
+2021
+2022
+2031
+2036
+2054
+2057
+2060
+2061
+2063
+2062
+2063
+2064
+2054
+2058
+2055
+2052
+2057
+2060
+2061
+2060
+2064
+2061
+2063
+2064
+2060
+2061
+2044
+2036
+2040
+2041
+2033
+2020
+2003
+2018
+2017
+2020
+2021
+2013
+2015
+2024
+2041
+2052
+2050
+2075
+2082
+2083
+2084
+2083
+2085
+2091
+2094
+2104
+2107
+2108
+2101
+2103
+2114
+2103
+2107
+2108
+2110
+2104
+2110
+2114
+2123
+2137
+2149
+2155
+2152
+2149
+2150
+2141
+2159
+2162
+2168
+2181
+2182
+2195
+2196
+2202
+2206
+2211
+2221
+2220
+2231
+2238
+2242
+2221
+2211
+2186
+2191
+2168
+2169
+2177
+2178
+2181
+2188
+2214
+2228
+2227
+2228
+2263
+2269
+2268
+2269
+2278
+2279
+2255
+2256
+2257
+2260
+2267
+2260
+2250
+2251
+2250
+2254
+2252
+2248
+2245
+2248
+2250
+2251
+2255
+2257
+2270
+2282
+2286
+2287
+2288
+2313
+2314
+2343
+2338
+2369
+2367
+2369
+2411
+2408
+2389
+2390
+2392
+2378
+2379
+2380
+2382
+2342
+2345
+2343
+2339
+2340
+2341
+2370
+2378
+2395
+2398
+2394
+2382
+2384
+2377
+2384
+2385
+2386
+2387
+2401
+2408
+2409
+2386
+2390
+2405
+2414
+2416
+2420
+2431
+2430
+2446
+2458
+2459
+2467
+2475
+2477
+2481
+2482
+2484
+2485
+2490
+2498
+2502
+2503
+2492
+2487
+2485
+2487
+2474
+2475
+2469
+2472
+2486
+2502
+2504
+2505
+2506
+2504
+2502
+2504
+2503
+2518
+2520
+2535
+2520
+2518
+2521
+2531
+2540
+2545
+2548
+2550
+2551
+2556
+2554
+2558
+2559
+2574
+2571
+2573
+2574
+2582
+2583
+2596
+2602
+2603
+2610
+2618
+2616
+2617
+2629
+2628
+2626
+2641
+2638
+2637
+2643
+2645
+2646
+2652
+2666
+2668
+2671
+2673
+2672
+2675
+2678
+2671
+2670
+2682
+2684
+2667
+2668
+2670
+2667
+2671
+2666
+2664
+2663
+2666
+2663
+2673
+2674
+2675
+2681
+2671
+2675
+2677
+2670
+2669
+2674
+2673
+2682
+2689
+2671
+2647
+2651
+2650
+2669
+2695
+2704
+2706
+2702
+2701
+2700
+2703
+2708
+2711
+2717
+2719
+2720
+2715
+2712
+2680
+2683
+2684
+2685
+2702
+2703
+2686
+2694
+2691
+2695
+2698
+2710
+2716
+2729
+2732
+2742
+2759
+2760
+2742
+2751
+2750
+2780
+2782
+2779
+2778
+2779
+2767
+2770
+2795
+2804
+2806
+2807
+2808
+2809
+2823
+2824
+2825
+2828
+2819
+2823
+2824
+2833
+2807
+2784
+2781
+2793
+2795
+2774
+2737
+2736
+2737
+2742
+2745
+2746
+2749
+2750
+2769
+2774
+2775
+2793
+2796
+2810
+2814
+2808
+2802
+2803
+2806
+2807
+2799
+2798
+2792
+2795
+2798
+2824
+2844
+2831
+2851
+2848
+2852
+2849
+2875
+2871
+2880
+2878
+2882
+2889
+2878
+2883
+2886
+2885
+2886
+2887
+2893
+2894
+2901
+2905
+2907
+2888
+2890
+2895
+2896
+2897
+2874
+2881
+2873
+2874
+2878
+2881
+2893
+2892
+2889
+2890
+2893
+2888
+2883
+2884
+2873
+2871
+2875
+2866
+2839
+2841
+2848
+2845
+2857
+2880
+2881
+2882
+2883
+2888
+2899
+2902
+2905
+2899
+2927
+2953
+2952
+2956
+2963
+2964
+2962
+2968
+2967
+2964
+2966
+2967
+2961
+2960
+2979
+2987
+3007
+3030
+3035
+3042
+3065
+3053
+3054
+3055
+3056
+3059
+3060
+3058
+3069
+3074
+3073
+3065
+3071
+3074
+3087
+3088
+3079
+3086
+3121
+3151
+3147
+3145
+3149
+3150
+3149
+3151
+3152
+3157
+3146
+3153
+3154
+3148
+3146
+3151
+3152
+3157
+3158
+3162
+3167
+3153
+3163
+3169
+3179
+3177
+3181
+3183
+3188
+3187
+3191
+3207
+3214
+3223
+3224
+3225
+3231
+3239
+3241
+3246
+3252
+3253
+3255
+3254
+3251
+3250
+3252
+3251
+3209
+3228
+3233
+3232
+3231
+3239
+3236
+3233
+3236
+3241
+3248
+3247
+3250
+3252
+3284
+3298
+3300
+3301
+3286
+3284
+3290
+3289
+3290
+3291
+3286
+3288
+3295
+3296
+3284
+3283
+3285
+3289
+3251
+3249
+3250
+3251
+3262
+3269
+3270
+3269
+3255
+3258
+3253
+3266
+3270
+3251
+3245
+3247
+3249
+3243
+3244
+3250
+3258
+3287
+3288
+3312
+3320
+3352
+3351
+3369
+3360
+3362
+3364
+3374
+3383
+3364
+3381
+3390
+3391
+3394
+3397
+3407
+3412
+3424
+3432
+3448
+3446
+3447
+3456
+3457
+3467
+3468
+3469
+3476
+3477
+3479
+3514
+3523
+3517
+3518
+3519
+3525
+3528
+3529
+3531
+3532
+3540
+3541
+3544
+3540
+3541
+3542
+3556
+3562
+3553
+3555
+3556
+3558
+3560
+3564
+3551
+3561
+3562
+3561
+3562
+3523
+3516
+3505
+3508
+3511
+3492
+3494
+3512
+3494
+3493
+3487
+3488
+3504
+3522
+3528
+3537
+3550
+3567
+3569
+3582
+3583
+3593
+3613
+3641
+3636
+3647
+3651
+3668
+3679
+3676
+3685
+3665
+3667
+3669
+3674
+3673
+3675
+3689
+3700
+3692
+3698
+3691
+3699
+3685
+3686
+3687
+3696
+3697
+3699
+3700
+3701
+3695
+3696
+3698
+3696
+3699
+3688
+3690
+3699
+3688
+3692
+3693
+3698
+3685
+3680
+3684
+3685
+3686
+3693
+3698
+3705
+3702
+3684
+3686
+3680
+3681
+3683
+3670
+3671
+3676
+3681
+3690
+3681
+3694
+3695
+3708
+3710
+3691
+3687
+3693
+3682
+3678
+3666
+3671
+3675
+3674
+3675
+3672
+3674
+3675
+3674
+3673
+3644
+3646
+3638
+3639
+3637
+3638
+3646
+3652
+3687
+3688
+3693
+3669
+3676
+3683
+3684
+3699
+3690
+3674
+3678
+3677
+3683
+3680
+3703
+3699
+3706
+3707
+3699
+3695
+3705
+3704
+3705
+3719
+3739
+3742
+3743
+3728
+3729
+3730
+3743
+3742
+3752
+3753
+3754
+3760
+3771
+3773
+3782
+3784
+3794
+3814
+3823
+3837
+3840
+3855
+3848
+3861
+3864
+3841
+3844
+3846
+3852
+3853
+3865
+3868
+3877
+3879
+3907
+3932
+3933
+3902
+3914
+3920
+3922
+3908
+3922
+3927
+3926
+3928
+3908
+3912
+3881
+3907
+3890
+3891
+3885
+3900
+3902
+3904
+3901
+3907
+3912
+3914
+3925
+3937
+3938
+3946
+3948
+3947
+3962
+3969
+3974
+3977
+3978
+3985
+3982
+3980
+4004
+4014
+4009
+4010
+4009
+4010
+4029
+4026
+4031
+4032
+4034
+4013
+4016
+4017
+4019
+4020
+4028
+4031
+4032
+4033
+4040
+4041
+4046
+4059
+4065
+4077
+4078
+4079
+4094
+4086
+4089
+4090
+4092
+4091
+4070
+4110
+4111
+4099
+4108
+4112
+4092
+4097
+4099
+4100
+4140
+4141
+4138
+4143
+4142
+4132
+4134
+4143
+4157
+4161
+4185
+4180
+4192
+4193
+4199
+4201
+4203
+4187
+4190
+4187
+4188
+4190
+4200
+4201
+4193
+4192
+4193
+4191
+4194
+4197
+4193
+4200
+4201
+4210
+4216
+4234
+4239
+4225
+4226
+4228
+4232
+4226
+4227
+4235
+4238
+4239
+4244
+4256
+4255
+4254
+4229
+4227
+4233
+4254
+4255
+4251
+4252
+4251
+4247
+4250
+4247
+4249
+4250
+4235
+4236
+4232
+4245
+4247
+4243
+4244
+4246
+4252
+4266
+4271
+4273
+4277
+4279
+4280
+4278
+4279
+4269
+4299
+4300
+4301
+4305
+4290
+4294
+4303
+4304
+4307
+4325
+4326
+4327
+4312
+4313
+4316
+4315
+4319
+4332
+4333
+4356
+4354
+4358
+4366
+4369
+4370
+4381
+4382
+4381
+4402
+4403
+4410
+4409
+4421
+4424
+4448
+4450
+4447
+4475
+4472
+4486
+4464
+4463
+4466
+4465
+4468
+4477
+4478
+4490
+4527
+4528
+4532
+4533
+4525
+4527
+4534
+4556
+4558
+4559
+4555
+4562
+4565
+4566
+4565
+4596
+4604
+4621
+4648
+4649
+4650
+4655
+4656
+4661
+4668
+4682
+4675
+4693
+4686
+4680
+4681
+4685
+4686
+4693
+4694
+4698
+4694
+4706
+4716
+4717
+4718
+4720
+4724
+4730
+4731
+4738
+4740
+4738
+4741
+4740
+4743
+4750
+4751
+4752
+4759
+4796
+4807
+4800
+4815
+4817
+4825
+4853
+4831
+4836
+4839
+4847
+4844
+4851
+4855
+4860
+4858
+4859
+4865
+4874
+4875
+4902
+4910
+4909
+4908
+4922
+4924
+4921
+4922
+4911
+4910
+4907
+4911
+4912
+4936
+4918
+4921
+4915
+4927
+4929
+4931
+4932
+4939
+4944
+4945
+4946
+4949
+4947
+4954
+4964
+4965
+4977
+4978
+4982
+4975
+4978
+4982
+4981
+4985
+4993
+4994
+5000
+5017
+5015
+5039
+5037
+5035
+5047
+5064
+5066
+5072
+5071
+5076
+5078
+5082
+5100
+5102
+5107
+5106
+5104
+5105
+5106
+5105
+5117
+5109
+5110
+5116
+5117
+5118
+5100
+5102
+5103
+5110
+5111
+5126
+5135
+5136
+5134
+5135
+5175
+5177
+5176
+5177
+5203
+5202
+5223
+5226
+5223
+5230
+5256
+5260
+5265
+5267
+5268
+5274
+5273
+5275
+5278
+5284
+5270
+5271
+5272
+5279
+5290
+5298
+5302
+5318
+5321
+5324
+5336
+5335
+5343
+5347
+5352
+5358
+5367
+5368
+5371
+5368
+5373
+5374
+5364
+5367
+5364
+5356
+5360
+5352
+5361
+5356
+5373
+5374
+5375
+5386
+5396
+5398
+5394
+5396
+5398
+5397
+5412
+5413
+5405
+5386
+5389
+5388
+5387
+5403
+5406
+5420
+5429
+5430
+5441
+5449
+5458
+5467
+5466
+5467
+5479
+5478
+5479
+5485
+5525
+5524
+5525
+5524
+5492
+5493
+5497
+5502
+5503
+5504
+5505
+5506
+5515
+5512
+5511
+5513
+5519
+5520
+5521
+5538
+5556
+5567
+5568
+5569
+5587
+5578
+5579
+5581
+5577
+5581
+5591
+5592
+5570
+5572
+5578
+5572
+5575
+5577
+5578
+5586
+5585
+5577
+5578
+5575
+5581
+5569
+5572
+5585
+5576
+5579
+5568
+5569
+5572
+5571
+5572
+5574
+5567
+5572
+5575
+5580
+5583
+5586
+5600
+5602
+5601
+5606
+5609
+5611
+5614
+5623
+5620
+5632
+5640
+5641
+5636
+5620
+5626
+5628
+5636
+5645
+5646
+5623
+5622
+5654
+5673
+5679
+5688
+5695
+5690
+5692
+5709
+5710
+5712
+5722
+5721
+5735
+5746
+5758
+5786
+5766
+5769
+5780
+5781
+5793
+5811
+5812
+5809
+5823
+5825
+5804
+5794
+5795
+5787
+5788
+5819
+5826
+5830
+5832
+5809
+5803
+5804
+5805
+5824
+5825
+5831
+5841
+5842
+5843
+5832
+5838
+5839
+5841
+5840
+5837
+5838
+5832
+5834
+5848
+5852
+5863
+5858
+5859
+5862
+5861
+5863
+5864
+5868
+5875
+5861
+5860
+5837
+5838
+5840
+5841
+5842
+5862
+5877
+5878
+5877
+5878
+5881
diff --git a/inputs/02.txt b/inputs/02.txt
new file mode 100644
index 0000000..b71a00f
--- /dev/null
+++ b/inputs/02.txt
@@ -0,0 +1,1000 @@
+forward 3
+down 7
+forward 7
+down 4
+down 9
+down 7
+forward 5
+forward 9
+forward 3
+forward 8
+down 4
+down 6
+down 3
+forward 7
+forward 1
+forward 4
+down 1
+forward 7
+forward 9
+down 3
+down 1
+down 5
+forward 8
+down 2
+down 9
+forward 3
+down 9
+down 7
+down 6
+down 1
+forward 4
+forward 9
+forward 8
+down 3
+down 9
+down 5
+forward 5
+down 7
+down 7
+up 1
+down 2
+up 1
+down 7
+up 1
+up 1
+down 8
+down 8
+forward 2
+down 5
+forward 9
+forward 8
+forward 4
+up 2
+down 9
+down 7
+forward 4
+up 7
+up 4
+down 4
+down 3
+forward 8
+down 8
+up 2
+up 1
+forward 3
+up 6
+up 8
+down 5
+down 4
+down 4
+forward 1
+down 8
+forward 3
+forward 5
+forward 4
+forward 2
+forward 7
+up 5
+up 2
+forward 2
+forward 5
+down 4
+up 6
+forward 3
+forward 1
+forward 1
+forward 6
+forward 7
+forward 1
+forward 8
+forward 4
+forward 4
+forward 8
+down 6
+down 8
+forward 4
+forward 1
+down 8
+forward 3
+forward 3
+forward 9
+forward 9
+forward 3
+up 1
+down 2
+down 5
+forward 4
+forward 5
+forward 7
+forward 4
+forward 4
+up 5
+forward 1
+down 9
+down 9
+down 1
+up 7
+down 8
+up 6
+down 4
+forward 7
+down 8
+down 1
+forward 4
+forward 5
+forward 9
+down 2
+forward 7
+forward 7
+up 2
+up 1
+forward 9
+forward 1
+forward 7
+up 3
+forward 8
+forward 1
+down 6
+down 6
+down 4
+forward 2
+forward 1
+down 3
+down 4
+down 2
+forward 9
+up 8
+down 4
+down 3
+down 1
+down 1
+forward 6
+forward 6
+down 7
+forward 1
+forward 5
+forward 9
+forward 5
+forward 1
+up 8
+forward 7
+up 3
+forward 6
+down 5
+up 8
+down 4
+down 8
+forward 2
+up 7
+forward 9
+down 9
+forward 1
+down 5
+forward 8
+down 7
+forward 8
+forward 1
+forward 5
+down 4
+down 1
+forward 4
+up 6
+down 3
+down 1
+forward 1
+forward 1
+up 8
+down 9
+forward 8
+forward 5
+down 5
+forward 1
+up 9
+down 6
+down 4
+up 2
+forward 5
+down 7
+up 1
+forward 3
+up 5
+forward 9
+up 6
+down 4
+forward 6
+down 8
+down 2
+forward 3
+forward 4
+down 5
+down 7
+down 4
+up 3
+up 8
+down 8
+up 8
+down 8
+forward 8
+down 3
+up 3
+forward 8
+down 6
+forward 2
+down 8
+down 5
+up 2
+forward 1
+forward 4
+down 1
+forward 5
+forward 5
+forward 2
+forward 2
+forward 4
+down 7
+forward 6
+up 6
+down 8
+forward 4
+forward 6
+forward 2
+down 8
+down 2
+up 1
+down 8
+forward 9
+up 5
+forward 8
+up 9
+down 1
+down 2
+forward 6
+down 9
+forward 3
+up 8
+up 4
+down 8
+forward 2
+down 1
+forward 6
+forward 4
+down 4
+forward 4
+up 8
+down 6
+forward 3
+up 2
+up 6
+down 1
+down 3
+down 1
+up 6
+down 9
+up 6
+forward 9
+down 4
+forward 3
+forward 1
+up 7
+down 1
+forward 5
+up 1
+up 8
+forward 5
+down 5
+forward 2
+up 8
+up 7
+forward 4
+up 7
+up 4
+forward 5
+forward 3
+down 9
+forward 1
+down 8
+forward 3
+up 3
+down 7
+forward 4
+down 7
+down 5
+down 8
+down 8
+forward 6
+forward 5
+up 4
+down 6
+forward 4
+up 2
+up 4
+down 4
+down 9
+forward 7
+down 8
+forward 6
+forward 5
+up 8
+down 6
+forward 1
+up 2
+forward 5
+forward 7
+down 4
+down 6
+forward 9
+forward 2
+up 6
+up 6
+forward 1
+up 6
+forward 8
+down 7
+forward 1
+down 1
+up 9
+up 1
+forward 1
+forward 7
+forward 5
+down 4
+forward 6
+forward 4
+down 8
+up 6
+up 8
+forward 6
+forward 3
+up 6
+forward 6
+down 8
+down 5
+down 5
+down 2
+down 6
+forward 1
+forward 4
+forward 5
+down 5
+forward 6
+forward 2
+forward 2
+up 7
+up 6
+up 7
+forward 7
+forward 6
+down 7
+down 7
+up 4
+forward 5
+forward 2
+down 6
+up 4
+forward 8
+down 1
+down 5
+up 6
+down 4
+down 3
+down 8
+forward 8
+down 9
+forward 8
+forward 6
+down 4
+down 3
+forward 6
+up 4
+up 9
+forward 3
+down 3
+down 9
+forward 1
+down 7
+forward 2
+up 7
+down 6
+forward 5
+down 8
+down 1
+forward 8
+down 4
+up 3
+down 5
+forward 6
+down 7
+forward 3
+forward 6
+forward 8
+forward 6
+down 4
+down 6
+forward 9
+up 8
+forward 2
+forward 8
+forward 1
+forward 1
+forward 3
+forward 8
+forward 6
+forward 8
+down 5
+down 2
+down 6
+up 4
+forward 5
+forward 9
+forward 1
+down 3
+down 6
+down 7
+forward 5
+forward 8
+up 1
+forward 4
+up 3
+forward 6
+down 3
+down 7
+down 1
+down 1
+forward 8
+forward 3
+forward 2
+forward 1
+forward 3
+forward 7
+up 6
+down 8
+forward 3
+forward 8
+forward 1
+forward 4
+up 3
+down 7
+up 9
+up 6
+forward 1
+forward 6
+forward 5
+down 5
+down 2
+forward 8
+up 8
+down 4
+forward 6
+down 2
+forward 1
+down 8
+forward 2
+forward 9
+forward 1
+down 9
+down 1
+down 9
+down 1
+up 9
+forward 3
+forward 7
+forward 3
+down 5
+up 3
+forward 4
+up 1
+forward 2
+down 8
+forward 8
+down 1
+up 9
+down 7
+forward 9
+up 6
+down 3
+forward 9
+down 2
+down 3
+up 5
+up 5
+forward 8
+down 2
+forward 2
+up 3
+down 8
+down 1
+down 9
+forward 5
+down 5
+down 5
+down 4
+down 8
+forward 7
+up 3
+up 4
+up 4
+up 7
+down 2
+down 6
+up 3
+down 9
+up 2
+forward 6
+forward 1
+down 7
+down 5
+forward 6
+down 6
+up 4
+down 4
+down 8
+up 5
+forward 9
+down 8
+forward 1
+forward 2
+forward 8
+forward 2
+forward 3
+up 9
+up 8
+up 9
+up 6
+down 5
+forward 7
+up 8
+forward 1
+down 3
+down 8
+forward 3
+up 6
+down 2
+forward 2
+up 4
+up 4
+forward 6
+forward 1
+forward 4
+down 3
+down 1
+up 7
+down 9
+up 1
+down 9
+down 4
+up 2
+forward 8
+down 3
+forward 7
+up 6
+forward 7
+up 2
+forward 5
+down 3
+up 2
+down 3
+down 8
+forward 5
+down 8
+forward 7
+up 6
+down 4
+forward 4
+down 1
+up 3
+forward 6
+down 1
+down 2
+down 2
+forward 7
+down 6
+down 2
+forward 9
+down 2
+forward 2
+down 2
+forward 6
+down 9
+up 4
+up 7
+up 6
+down 3
+forward 3
+down 7
+down 6
+forward 8
+down 4
+up 3
+down 1
+forward 8
+down 4
+forward 5
+forward 1
+down 7
+forward 5
+up 3
+down 7
+forward 3
+down 4
+up 1
+down 5
+forward 8
+down 2
+forward 9
+forward 3
+up 2
+down 9
+forward 5
+up 7
+down 7
+down 1
+down 7
+down 8
+forward 1
+down 9
+down 7
+forward 4
+down 5
+forward 9
+down 6
+down 1
+forward 2
+up 4
+up 3
+down 1
+forward 4
+up 3
+forward 4
+up 2
+forward 6
+down 6
+up 8
+down 3
+forward 5
+down 2
+forward 9
+down 3
+down 7
+forward 4
+down 5
+up 9
+up 9
+down 4
+up 5
+forward 1
+down 8
+up 8
+up 4
+up 2
+up 8
+forward 5
+down 5
+up 1
+down 6
+down 3
+up 4
+forward 3
+forward 1
+forward 1
+up 4
+forward 1
+down 6
+forward 7
+forward 4
+forward 4
+forward 9
+forward 6
+down 6
+forward 4
+up 7
+down 5
+down 2
+forward 3
+down 7
+forward 8
+down 7
+forward 4
+up 9
+down 1
+forward 3
+forward 1
+forward 4
+down 2
+up 2
+down 1
+down 4
+down 7
+forward 5
+forward 3
+up 5
+forward 1
+down 4
+down 8
+up 4
+up 1
+down 1
+down 4
+down 2
+down 4
+up 8
+down 3
+forward 8
+up 5
+down 4
+forward 9
+forward 7
+down 4
+forward 7
+forward 9
+forward 6
+forward 9
+up 9
+down 3
+up 4
+down 8
+forward 9
+up 2
+up 3
+forward 8
+forward 3
+forward 1
+forward 7
+forward 8
+forward 9
+down 7
+forward 3
+forward 3
+forward 4
+up 8
+forward 1
+forward 5
+up 9
+down 2
+down 7
+forward 5
+up 4
+forward 9
+down 9
+up 2
+forward 7
+down 9
+up 8
+up 1
+up 1
+up 5
+forward 4
+down 2
+forward 7
+down 1
+down 8
+down 8
+forward 3
+forward 8
+up 9
+forward 7
+forward 6
+forward 3
+forward 7
+up 3
+up 6
+forward 5
+forward 5
+down 2
+down 7
+down 7
+up 7
+forward 6
+forward 1
+forward 7
+up 6
+down 9
+forward 7
+forward 1
+up 7
+forward 4
+forward 9
+up 2
+down 5
+down 6
+down 4
+forward 1
+forward 7
+forward 4
+forward 5
+down 2
+forward 5
+down 9
+forward 7
+forward 4
+up 5
+down 6
+forward 2
+forward 4
+forward 8
+up 1
+down 2
+up 9
+forward 6
+down 1
+forward 6
+forward 4
+down 6
+forward 6
+up 4
+down 5
+forward 8
+down 3
+up 4
+forward 3
+down 6
+up 7
+down 8
+down 5
+down 7
+forward 4
+down 1
+forward 5
+up 9
+up 3
+down 4
+forward 9
+forward 6
+forward 1
+up 5
+down 5
+forward 1
+forward 6
+down 4
+up 7
+forward 5
+down 5
+forward 1
+forward 5
+down 4
+forward 6
+down 6
+down 5
+down 5
+forward 4
+down 5
+forward 2
+down 9
+down 6
+down 5
+forward 5
+down 9
+down 7
+up 8
+down 3
+forward 6
+down 4
+forward 8
+forward 9
+down 1
+up 3
+forward 4
+up 3
+forward 7
+down 5
+up 8
+forward 1
+up 1
+down 2
+forward 1
+up 9
+down 4
+forward 1
+up 3
+down 9
+up 8
+down 2
+up 4
+forward 2
+forward 8
+up 8
+forward 9
+forward 2
+down 4
+forward 8
+down 4
+forward 9
+down 1
+up 8
+forward 6
+down 4
+down 8
+forward 1
+forward 1
+forward 5
+forward 9
+up 4
+down 7
+forward 4
+down 5
+forward 1
+down 4
+up 8
+up 4
+forward 2
+forward 9
+down 8
+down 3
+down 2
+up 3
+down 1
+down 8
+forward 5
+down 6
+down 5
+forward 8
+down 8
+down 1
+forward 1
+forward 3
+forward 7
+forward 1
+up 2
+up 3
+forward 9
+down 2
+forward 5
+down 8
+forward 7
+forward 3
+up 5
+forward 1
+forward 1
+up 8
+down 1
+down 2
+down 7
+down 1
+down 9
+forward 7
+down 8
+down 4
+up 8
+forward 1
+down 6
+forward 9
+forward 7
+up 2
+forward 3
+forward 2
+up 3
+up 6
+up 1
+down 1
+up 9
+forward 8
+forward 6
+down 6
+up 8
+down 8
+forward 5
+forward 7
+down 7
+forward 3
+forward 9
+down 8
+down 8
+forward 2
+up 7
+down 4
+down 7
+up 6
+down 3
+forward 1
+forward 8
+down 5
+down 6
+up 5
+forward 8
+forward 6
+up 8
+forward 8
+up 3
+up 6
+up 3
+forward 1
diff --git a/inputs/03.txt b/inputs/03.txt
new file mode 100644
index 0000000..a7f46b0
--- /dev/null
+++ b/inputs/03.txt
@@ -0,0 +1,1000 @@
+000011000110
+100110100101
+101100101001
+001100010000
+011000100100
+110100101111
+110110001001
+010010100101
+100111000010
+001010110001
+110111010001
+110001011000
+011110010100
+001001010111
+110010111111
+111011010111
+100010001011
+010001100010
+111110111111
+001000101111
+010111110110
+000000001100
+001000110101
+111111010011
+111010011100
+111010010110
+100110011000
+110110000010
+101101011101
+111100000001
+110000101011
+000110111000
+110101110000
+110001100001
+110101001101
+100011011000
+110101000111
+100010100111
+111101001100
+000110000110
+101011000100
+011100100001
+101110111010
+110011011101
+010111001101
+110001001101
+100000000101
+010011100100
+111001111111
+101111111111
+110000101010
+000110100001
+111100111000
+000010000100
+010100101001
+000000111111
+111100111011
+000010100111
+100101101110
+101001110110
+100101000111
+111100101011
+011101101000
+101010110101
+010011000100
+111001101110
+001110000110
+000111001011
+010110101011
+100001011001
+001111000111
+110000111000
+111111111011
+100010110011
+001011000100
+100011101111
+111101101000
+111100111010
+000110001100
+010000110001
+000101010101
+110100011000
+001100101111
+110110101010
+101111100111
+011111110001
+011000001100
+110101100001
+101010000111
+101000001000
+001101110100
+100000111010
+011101110000
+011100100100
+111000111010
+100001111110
+100001001111
+011111110010
+001110101011
+111100011010
+010100010111
+000000110001
+110100010001
+110100111101
+101110110000
+111010101010
+101100110001
+010011011001
+111000001001
+100001110101
+011001000110
+010001100101
+100111010101
+100011011010
+001101110011
+100111101101
+111000010010
+011110110001
+100110000010
+000000100011
+100010110100
+101001010101
+101001101100
+000111111000
+101010110100
+010011000001
+110110011101
+111001010110
+011100111101
+001100010001
+011101000001
+001001101001
+010111001011
+111000000010
+111011011101
+101010011101
+001001001110
+001011100011
+100100111111
+101110101111
+111001011101
+000010001100
+010110101010
+001101000010
+010011101110
+110000001001
+010111001111
+100011000010
+100000110010
+100111110101
+100111111011
+010000000101
+111000101101
+010111001010
+100100110101
+100110000110
+110010110111
+000000111101
+010110011100
+100000101000
+000110001111
+001001110110
+101010111001
+101010100110
+101101100111
+001111010110
+001001110100
+011010011111
+101100101010
+001010011010
+101111010100
+100110100001
+111001110101
+110100001110
+000011001100
+001101011110
+001011111010
+101100011101
+001111001110
+111000111000
+100111001010
+010100111100
+010100000111
+010100101011
+010100000001
+100111000110
+111011010000
+100011011001
+111001001110
+000000010101
+111001011110
+010101011000
+110010001001
+100011000000
+111100001100
+001010000100
+100000100110
+100011110110
+010010110001
+011110000000
+000000101000
+010001011001
+011010111010
+011010101110
+001101011011
+111100111001
+011011010110
+111110100101
+100001110001
+010111011100
+111100100001
+110011100010
+001010001011
+100100111100
+000010010001
+101111010000
+111000001101
+000110001011
+000101101001
+001001011011
+001001010010
+011110111011
+001001100001
+110011001011
+000011110000
+001011011101
+001010010010
+011100111110
+101000101000
+110000011001
+010001100001
+011010100010
+100101110010
+111100001010
+001110000010
+011101000000
+110100110011
+010010011101
+101001000100
+110111110010
+001100000011
+000001110110
+000101010010
+100000011011
+000000000010
+011111000111
+110010101011
+100101101001
+010110010101
+000100101000
+001011100010
+001110100010
+110111101001
+101110110100
+011100110101
+011101100111
+001100101100
+111101000010
+011110110100
+111001100000
+111110011000
+001101001110
+101000011111
+110010010110
+111011100011
+110010111001
+101111110111
+101001100110
+011010011010
+000010100101
+110110100001
+000101001001
+000001111111
+010010111011
+100010110111
+110111011111
+010001001101
+000110110101
+010010010100
+101011001111
+111000011110
+110110010010
+111110100110
+100110000001
+011111100001
+001100010100
+001101000101
+011011100010
+011110101111
+001101110110
+110101010110
+000110101101
+111010111000
+011001011111
+100011111101
+110100111100
+100111101100
+001011001110
+111000010100
+001100000110
+111011010101
+000001001011
+111100000000
+010010111101
+110011101010
+011110111110
+011111011110
+111001001001
+000100100111
+001010010101
+101011101101
+110011010111
+011000001000
+111001000101
+101001110011
+011110110101
+111101111011
+111100101100
+001010110100
+101100111000
+011011000000
+101000100011
+100001100110
+001000011101
+001110100000
+011111111101
+010001010111
+001101001000
+100101100100
+000011010110
+100000000100
+011100011111
+000010110011
+100000100010
+101100101110
+100100000010
+001001111001
+011100110111
+011111100011
+010000101100
+100101001101
+000110010100
+110101010010
+100010100011
+110101000001
+010000000110
+110110001011
+100011001001
+111111110000
+111010000011
+011001010101
+011111101000
+100010101111
+010100100000
+100110110100
+101111010011
+011101010001
+100100001010
+001110000000
+001110000101
+111010000010
+101000010000
+111101011111
+001001110001
+011001000100
+000011101100
+100010010111
+110000101111
+110010100100
+100000011111
+011100100011
+000001101000
+101010100001
+010001100011
+001010111110
+111010111110
+011011000100
+001101100000
+001101100011
+111010011111
+111110110010
+010110100111
+101011011010
+110010011001
+001011010010
+000101100000
+100000100011
+000111100001
+001111110101
+000011101001
+110101010100
+111011010110
+101111011000
+001000100100
+010110011001
+110111000011
+001010011000
+110011000010
+111101001000
+000001010001
+101011110111
+011001100110
+101101101101
+100011010110
+110001010000
+110001010001
+100011100110
+111111011100
+000101101000
+110000111001
+111100010011
+101010110001
+101100001011
+110100110001
+100110111011
+011100100111
+110001011111
+011010100101
+101011111100
+111000010101
+110110110100
+111101100011
+001110100101
+100010111001
+100010001001
+100001010101
+010011001100
+000101010111
+101100010100
+000101000111
+001111101100
+111000001100
+100110101101
+000001100010
+100010011011
+011001000011
+110000010100
+010100001011
+101011001110
+000110110000
+110011000110
+101101111101
+001001000111
+001001011111
+110100011011
+101110010011
+100001011000
+010010110111
+011001011000
+011011101100
+100110000100
+001101110000
+011011001101
+111110001011
+110111100101
+101001010100
+100101110101
+100010000001
+011110011010
+000010011100
+111011000101
+100110001011
+000101101011
+011100100010
+000010111000
+000001100000
+000100001000
+110110101110
+101000100110
+100101010001
+011010010100
+000001111110
+001100010110
+001001101111
+111010001011
+100100101111
+011100011011
+100111011110
+000010010101
+011001110001
+001011011000
+011010100110
+110011011111
+001110011101
+111101010001
+101010111000
+110000010110
+110110001000
+011000111001
+111010100111
+101011011110
+001001011001
+101011100111
+111011110010
+010100110101
+101001111010
+111110011111
+110110010000
+101101010101
+000101111100
+001110101010
+111111111000
+001001000100
+111011011111
+111000010001
+111101100010
+001000011100
+100100000001
+111101010011
+001100011110
+110000001100
+000101011000
+101000101111
+100000101100
+001010100001
+001100111001
+000110011011
+000111100000
+010001000001
+010010111001
+101111001101
+110111011101
+101010001110
+101010100111
+111101000001
+101001011010
+011111010100
+100010111000
+110111110001
+001110111000
+000010001111
+110111001101
+110110011110
+000001001111
+110100000000
+100101011001
+111101110001
+001000000000
+110110001010
+010000101111
+110000000100
+111100110100
+001110000011
+101100111111
+100101011110
+010010101110
+001011001001
+011000101000
+100000001010
+010001110001
+011001111001
+111100001111
+000111100011
+110100100111
+101101111011
+101010111101
+110000001011
+011011010000
+001000100000
+101101001100
+110111101000
+111011101011
+110011101100
+000010010000
+111100010100
+000111011101
+110110110011
+100110100000
+101010000110
+101001110001
+101110001101
+100010111110
+011001001001
+011111111001
+000101010110
+010011110111
+000000000011
+001101001100
+001001110101
+010010101100
+101100000110
+010110011111
+101000010110
+011001011010
+011111110000
+101101111001
+110011110110
+101101101010
+111111111110
+011001110110
+000010111101
+100110110001
+000111010001
+000011001101
+100110111111
+101010011110
+101010011011
+110011010001
+101001100000
+111100000111
+000111101000
+011011010111
+010111000011
+000111100101
+101111011111
+101110011111
+100010001000
+101111000001
+100101010101
+101011110010
+001010111111
+010101010001
+110101110110
+000000111110
+010001101000
+111111001001
+110111101111
+100100110000
+110111010010
+111011000000
+011100010001
+001100100010
+010110010011
+111101010000
+011010101011
+100110010101
+011100000110
+001110011001
+001010100000
+101000000000
+101011101110
+111100110101
+100111110100
+011000110010
+110011010011
+101011011101
+101001110111
+011010111111
+101011000010
+001100110010
+111100100111
+100110111000
+111111010010
+010111010100
+101000101010
+011000011111
+000001110100
+101110111000
+001001011000
+011001100101
+011111000000
+110001101010
+010000101110
+000001110010
+000000000101
+001010111001
+101101101001
+110100100100
+001000100011
+010000000000
+010111010101
+011010001010
+000101010011
+101011001010
+001010101101
+101110001010
+101101110000
+001000010001
+100001000001
+010100000011
+011111011010
+001110011111
+010000110000
+100100010010
+111011111101
+010010010010
+110010000000
+011000111100
+001110010101
+100110011010
+110101000011
+110011000001
+110101111000
+111001011100
+101010000100
+001001110011
+101011110101
+101011010101
+110011111000
+100001011010
+000010000111
+001010110010
+000110010000
+101101101111
+111010010000
+011010000100
+011110010101
+011010011101
+010001011010
+001111101010
+100001001000
+010010110110
+000001011101
+001001101011
+111001110010
+101101100100
+001000101110
+000000010100
+001010110000
+011010101000
+010001001001
+100110111110
+110111001010
+111110000111
+101111011110
+001110110001
+001101110001
+111000000011
+010000010001
+011001111010
+010100111111
+111000000111
+101011001100
+111000100101
+101001110100
+101110100000
+100011001110
+010111101110
+000100000100
+110011110011
+011110101010
+101100001000
+011010111101
+111111111010
+100000101011
+001110101001
+011100000111
+010000101101
+001101011000
+011000101010
+000100111001
+110111100000
+000111111101
+111001011011
+000011001110
+011110010000
+100010101110
+111001110001
+000101011010
+110001100101
+010011011000
+000000100100
+000101001101
+111110011110
+000010110110
+101100001100
+010111000111
+000110010110
+110110010100
+111000110011
+111011011100
+011001000000
+100101000110
+100011010101
+101011101111
+010011111010
+000110011100
+111010010010
+111010111100
+010111100101
+101101001101
+010110100100
+011100010101
+000001100110
+001000110110
+011101000010
+111100101111
+110110001110
+000011100010
+101011000001
+110100100000
+001111111000
+110111001111
+000100111110
+111100000110
+010111010010
+001000101001
+000001010000
+100010110010
+101101110100
+111101100001
+000101111111
+000101001110
+110010001101
+101000011001
+111001001111
+111000000000
+000101110110
+111001111001
+010010010101
+110011011000
+011000001001
+110001010010
+101100110010
+101011010011
+000000110110
+111000011000
+101001101011
+111100100100
+111011111001
+111101001110
+101000001010
+000111000101
+110011010010
+011101101001
+111000110010
+111010011010
+110001011101
+101000111100
+100111011111
+011000101101
+011111101101
+100001000111
+010001101010
+110100010000
+110100011100
+111001100001
+001101010100
+000101100110
+001111001000
+011001011100
+000100011001
+011100010010
+101010101100
+111011110101
+101011000111
+100111010100
+111001100100
+110011101011
+010011000110
+111101100101
+101101011000
+000101000100
+010001001110
+110000011110
+100100100101
+011000100000
+010111010000
+000101011001
+110110101100
+000011010000
+010110100000
+110010101101
+111100111111
+001101101001
+000110000010
+100101111101
+101101010010
+110111011000
+000110000100
+001000001001
+010010101010
+101111010101
+010010000000
+101011011111
+111110010010
+111000111011
+000001011100
+010101111111
+011000101100
+000001011001
+100001011011
+100001101110
+110010000001
+001011110100
+011110010001
+111100110000
+101000111111
+110000011011
+011100111010
+001010011101
+100110001100
+110011011010
+111001000100
+010100111110
+010001110111
+010011010010
+000101001000
+010011101010
+000001110101
+010101101101
+010001100111
+101001111111
+111011011011
+100001100011
+101101111000
+110011011001
+001110110010
+011101001101
+010101010010
+110001110001
+010011010000
+110000000111
+011100110100
+010000011000
+011001111011
+111010110010
+101100010011
+011011001000
+111011101101
+010000011101
+000001010101
+101011100011
+010110111011
+001100100000
+111011100001
+111111001000
+111110110001
+100001110000
+010001001010
+100111010011
+000010000000
+010011000010
+110101110101
+000110011110
+011111111010
+011010101101
+110110000101
+111000110000
+111011000110
+111101000011
+101110010110
+000001000111
+001111111001
+110101011001
+111010110100
+100000000011
+010110110011
+100011100111
+001111101110
+110010111000
+001100111010
+101010100101
+000101110111
+011001110010
+010110001100
+101010111111
+010010011011
+100110011111
+100010010000
+110100001000
+001001000010
+101010100100
+100111001011
+010100000000
+100100100111
+110001101011
+011000110100
+111000001000
+011111110110
+011111000101
+000000011011
+100111000111
+010001110100
+101000010001
+010011100010
+111010001010
+101101110111
+010100010101
+000100001111
+001110000001
+000011110001
+101000010101
+111100100010
+101100010110
+000111001101
+101100101111
+110011101001
+111110110101
+000110011010
+010100100010
+111100010110
+011110110110
+101011101000
+100001000010
+001001101101
+110111111101
+111001110100
+111001001000
+011011100101
+010111011110
+111000011111
+110111100100
+010011110110
+010000111011
+100000001001
+101110010101
+100110111010
+100001000000
+110100110111
diff --git a/src/01.lisp b/src/01.lisp
new file mode 100644
index 0000000..9646e40
--- /dev/null
+++ b/src/01.lisp
@@ -0,0 +1,24 @@
+(load "~/quicklisp/setup.lisp")
+(ql:quickload "uiop")
+
+(defun get-file-lines (name)
+ (uiop:read-file-lines name))
+
+;; Turn the input file into whatever form you will use for both parts
+;; (get-file-lines) and (get-file-string) will be useful
+(defun parse-input (input-file)
+ (mapcar 'parse-integer (get-file-lines input-file)))
+
+;; Loops through two item windows on input and counts each time the first is less than the second
+(defun part-a (parsed-input)
+ (let ((sum 0) (prev 0))
+ (dolist (i parsed-input)
+ (if (> i prev) (progn (incf sum 1) (setf prev i))))
+ sum))
+
+;; Similar to part a, but with four item windows, comparing the sum of the first 3 with the next 3
+(defun part-b (parsed-input)
+ (loop for (w x y z) on parsed-input until (null z) if (< (+ w x y) (+ x y z)) count w))
+
+(time (format t "part 1: ~a~%" (part-a (parse-input "../inputs/01.txt"))))
+(time (format t "part 1: ~a~%" (part-b (parse-input "../inputs/01.txt"))))
diff --git a/src/02.lisp b/src/02.lisp
new file mode 100644
index 0000000..970e363
--- /dev/null
+++ b/src/02.lisp
@@ -0,0 +1,33 @@
+(load "~/quicklisp/setup.lisp")
+(ql:quickload 'uiop :silent t)
+(ql:quickload 'cl-ppcre :silent t)
+
+(defun get-file-lines (name)
+ (uiop:read-file-lines name))
+
+;; Turn the input file into whatever form you will use for both parts
+;; (get-file-lines) and (get-file-string) will be useful
+(defun parse-input (input-file)
+ (let ((input (mapcar (lambda (s) (cl-ppcre:split " " s)) (get-file-lines input-file))))
+ (mapcar (lambda (x) (cons (intern (string-upcase (CAR x))) (parse-integer (CADR x)))) input)))
+
+(defun part-a (parsed-input)
+ (let ((h 0) (v 0))
+ (dolist (i parsed-input)
+ (case (car i)
+ (forward (incf h (cdr i)))
+ (up (decf v (cdr i)))
+ (down (incf v (cdr i)))))
+ (* h v)))
+
+(defun part-b (parsed-input)
+ (let ((h 0) (v 0) (a 0))
+ (dolist (i parsed-input)
+ (case (car i)
+ (forward (progn (incf v (* (cdr i) a)) (incf h (cdr i))))
+ (up (decf a (cdr i)))
+ (down (incf a (cdr i)))))
+ (* h v)))
+
+(time (format t "part 2: ~a~%" (part-a (parse-input "../inputs/02.txt"))))
+(time (format t "part 2: ~a~%" (part-b (parse-input "../inputs/02.txt"))))
diff --git a/src/03.lisp b/src/03.lisp
new file mode 100644
index 0000000..ae2f0bd
--- /dev/null
+++ b/src/03.lisp
@@ -0,0 +1,45 @@
+(load "~/quicklisp/setup.lisp")
+(ql:quickload "uiop")
+
+(defun get-file-lines (name)
+ (uiop:read-file-lines name))
+
+(defun parse-bin-char (x) (case x (#\1 1) (#\0 0)))
+
+;; Turn the input file into whatever form you will use for both parts
+;; (get-file-lines) and (get-file-string) will be useful
+(defun parse-input (input-file)
+ (mapcar (lambda (x) (mapcar #'parse-bin-char (coerce x 'list))) (get-file-lines input-file)))
+
+;; Loops through two item windows on input and counts each time the first is less than the second
+(defun partial (func &rest args1)
+ (lambda (&rest args2)
+ (apply func (append args1 args2))))
+
+(defun is-less (h l)
+ (mapcar (lambda (x) (if (< x h) 0 1)) l))
+
+(defun not-list (l)
+ (mapcar (lambda (x) (if (= x 0) 1 0)) l))
+
+(defun range (max &key (min 0) (step 1))
+ (loop :for n :from (- max 1) :above (- min 1) :by step
+ :collect n))
+
+(defun to-dec (l)
+ (apply #'+ (mapcar (lambda (a b) (* a (expt 2 b))) l (range (list-length l)))))
+
+(defun part-a (parsed-input)
+ (let* ((half-length (/ (list-length parsed-input) 2))
+ (l (is-less half-length (apply (partial #'mapcar #'+) parsed-input)))
+ (gamma (to-dec l))
+ (epsilon (to-dec (not-list l))))
+ (* epsilon gamma)))
+
+;; Similar to part a, but with four item windows, comparing the sum of the first 3 with the next 3
+(defun part-b (parsed-input)
+ (loop for (w x y z) on parsed-input until (null z) if (< (+ w x y) (+ x y z)) count w))
+
+(time (format t "part 1: ~a~%" (part-a (parse-input "../inputs/03.txt"))))
+;;(time (format t "part 1: ~a~%" (part-a (parse-input "test.txt"))))
+;;(time (format t "part 1: ~a~%" (part-b (parse-input "../inputs/01.txt"))))