summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-20 00:49:54 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-20 00:49:54 -0500
commit23c20b9f24283347bc33469eca52193635d98476 (patch)
treefe617a8497d9cc6830f18b3d65ca7e164782c449
parentace26471a062eb99ff4fd16620cc6ad7b31ac115 (diff)
downloadadvent-of-code-23c20b9f24283347bc33469eca52193635d98476.tar.gz
advent-of-code-23c20b9f24283347bc33469eca52193635d98476.zip
day 20
-rw-r--r--benches/2022.rs5
-rw-r--r--data/2022/20.txt5000
-rw-r--r--src/bin/2022/day20.rs74
-rw-r--r--src/bin/2022/main.rs2
4 files changed, 5081 insertions, 0 deletions
diff --git a/benches/2022.rs b/benches/2022.rs
index 6fc9bf7..60b5b3c 100644
--- a/benches/2022.rs
+++ b/benches/2022.rs
@@ -39,6 +39,8 @@ mod day17;
mod day18;
#[path = "../src/bin/2022/day19.rs"]
mod day19;
+#[path = "../src/bin/2022/day20.rs"]
+mod day20;
// NEXT MOD
day!(2022, 1, day1);
@@ -60,6 +62,7 @@ day!(2022, 16, day16);
day!(2022, 17, day17);
day!(2022, 18, day18);
day!(2022, 19, day19);
+day!(2022, 20, day20);
// NEXT DAY
fn bench_2022(c: &mut criterion::Criterion) {
@@ -84,6 +87,7 @@ fn bench_2022(c: &mut criterion::Criterion) {
day_combined!(2022, 17, day17);
day_combined!(2022, 18, day18);
day_combined!(2022, 19, day19);
+ day_combined!(2022, 20, day20);
// NEXT DAY COMBINED
})
});
@@ -111,5 +115,6 @@ criterion::criterion_main!(
bench_2022day17,
bench_2022day18,
bench_2022day19,
+ bench_2022day20,
// NEXT GROUP
);
diff --git a/data/2022/20.txt b/data/2022/20.txt
new file mode 100644
index 0000000..19a8ef9
--- /dev/null
+++ b/data/2022/20.txt
@@ -0,0 +1,5000 @@
+4684
+2398
+-3344
+-5140
+-745
+-5689
+6646
+3472
+-7400
+729
+-7545
+-3988
+-3567
+-8436
+501
+594
+-1536
+-7409
+-5355
+3441
+3340
+-9981
+-9722
+-3583
+6781
+-8016
+4158
+8219
+-9528
+-9540
+2014
+-6484
+-6316
+-5801
+-4910
+5496
+-7254
+7511
+4256
+-7934
+2109
+-9004
+-478
+7657
+9781
+3054
+8953
+-6614
+2940
+-8500
+-7806
+2452
+3377
+6180
+8810
+4001
+8053
+2613
+2738
+4470
+-2170
+-8104
+-7976
+-7928
+5270
+-1116
+3806
+1150
+6555
+-5630
+6815
+1805
+-6705
+1863
+1676
+-5997
+-2373
+1369
+-4515
+-430
+-1448
+-5567
+-3699
+3609
+-445
+-5919
+-2997
+-2233
+4620
+-3825
+-1668
+8030
+-2126
+-9737
+8766
+-8932
+-8791
+3208
+-1978
+8778
+-5932
+-458
+-4253
+-733
+7391
+-5745
+4360
+6720
+5971
+804
+-4390
+-8630
+584
+-536
+8828
+6962
+-3185
+-4065
+6336
+3911
+-6151
+-1462
+-1405
+-5208
+9938
+-5532
+4270
+-3230
+-9047
+-5744
+-3112
+-9064
+-3768
+-9153
+-7239
+1252
+-442
+1661
+2396
+8824
+-2596
+-5947
+-1000
+6663
+8324
+-2741
+8820
+7466
+-4928
+-5136
+-6566
+-3416
+-7545
+1380
+-267
+-8578
+-6485
+7693
+6567
+2189
+-7286
+-3330
+-8927
+3681
+-2970
+2887
+-1548
+-3144
+-109
+-376
+9832
+1094
+8721
+-7675
+-818
+-6324
+-3180
+1014
+-5991
+318
+-5737
+-6722
+-1728
+4841
+4186
+6053
+-5998
+-8015
+1629
+9534
+5961
+-8106
+-7396
+8846
+7876
+-7068
+-7441
+6741
+4763
+-8904
+-5853
+6971
+9214
+-2109
+-9605
+4726
+4136
+-5896
+3973
+1916
+7575
+-7190
+740
+-4124
+-8603
+-8104
+-2966
+2737
+-3254
+-9742
+7268
+3529
+2432
+7754
+-1744
+-5193
+207
+-457
+-3878
+-6977
+8324
+5575
+-1753
+-3573
+-1331
+8757
+-5997
+-6019
+-7549
+4871
+-4749
+-5603
+8901
+1057
+-9311
+8551
+-4521
+2588
+-1726
+-1889
+9500
+7328
+3305
+1355
+-8160
+6532
+-6981
+-7305
+-9275
+-1641
+354
+-3729
+6885
+-2815
+-2450
+3775
+-1870
+-9272
+-9292
+4776
+5404
+-2153
+6734
+832
+-5454
+-9602
+-710
+137
+-6739
+4743
+2706
+-4641
+-4512
+-3043
+2244
+1263
+8244
+6950
+-960
+-4149
+-7038
+736
+4385
+-3041
+3296
+454
+-5138
+-7351
+8626
+8168
+-2317
+8494
+-3243
+2214
+6801
+2390
+513
+7543
+4782
+4767
+1500
+8747
+-4718
+-759
+-1655
+-7524
+-8971
+5145
+1530
+2372
+4057
+2246
+3583
+1532
+9880
+2073
+-4570
+-1916
+-3122
+-3228
+-1963
+6386
+-4237
+3366
+-132
+-6765
+-9632
+-7129
+5092
+-8031
+-5435
+8884
+9136
+-7328
+-7396
+2652
+1628
+400
+-9534
+-4548
+3780
+1410
+-3013
+-718
+4051
+9713
+762
+-8039
+-3502
+2621
+-8604
+2372
+-6319
+282
+-5290
+9486
+3305
+-1908
+-5968
+-8664
+3992
+-558
+5496
+-2946
+-4923
+-9254
+5429
+-9840
+4698
+4750
+7394
+-2172
+-6078
+-2565
+-365
+9674
+9036
+9600
+-2799
+1570
+-7849
+-3558
+-8188
+6172
+5684
+-9368
+4740
+8383
+9781
+-2962
+-5991
+1035
+-3373
+-2172
+-1455
+5285
+1194
+-8428
+-7963
+5432
+-6829
+-3319
+-8789
+9009
+-2417
+-4267
+6152
+7650
+1046
+3660
+-884
+6260
+-2096
+-6843
+-4457
+-6314
+-1674
+-8279
+7865
+-2585
+8198
+8616
+2184
+-7359
+-3244
+253
+-96
+-1914
+-509
+6776
+-4403
+-6941
+-6194
+4228
+4970
+404
+-3970
+-7529
+-5865
+5765
+-6131
+4419
+117
+-599
+5053
+2846
+-585
+-6378
+9136
+-2858
+2381
+9188
+7294
+1540
+-8369
+-6279
+-8630
+-7618
+-8552
+-3400
+-6755
+5204
+8732
+1535
+8151
+3475
+-3372
+-7524
+2675
+-5905
+3723
+3432
+2189
+540
+-7336
+9081
+-7451
+-6631
+547
+-5952
+9010
+9867
+2662
+-445
+-6201
+58
+12
+-7062
+5903
+-8596
+9758
+5077
+2190
+-6669
+-6971
+1094
+1840
+-9430
+1407
+-6986
+-4331
+-7336
+9030
+2993
+7840
+-9777
+-604
+-3098
+6808
+-474
+-9628
+4248
+7152
+-3800
+-1296
+-5284
+6012
+8942
+-3366
+-9245
+9590
+3012
+-6103
+-5190
+-2384
+-8334
+-561
+-4112
+747
+-9772
+-898
+1661
+5668
+1753
+7674
+42
+-8967
+7392
+3441
+9272
+5837
+4380
+-9117
+9930
+-6140
+4767
+656
+9087
+-1213
+-7239
+-3720
+-4078
+-107
+-7043
+-7255
+3228
+2567
+-5137
+3700
+3863
+-4621
+-6785
+4904
+-8106
+-6759
+-5233
+-5842
+-5748
+-17
+-7313
+-2867
+-8184
+-6794
+1034
+-7328
+-6499
+2513
+9322
+-12
+1094
+1864
+6258
+-1858
+9646
+-5746
+5716
+-3394
+-9600
+-1706
+-5820
+1883
+-9012
+2418
+4454
+5123
+-8504
+2153
+8169
+5064
+-6406
+8768
+7725
+-4105
+-7111
+-1012
+3406
+6204
+-6916
+-7069
+-3357
+8189
+-6613
+7294
+3088
+5615
+5716
+6213
+6776
+-2672
+6185
+1701
+174
+6824
+9359
+-874
+-7849
+7693
+6404
+-8273
+-9878
+7047
+7692
+-7222
+3055
+9707
+1669
+-5421
+-7155
+-6800
+7872
+-5667
+-9544
+-3773
+-5752
+-4993
+-1333
+-5225
+8635
+-7832
+-2063
+-1674
+-6330
+3992
+-4604
+-3500
+-7734
+-6538
+6576
+-8075
+9955
+-7064
+7044
+3547
+-4869
+-6423
+1126
+-4390
+9580
+-985
+8809
+5341
+7855
+6670
+1921
+1530
+9121
+8428
+-7320
+-1336
+-6180
+9566
+-420
+1230
+-3751
+5946
+-7969
+-6451
+7263
+-3500
+5381
+-9491
+5907
+-5744
+9158
+8860
+-9964
+-4633
+631
+-807
+8884
+6306
+4743
+-2065
+-3231
+-3183
+6801
+-1598
+-7166
+6495
+5453
+-5997
+-6652
+-1768
+-5865
+8372
+841
+5147
+9643
+-4046
+6063
+7263
+1540
+4799
+-8368
+1948
+6312
+-7340
+7566
+-718
+6314
+-1492
+-8674
+2086
+-8271
+4212
+5304
+-9123
+6108
+-7350
+-1909
+1195
+-3244
+3244
+9548
+3905
+49
+-1206
+-4255
+-9747
+1863
+-4224
+-4139
+-8333
+7027
+4334
+7391
+3538
+5800
+7504
+6503
+-7243
+-1642
+1618
+-2192
+4356
+2488
+-2209
+3043
+253
+-5558
+9416
+-1744
+-1235
+-2994
+-1155
+-7663
+5932
+4688
+-8818
+-2311
+-6859
+-4006
+2946
+-7676
+4347
+9777
+3555
+-3084
+-7418
+3414
+-9753
+-9414
+-3370
+3014
+-5648
+907
+-953
+91
+7161
+6105
+-8247
+-9692
+-8160
+-5501
+-7092
+7589
+-4892
+-4863
+-7553
+1818
+-5509
+-7599
+9702
+-5408
+4352
+-9061
+-3259
+5636
+9412
+9781
+-306
+927
+-6977
+4380
+-8630
+-1648
+-8862
+1778
+-1364
+9793
+4906
+9235
+-8385
+3860
+2843
+7959
+9099
+8806
+-2303
+8386
+4548
+-2513
+1562
+-5954
+4876
+8243
+7600
+1029
+4380
+-3579
+3567
+3380
+9224
+3747
+4393
+-5750
+4902
+4517
+-1941
+-4863
+8994
+-8062
+9758
+-6105
+0
+5449
+7504
+2412
+8593
+9584
+5668
+5979
+7026
+-2854
+-8046
+8221
+-3767
+-7621
+9779
+9926
+5690
+5678
+2046
+9152
+-5997
+-367
+-2227
+5509
+-5233
+-1652
+3276
+6881
+-8459
+-9756
+7263
+-4140
+2080
+-2335
+-8848
+2397
+-8181
+186
+2365
+-8599
+-3418
+9274
+4339
+9673
+-6102
+5052
+5967
+-8447
+9405
+7209
+2843
+-8789
+9471
+-1757
+-3001
+4400
+-5469
+8324
+3088
+8604
+8605
+-4434
+7581
+141
+3300
+1175
+-8428
+-3653
+7500
+1293
+1249
+-6721
+6247
+-46
+6260
+3516
+2071
+2552
+-2088
+9590
+9042
+-123
+-2525
+6388
+-4153
+-2995
+2993
+1971
+2497
+-1829
+4385
+-86
+5211
+-4528
+3289
+6761
+8017
+1836
+-1631
+5386
+-2331
+-1013
+-8124
+-9575
+-4112
+3162
+4779
+580
+-4838
+-4276
+7368
+9678
+-9401
+-3536
+-5933
+-1511
+9088
+907
+-1450
+-7915
+-9486
+8244
+7566
+5319
+6823
+3251
+2125
+-6974
+8430
+-897
+1988
+2733
+-9029
+8968
+1434
+410
+-5136
+1683
+8697
+-4570
+1549
+-3698
+2901
+-1494
+-5032
+3443
+-8307
+-7272
+-1494
+2267
+4859
+9088
+-9090
+-6899
+5239
+286
+-7591
+-5954
+853
+1592
+6924
+3666
+1838
+3700
+-7731
+6332
+5696
+-2657
+3934
+410
+3067
+8760
+-7062
+-199
+4977
+-8287
+-1557
+-8765
+6772
+-1019
+-5912
+-5866
+8893
+-738
+6481
+4634
+513
+-3550
+-4604
+-1115
+3769
+666
+-7823
+-3320
+3868
+2848
+-8634
+-6463
+893
+-6183
+-7823
+37
+-4990
+9843
+2960
+-9568
+2737
+-9342
+3541
+-7087
+-7802
+-9156
+6550
+-1728
+8459
+-6887
+-8826
+1489
+6164
+9988
+-7593
+-2719
+9942
+-4581
+3340
+-3565
+3864
+135
+-6331
+1821
+-9827
+-5398
+6258
+8515
+-3600
+3625
+-7145
+-1277
+-8396
+-568
+-7350
+2397
+-3679
+7754
+4064
+-1497
+-3167
+-8372
+6396
+155
+3216
+-9117
+-1877
+-3659
+5793
+7127
+2936
+3992
+1210
+7841
+6210
+-8146
+-3569
+6986
+4872
+-2170
+-4787
+7391
+-112
+-5515
+1501
+-3374
+-5670
+3547
+-23
+3937
+-509
+-2525
+-221
+1107
+-49
+3487
+-1088
+-233
+6378
+3111
+7180
+-2601
+6646
+7123
+-47
+8189
+-5954
+-5737
+-7333
+9222
+-1470
+-710
+-5698
+383
+-7339
+-4515
+-5236
+-6132
+5045
+4945
+9415
+9070
+-1275
+1252
+-6598
+7242
+3138
+-1498
+8494
+-6941
+4385
+-3012
+-9080
+908
+409
+-3737
+7155
+6818
+8320
+6957
+3804
+6359
+4730
+2092
+-1942
+88
+-9793
+-4869
+6428
+-6376
+-6381
+-2970
+-1981
+-2212
+-8760
+5210
+4643
+-6118
+6082
+-9099
+618
+7242
+-7845
+-4874
+1446
+-3985
+-7483
+2281
+-1770
+-107
+5389
+-9013
+5158
+-2268
+1565
+-2879
+-8868
+9997
+-4570
+8802
+6532
+-210
+4502
+3443
+9806
+-1656
+-4478
+8244
+-7060
+-616
+5983
+7311
+-8319
+-9142
+6141
+4759
+6200
+8524
+-1750
+-759
+-9442
+1067
+9400
+-7657
+-8000
+8385
+7571
+-2719
+4779
+-9486
+9625
+1723
+-3910
+7590
+-6103
+-578
+-3374
+8930
+-7280
+2403
+-4202
+-355
+9059
+-1665
+9235
+6567
+3075
+-9877
+-1753
+-6306
+8788
+8860
+8271
+-814
+9322
+-1959
+-7998
+4578
+-7563
+6905
+-8089
+1766
+-2522
+4850
+2381
+-531
+-4056
+293
+-6130
+-7874
+-6398
+-9135
+-4944
+-8522
+-2674
+7155
+-2264
+8161
+-5845
+4995
+1962
+7885
+8394
+-8039
+-4708
+1207
+-2602
+3065
+-6190
+-3922
+-4047
+-3262
+-3755
+-9900
+1223
+-5533
+1564
+-9981
+289
+8059
+8905
+4155
+-1142
+7865
+3426
+-8280
+7111
+3512
+-6553
+8189
+3
+-2669
+-9972
+-2969
+-2073
+-8160
+-579
+1390
+5797
+-7198
+653
+5112
+2710
+-6206
+5685
+6827
+-6408
+4688
+-1583
+-7060
+9818
+-9593
+3043
+-5729
+4728
+-3538
+4880
+-772
+618
+-1977
+-1087
+1873
+6142
+-7213
+6761
+8876
+3997
+-5149
+-4512
+5600
+946
+-3347
+-7203
+7583
+-3856
+-8931
+1074
+3
+-7204
+2053
+-4637
+-9548
+8732
+-985
+-9437
+-8560
+-6216
+9281
+3541
+6682
+4701
+5720
+-5469
+8206
+7417
+-3573
+2269
+-4157
+-8671
+-8734
+9949
+5788
+-7671
+5593
+1269
+3057
+790
+-3753
+-5745
+6598
+-2579
+-9264
+-7309
+8786
+6717
+6204
+-3729
+-2466
+-91
+-8257
+1251
+950
+4682
+9767
+6653
+-7941
+8609
+720
+5069
+4507
+-7573
+1951
+-1918
+6442
+-553
+8429
+4958
+-7053
+1298
+6396
+-1839
+-971
+-9642
+-3411
+-359
+9971
+9468
+9106
+1274
+-8119
+-3020
+-7030
+6361
+1031
+-4153
+5277
+-3662
+8003
+-3418
+-2585
+9169
+1210
+-374
+7615
+457
+-7333
+-2287
+-9663
+-1066
+-182
+3940
+1415
+-8329
+-7394
+6818
+3547
+-4841
+-6406
+-6625
+7279
+-166
+-4763
+-4910
+-2958
+6153
+-3964
+7429
+-6622
+-8472
+-8039
+-237
+3441
+-6205
+-267
+-4333
+-669
+1086
+-5384
+-6635
+2773
+6663
+-9610
+-2920
+2350
+-801
+8845
+5566
+-6722
+-1775
+6372
+-5692
+-1936
+7913
+-1547
+-6846
+6571
+7809
+-8898
+-3152
+-9176
+3040
+7696
+408
+-8365
+-2135
+2912
+-2098
+-9742
+3190
+5044
+666
+7581
+3072
+1604
+-2956
+8903
+-6197
+464
+9955
+-4412
+6419
+-5170
+1971
+-1339
+-2657
+-9986
+-9317
+2046
+-1477
+1910
+5855
+-307
+3631
+-1075
+-8409
+-2902
+-8417
+7883
+9516
+-9102
+7315
+-7169
+6995
+-9519
+-2624
+9427
+-9570
+2362
+2080
+-1919
+-9393
+7604
+5651
+-8357
+6194
+2483
+4701
+-3645
+1268
+9781
+-2482
+-9629
+-1277
+2548
+-3098
+5292
+5557
+-646
+3111
+1701
+-730
+322
+8244
+1070
+-6847
+-2684
+-17
+-1977
+-7665
+-5502
+6185
+-2624
+-683
+7363
+8420
+-6831
+4583
+9723
+8176
+-592
+8593
+2246
+-2039
+7720
+-6681
+-4390
+4970
+1540
+4355
+4765
+-4616
+9877
+-4838
+1725
+-4742
+-6254
+-802
+-3588
+2009
+-5690
+406
+-2619
+-3208
+-1000
+-3133
+3073
+9309
+4704
+-4823
+1534
+-6393
+7987
+-3243
+-7524
+8254
+498
+-6252
+-3550
+-4526
+7246
+82
+2252
+-6388
+9674
+9104
+1791
+-6188
+-9972
+-9244
+7045
+4336
+-1153
+-8932
+-4481
+-3869
+6451
+-1204
+7982
+9456
+3541
+-4621
+3050
+3208
+-3178
+7501
+-3778
+6108
+5140
+-9825
+-193
+9206
+-5233
+-7280
+-6333
+8030
+-3495
+6388
+1753
+2750
+-8994
+5167
+1390
+5850
+-1379
+-7024
+-6677
+-8853
+9114
+-9012
+35
+4825
+8524
+858
+-3764
+-2030
+6969
+1549
+-271
+-1936
+1349
+-3030
+-6599
+-3758
+-9856
+8325
+1527
+9331
+-3717
+-4955
+-7092
+-6738
+-1710
+4846
+6415
+1269
+-9549
+-1308
+6425
+-4915
+6153
+-5743
+9456
+927
+-7559
+-7849
+-4782
+-2684
+-2335
+-8649
+7056
+-3230
+-362
+-1598
+2043
+-4749
+3187
+8226
+-8
+-5635
+1336
+5843
+-648
+5253
+2270
+8604
+-5821
+877
+-9186
+2585
+8967
+9881
+1479
+3182
+-4253
+-1300
+-2034
+7368
+-3489
+-2163
+7206
+9535
+-4214
+9081
+8395
+-3135
+-9504
+3432
+-5975
+-4933
+-2704
+6387
+3148
+-7446
+6141
+244
+5482
+2805
+-1771
+-2628
+-8565
+9169
+-4816
+-8867
+2343
+-9612
+-686
+-743
+3905
+5816
+-5752
+338
+-6547
+-7441
+-4909
+-9737
+8910
+8544
+5239
+1014
+-1402
+-6506
+9942
+-9199
+1390
+6445
+-7360
+9683
+83
+-6772
+6203
+3228
+3807
+-8015
+-1112
+6891
+-5954
+-9371
+464
+-8904
+1394
+-8354
+-9786
+-2098
+-4678
+-6185
+-9098
+-6314
+-978
+3580
+-480
+-6690
+5692
+9158
+6114
+-851
+-4592
+1816
+7225
+3052
+8744
+-5962
+-7626
+-2290
+-2022
+-8884
+43
+442
+6815
+8104
+675
+-7328
+-2114
+-1769
+-4787
+8137
+5082
+-8431
+-9046
+-5085
+3052
+-6230
+4880
+9121
+4587
+-1876
+8904
+1745
+3236
+-3416
+-592
+6194
+6741
+3866
+-6367
+2100
+-8499
+492
+-224
+-2634
+-1344
+-8987
+-8271
+7327
+-4202
+4834
+5076
+-758
+-5245
+4690
+8714
+3980
+-3698
+-916
+-4379
+-522
+3057
+-5689
+-584
+9059
+-1859
+-6639
+7799
+8377
+-6314
+-1916
+959
+179
+-8085
+-1286
+-8701
+4090
+-4932
+9975
+6708
+-5085
+1142
+5200
+2843
+8954
+-2492
+9176
+9581
+-9874
+5136
+-5539
+5797
+6678
+-7094
+-5384
+2189
+-9856
+9399
+8806
+5589
+-4784
+9423
+1974
+3161
+-7306
+2272
+-7537
+388
+-405
+-7665
+7496
+-7998
+-1993
+-5688
+-1459
+-7179
+-7225
+-5329
+-4820
+-9586
+-1668
+3420
+-107
+-2519
+-6568
+7257
+3518
+8311
+6678
+5999
+-1028
+2525
+793
+-8614
+8162
+-9895
+5993
+-6381
+-2892
+5152
+4445
+1863
+2236
+-8968
+8428
+8968
+-8452
+3871
+-7475
+5210
+-8169
+7439
+288
+3720
+-5391
+-2677
+-7229
+-6344
+-1012
+9437
+2490
+8059
+-2031
+-6724
+6204
+-8169
+-1274
+-2076
+589
+3200
+729
+-3566
+-7366
+-1114
+1233
+8769
+8686
+-8314
+7800
+8507
+5285
+684
+-7537
+5786
+-9548
+967
+5975
+3506
+-7603
+9368
+-3524
+6019
+-3525
+-3727
+4938
+-4403
+-7400
+4197
+618
+-4512
+5448
+-6859
+-6596
+9030
+-5516
+-1378
+-5445
+-7802
+9241
+3956
+-7469
+-6811
+-8849
+186
+7466
+3427
+7284
+-4154
+-6918
+6080
+-157
+3189
+-1744
+-2030
+7049
+3389
+-5821
+-7878
+-6733
+-9602
+4521
+5942
+1629
+6455
+1576
+1540
+8679
+-9593
+106
+3873
+-6681
+9676
+4444
+6172
+-2574
+7452
+-8948
+-2348
+6441
+8859
+5745
+5380
+406
+1366
+9181
+-1459
+-8247
+3810
+2897
+4136
+464
+-6098
+-2073
+-9000
+9184
+-174
+4005
+-2609
+-7040
+-8614
+1622
+-3848
+-7573
+-5640
+-2141
+-1013
+-4245
+-6227
+-341
+8911
+-8179
+-976
+-5163
+-7469
+5640
+2174
+411
+5764
+7189
+1330
+-9742
+5322
+6548
+-7003
+-828
+6153
+-1852
+-5334
+9297
+8090
+7015
+3766
+-7299
+-6470
+-8675
+5482
+-1689
+-6804
+2782
+-3771
+1922
+328
+-7069
+-6916
+-8096
+-2874
+-4910
+918
+-4543
+6246
+6848
+-2874
+1709
+-7604
+7519
+-8280
+4578
+6746
+-2090
+838
+-7121
+-828
+-8911
+6367
+1183
+5454
+102
+1948
+-7562
+7453
+-7603
+-863
+6105
+9347
+-8909
+9185
+3414
+1988
+-9054
+-2082
+4905
+-4703
+-2243
+-1066
+9287
+-3755
+-236
+-7088
+-619
+476
+-2857
+-861
+-1905
+-4651
+7540
+-4700
+-4288
+-534
+39
+5147
+-6406
+-8184
+-2364
+9444
+-7917
+-8672
+3401
+-2096
+-9580
+9184
+-7201
+-2815
+1535
+2750
+371
+9808
+-8190
+2720
+5097
+2609
+-1028
+49
+796
+-8584
+-7499
+-6122
+-5563
+-8995
+4297
+-2701
+4146
+1194
+-2414
+3491
+-2500
+6492
+-9863
+7903
+-3700
+-405
+1379
+9188
+-2667
+1838
+4287
+-619
+-438
+1107
+-5583
+-1259
+-1925
+-593
+6451
+2365
+6465
+-7529
+-3767
+8508
+3053
+-8362
+-804
+-6625
+1106
+-7280
+-7877
+-9054
+4681
+6521
+8838
+9584
+-2206
+8476
+3654
+-2077
+-5010
+1518
+-9283
+-9972
+-7366
+1347
+-7673
+-3634
+-4050
+-4048
+-9662
+-3833
+513
+4629
+-9572
+3588
+-2675
+-6901
+-4558
+8929
+6528
+-5097
+6369
+3212
+-5865
+-6035
+6475
+4892
+4348
+1031
+-6284
+5267
+8930
+-4737
+-8749
+-8942
+640
+-68
+-9996
+6859
+-1449
+4610
+-6748
+-2201
+-4528
+3628
+5242
+-2146
+1699
+334
+-1768
+4945
+-362
+1240
+-6714
+-7917
+5932
+6746
+7049
+5158
+7911
+-7198
+-4540
+-2616
+-7671
+-7143
+9932
+9847
+9926
+6073
+-6665
+1874
+-6788
+-4651
+-2022
+-4059
+2245
+3587
+3351
+-1621
+6166
+6052
+-249
+611
+-9943
+9306
+-3194
+-480
+3389
+-8241
+-7161
+9001
+538
+-3830
+4155
+3625
+4400
+-8779
+-6506
+-7325
+8927
+-3809
+-5891
+-5017
+-901
+-6427
+3424
+7114
+8422
+5322
+664
+5480
+-4250
+-5226
+2525
+-1541
+-4752
+-5667
+8115
+-7109
+6209
+6180
+302
+8244
+-4718
+-6785
+-2020
+2975
+-6956
+-3228
+8954
+8884
+6141
+5271
+-1765
+8386
+-9068
+3145
+5339
+412
+-619
+2154
+-2292
+7600
+6678
+5951
+6702
+1725
+-3479
+-588
+-2602
+6036
+-7483
+-8749
+-628
+-9590
+8244
+13
+-589
+-7088
+-8767
+3251
+-1343
+9351
+1683
+4057
+-704
+-3672
+9942
+547
+8368
+-9877
+2990
+874
+8911
+122
+4093
+-8023
+-2243
+1631
+-9865
+-7360
+4711
+1763
+5644
+-2956
+6901
+-4682
+-8188
+3858
+-554
+729
+7263
+2353
+-2867
+-4434
+-4616
+-881
+5260
+-8873
+6939
+-2028
+4259
+-4734
+6021
+5645
+-3235
+-8401
+-8301
+-2967
+924
+4643
+3700
+-8023
+-6790
+1337
+2701
+1091
+-1711
+2684
+8479
+2965
+6178
+1978
+-9737
+6051
+4419
+-6838
+-5714
+-6863
+-376
+-401
+-9170
+-2459
+-9427
+2044
+89
+785
+8495
+5396
+6105
+-3266
+5413
+4005
+-841
+7351
+2684
+-2109
+406
+-2377
+7152
+-6463
+-6463
+-3035
+-7905
+1320
+8196
+-7875
+-9273
+-8560
+-3643
+-1949
+-9701
+-8967
+-8423
+-97
+2733
+-1861
+8170
+7342
+-5162
+-1598
+4578
+-2848
+9636
+8128
+2469
+-6505
+-7370
+1141
+2819
+5944
+1950
+-7096
+5932
+-2504
+2418
+-2652
+-3409
+1274
+-7116
+3087
+964
+5317
+1334
+2513
+-5371
+-5750
+1940
+8704
+7592
+-3958
+9774
+9093
+5993
+5975
+-592
+-9943
+-5501
+1175
+2015
+-7272
+-4490
+-6485
+-1326
+-3035
+-3351
+9246
+733
+7780
+9070
+-6547
+6570
+1766
+-7704
+589
+9274
+2916
+7942
+-2928
+-5018
+1725
+-5512
+1133
+5902
+1698
+7455
+-5809
+-3099
+-6398
+9359
+8995
+-3469
+3599
+-108
+-1213
+-3062
+-1820
+2188
+-9442
+-5980
+4320
+-7639
+-2996
+-1514
+-1949
+-5933
+4520
+-2872
+8014
+-9442
+8193
+2843
+-5661
+5629
+-6955
+9099
+1916
+-3595
+8291
+6314
+1276
+7880
+-2612
+-8675
+-2969
+-5225
+1392
+230
+8204
+5897
+-1880
+-6448
+-3980
+3934
+-7642
+2922
+8113
+-8540
+-766
+-9489
+-9640
+3028
+-8305
+8752
+-5341
+510
+-4112
+-4948
+-8463
+-4137
+2801
+-3089
+3189
+-7382
+-1452
+-1364
+-4047
+3138
+-3351
+-2185
+-5377
+-9610
+720
+7908
+6498
+-9923
+5832
+-3081
+-3873
+2865
+8189
+-1328
+7663
+-6136
+3151
+-7014
+9253
+-1032
+-5567
+-9810
+3800
+5275
+6902
+9461
+-5804
+2455
+4993
+4750
+-4516
+106
+-8630
+-8604
+879
+6052
+-7446
+-5021
+-592
+-1717
+-4567
+6197
+7269
+-5990
+1274
+8903
+4749
+-5507
+5389
+2569
+2711
+-3418
+6363
+-3830
+-2335
+7044
+6673
+-2894
+8766
+-8927
+-137
+-3055
+-3653
+1067
+-1852
+-4536
+-5826
+-5138
+2125
+-2263
+3475
+-4445
+-1170
+4400
+-2703
+-5741
+3244
+-3809
+35
+-7421
+-928
+-794
+1699
+8907
+8398
+2358
+8655
+-638
+-849
+8930
+-2711
+4850
+-3332
+-3651
+7675
+-1034
+-3768
+1402
+2180
+513
+-4288
+6260
+-4925
+2843
+-9826
+-3363
+-8853
+1763
+6194
+8766
+-3453
+-7234
+-4170
+-820
+8686
+-8244
+3367
+-4294
+-359
+-1446
+286
+-6790
+-4398
+-7044
+-7876
+-6953
+-6722
+340
+-3183
+-6622
+6954
+-9205
+-405
+-2139
+-2902
+1535
+-2928
+1434
+-210
+6524
+410
+4427
+-812
+364
+-7874
+6740
+-8231
+2297
+1464
+-8564
+3391
+8250
+1194
+-421
+-7983
+-3255
+-7566
+-3415
+-7798
+-866
+2821
+1330
+-9158
+4998
+4117
+-9882
+5942
+-8529
+4882
+-812
+6772
+7338
+4277
+-4929
+8987
+-9371
+2801
+-7333
+6781
+1330
+-8309
+4717
+-8202
+6252
+5152
+-9862
+6227
+7253
+3546
+-604
+6465
+9159
+5688
+-7459
+950
+4062
+3997
+2693
+4550
+1955
+-8180
+-3693
+-2039
+611
+6665
+-1280
+2907
+-6699
+-1302
+-4078
+2361
+-2918
+1304
+635
+5116
+6336
+-1888
+-4797
+8427
+-8436
+2469
+-1069
+-9756
+-4555
+7986
+-9297
+-1219
+-6066
+2236
+8072
+763
+1985
+-1618
+3671
+-7289
+1602
+-5910
+1733
+552
+-6180
+4334
+-7242
+554
+-8849
+5158
+2037
+-4840
+8420
+-5610
+-6894
+-3001
+-163
+6980
+8907
+-7333
+1349
+-558
+2750
+-5826
+-4697
+-6754
+4187
+454
+-6635
+7974
+9718
+5857
+3441
+2190
+-1859
+-6596
+5031
+9165
+-2421
+2168
+-4049
+-1317
+747
+-191
+9859
+9888
+5153
+-2627
+-5780
+-806
+2415
+-5097
+5454
+2960
+8115
+7730
+-8552
+-3656
+8812
+-6077
+-3659
+9949
+-2051
+1838
+-3588
+-6451
+-2700
+-7969
+5907
+-3823
+-3845
+-7062
+-9972
+-4528
+8897
+-6993
+-4006
+6275
+-3480
+-1100
+-901
+-3099
+234
+-1342
+1256
+8812
+-1970
+-2329
+-8767
+-1449
+3303
+-4399
+-3577
+5850
+-8168
+3104
+8977
+1252
+7022
+-794
+-8020
+2619
+-1744
+4146
+-6772
+844
+8041
+-7691
+-1477
+3055
+-8881
+-9473
+-6216
+-5507
+-3284
+8871
+-5435
+2009
+-4592
+4476
+5878
+3521
+9184
+4701
+-3509
+8447
+9284
+2100
+-1879
+-8168
+-7563
+-17
+945
+-3264
+-4698
+-6197
+4351
+-3720
+7780
+7897
+6980
+4894
+-3951
+1388
+2782
+1401
+5689
+513
+-5990
+-2657
+-6151
+4872
+7177
+3266
+7374
+-6239
+1366
+9832
+-3055
+4970
+6524
+-1914
+9881
+-9722
+-7293
+9659
+-645
+-2675
+9253
+4711
+-7145
+7021
+1785
+3305
+-6916
+8399
+8060
+6856
+-6126
+8915
+6024
+-362
+3429
+-9387
+513
+9019
+4388
+-9967
+-9772
+-9774
+1471
+4345
+9167
+-5211
+-4041
+-3614
+6013
+9783
+6861
+-1120
+631
+6390
+-7419
+5707
+2360
+4728
+235
+6141
+-2602
+-5749
+9667
+3512
+-4944
+-1777
+-7336
+-8711
+6626
+4736
+497
+-4248
+-8452
+-5888
+-377
+4314
+-3069
+-7313
+-904
+-421
+-1311
+-1981
+-2925
+-4074
+-5957
+3706
+5629
+-8207
+3633
+-4296
+6336
+-9272
+-8515
+-5126
+-8403
+-2039
+-8873
+-4154
+-6384
+-2565
+-5501
+4693
+4782
+9124
+7268
+4684
+8576
+5565
+-8056
+-8392
+-5149
+1703
+-9266
+3917
+-1968
+5865
+-8452
+-1028
+4136
+4328
+9606
+3377
+-1536
+-916
+9617
+7044
+4052
+-5311
+3937
+5928
+9733
+7184
+5398
+-1345
+9866
+9182
+-1069
+-7628
+6853
+4770
+9456
+2675
+2508
+-2982
+-2022
+2415
+-457
+-4844
+729
+4042
+-4250
+6096
+1700
+-4149
+-851
+-26
+-1308
+2549
+-4333
+-3765
+9866
+-3695
+-8976
+-9367
+-8271
+230
+8797
+3351
+-1245
+5270
+-2785
+2248
+923
+9615
+-7070
+-9249
+9346
+-6738
+-6600
+-1288
+1086
+-2915
+-5677
+-8634
+2711
+-1815
+-2806
+-4497
+-7943
+834
+1756
+-7824
+8252
+9574
+-1879
+-2580
+-6668
+-6610
+-9612
+812
+-1047
+-3164
+2343
+1020
+6421
+-7124
+514
+-9562
+-8522
+8652
+8893
+-2585
+5158
+5679
+-6056
+2037
+9400
+-7024
+-9899
+5968
+4429
+-557
+-3134
+-7062
+5446
+-539
+-3749
+1705
+4798
+-322
+9840
+-6173
+4546
+7807
+7627
+4454
+-6260
+5052
+5289
+2989
+-2297
+4782
+-2261
+-3696
+-941
+7729
+-1630
+-7218
+-3494
+-8421
+2935
+9184
+7566
+-7670
+6455
+-7675
+6129
+6260
+-5745
+8630
+-6201
+-8946
+7482
+4754
+-9836
+3538
+-6705
+-3302
+9758
+-2885
+790
+-4224
+-4470
+-5474
+-3618
+-5165
+-6330
+-4403
+-2585
+-6587
+1236
+-3877
+7882
+1066
+-1981
+-5058
+4776
+-8365
+-1550
+-9545
+-3684
+-7254
+766
+-4294
+4454
+1120
+-6461
+2236
+9069
+-2728
+1988
+4798
+1766
+2333
+-7323
+511
+1230
+-8887
+-2849
+-2285
+9715
+682
+729
+8489
+-3284
+-152
+-9442
+8505
+-5994
+4380
+-4078
+7382
+1910
+-4635
+-5567
+3101
+-8853
+-2535
+-3490
+8187
+-3044
+6723
+-4732
+9731
+-1514
+-8075
+-4064
+3100
+-474
+2652
+-5010
+6265
+-2111
+-8765
+-1820
+9019
+-9437
+42
+-1511
+3546
+8797
+1328
+-6846
+-4575
+5499
+849
+5715
+-17
+-6738
+-7771
+-2874
+8203
+207
+-6295
+9767
+5237
+-6385
+-7044
+-9569
+-2952
+8567
+7015
+4970
+7982
+6771
+2086
+3053
+-9484
+-7497
+-5840
+6484
+8683
+-9181
+2158
+388
+8045
+2721
+-4406
+9910
+-7003
+3268
+-9437
+7428
+-5087
+-7469
+-8873
+-9425
+3718
+-5355
+3999
+-8431
+8476
+9543
+6924
+1648
+-9947
+7647
+-6621
+-3192
+-7994
+8108
+-6341
+5256
+4300
+3797
+7312
+716
+2846
+-9590
+-4865
+-7915
+-9796
+4132
+7818
+-9960
+6260
+-6451
+-7018
+5238
+-5900
+-5595
+5029
+2432
+4454
+4452
+3441
+-6864
+9435
+1361
+-4225
+-700
+-3868
+8045
+3852
+7889
+-8703
+8821
+4701
+1179
+-3269
+1560
+-6677
+-9181
+2348
+-7934
+-2409
+9346
+-6664
+-6714
+1175
+-5646
+7177
+-3275
+637
+-2522
+5710
+-7475
+7856
+-5446
+7590
+-7483
+-5018
+-3959
+8207
+-1905
+1683
+-4304
+9242
+2210
+5794
+140
+-8217
+-8944
+-1416
+-6240
+-8342
+-6110
+6561
+-270
+-5698
+3043
+-8379
+-9487
+-2579
+7959
+-5501
+4844
+2741
+8203
+5288
+7184
+-7878
+-1031
+-3301
+-5353
+3367
+-7768
+-4497
+6880
+1363
+-1088
+-3414
+7056
+5818
+9189
+-367
+8161
+-8874
+-8638
+-3436
+-810
+-45
+-7091
+9817
+8834
+804
+2993
+-1389
+1596
+6133
+8207
+-9954
+-3256
+2015
+-9740
+-9103
+5013
+7436
+-5238
+-2419
+510
+8145
+5769
+-2149
+-1354
+-8621
+2916
+-1950
+-3262
+5324
+-8030
+-7404
+-5532
+8324
+-4406
+7022
+6202
+2639
+5932
+-835
+-2210
+9549
+5716
+6530
+-3055
+4837
+-4250
+5729
+5989
+-8056
+4737
+3058
+-1186
+-4933
+-3727
+-5131
+-8160
+-3550
+-9046
+1763
+3723
+4260
+8960
+-4724
+8001
+2306
+5269
+5886
+-3928
+1336
+-8334
+5993
+-1775
+-4306
+-35
+-831
+-2838
+-322
+7898
+2189
+-9625
+6507
+-5815
+-8197
+8954
+-5972
+7807
+-8309
+2142
+-3386
+23
+-4100
+2125
+-7367
+-4338
+-9003
+-3954
+-1069
+-9411
+-6406
+-3867
+-7986
+-1738
+793
+-5741
+8359
+6889
+-6194
+-910
+-4255
+-8284
+4603
+1554
+-6198
+5668
+-4401
+-7482
+-8047
+8593
+5802
+6734
+5951
+-3392
+6839
+7357
+-5314
+-6827
+-7229
+-7335
+-5204
+-6663
+-8948
+4967
+-3415
+2397
+6158
+4435
+-5232
+-2035
+-5303
+-4331
+-898
+9997
+2077
+-3659
+-6406
+8049
+2028
+-1674
+-5426
+3569
+-4875
+-3955
+-851
+7369
+1955
+8945
+9818
+-4441
+-6755
+8312
+-4341
+-918
+151
+-7698
+-8962
+3957
+4081
+1508
+-6376
+3327
+-3659
+8884
+-4379
+3167
+-4950
+2040
+-2958
+329
+-6505
+-8115
+5684
+-7242
+4062
+1268
+-5763
+-9104
+-4431
+3979
+-6688
+-5391
+8793
+1426
+-4531
+9399
+7575
+2632
+1625
+-5490
+-5974
+1629
+-753
+9704
+-3166
+-7844
+-2293
+6209
+8325
+-6994
+-4540
+1853
+9188
+9087
+-1336
+5932
+3786
+-9805
+-7573
+-9605
+-6785
+-2137
+-9904
+2582
+-216
+2843
+-7773
+-5111
+-8421
+-5822
+-686
+-4617
+5133
+4680
+1605
+6665
+8459
+3973
+-6755
+6351
+4530
+2693
+-1275
+-5417
+-8626
+-8020
+5446
+245
+9124
+-9683
+-7007
+1993
+9849
+-7937
+5578
+-3327
+-815
+6665
+2398
+336
+6406
+5971
+8382
+-6980
+3401
+7047
+-8984
+-2994
+-3812
+-464
+-7033
+-430
+733
+-1019
+-7563
+-522
+668
+-3185
+9761
+-6290
+-4042
+3159
+-3194
+-3490
+-4997
+2639
+3143
+8954
+-8749
+-7044
+2887
+-4414
+-9954
+-8432
+4329
+7170
+4162
+9172
+-3659
+-6098
+-5954
+-5414
+-1957
+-6729
+3429
+3104
+-7577
+7872
+9942
+-7625
+-4614
+4897
+-1128
+-7844
+937
+4348
+874
+-9288
+7942
+3729
+-6930
+3786
+-5007
+-5954
+-8309
+-6827
+-8677
+-3144
+6472
+-4266
+6846
+8046
+-6963
+9646
+4155
+-3166
+7807
+-3653
+-8452
+-7103
+-8396
+2272
+3613
+754
+4524
+6306
+-8935
+9309
+6056
+-9391
+9835
+1919
+957
+9242
+721
+-7540
+5158
+-763
+3172
+-4073
+-7128
+9281
+-7984
+8390
+7152
+-7318
+4627
+-8499
+-8518
+-9205
+318
+8455
+7701
+-1759
+-4732
+2288
+-474
+511
+-239
+1523
+6869
+497
+-3809
+2303
+1269
+1020
+1422
+-4097
+2989
+8809
+-2875
+-8608
+7807
+3592
+-8276
+-3294
+2211
+-5269
+6361
+-430
+-2466
+-3286
+-2982
+-9686
+-4872
+-9749
+1131
+-2947
+-558
+8827
+2268
+9581
+5600
+7896
+5112
+-9438
+9859
+-7190
+-6185
+-3181
+6738
+8091
+-6785
+6939
+4348
+6209
+4213
+8057
+-2334
+5496
+-3727
+-4060
+-7699
+-6714
+3781
+-1476
+-5993
+-1308
+1535
+1929
+-1738
+-9747
+8306
+-6913
+64
+6878
+-2453
+-4193
+-8504
+-2264
+-4220
+-157
+7519
+-9099
+1205
+-2206
+5288
+3544
+-8375
+-548
+-8788
+-7313
+269
+-3379
+1604
+-9484
+4163
+-333
+4237
+-4600
+722
+6713
+-7252
+-558
+9189
+-1908
+-8021
+-9464
+2316
+-5506
+6448
+6924
+-9610
+8346
+-2634
+9107
+-9865
+6350
+6223
+7391
+-1712
+-1750
+6252
+-1914
+8849
+4615
+3208
+-5728
+-817
+8827
+766
+-8417
+8820
+-2701
+-2982
+5450
+8060
+-7305
+4452
+7242
+-1431
+2888
+4393
+-1280
+-5173
+-6955
+3438
+7463
+-4692
+5496
+-5615
+-613
+1164
+-1732
+-5646
+5195
+5766
+-1155
+8930
+-3192
+-1829
+3467
+-9193
+-564
+3646
+4510
+1734
+5784
+-4490
+-4460
+-143
+-202
+-8015
+462
+-4555
+-3291
+-9685
+900
+8488
+-6275
+-7604
+5023
+3574
+-6461
+7729
+6058
+8390
+329
+-9949
+-5977
+8053
+-8743
+1334
+3038
+90
+-2543
+-8235
+-9644
+-9892
+-2947
+-4509
+-5900
+-753
+-1949
+-7763
+-7014
+-6911
+-6878
+-5694
+5819
+3084
+-2432
+-6675
+-3181
+-5469
+-8515
+1133
+-323
+3414
+283
+-6213
+-5106
+-5055
+-1964
+4993
+3208
+-9073
+8980
+7231
+7063
+-7511
+6399
+3335
+1046
+8205
+-8554
+-4202
+-3448
+-8630
+-6880
+-4023
+5546
+-6282
+1258
+-985
+-7874
+1812
+-7575
+-1213
+7511
+-453
+-2667
+8544
+-7280
+-7663
+1783
+-180
+7984
+-5809
+-8869
+5778
+-3764
+-2304
+-4567
+-4655
+-1429
+9580
+-8779
+3273
+-6729
+3100
+3257
+7212
+4478
+-1548
+-7696
+6421
+1978
+-2656
+-2129
+-5300
+3975
+-646
+8024
+3666
+-9989
+-4269
+9573
+2657
+5506
+-2894
+5565
+1838
+-5501
+-9575
+-8273
+-1459
+9127
+-7976
+-3152
+8033
+2623
+-8153
+2522
+3354
+-939
+-6184
+-1215
+6582
+3507
+-3955
+920
+9427
+8011
+6194
+9276
+-3538
+-4726
+-4457
+7305
+-9421
+1099
+9325
+4610
+5496
+-3765
+-9973
+6311
+-9861
+4027
+736
+730
+1077
+-6330
+-2374
+7883
+-3684
+8665
+6517
+-916
+-7402
+5260
+-60
+-9347
+-271
+-2704
+-8967
+690
+-9163
+-4756
+-2031
+-3645
+5227
+-5170
+4234
+-5518
+-2891
+5158
+7569
+-8582
+-4512
+8074
+9961
+5285
+-2915
+-831
+7579
+5715
+2116
+-7721
+5908
+-8543
+3538
+-3827
+-5640
+-3205
+3541
+-1967
+8511
+2221
+-851
+8551
+-4680
+-4961
+5832
+9025
+-2607
+-621
+4336
+-9135
+3093
+6859
+5999
+-8926
+-372
+4701
+6481
+1328
+-167
+2960
+-4129
+1838
+3976
+-2000
+1257
+-4558
+-6448
+-7158
+108
+4598
+8283
+-6059
+-3955
+-4039
+2078
+3187
+6851
+-432
+-4434
+-594
+5009
+43
+6401
+-6248
+-6252
+-1473
+7648
+4454
+3351
+8930
+-9654
+235
+7234
+2221
+690
+7416
+8718
+9758
+8931
+5099
+-5501
+7675
+-4993
+-1066
+-3740
+-248
+874
+-3752
+-656
+681
+2353
+-7911
+-3007
+-6635
+1330
+8211
+4502
+-6432
+4561
+-3909
+2585
+9547
+-3349
+-5462
+1729
+7395
+3244
+1160
+-2717
+-3748
+-8031
+4379
+909
+6467
+6617
+-8745
+-2662
+2494
+-4592
+2712
+6971
+408
+464
+-194
+-8329
+7375
+-4278
+8410
+1559
+4834
+-5951
+8426
+532
+-9643
+1973
+5909
+-4379
+5229
+-5043
+6260
+2525
+-4420
+-4202
+3362
+-307
+7635
+7155
+-5692
+7198
+996
+8574
+1215
+-7483
+-7122
+9460
+1232
+2621
+9403
+-8037
+-6151
+-8715
+9643
+1763
+321
+5250
+3870
+2448
+-72
+-9176
+5615
+-3878
+1991
+-575
+19
+4265
+-1613
+-5868
+-2074
+-3679
+-1633
+-5204
+-4990
+6620
+2585
+1489
+3897
+2693
+-4094
+3779
+9453
+3012
+-536
+116
+-36
+-7419
+2944
+9324
+-8711
+8244
+-9193
+7202
+-2038
+1081
+924
+4412
+888
+4727
+-7511
+7693
+9801
+1328
+5272
+2386
+-1053
+5361
+-3378
+-5452
+736
+6252
+2308
+-7932
+7474
+4283
+7263
+-3658
+4739
+2551
+7420
+9220
+-7316
+-474
+-8333
+-6110
+9107
+-6894
+8562
+4169
+-8062
+-8799
+9867
+-6098
+1629
+-2153
+9408
+317
+-5966
+-1571
+-1112
+9712
+5826
+9519
+-5043
+8834
+-1450
+-2900
+4268
+2086
+2843
+1660
+2843
+-1669
+3957
+-7276
+-3453
+8987
+-1499
+-5162
+-263
+798
+901
+-5163
+-5285
+9270
+-6151
+4234
+-8296
+-3480
+-3152
+1485
+-3980
+-8153
+-3672
+1388
+-1436
+-2020
+6247
+-6829
+-7984
+-4105
+3478
+-3767
+4475
+-1476
+640
+-3488
+-2596
+9387
+78
+289
+-5745
+-6685
+7411
+8660
+6497
+-6793
+-7351
+8221
+1401
+-2808
+4643
+4380
+-2997
+6909
+-1625
+5146
+5836
+3816
+8979
+-1981
+9128
+-7497
+-3267
+-5010
+8769
+-6700
+-7421
+-1819
+-1329
+-2203
+-7495
+-5667
+-8932
+-4345
+747
+-6694
+1520
+-1803
+7546
+-3895
+3700
+253
+-6527
+-8239
+4654
+4629
+-9690
+6917
+-9919
+3027
+-4495
+5807
+6581
+5800
+9189
+-6197
+4094
+7920
+1763
+-9679
+6388
+-9703
+4517
+1187
+1398
+3273
+924
+8960
+-6967
+9085
+2976
+-1949
+3720
+-2928
+8879
+-108
+6821
+6528
+6594
+-1315
+-7877
+-8
+-2562
+996
+9134
+1812
+4025
+-5069
+-5069
+7686
+2543
+4452
+8987
+-1772
+-4494
+-2577
+1330
+-3626
+5872
+-4997
+2046
+6717
+-1770
+2169
+6124
+-1032
+674
+3204
+9348
+447
+-1038
+-3373
+-6868
+4551
+1631
+6509
+-8957
+-3183
+7044
+9518
+3351
+-7222
+2153
+5453
+9136
+-4048
+-9573
+-1266
+903
+5245
+5809
+2358
+8359
+-4613
+-6953
+-8749
+-6066
+8374
+-3699
+8455
+7417
+-3944
+2249
+-190
+8766
+-9265
+5023
+9381
+-1919
+2452
+1058
+6606
+1533
+2353
+3856
+-1803
+5040
+-2982
+4259
+8790
+9437
+6481
+-1116
+9394
+-7814
+-1164
+-2513
+1929
+1899
+2417
+-3648
+-4121
+1768
+2334
+815
+-4023
+2937
+7936
+-6524
+-3830
+1213
+-8499
+-3970
+-2000
+-6926
+8749
+-9912
+5067
+-267
+-6759
+8196
+880
+-7517
+6570
+-6130
+5754
+-6197
+-5517
+1282
+4478
+-4643
+4825
+1676
+-4742
+-1069
+-578
+-6103
+-4509
+-7124
+-2660
+1377
+3892
+2623
+-3208
+2681
+6152
+-916
+8425
+-91
+3147
+8997
+5239
+-8047
+-7407
+2363
+2393
+-9651
+-342
+3518
+1551
+637
+1743
+5975
+624
+-8202
+4378
+-4923
+874
+-2596
+3
+2782
+-2970
+288
+747
+-1196
+1401
+8512
+-7241
+5153
+-6591
+-9073
+-7671
+7600
+9065
+-5744
+-5293
+-5293
+2046
+3240
+-3015
+730
+8386
+-9434
+3354
+-5760
+-3324
+9218
+457
+4091
+1763
+4548
+-7088
+-8067
+3898
+-1433
+3969
+6657
+-9921
+2086
+7934
+7369
+9186
+2354
+6754
+8974
+-1655
+-3446
+-9090
+-9679
+-8935
+8155
+3073
+-3578
+-5224
+-5398
+-5987
+6106
+-8453
+9260
+-9045
+14
+9906
+-6752
+8732
+6360
+-3845
+-4847
+3034
+-7026
+1967
+-611
+3857
+7428
+9273
+-2861
+-2367
+7305
+733
+4629
+3997
+-4840
+3424
+2032
+547
+2661
+2876
+-4439
+-3002
+9251
+-7564
+-1104
+-9747
+7726
+-7600
+-6350
+-5470
+-2601
+4420
+6924
+2179
+8266
+3038
+8382
+-9052
+-928
+-9188
+1075
+3057
+8845
+1295
+5473
+629
diff --git a/src/bin/2022/day20.rs b/src/bin/2022/day20.rs
new file mode 100644
index 0000000..654ea60
--- /dev/null
+++ b/src/bin/2022/day20.rs
@@ -0,0 +1,74 @@
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+use advent_of_code::prelude::*;
+
+#[derive(Default)]
+pub struct WrappingQueue {
+ queue: Vec<(usize, isize)>,
+}
+
+impl std::fmt::Debug for WrappingQueue {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_list()
+ .entries(self.queue.iter().copied().map(|v| v.1))
+ .finish()
+ }
+}
+
+impl WrappingQueue {
+ fn mix(&mut self, idx: usize) {
+ let val = self.queue.remove(idx);
+ let new_idx: usize = ((idx as isize + val.1)
+ .rem_euclid(self.queue.len() as isize))
+ .try_into()
+ .unwrap();
+ self.queue.insert(new_idx, val);
+ }
+}
+
+pub fn parse(fh: File) -> Result<WrappingQueue> {
+ Ok(WrappingQueue {
+ queue: parse::lines(fh).enumerate().collect(),
+ })
+}
+
+pub fn part1(mut q: WrappingQueue) -> Result<isize> {
+ for i in 0..q.queue.len() {
+ let idx = q.queue.iter().position(|(idx, _)| *idx == i).unwrap();
+ q.mix(idx);
+ }
+ let zero_idx = q.queue.iter().position(|(_, val)| *val == 0).unwrap();
+ Ok(q.queue[(zero_idx + 1000) % q.queue.len()].1
+ + q.queue[(zero_idx + 2000) % q.queue.len()].1
+ + q.queue[(zero_idx + 3000) % q.queue.len()].1)
+}
+
+pub fn part2(q: WrappingQueue) -> Result<isize> {
+ let key = 811589153;
+ let mut q = WrappingQueue {
+ queue: q.queue.into_iter().map(|(i, v)| (i, key * v)).collect(),
+ };
+ for _ in 0..10 {
+ for i in 0..q.queue.len() {
+ let idx = q.queue.iter().position(|(idx, _)| *idx == i).unwrap();
+ q.mix(idx);
+ }
+ }
+ let zero_idx = q.queue.iter().position(|(_, val)| *val == 0).unwrap();
+ Ok(q.queue[(zero_idx + 1000) % q.queue.len()].1
+ + q.queue[(zero_idx + 2000) % q.queue.len()].1
+ + q.queue[(zero_idx + 3000) % q.queue.len()].1)
+}
+
+#[test]
+fn test() {
+ assert_eq!(
+ part1(parse(parse::data(2022, 20).unwrap()).unwrap()).unwrap(),
+ 17490
+ );
+ assert_eq!(
+ part2(parse(parse::data(2022, 20).unwrap()).unwrap()).unwrap(),
+ 1632917375836
+ );
+}
diff --git a/src/bin/2022/main.rs b/src/bin/2022/main.rs
index 2aa8500..d13e807 100644
--- a/src/bin/2022/main.rs
+++ b/src/bin/2022/main.rs
@@ -30,6 +30,7 @@ mod day16;
mod day17;
mod day18;
mod day19;
+mod day20;
// NEXT MOD
#[paw::main]
@@ -55,6 +56,7 @@ fn main(opt: Opt) -> Result<()> {
17 => advent_of_code::day!(2022, opt.day, opt.puzzle, day17),
18 => advent_of_code::day!(2022, opt.day, opt.puzzle, day18),
19 => advent_of_code::day!(2022, opt.day, opt.puzzle, day19),
+ 20 => advent_of_code::day!(2022, opt.day, opt.puzzle, day20),
// NEXT PART
_ => panic!("unknown day {}", opt.day),
}