Browse Source

add aoc 2022

Mistivia 1 year ago
parent
commit
8fcd7e1ed3

+ 15 - 0
advent-of-code/2022/01/1.rkt

@@ -0,0 +1,15 @@
+#lang racket/base
+
+(require "../../lib/utils.rkt")
+
+(define lines
+  (call-with-input-file "input"
+    (lambda (fp)
+      (get-lines fp))))
+
+(define elves (split-list-by "" lines))
+
+(define (elf-sum elf)
+  (apply + (map string->number elf)))
+
+(apply max (map elf-sum elves))

+ 17 - 0
advent-of-code/2022/01/2.rkt

@@ -0,0 +1,17 @@
+#lang racket/base
+
+(require "../../lib/utils.rkt")
+
+(define lines
+  (call-with-input-file "input"
+    (lambda (fp)
+      (get-lines fp))))
+
+(define elves (split-list-by "" lines))
+
+(define (elf-sum elf)
+  (apply + (map string->number elf)))
+
+(define elf-sums (sort (map elf-sum elves) >))
+
+(+ (car elf-sums) (cadr elf-sums) (caddr elf-sums))

+ 2237 - 0
advent-of-code/2022/01/input

@@ -0,0 +1,2237 @@
+5118
+5554
+4186
+4729
+1242
+4360
+1427
+5312
+6012
+1017
+5581
+5203
+3811
+4945
+3960
+
+3812
+7757
+4448
+2205
+15715
+
+4164
+6482
+4479
+3061
+4082
+2474
+1175
+1918
+4755
+
+4056
+5122
+11426
+5529
+3659
+9592
+10257
+
+3435
+3106
+4933
+2695
+3107
+6567
+5579
+1463
+5734
+4547
+4532
+2152
+5132
+
+6074
+11600
+4337
+3444
+7637
+6725
+1189
+
+5637
+1226
+7068
+6290
+4411
+3858
+6677
+1858
+2840
+1175
+5056
+6569
+
+32887
+19643
+
+4951
+2276
+4300
+4473
+1895
+5251
+1770
+4623
+4602
+4925
+1769
+
+68012
+
+5760
+2687
+3192
+2730
+4867
+4723
+2591
+1677
+4458
+4388
+6038
+3127
+6416
+3048
+
+2485
+1630
+1595
+2864
+2125
+3852
+2216
+3883
+4293
+4165
+2762
+4016
+2508
+1396
+4541
+
+5918
+6874
+6644
+4024
+3229
+1318
+1851
+1566
+1035
+
+7625
+1369
+
+3894
+18802
+1362
+12368
+
+10251
+6249
+2784
+9394
+5932
+5610
+7201
+9922
+
+10994
+10092
+4121
+2966
+1178
+2235
+9379
+
+2592
+1895
+1740
+4357
+5314
+1068
+2228
+3775
+3949
+7162
+3078
+1450
+
+9484
+1796
+8055
+7901
+9323
+1982
+2517
+8358
+2614
+
+18536
+23454
+12107
+
+6703
+6966
+1086
+7022
+3487
+3871
+2568
+6441
+1216
+2105
+5100
+2945
+
+3268
+4866
+3569
+4374
+3666
+2477
+3263
+1312
+5121
+6592
+5337
+1417
+
+17864
+11775
+1345
+11675
+
+6636
+1678
+3982
+4552
+2719
+2736
+1342
+6375
+2671
+1541
+1093
+5538
+
+21177
+36871
+
+4608
+5474
+5004
+3229
+2744
+1577
+2182
+4518
+4930
+1986
+5776
+5023
+2070
+5342
+1952
+
+13940
+15506
+13799
+
+3672
+3303
+4866
+5507
+5282
+5768
+2847
+2214
+1688
+2255
+4302
+4962
+4585
+4285
+3602
+
+4766
+4358
+4532
+10741
+13311
+2271
+
+3073
+5990
+8256
+3692
+4658
+4561
+6347
+3260
+6938
+8643
+
+5261
+1524
+1671
+3277
+2326
+5603
+5837
+1638
+5104
+3696
+1910
+2319
+2305
+1373
+4801
+
+2593
+3527
+1517
+4626
+2003
+4414
+4677
+2282
+3000
+1457
+3530
+5344
+1890
+1703
+1268
+
+9002
+7173
+3848
+6891
+1741
+5303
+1670
+1342
+1865
+
+10319
+10539
+2972
+4667
+
+4318
+1366
+1430
+5003
+2691
+7117
+3015
+6516
+6895
+1618
+3189
+6739
+
+2494
+7140
+2905
+8784
+8727
+4711
+2284
+6894
+7030
+1688
+
+1853
+7351
+7815
+3222
+8276
+1461
+5028
+8048
+5534
+
+12546
+6236
+20372
+
+2778
+5745
+2783
+5774
+4508
+3691
+6097
+4637
+5643
+5902
+1166
+1208
+3983
+5030
+
+3767
+2558
+3988
+1056
+6570
+5437
+1920
+2822
+9126
+
+3173
+3242
+5762
+4311
+5206
+3892
+4978
+5065
+1319
+2577
+1347
+3232
+1915
+5986
+3536
+
+2308
+2812
+1119
+3845
+4589
+4779
+1503
+3613
+1576
+3827
+1468
+1533
+5896
+4981
+
+9740
+16395
+19471
+12882
+
+4779
+7293
+12593
+15897
+
+36970
+
+2386
+1094
+2957
+4452
+4005
+2723
+1124
+3533
+2671
+1701
+2508
+3075
+4741
+1471
+3416
+
+37202
+
+5272
+2736
+4756
+2235
+4679
+4093
+1773
+4088
+2419
+3192
+4429
+3959
+5230
+4342
+
+8514
+11430
+5023
+9565
+3726
+11026
+6334
+
+6563
+2638
+12569
+3458
+5449
+1216
+
+1320
+4708
+1627
+4189
+3962
+1463
+2628
+5667
+5494
+6105
+4925
+3540
+1613
+2288
+
+5974
+7710
+5200
+4859
+2346
+5619
+1337
+4814
+1359
+3020
+1798
+
+2744
+1957
+10669
+4877
+3507
+7657
+7748
+
+1021
+4297
+1689
+6925
+16175
+
+7147
+11617
+5654
+11861
+6065
+3090
+1744
+
+3782
+6658
+2389
+4339
+2312
+7245
+2039
+3411
+6251
+1778
+2345
+5814
+
+13113
+10123
+18700
+6991
+
+16138
+11645
+18610
+
+9586
+6653
+1001
+4547
+2891
+2726
+7618
+5679
+1567
+
+2380
+1858
+1059
+1160
+5115
+2588
+1969
+2629
+5525
+5831
+2139
+5469
+2783
+
+10606
+4518
+9057
+5905
+4187
+4693
+4396
+2191
+
+4374
+4407
+1083
+7787
+7716
+7505
+10096
+10650
+
+5809
+4387
+3426
+3730
+3699
+4944
+4176
+2681
+5197
+1325
+5920
+4957
+5876
+5345
+
+20155
+
+1243
+11423
+13133
+4539
+4880
+4276
+
+1073
+1316
+1841
+5102
+1196
+4847
+1293
+2424
+2345
+2298
+4214
+4215
+5760
+5775
+
+4542
+1152
+5164
+5642
+2069
+1419
+5614
+7343
+1507
+
+2840
+3922
+3563
+1856
+5216
+4886
+3794
+4637
+1826
+3520
+5582
+4602
+2442
+3631
+4946
+
+7956
+3248
+7897
+7846
+2054
+5576
+3753
+3378
+1899
+3490
+6142
+
+9837
+10901
+15019
+1735
+5306
+
+3246
+2485
+5573
+
+2722
+2084
+18774
+
+7940
+10855
+8498
+5547
+13550
+4239
+
+1857
+7355
+4374
+6798
+2341
+13128
+
+14215
+9770
+2447
+1035
+
+8426
+1873
+4518
+2812
+7611
+2465
+4770
+
+8166
+19955
+6472
+
+10884
+11212
+1463
+2716
+1796
+12003
+1240
+
+2802
+2639
+3268
+2492
+6676
+8851
+4054
+9603
+5354
+
+1483
+3080
+6696
+8713
+6856
+4796
+7728
+4600
+3616
+8565
+
+26580
+15329
+
+6074
+15758
+5707
+13583
+2595
+
+4957
+9125
+6534
+8684
+1728
+3690
+7983
+4131
+8907
+
+12147
+15776
+14765
+17316
+
+27492
+12173
+
+5967
+1170
+7896
+7865
+7945
+2261
+2026
+1751
+3988
+3759
+5258
+
+20764
+
+7020
+7441
+8780
+6111
+3483
+8606
+4547
+8153
+3543
+6791
+
+5397
+4408
+1572
+2315
+3376
+2021
+1140
+2876
+5045
+6034
+4404
+5705
+3814
+3981
+3814
+
+6836
+3601
+7452
+8519
+2302
+2382
+8481
+1455
+7154
+6565
+
+2077
+5139
+5462
+1508
+2094
+4850
+1688
+4382
+1991
+2297
+1930
+4720
+4995
+2891
+1967
+
+2201
+3673
+9817
+7417
+1283
+
+4988
+3052
+2258
+6022
+3678
+2938
+7073
+6437
+2402
+5973
+
+2492
+4592
+1501
+4818
+3141
+3470
+2821
+4367
+4952
+2779
+2237
+4283
+5625
+2935
+
+2422
+5273
+4053
+4471
+1343
+1128
+4538
+4328
+2974
+3674
+4155
+5472
+3520
+2427
+4145
+
+19383
+13539
+9822
+2453
+
+2244
+3506
+2573
+3837
+1725
+5081
+4668
+4438
+2414
+1446
+1862
+2453
+2049
+4867
+5438
+
+16970
+5265
+
+7417
+8051
+7490
+1175
+11316
+4219
+
+1065
+
+6974
+1232
+6746
+3660
+3883
+5403
+3793
+4956
+4253
+2237
+5815
+
+6537
+4906
+11084
+7541
+10019
+5164
+11601
+
+4215
+4216
+1160
+2096
+1453
+6271
+5534
+4353
+6423
+4060
+6811
+4701
+3383
+
+2138
+12998
+19743
+
+8678
+6328
+6426
+7184
+8008
+7896
+5365
+9506
+1955
+
+1498
+19856
+7833
+
+17023
+7023
+21278
+
+2110
+5542
+7191
+6509
+8813
+5236
+7771
+9593
+1262
+
+11625
+19032
+17458
+
+5266
+4751
+7950
+2185
+7837
+5710
+2053
+7332
+7422
+6356
+
+5781
+1330
+2974
+2628
+7407
+7339
+3767
+5411
+3400
+
+5330
+3441
+6203
+5272
+5867
+6034
+3167
+2187
+6006
+6614
+1089
+2485
+
+3792
+4129
+1207
+1121
+3599
+6143
+4394
+5550
+1488
+2675
+6064
+1527
+4429
+
+1606
+1129
+5426
+5260
+3827
+5595
+2286
+1974
+7525
+1290
+4569
+
+2181
+5045
+7730
+5502
+5467
+7720
+1780
+4553
+1188
+4213
+
+2565
+10635
+12032
+3283
+
+9902
+2896
+9653
+6296
+2656
+11583
+5835
+
+4932
+4548
+3832
+2377
+3371
+2612
+1907
+3494
+4567
+3130
+3375
+2750
+
+7757
+1033
+8201
+13544
+13481
+
+3382
+12952
+9450
+4982
+13966
+
+4691
+3678
+1026
+7359
+1885
+1245
+5281
+8602
+6744
+
+13041
+9202
+
+3621
+3558
+2279
+2854
+6415
+5368
+
+1102
+5319
+5768
+1990
+2526
+1900
+6294
+4744
+3655
+5011
+3092
+2697
+3864
+
+12013
+
+27776
+14644
+
+5434
+1501
+1439
+4972
+1365
+6076
+1428
+6291
+6020
+5509
+3835
+2571
+6308
+1483
+
+3972
+9357
+8383
+11037
+9557
+10966
+
+8344
+1761
+10183
+4200
+3936
+5778
+9722
+1298
+
+3962
+2611
+7361
+1156
+2522
+2462
+4249
+5127
+1443
+5989
+2942
+
+5384
+7053
+2194
+11964
+5937
+7708
+
+3052
+3192
+3224
+5708
+2120
+5756
+6107
+1198
+5519
+3803
+1169
+2903
+5942
+4376
+3675
+
+11517
+9051
+2084
+4508
+4197
+7219
+9902
+
+4566
+5562
+4263
+1970
+1965
+1333
+1601
+2665
+3443
+5463
+4981
+3792
+2588
+3282
+
+1243
+3604
+4947
+1044
+6962
+2276
+2828
+6334
+2508
+
+1339
+3050
+10158
+2095
+7779
+5165
+9420
+6101
+
+4512
+
+3273
+2248
+2082
+12415
+13944
+
+5638
+5204
+3327
+1361
+3775
+3421
+7597
+1917
+1802
+3896
+4058
+
+1901
+1813
+7388
+3861
+6838
+6154
+5500
+3086
+6403
+3654
+7471
+6904
+
+1932
+1303
+1930
+1720
+5505
+1595
+2260
+5629
+
+38957
+
+4629
+3672
+3629
+5011
+5182
+3952
+2295
+4943
+2644
+2851
+5894
+4654
+5257
+3972
+
+48469
+
+3481
+1398
+3837
+2611
+3330
+3229
+7619
+4106
+6816
+3486
+2763
+
+6591
+2522
+6262
+5458
+3025
+2804
+6403
+1390
+2964
+3081
+3449
+
+6408
+3223
+4302
+1079
+5836
+5580
+1538
+2616
+3850
+5272
+3688
+2381
+5775
+5497
+
+1891
+1448
+4283
+5965
+2726
+1425
+5399
+2795
+1583
+2489
+5171
+3133
+2547
+5117
+3092
+
+11463
+11581
+6972
+5410
+3675
+8578
+4283
+
+1398
+1747
+1341
+5365
+5086
+2268
+4544
+5286
+5910
+1393
+4580
+4726
+1123
+3949
+1223
+
+7526
+3223
+5495
+7184
+10259
+7681
+4795
+
+7168
+6278
+7939
+3829
+3670
+7969
+4917
+7406
+9035
+
+5687
+4872
+2967
+10772
+9196
+6207
+6244
+2801
+
+3500
+1786
+1517
+1585
+4536
+2645
+5249
+4808
+5681
+4591
+5595
+2751
+3336
+1615
+2200
+
+6894
+4752
+1794
+6507
+2184
+5589
+3016
+4532
+2321
+6843
+2909
+2104
+4065
+
+24126
+
+3293
+8274
+1297
+4841
+4653
+1817
+1972
+6169
+1001
+7070
+
+6969
+5331
+4779
+5316
+5249
+3315
+4355
+3596
+3868
+5647
+1110
+
+5235
+5846
+5619
+6259
+4372
+2600
+7526
+3962
+3840
+
+4260
+4484
+6361
+4276
+6344
+4776
+1173
+1884
+4572
+1411
+5230
+3976
+1800
+2426
+
+19185
+15235
+19905
+8664
+
+3346
+7532
+8840
+2182
+10048
+4181
+5030
+8078
+
+2080
+2279
+6250
+3388
+6097
+4607
+6262
+4259
+3261
+4653
+3338
+7025
+
+1138
+2851
+5912
+8592
+7341
+3596
+7669
+1030
+7624
+
+6551
+6753
+7807
+4296
+3515
+6873
+5010
+8497
+1742
+5767
+
+8921
+7840
+9067
+3809
+4347
+2876
+3886
+9982
+
+11455
+10295
+15198
+
+1574
+4240
+4052
+1739
+5701
+8449
+5055
+3893
+2700
+
+3864
+4306
+4190
+1165
+1708
+5705
+5654
+6753
+3840
+4139
+2121
+5735
+
+1662
+3541
+2480
+6124
+3355
+5737
+5537
+6806
+7953
+1109
+
+14180
+15876
+25965
+
+7732
+33422
+
+5918
+5146
+6768
+9366
+1687
+1440
+3115
+1065
+6514
+
+2316
+4905
+2945
+5351
+6196
+6207
+5751
+3811
+4765
+1419
+5253
+1616
+2274
+6363
+
+5125
+2491
+5057
+2749
+1586
+4997
+5249
+3944
+3964
+3845
+2457
+5972
+5313
+6453
+
+30602
+6865
+
+4413
+1651
+6256
+6524
+3466
+1160
+4599
+6477
+2681
+1855
+4785
+
+6435
+5377
+6008
+1744
+5182
+4469
+3999
+2913
+3367
+3233
+2369
+1712
+5408
+4622
+
+4201
+5475
+1117
+2679
+2649
+1446
+4043
+1136
+3750
+4523
+3800
+3245
+3179
+6183
+
+7682
+7213
+5144
+1557
+5579
+5005
+6307
+5906
+7244
+6230
+
+1205
+2764
+3576
+5212
+1723
+4138
+1801
+1772
+4809
+1429
+2010
+3093
+4435
+2268
+4904
+
+4386
+6822
+1865
+3688
+6771
+5433
+1430
+4870
+6745
+5758
+4456
+6549
+6203
+
+2413
+3287
+3376
+5780
+1190
+1177
+1577
+4375
+5558
+5117
+6773
+2483
+4436
+
+5870
+4195
+5932
+1117
+5072
+4581
+6922
+2695
+3134
+2021
+3327
+5538
+2324
+
+2609
+4270
+5809
+1096
+6794
+3530
+3222
+4881
+3806
+2887
+7158
+
+2989
+5279
+6821
+2474
+3144
+8621
+3854
+5012
+1144
+1354
+
+9033
+7624
+5535
+2433
+1433
+5568
+8161
+
+5691
+5394
+3445
+4619
+1703
+6197
+2113
+4277
+2506
+3380
+6039
+6423
+6429
+
+23751
+4571
+7508
+
+9674
+3084
+3612
+3841
+3555
+8146
+6263
+7746
+3586
+
+7907
+6263
+2320
+4430
+15429
+
+2825
+2248
+7184
+3650
+1008
+5219
+5600
+2610
+7357
+5113
+1039
+2019
+
+2167
+4159
+6290
+3757
+10133
+1345
+7250
+10590
+
+6712
+5361
+3243
+6239
+1667
+2699
+5389
+1400
+1334
+2382
+1604
+3256
+2439
+
+6520
+1478
+3049
+6452
+6899
+1850
+2466
+3485
+3020
+6683
+8000
+
+7715
+6597
+5588
+2062
+6732
+3811
+10470
+
+4793
+1206
+6481
+11715
+8827
+3174
+
+3492
+1535
+2603
+5877
+4937
+6805
+1620
+9488
+1593
+
+2182
+8258
+3319
+5499
+6257
+1466
+6435
+8334
+1140
+6764
+
+15599
+28121
+
+5804
+6653
+1670
+7337
+4711
+8303
+10073
+6327
+
+2754
+2040
+2295
+8503
+2231
+11685
+6556
+
+16325
+4057
+11110
+
+6482
+2035
+5189
+6641
+4232
+1100
+1088
+2779
+2220
+3078
+2847
+6009
+1981
+
+8655
+8687
+7225
+4133
+4449
+7193
+4009
+7455
+
+2014
+2691
+1207
+1140
+6736
+4780
+2781
+2855
+5056
+3590
+2372
+6188
+
+6779
+4130
+5169
+5726
+1503
+1520
+8302
+3054
+3037
+6190
+
+6862
+7039
+1305
+4226
+5769
+5068
+8362
+7612
+6856
+
+17695
+18988
+3757
+15137
+
+5268
+3234
+2073
+1529
+1190
+5659
+7316
+3075
+4191
+6111
+2582
+7122
+
+9316
+2087
+2980
+12121
+1703
+6661
+4286
+
+20694
+6712
+15401
+
+4342
+3838
+3208
+2372
+1410
+1648
+2342
+6113
+5573
+6091
+2624
+1749
+5643
+4258
+
+2303
+2178
+3449
+3150
+3825
+3673
+1326
+6377
+
+10398
+3801
+11714
+7455
+3382
+6182
+
+27882
+
+6667
+3268
+11915
+7045
+10478
+10538
+2287
+
+5694
+5516
+6094
+4909
+5685
+4931
+5949
+6361
+6476
+6439
+1667
+5691
+3883
+3307
+
+9977
+7477
+6533
+9766
+4576
+2051
+1376
+
+5966
+7654
+5784
+2727
+7568
+4600
+2150
+1333
+6583
+4119
+2648
+
+11274
+8674
+4155
+2163
+1897
+6579
+11099
+
+2751
+4530
+5488
+1491
+2456
+2752
+1767
+6113
+7730
+7127
+
+8657
+6947
+4803
+5103
+4373
+9501
+1486
+5689
+
+4382
+5176
+2533
+6017
+6100
+4935
+1841
+4530
+6120
+4735
+3438
+3305
+5324
+2814
+
+41401
+
+20975
+30628
+
+2099
+5390
+4829
+5845
+2674
+1029
+3312
+3412
+3402
+5544
+4773
+5274
+2458
+4309
+2741
+
+4345
+7095
+7361
+2171
+6003
+5069
+1941
+2473
+2116
+6508
+6491
+7227
+
+8137
+8052
+5372
+1086
+2369
+5763
+8937
+9055
+1208
+
+4359
+3906
+5012
+2086
+4937
+4239
+3390
+3280
+4948
+3906
+6387
+
+6430
+11071
+1179
+6918
+12028
+1855
+
+11059
+14754
+15751
+15821
+9411
+
+8722
+1104
+7422
+9229
+7919
+6200
+2274
+2980
+5686
+
+3277
+4325
+9477
+9651
+4798
+8742
+4308
+6656
+6746
+
+5777
+6805
+4337
+4847
+4966
+3525
+2729
+6611
+3070
+3734
+1957
+1360
+1678

+ 2500 - 0
advent-of-code/2022/02/input

@@ -0,0 +1,2500 @@
+B Y
+C Z
+C Y
+C Y
+A X
+C Y
+C Y
+C Y
+A X
+B X
+B Y
+B Y
+B Z
+C Z
+C Z
+C Z
+B Y
+A Z
+C Y
+C X
+B Z
+C Y
+C Z
+B Y
+B Y
+A X
+B Y
+A X
+C Y
+B Y
+B X
+A Y
+C X
+A Y
+B Y
+B Y
+A Y
+B Y
+A Z
+B Y
+B X
+C Z
+B X
+B Y
+A Z
+B X
+C Y
+C X
+C Y
+C Y
+B Y
+C Z
+C Z
+B Y
+B Y
+B Y
+C X
+B Y
+B Z
+B Y
+B X
+C X
+B X
+A Y
+C Z
+C X
+B Y
+B Y
+C Z
+B X
+C X
+C Y
+C Y
+C Y
+B X
+C Z
+C Z
+B Z
+B Y
+C Y
+C Y
+B Z
+A Y
+B Y
+A X
+B Y
+A X
+A X
+B Y
+B Z
+A X
+C Y
+C Z
+C Y
+C Z
+B X
+C Y
+A X
+B Y
+C Y
+C Z
+A Z
+A Z
+C Z
+A Y
+C Y
+B Y
+B Z
+C X
+A Z
+A Y
+C Z
+B X
+C Y
+C Y
+B Z
+C X
+B Y
+C Y
+A X
+C X
+B Y
+C Y
+B Y
+C X
+B Z
+C Y
+C Z
+B Y
+B Y
+B Y
+B Y
+B Z
+C Y
+B Z
+A Y
+C Z
+C Z
+C Z
+B Y
+B X
+C Z
+C Z
+C Z
+C Z
+C Z
+B Y
+C Y
+A Z
+B Y
+C Y
+A Y
+B Y
+C X
+A X
+A Y
+C Z
+C Y
+B X
+C Z
+B Y
+C Y
+C Y
+C X
+B Z
+B Z
+C Z
+A X
+B Z
+C Y
+C X
+C Z
+A X
+A X
+C X
+B Y
+C Y
+B Y
+B Y
+B X
+C X
+B Y
+B Y
+C Y
+A Y
+C Y
+B Y
+C Y
+A Y
+B Z
+C Y
+B Y
+C Y
+B Z
+A X
+C Z
+C Y
+B Y
+C Y
+C Y
+A X
+B Y
+C Y
+A Z
+C X
+A X
+B Y
+A X
+A X
+C Z
+B Y
+C Z
+C Z
+C Z
+C Z
+B Y
+C Y
+A Z
+A X
+B Y
+C Z
+B Z
+C X
+C X
+B Y
+C Y
+B Y
+B Z
+B Z
+C X
+B Y
+C X
+C X
+A Z
+B Y
+B X
+A Z
+A Y
+A X
+A Y
+C Y
+A X
+A Y
+C Y
+C Z
+B Y
+A Y
+C Y
+B X
+A Y
+B Y
+A Y
+B Y
+C Y
+A Y
+B Y
+C Y
+C Y
+C Y
+B Y
+C Z
+C Z
+A Z
+B Y
+C X
+B Z
+C Y
+A X
+B X
+B Z
+A Y
+C Z
+A X
+A Z
+C Y
+B Y
+B Y
+B X
+B Y
+B Y
+B Z
+A Y
+B Y
+A X
+C Y
+C Z
+C Z
+B Y
+C Y
+B Y
+C X
+C Y
+A Y
+B Y
+C Z
+B Y
+C Y
+C Y
+B X
+A Z
+A Y
+A Y
+C Y
+C Y
+B Y
+B Z
+B Y
+A Z
+B Y
+A X
+C Y
+A X
+C Z
+C Z
+C Y
+C Y
+A Y
+C Z
+C Z
+C Y
+B Y
+C Z
+B Z
+A X
+C Z
+A Y
+B Y
+A X
+A X
+A X
+B Z
+B Y
+A Y
+A X
+B X
+C Z
+B Y
+C X
+C Z
+A Z
+C Y
+A Z
+A Y
+A Z
+C Y
+A Z
+C Y
+B Y
+B Y
+A X
+A Y
+B Y
+B X
+A Y
+C Z
+B Y
+C Y
+C Z
+B Y
+C Y
+A X
+A X
+B Y
+B Y
+C Z
+A X
+B Z
+A X
+C Y
+B X
+C Z
+B Y
+C Y
+A Z
+C Z
+C Y
+C Z
+C Y
+B X
+B X
+C Z
+A Z
+C X
+C X
+A X
+B Z
+A X
+B X
+A Y
+B Y
+C Y
+C Z
+C Y
+C Z
+C Z
+B Y
+C Y
+B Z
+C Z
+C Z
+C Y
+B Y
+C Y
+A Y
+B Y
+C Z
+B Y
+A X
+C Y
+C X
+C Z
+B Y
+B X
+B Y
+C Y
+B Z
+A Z
+C Z
+C Y
+C Z
+C Y
+A X
+B Y
+A X
+B Y
+B Y
+A X
+C Y
+B X
+A X
+C Z
+C Z
+A X
+A Y
+A Y
+C X
+B Y
+A X
+B Y
+A Z
+A X
+C Y
+A X
+C Y
+C Z
+C Y
+B Z
+A X
+B Z
+B Z
+A Z
+C X
+C Y
+B Y
+C X
+C Y
+C X
+C X
+B X
+C X
+C Z
+A X
+A Y
+A X
+B X
+B Y
+B Y
+C Z
+B Z
+B Z
+B Y
+C Z
+C Y
+C Z
+B X
+C Y
+C Y
+C Z
+B X
+C Y
+C Z
+B Y
+B Z
+C X
+B Z
+C Y
+A X
+A X
+A Z
+B Y
+C X
+C Y
+B X
+A X
+A Y
+C Z
+A Y
+C Y
+C Z
+C X
+C Z
+C Z
+A X
+B Y
+A X
+A Z
+B X
+C X
+B X
+B Y
+C Y
+C Y
+C Z
+C Y
+C Y
+C X
+C Z
+C Y
+B Z
+C Y
+B Y
+A Y
+B Y
+C Y
+A X
+C Y
+B Z
+B Y
+C X
+C X
+C Z
+C Y
+B Y
+C Y
+B Y
+B Y
+C X
+C X
+C Y
+B Y
+B Y
+B X
+C X
+A Z
+B X
+C Y
+B X
+C Y
+C Y
+B X
+B X
+C Y
+A X
+B Y
+A Y
+B Y
+B Y
+B Y
+A X
+C Z
+A Y
+C X
+A Y
+C Y
+A X
+C Y
+C Z
+B Y
+B Y
+A Y
+C Y
+B Y
+C Y
+C Y
+A Z
+B Y
+A X
+C Z
+C Y
+A X
+A X
+C X
+B Y
+A X
+A Z
+C Y
+C Z
+B Y
+A X
+C Z
+C Z
+B Y
+B X
+C Y
+B Y
+B Y
+C Z
+B X
+B Z
+C Y
+C Y
+B X
+C Z
+C X
+A Y
+B X
+C Y
+B Y
+C Z
+C Y
+B Y
+C Z
+C X
+A Y
+B Y
+C Z
+C Y
+A Y
+C Y
+B Y
+B Y
+C Y
+B Z
+C Y
+C Y
+B Z
+C Y
+B Y
+A X
+C Z
+C Y
+C Z
+C Y
+A X
+A Z
+C Y
+A Y
+C X
+B X
+A X
+C Y
+C Z
+A X
+C Y
+C Y
+A Z
+C X
+B Z
+C X
+C Y
+B Z
+A X
+A X
+B Z
+A X
+A Y
+B X
+C Y
+A Y
+C Y
+A Z
+C Y
+B X
+B Y
+A Y
+C Y
+C Y
+C Y
+C Z
+B X
+C Z
+C Y
+B Y
+B Y
+C Z
+B Z
+B Y
+A X
+C Y
+C X
+A Y
+B Z
+C X
+A Z
+B Z
+C Z
+C Z
+C Y
+C Y
+B Y
+B Y
+B X
+A Z
+C Y
+A Y
+C Z
+A Y
+A X
+C Z
+C Y
+A X
+B Y
+C Z
+C Y
+C Z
+C Y
+C X
+B Z
+B Y
+B Y
+A Z
+B Z
+B Y
+C Z
+B Y
+B X
+C Z
+B Y
+C Z
+C Y
+C Y
+A X
+B Y
+B Z
+A X
+C X
+A Y
+B X
+B Y
+A Y
+A X
+A Z
+A X
+C Y
+B Z
+A Z
+C Z
+C X
+A X
+C X
+A X
+B Z
+C Y
+B Z
+C Z
+C Z
+A X
+A Z
+C X
+B Y
+C Z
+A X
+C Y
+A Y
+B Y
+C Y
+B X
+A X
+B X
+C Y
+A Z
+B X
+B Y
+C X
+B Y
+A Y
+B Y
+A Z
+C Z
+C Z
+C Z
+C Y
+B Y
+B Y
+C Z
+C Y
+A Y
+A Y
+C Z
+A Z
+C Y
+C Z
+C Y
+C Z
+A X
+C X
+C Z
+B Y
+C Z
+C Y
+B Y
+B Y
+A Z
+A Z
+C Y
+C Z
+C Z
+C Z
+C X
+B Z
+C Y
+A Z
+C Y
+B X
+B Y
+C Y
+B Y
+C Z
+C Z
+B Y
+C Y
+A Z
+B Y
+B Y
+B Y
+B Y
+C Y
+B Y
+A X
+C Y
+A Y
+C Y
+C Z
+A Y
+A Z
+C Y
+C Y
+C Y
+C Z
+B Y
+A Y
+B Y
+C X
+B Y
+B Y
+B Y
+C Y
+B X
+C Z
+A X
+B Y
+C Z
+C Z
+B Z
+B Y
+C Y
+B Y
+B Y
+C X
+B X
+A Y
+A Z
+C Z
+A Z
+C Z
+C Z
+C Z
+A Z
+C Y
+C X
+A X
+C X
+A Z
+C Y
+C Z
+C Z
+B Y
+C Y
+A X
+C X
+C Y
+C Z
+A X
+A Z
+C X
+A X
+B Y
+A X
+C X
+A X
+C Y
+B Y
+C Z
+B X
+A Z
+C Z
+B Z
+C Z
+C Y
+B Y
+C Z
+C Y
+A Y
+B X
+B X
+A Z
+B Y
+A X
+C Y
+C Y
+B Y
+A X
+B Y
+B Y
+C Z
+A Y
+C Z
+C Z
+B Y
+C Z
+C Z
+C Y
+C Y
+C X
+C Y
+A Z
+C Y
+A Z
+C Z
+B X
+A X
+C Z
+C Z
+B Y
+C Y
+C Y
+A X
+C Y
+A X
+C Y
+C Z
+B Y
+B Z
+A X
+B Y
+A Y
+B X
+C X
+A Y
+A X
+C Y
+C Z
+A X
+C Y
+A Y
+C Y
+B Y
+C X
+C Z
+C Y
+A X
+B Y
+B Y
+A X
+C Y
+B Y
+C Y
+A Y
+B Y
+B Z
+B X
+B Y
+C Y
+B Y
+A Y
+C Z
+C Y
+C Z
+C Y
+B Z
+C X
+C Z
+C Y
+C X
+A X
+C Y
+C X
+B Y
+C Y
+C Z
+C Y
+B Y
+B Y
+C Y
+C Z
+B Z
+C Y
+C Z
+B Y
+C Z
+C X
+C Y
+C Y
+C Z
+A X
+A Y
+C X
+C Y
+C X
+C Y
+A X
+C Y
+A X
+B Y
+B Y
+A X
+B X
+A Y
+B Y
+C Z
+C Y
+C Y
+B Y
+A Z
+C Z
+A Z
+B Y
+B Y
+C Y
+C Z
+B Y
+C Z
+B Z
+C Z
+C Y
+A X
+C Z
+B Y
+A Z
+C Y
+C Z
+A Y
+C Y
+B Y
+C Z
+B Z
+B Y
+B Z
+B Y
+C Y
+C Y
+C Z
+B Y
+A X
+B Y
+B Y
+C Y
+B Z
+B Y
+C Y
+C X
+C Z
+C Z
+B Y
+C Y
+C Z
+B Z
+C Z
+C Z
+B Y
+C X
+C X
+B Y
+C Z
+B Y
+B Y
+C X
+A Z
+B Z
+B X
+B X
+C Z
+C Z
+B Z
+A Y
+C Y
+B Y
+C X
+C Z
+A Z
+B Z
+C Y
+B Y
+B Z
+C Z
+A X
+C Z
+B Y
+A Y
+B Y
+B Z
+A X
+C Y
+A Z
+C Z
+C Y
+B Y
+A Y
+B Y
+B Y
+C Y
+A X
+B Y
+C Z
+C Z
+C Y
+B Z
+B Y
+B Z
+B X
+C Y
+A X
+B Y
+C Z
+C Y
+C Z
+C Z
+C X
+C Y
+C Z
+B Y
+A X
+C Y
+C Y
+C Y
+A Y
+A Y
+A Y
+C X
+B Y
+B Y
+A Y
+C Z
+C Z
+B Z
+C Y
+B Y
+A X
+C X
+B Y
+C Y
+B Y
+B Z
+C Z
+A Y
+B Z
+C X
+B Y
+C Z
+C Z
+C Y
+B Y
+B Z
+B Y
+B X
+B X
+C Z
+A Y
+B Y
+C Z
+C Y
+A Z
+A Z
+C Z
+C Y
+B Y
+A Y
+B Y
+B Y
+A X
+C Y
+A X
+C Z
+B Y
+B Y
+B Y
+A Y
+C Y
+C Z
+B Y
+C Y
+C Y
+B Y
+A X
+C Y
+C Y
+B Y
+B Y
+C Z
+A X
+C Y
+C Y
+C Y
+B Y
+C Y
+A Z
+B Y
+C Y
+A Z
+A Z
+C Z
+C Z
+B Y
+A Y
+B Z
+C Z
+B Y
+B Z
+A Y
+C X
+A X
+C Y
+B X
+B Y
+A Y
+B Y
+C Z
+A Z
+B Y
+C Z
+B Y
+C Z
+C Z
+A X
+C Y
+A Z
+B Y
+B Y
+B Y
+B Z
+A Y
+C Z
+A Y
+B Y
+B Y
+B Y
+B X
+A Y
+C Y
+A X
+C Y
+A X
+A X
+B Y
+B Z
+B Y
+B Y
+C Y
+C Y
+B Y
+C Z
+A X
+A Z
+A Y
+C Y
+C X
+B Z
+A X
+A Y
+C Y
+C Z
+B Y
+C X
+B Y
+B X
+B Y
+A Y
+A Z
+B Z
+A X
+A Z
+B Y
+B Z
+C Y
+C Y
+C Y
+A Y
+B Y
+B Y
+B Y
+A Z
+B Y
+C Y
+B Y
+A Y
+A X
+B Y
+C Y
+A Y
+C Y
+C Y
+A Z
+C X
+C Y
+C Y
+B X
+A Y
+B Z
+A Z
+B Y
+C Z
+C Z
+C Z
+B Y
+A Y
+B Z
+C Y
+A X
+B Y
+A Y
+B Y
+B Y
+C Y
+B X
+C X
+C Y
+C Z
+B Y
+C Z
+A Y
+A X
+C Y
+B Y
+C X
+A X
+C Z
+C Y
+C Z
+C Y
+A X
+C Y
+C X
+C Z
+B Y
+B Y
+A Z
+A Y
+B Z
+C Z
+C Z
+C Z
+C Y
+A Z
+B Y
+A X
+C Y
+A X
+B Z
+B Y
+B Y
+B Y
+A X
+B Y
+C X
+A X
+A X
+B X
+B Y
+C Y
+A X
+B Y
+B X
+B Z
+B Y
+B Y
+C Y
+B Y
+C Z
+A Z
+C Y
+C Y
+A X
+A X
+C Y
+B Y
+C Z
+C Y
+B Y
+B Z
+B Z
+A X
+C Y
+C Y
+B Y
+A Y
+C Z
+A Z
+C X
+B Y
+B Y
+C Z
+A Z
+B Y
+B Y
+C Y
+C Z
+A X
+B Y
+B Y
+C Y
+B Y
+C Y
+C Y
+C Y
+A X
+C Y
+B Y
+B Y
+A X
+A Y
+B Y
+B Y
+C Z
+C X
+C Z
+A X
+A X
+C Y
+C X
+B Z
+B X
+C Z
+C Z
+B Y
+B Y
+C Y
+C Y
+C Z
+C Y
+A X
+B Z
+B Y
+C Z
+C X
+C Y
+B Y
+B Y
+B Y
+C Z
+B Y
+A X
+C Z
+B X
+B Z
+A Y
+A Z
+B Y
+B X
+A X
+B Y
+B Y
+A Z
+A X
+C X
+A Z
+A X
+A Z
+C Z
+A X
+C Y
+B Y
+B Y
+C Y
+B Z
+B X
+C Y
+B Y
+A Z
+C X
+C Y
+B Y
+A Z
+C Y
+C Y
+A X
+C X
+C Y
+C X
+A Y
+B Z
+A Z
+C Z
+B Y
+C Z
+C Y
+A Z
+B Y
+A Z
+C Y
+A X
+A Z
+B Y
+B Y
+B Z
+B Y
+A X
+C Y
+B Y
+C Y
+B Y
+A X
+C Z
+B Y
+C Y
+A X
+C Y
+B Y
+B X
+C X
+A X
+B Y
+C Y
+B Y
+B Y
+C Z
+B X
+C Z
+A X
+C Z
+A X
+A Z
+C Y
+C Y
+B Y
+B Y
+A Z
+A X
+C Z
+B Y
+B Y
+A Y
+C Y
+C Z
+C X
+C Y
+A Y
+B Z
+C Z
+A Z
+C Y
+C X
+C X
+B Z
+A X
+C Y
+A X
+C Z
+B Y
+C Y
+A Z
+A X
+B Y
+B Y
+B X
+C Z
+C X
+B Y
+C X
+A Y
+A Y
+C Z
+C Z
+C Z
+B Z
+C Z
+A Y
+C Z
+A X
+A Y
+C Z
+B Y
+C Y
+C X
+C Z
+B Y
+A X
+B X
+B Y
+B X
+C Y
+A X
+B Y
+C Y
+C Y
+B Y
+B Y
+A X
+A Y
+C X
+C Y
+B Y
+C Z
+A X
+C Z
+B Z
+C Z
+C Y
+C X
+C Y
+A X
+B Y
+C X
+A X
+C Y
+C X
+C Y
+A Z
+C Y
+B Y
+C X
+C Z
+C Y
+B Y
+C Y
+A Y
+A X
+C Y
+C Y
+C Z
+A X
+B Y
+C Y
+B Z
+C Y
+B Y
+A X
+B Z
+C Z
+C Z
+C Y
+C X
+B Z
+C Z
+C Z
+B Y
+B X
+A Z
+A X
+C Y
+A X
+B X
+A X
+A Z
+C Z
+C Y
+C Z
+C Z
+B Z
+C Z
+B Y
+C Y
+B Y
+A Z
+C Y
+B Y
+C Z
+A Y
+B Z
+B X
+B Y
+B Y
+C Y
+C Y
+B Y
+B X
+B X
+A X
+C Z
+B Y
+C Z
+C Y
+B Y
+A X
+C X
+C Z
+B Z
+C Y
+C Y
+B Y
+B Y
+C Z
+A X
+B Y
+C Z
+C Y
+C Z
+C Y
+B Y
+C Y
+C X
+C X
+A X
+A X
+B Z
+B Y
+B Y
+C Z
+A X
+B Y
+A Y
+B Y
+A Z
+C Z
+C Y
+A Y
+A X
+B Y
+B Y
+C X
+A X
+C Z
+C Y
+A Z
+B Y
+C Z
+C X
+B Z
+C Z
+B Y
+A Y
+B Y
+B Y
+A X
+B Z
+B Y
+C Z
+C Y
+B X
+A Z
+C Z
+B Y
+C Y
+A Z
+B Y
+A Y
+B Y
+B Z
+A Z
+B Y
+C Y
+C Y
+C Y
+A X
+B Y
+C X
+C Y
+A X
+B Z
+A Y
+C Z
+B Y
+B Z
+B Y
+C Y
+B Z
+B Y
+B Z
+C Y
+B Z
+B Y
+B Z
+C Y
+A Y
+C Z
+C Y
+C Y
+B Y
+A Y
+A Z
+A X
+C Z
+B Z
+C X
+B Y
+B Y
+C Z
+A X
+C Z
+C Y
+B Z
+A Z
+B Y
+C Y
+C Y
+A X
+B Y
+C X
+A X
+B Y
+A Y
+A X
+B Z
+C Z
+C X
+A Z
+C Y
+A Y
+C Y
+A X
+C Z
+B Y
+A X
+B Y
+B Y
+A Z
+C Z
+A X
+A X
+A X
+A X
+C Y
+B Y
+C Y
+C X
+C Y
+A Y
+C Z
+A X
+B X
+B Y
+C Z
+B Y
+B Z
+A X
+C Y
+B Y
+C Y
+B Y
+C Z
+C Y
+C X
+A Y
+A Y
+C Y
+A Z
+B Y
+A Y
+B Z
+B Y
+C Y
+A Y
+B Y
+C X
+C Y
+C Z
+C Z
+A X
+C Z
+B Y
+B X
+B X
+A Y
+C Z
+A Y
+C X
+A X
+C Z
+C Y
+C X
+C X
+C Z
+A Z
+C Z
+B Y
+B Z
+C Z
+C Y
+A X
+A X
+C X
+B X
+C Y
+B Y
+B Z
+C Z
+C Z
+B Y
+B Y
+B Z
+A X
+B Y
+A X
+B Y
+C Y
+B X
+C Z
+C Z
+C Y
+A Y
+B Y
+B Y
+B Y
+C Z
+A Z
+A Z
+A Y
+A Y
+B Y
+C Z
+C Z
+A Z
+A Z
+B Y
+A Z
+A Y
+C Y
+B Y
+B Y
+A X
+C Z
+C Z
+B Y
+A X
+B Y
+A Z
+B Y
+A X
+A X
+C Z
+C Y
+B Y
+C Y
+B X
+B Y
+A Y
+B Y
+B X
+C Y
+B Y
+C Y
+C Y
+B Y
+C X
+C Y
+A X
+B Y
+C Y
+A Y
+B Y
+A X
+C Z
+B Y
+C Y
+B Y
+C X
+A Y
+C Z
+B Y
+B Y
+B Z
+B Z
+C Z
+C Z
+C Z
+A Y
+B Y
+A Z
+A X
+C Z
+B Y
+A X
+B Y
+B X
+C Z
+B Y
+C Y
+B X
+C X
+C X
+A Z
+C X
+A Z
+C Z
+B X
+C Y
+A X
+C Y
+B Y
+C Y
+B Y
+C Z
+C Z
+C Z
+C Z
+C Z
+C Y
+A X
+B X
+B X
+B Z
+A X
+C Y
+A X
+C Z
+C Z
+C Y
+A X
+C Z
+A X
+A X
+A X
+C Z
+C X
+B Y
+C Y
+B Z
+C Y
+B Y
+A X
+A Y
+C Z
+B Y
+B Y
+B X
+C Z
+C Z
+A Y
+A X
+C Y
+A X
+C Y
+C Y
+B Z
+B Y
+B X
+C Y
+A Y
+A X
+B Y
+B Y
+C Y
+A Y
+B Y
+B Y
+B X
+A Z
+C Y
+C Y
+B Z
+C Y
+B Z
+B Y
+C Y
+A Y
+B Y
+A X
+C Y
+C Z
+C Y
+A X
+C Z
+B Y
+B Z
+A X
+C Y
+C Y
+C Y
+C Z
+B Y
+B Y
+A X
+C Y
+B Y
+A Y
+C Z
+C X
+C Y
+A X
+C Y
+C Z
+A X
+C Y
+A Z
+B Y
+B X
+B Y
+B Z
+B Y
+B Y
+B Y
+C X
+A X
+B Y
+A X
+A Y
+C Z
+C Y
+C Z
+C Y
+B Y
+B X
+B X
+C X
+B Y
+A X
+A X
+C Y
+C X
+B X
+C X
+C Z
+C Z
+B Z
+C Z
+C X
+B Y
+B X
+B Y
+C Y
+A Y
+A Y
+C Z
+B X
+B Y
+B Z
+A X
+C Y
+A Y
+C Y
+C Z
+C X
+B Z
+A X
+A X
+A Y
+A Y
+A Z
+B Y
+C X
+C Z
+C Z
+B Y
+B Z
+C Y
+B Y
+C Y
+B Y
+B Y
+B Y
+C Y
+C Y
+C Y
+A X
+B X
+C Z
+C Y
+A X
+B Y
+A Y
+C Y
+A X
+B Y
+B X
+B Y
+C X
+C Z
+A X
+C Y
+B Y
+A Y
+C Z
+C Y
+B Z
+C Z
+B Y
+A X
+B Y
+C Z
+A Y
+B Y
+A Y
+B Y
+B X
+C X
+C Y
+A Y
+B Z
+A X
+A Z
+B Y
+A X
+C Y
+B Y
+A Y
+A X
+B X
+B X
+B Y
+A Z
+C Z
+C Y
+C X
+C X
+C Z
+C Y
+B X
+A Y
+C Y
+B Y
+B Y
+A X
+B Y
+B Y
+A Z
+A Y
+B X
+A Z
+B Z
+B Y
+A X
+A X
+C Y
+A Y
+C Y
+C Z
+A Y
+C Y
+C X
+C X
+C Y
+B X
+A X
+A Y
+B X
+A Y
+C X
+B Y
+B Z
+B Y
+A Y
+C Y
+B X
+A Z
+A X
+B Y
+C X
+C Y
+C Y
+B Y
+A Y
+C Y
+C Y
+B Y
+C Y
+B Z
+B Y
+B Y
+A Y
+B Y
+C Z
+B Y
+B Y
+B X
+B Y
+B Z
+C X
+B X
+C Z
+B Z
+C Z
+A X
+C X
+A X
+B Y
+B X
+B Y
+C Y
+C X
+B Y
+A X
+B Y
+B Y
+C Y
+A X
+C Y
+C X
+B Z
+A Z
+C Y
+B Z
+A X
+B Y
+A X
+B Y
+A Y
+C Y
+C Y
+C Y
+C X
+C Z
+A X
+B Y
+C Y
+B Z
+C Z
+C Z
+C Z
+C Y
+C Y
+C Y
+A X
+B Y
+B Y
+B Y
+B Y
+B Y
+C Z
+A Z
+C X
+A X
+C Z
+A X
+C Y
+C Y
+C Z
+C Y
+C Y
+C Y
+C Y
+C Z
+A Y
+B Y
+B Z
+C Z
+A X
+A Y
+C Z
+C Z
+A Y
+C X
+A Z
+B Y
+B Y
+A Y
+C Z
+A X
+C Y
+A X
+C X
+B Y
+B Y
+B Y
+A Z
+B Z
+C Y
+A X
+B Y
+B Z
+B Y
+B Y
+C Z
+A Y
+B Y
+C Z
+A X
+C Y
+C X
+C Y
+B X
+C Z
+C Z
+B Y
+A Z
+A Y
+C Z
+B X
+B Y
+B Y
+A Y
+C X
+C Y
+B Y
+A Y
+A X
+B Y
+C X
+B Y
+B X
+C Z
+C Z
+C Y
+C Z
+C Z
+C X
+A X
+A Y
+C Y
+B Y
+B Y
+C Y
+A Y
+C Z
+A Y
+A X
+B X
+C X
+C Z
+C Z
+B X
+C Y
+A Z
+C Z
+C Z
+C Y
+A X
+C Z
+B Y
+A Y
+A X
+C Y
+C Y
+C Y
+B Y
+A Z
+C Y
+C Y
+C Y
+B Y
+B X
+C Y
+A Z
+B Y
+B Y
+C Y
+C Z
+C Y
+A X
+A X
+C Y
+C Y
+B Z
+A Y
+B Y
+A X
+A X
+C Y
+B Y
+B Z
+C Z
+C Y
+C Y
+C X
+B Z
+A Z
+B X
+B Y
+B Y
+A Y
+A X
+C Z
+C X
+C Z
+A Z
+B Y
+A Z
+A X
+A X
+B Z
+B Y
+A Z
+A X
+A Z
+B Y
+B Y
+C Z
+C Y
+A Y
+A Y
+B Y
+A Y
+C Z
+C Y
+C Z
+C Y
+C Z
+C Z
+C X
+C X
+C X
+B Y
+C X
+C Z
+B Y
+B Y
+C Y
+B Y
+C Y
+B X
+B Y
+B Z
+C Z
+B Y
+C Y
+B Y
+C Y
+A X
+B Y
+B Y
+C Z
+B Y

+ 1 - 1
advent-of-code/2023/01/1.rkt

@@ -1,6 +1,6 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
+(require "../../lib/utils.rkt")
 
 (define fp (open-input-file "input"))
 

+ 1 - 1
advent-of-code/2023/01/2.rkt

@@ -1,6 +1,6 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
+(require "../../lib/utils.rkt")
 
 (define fp (open-input-file "input"))
 

+ 1 - 1
advent-of-code/2023/02/1.rkt

@@ -1,6 +1,6 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
+(require "../../lib/utils.rkt")
 
 (define fp (open-input-file "input"))
 

+ 1 - 1
advent-of-code/2023/02/2.rkt

@@ -1,6 +1,6 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
+(require "../../lib/utils.rkt")
 
 (define fp (open-input-file "input"))
 

+ 2 - 2
advent-of-code/2023/03/1.rkt

@@ -1,7 +1,7 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
-(require "../lib/obj.rkt")
+(require "../../lib/utils.rkt")
+(require "../../lib/obj.rkt")
 
 (define (read-input)
   (call-with-input-file "input"

+ 2 - 2
advent-of-code/2023/03/2.rkt

@@ -1,7 +1,7 @@
 #lang racket
 
-(require "../lib/utils.rkt")
-(require "../lib/obj.rkt")
+(require "../../lib/utils.rkt")
+(require "../../lib/obj.rkt")
 
 (define (read-input)
   (call-with-input-file "input"

+ 2 - 2
advent-of-code/2023/04/1.rkt

@@ -1,7 +1,7 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
-(require "../lib/obj.rkt")
+(require "../../lib/utils.rkt")
+(require "../../lib/obj.rkt")
 
 (define fp (open-input-file "input"))
 

+ 2 - 2
advent-of-code/2023/04/2.rkt

@@ -1,7 +1,7 @@
 #lang racket/base
 
-(require "../lib/utils.rkt")
-(require "../lib/obj.rkt")
+(require "../../lib/utils.rkt")
+(require "../../lib/obj.rkt")
 
 (define fp (open-input-file "input"))
 

+ 0 - 0
advent-of-code/2023/lib/obj.rkt → advent-of-code/lib/obj.rkt


+ 14 - 2
advent-of-code/2023/lib/utils.rkt → advent-of-code/lib/utils.rkt

@@ -2,7 +2,8 @@
 
 (provide get-lines
          enumerate
-         repeat)
+         repeat
+         split-list-by)
 
 (define (repeat n e)
   (let loop ((i 0) (ret '()))
@@ -21,4 +22,15 @@
   (let loop ((i 1) (ret '()) (remain lst))
     (if (null? remain)
       (reverse ret)
-      (loop (+ 1 i) (cons (list (car remain) i) ret) (cdr remain)))))
+      (loop (+ 1 i) (cons (list (car remain) i) ret) (cdr remain)))))
+
+(define (split-list-by e lst . eq)
+  (define cmp (if (null? eq) equal? eq))
+  (let loop ((ret '())
+             (cur '())
+             (lst lst))
+    (if (null? lst)
+      (reverse (cons (reverse cur) ret))
+      (if (cmp e (car lst))
+        (loop (cons (reverse cur) ret) '() (cdr lst))
+        (loop ret (cons (car lst) cur) (cdr lst))))))