summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--2020/day-13/README.org253
-rwxr-xr-x2020/day-13/day-13.raku35
-rw-r--r--2020/day-13/input2
-rw-r--r--2020/day-13/sample_input2
-rw-r--r--2021/day-01/README.org166
-rw-r--r--2021/day-01/day-01.raku23
-rw-r--r--2021/day-01/input2000
-rw-r--r--2022/day-01/day-01.raku7
-rw-r--r--2022/day-01/input2231
9 files changed, 4719 insertions, 0 deletions
diff --git a/2020/day-13/README.org b/2020/day-13/README.org
new file mode 100644
index 0000000..50da16c
--- /dev/null
+++ b/2020/day-13/README.org
@@ -0,0 +1,253 @@
+#+title: Day 13 - Shuttle Search
+#+options: toc:1
+#+export_file_name: index
+#+html_link_up: ../../index.html#2020
+#+setupfile: ~/.emacs.d/org-templates/level-3.org
+
+* Puzzle
+
+- This puzzle is taken from: https://adventofcode.com/2020/day/13
+
+Your ferry can make it safely to a nearby port, but it won't get much
+further. When you call to book another ship, you discover that no ships
+embark from that port to your vacation island. You'll need to get from
+the port to the nearest airport.
+
+Fortunately, a shuttle bus service is available to bring you from the
+sea port to the airport! Each bus has an ID number that also indicates
+how often the bus leaves for the airport.
+
+Bus schedules are defined based on a timestamp that measures the number
+of minutes since some fixed reference point in the past. At timestamp 0,
+every bus simultaneously departed from the sea port. After that, each
+bus travels to the airport, then various other locations, and finally
+returns to the sea port to repeat its journey forever.
+
+The time this loop takes a particular bus is also its ID number: the bus
+with ID 5 departs from the sea port at timestamps 0, 5, 10, 15, and so
+on. The bus with ID 11 departs at 0, 11, 22, 33, and so on. If you are
+there when the bus departs, you can ride that bus to the airport!
+
+Your notes (your puzzle input) consist of two lines. The first line is
+your estimate of the earliest timestamp you could depart on a bus. The
+second line lists the bus IDs that are in service according to the
+shuttle company; entries that show x must be out of service, so you
+decide to ignore them.
+
+To save time once you arrive, your goal is to figure out the earliest
+bus you can take to the airport. (There will be exactly one such bus.)
+
+For example, suppose you have the following notes:
+
+#+begin_src
+939
+7,13,x,x,59,x,31,19
+#+end_src
+
+Here, the earliest timestamp you could depart is 939, and the bus IDs in
+service are 7, 13, 59, 31, and 19. Near timestamp 939, these bus IDs
+depart at the times marked D:
+
+#+begin_src
+time   bus 7   bus 13  bus 59  bus 31  bus 19
+929      .       .       .       .       .
+930      .       .       .       D       .
+931      D       .       .       .       D
+932      .       .       .       .       .
+933      .       .       .       .       .
+934      .       .       .       .       .
+935      .       .       .       .       .
+936      .       D       .       .       .
+937      .       .       .       .       .
+938      D       .       .       .       .
+939      .       .       .       .       .
+940      .       .       .       .       .
+941      .       .       .       .       .
+942      .       .       .       .       .
+943      .       .       .       .       .
+944      .       .       D       .       .
+945      D       .       .       .       .
+946      .       .       .       .       .
+947      .       .       .       .       .
+948      .       .       .       .       .
+949      .       D       .       .       .
+#+end_src
+
+The earliest bus you could take is bus ID 59. It doesn't depart until
+timestamp 944, so you would need to wait 944 - 939 = 5 minutes before it
+departs. Multiplying the bus ID by the number of minutes you'd need to
+wait gives 295.
+
+What is the ID of the earliest bus you can take to the airport
+multiplied by the number of minutes you'll need to wait for that bus?
+
+** Part 2
+
+The shuttle company is running a contest: one gold coin for anyone that
+can find the earliest timestamp such that the first bus ID departs at
+that time and each subsequent listed bus ID departs at that subsequent
+minute. (The first line in your input is no longer relevant.)
+
+For example, suppose you have the same list of bus IDs as above:
+
+#+begin_src
+7,13,x,x,59,x,31,19
+#+end_src
+
+An x in the schedule means there are no constraints on what bus IDs must
+depart at that time.
+
+This means you are looking for the earliest timestamp (called t) such that:
+
+- Bus ID 7 departs at timestamp t.
+- Bus ID 13 departs one minute after timestamp t.
+- There are no requirements or restrictions on departures at two or
+  three minutes after timestamp t.
+- Bus ID 59 departs four minutes after timestamp t.
+- There are no requirements or restrictions on departures at five
+  minutes after timestamp t.
+- Bus ID 31 departs six minutes after timestamp t.
+- Bus ID 19 departs seven minutes after timestamp t.
+
+The only bus departures that matter are the listed bus IDs at their
+specific offsets from t. Those bus IDs can depart at other times, and
+other bus IDs can depart at those times. For example, in the list above,
+because bus ID 19 must depart seven minutes after the timestamp at which
+bus ID 7 departs, bus ID 7 will always also be departing with bus ID 19
+at seven minutes after timestamp t.
+
+In this example, the earliest timestamp at which this occurs is 1068781:
+
+#+begin_src
+time     bus 7   bus 13  bus 59  bus 31  bus 19
+1068773    .       .       .       .       .
+1068774    D       .       .       .       .
+1068775    .       .       .       .       .
+1068776    .       .       .       .       .
+1068777    .       .       .       .       .
+1068778    .       .       .       .       .
+1068779    .       .       .       .       .
+1068780    .       .       .       .       .
+1068781    D       .       .       .       .
+1068782    .       D       .       .       .
+1068783    .       .       .       .       .
+1068784    .       .       .       .       .
+1068785    .       .       D       .       .
+1068786    .       .       .       .       .
+1068787    .       .       .       D       .
+1068788    D       .       .       .       D
+1068789    .       .       .       .       .
+1068790    .       .       .       .       .
+1068791    .       .       .       .       .
+1068792    .       .       .       .       .
+1068793    .       .       .       .       .
+1068794    .       .       .       .       .
+1068795    D       D       .       .       .
+1068796    .       .       .       .       .
+1068797    .       .       .       .       .
+#+end_src
+
+In the above example, bus ID 7 departs at timestamp 1068788 (seven
+minutes after t). This is fine; the only requirement on that minute is
+that bus ID 19 departs then, and it does.
+
+Here are some other examples:
+
+- The earliest timestamp that matches the list 17,x,13,19 is 3417.
+- 67,7,59,61 first occurs at timestamp 754018.
+- 67,x,7,59,61 first occurs at timestamp 779210.
+- 67,7,x,59,61 first occurs at timestamp 1261476.
+- 1789,37,47,1889 first occurs at timestamp 1202161486.
+
+However, with so many bus IDs in your list, surely the actual earliest
+timestamp will be larger than 100000000000000!
+
+What is the earliest timestamp such that all of the listed bus IDs
+depart at offsets matching their positions in the list?
+
+* Solution
+
+~$file~ holds the input file. ~@input~ holds the lines of the file.
+
+#+begin_src raku
+unit sub MAIN(
+    IO() $file = "input" #= input file
+);
+
+my @input = $file.IO.lines;
+#+end_src
+
+~$start~ is the earliest timestamp we could depart at. ~@bus_ids~ holds all
+the bus ids, since we don't need "x", we just take the integers.
+
+#+begin_src raku
+my Int $start = @input[0].Int;
+my Int @bus_ids = @input[1].split(",").grep(/\d+/)>>.Int;
+#+end_src
+
+Looping over the timestamps, starting from ~$start~: We check if each bus
+~$id~ is divisible by the current timestamp. If the current ~$id~ is
+divisible by ~$stamp~, print the solution.
+
+#+begin_src raku
+stamp: for $start .. Inf -> $stamp {
+    for @bus_ids -> $id {
+        next unless $stamp %% $id;
+        say "Part 1: " ~ $id * ($stamp - $start);
+        last stamp;
+    }
+}
+#+end_src
+
+** Part 2
+
+For part 2, we don't need ~$start~ but just the ids & in this case the
+index of ids matter so we keep the "x" ids.
+
+#+begin_src raku
+my @bus_ids = @input[1].split(",");
+#+end_src
+
+~$stamp~ holds the timestamp & ~$step~ holds the number of minutes we can
+skip over. ~$step~ initially is set to first entry of ~@bus_ids~ because the
+final ~$stamp~ has to be a multiple of this. If the first entry is "x"
+then this will fail.
+
+#+begin_src raku
+my Int $stamp = 0;
+my Int $step = @bus_ids.first.Int;
+#+end_src
+
+- [X] ~$stamp~ must be multiple of first entry.
+
+Now we loop over all the entries except the first one, we've already
+cleared that condition. Entries with "x" are skipped.
+
+I believe going through the code with an example will make it easier to
+understand. So we'll go through this code with the sample input:
+
+#+begin_src
+7,13,x,x,59,x,31,19
+#+end_src
+
+~@bus_ids.kv[2..*]~ returns the key, value entries of ~13,x,x,59,x,31,19~.
+~$idx~ holds the index & ~$id~ holds the bus id. Let's start from ~$idx~ being
+1 & ~$id~ being 13.
+
+We'll go through the code line by line. The first line in the loop
+checks if the entry is "x", if so then it skips the entry. In our case
+~$id~ is 13 so it doesn't skip.
+
+Line 2 in the loop keeps on increasing ~$stamp~ by skipping over ~$step~
+stamps until ~$stamp + $idx~ is divisible by ~$id~, which is the required
+condition. Then we once again increase ~$step~.
+
+#+begin_src raku
+id: for @bus_ids.kv[2..*] -> $idx, $id {
+    next id if $id eq "x";
+    $stamp += $step until ($stamp + $idx) %% $id;
+    $step lcm= $id;
+}
+
+say "Part 2: " ~ $stamp;
+#+end_src
diff --git a/2020/day-13/day-13.raku b/2020/day-13/day-13.raku
new file mode 100755
index 0000000..e870af6
--- /dev/null
+++ b/2020/day-13/day-13.raku
@@ -0,0 +1,35 @@
+#!/usr/bin/env raku
+
+unit sub MAIN(
+    IO() $file = "input" #= input file
+);
+
+my @input = $file.IO.lines;
+
+{
+    my Int $start = @input[0].Int;
+    my Int @bus_ids = @input[1].split(",").grep(/\d+/)>>.Int;
+
+    stamp: for $start .. Inf -> $stamp {
+        for @bus_ids -> $id {
+            next unless $stamp %% $id;
+            say "Part 1: " ~ $id * ($stamp - $start);
+            last stamp;
+        }
+    }
+}
+
+{
+    my @bus_ids = @input[1].split(",");
+
+    my Int $stamp = 0;
+    my Int $step = @bus_ids.first.Int;
+
+    id: for @bus_ids.kv[2..*] -> $idx, $id {
+        next id if $id eq "x";
+        $stamp += $step until ($stamp + $idx) %% $id;
+        $step lcm= $id;
+    }
+
+    say "Part 2: " ~ $stamp;
+}
diff --git a/2020/day-13/input b/2020/day-13/input
new file mode 100644
index 0000000..4a527f3
--- /dev/null
+++ b/2020/day-13/input
@@ -0,0 +1,2 @@
+1002460
+29,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,601,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,17,x,19,x,x,x,x,x,x,x,x,x,x,x,463,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37
diff --git a/2020/day-13/sample_input b/2020/day-13/sample_input
new file mode 100644
index 0000000..d76f619
--- /dev/null
+++ b/2020/day-13/sample_input
@@ -0,0 +1,2 @@
+939
+7,13,x,x,59,x,31,19
diff --git a/2021/day-01/README.org b/2021/day-01/README.org
new file mode 100644
index 0000000..c1a4870
--- /dev/null
+++ b/2021/day-01/README.org
@@ -0,0 +1,166 @@
+#+title: Day 01 - Sonar Sweep
+#+setupfile: ~/.emacs.d/org-templates/level-3.org
+#+html_link_up: ../../index.html#2021
+#+options: toc:1
+#+export_file_name: index
+
+* Puzzle
+
+- This puzzle is taken from: https://adventofcode.com/2021/day/1
+
+You're minding your own business on a ship at sea when the overboard
+alarm goes off! You rush to see if you can help. Apparently, one of the
+Elves tripped and accidentally sent the sleigh keys flying into the
+ocean!
+
+Before you know it, you're inside a submarine the Elves keep ready for
+situations like this. It's covered in Christmas lights (because of
+course it is), and it even has an experimental antenna that should be
+able to track the keys if you can boost its signal strength high enough;
+there's a little meter that indicates the antenna's signal strength by
+displaying 0-50 stars.
+
+Your instincts tell you that in order to save Christmas, you'll need to
+get all fifty stars by December 25th.
+
+Collect stars by solving puzzles. Two puzzles will be made available on
+each day in the Advent calendar; the second puzzle is unlocked when you
+complete the first. Each puzzle grants one star. Good luck!
+
+As the submarine drops below the surface of the ocean, it automatically
+performs a sonar sweep of the nearby sea floor. On a small screen, the
+sonar sweep report (your puzzle input) appears: each line is a
+measurement of the sea floor depth as the sweep looks further and
+further away from the submarine.
+
+For example, suppose you had the following report:
+
+#+begin_src
+199
+200
+208
+210
+200
+207
+240
+269
+260
+263
+#+end_src
+
+This report indicates that, scanning outward from the submarine, the
+sonar sweep found depths of 199, 200, 208, 210, and so on.
+
+The first order of business is to figure out how quickly the depth
+increases, just so you know what you're dealing with - you never know if
+the keys will get carried into deeper water by an ocean current or a
+fish or something.
+
+To do this, count the number of times a depth measurement increases from
+the previous measurement. (There is no measurement before the first
+measurement.) In the example above, the changes are as follows:
+
+#+begin_src
+199 (N/A - no previous measurement)
+200 (increased)
+208 (increased)
+210 (increased)
+200 (decreased)
+207 (increased)
+240 (increased)
+269 (increased)
+260 (decreased)
+263 (increased)
+#+end_src
+
+In this example, there are 7 measurements that are larger than the
+previous measurement.
+
+How many measurements are larger than the previous measurement?
+
+** Part 2
+
+Considering every single measurement isn't as useful as you expected:
+there's just too much noise in the data.
+
+Instead, consider sums of a three-measurement sliding window. Again
+considering the above example:
+
+#+begin_src
+199  A
+200  A B
+208  A B C
+210    B C D
+200  E   C D
+207  E F   D
+240  E F G
+269    F G H
+260      G H
+263        H
+#+end_src
+
+Start by comparing the first and second three-measurement windows. The
+measurements in the first window are marked A (199, 200, 208); their sum
+is 199 + 200 + 208 = 607. The second window is marked B (200, 208, 210);
+its sum is 618. The sum of measurements in the second window is larger
+than the sum of the first, so this first comparison increased.
+
+Your goal now is to count the number of times the sum of measurements in
+this sliding window increases from the previous sum. So, compare A with
+B, then compare B with C, then C with D, and so on. Stop when there
+aren't enough measurements left to create a new three-measurement sum.
+
+In the above example, the sum of each three-measurement window is as
+follows:
+
+#+begin_src
+A: 607 (N/A - no previous sum)
+B: 618 (increased)
+C: 618 (no change)
+D: 617 (decreased)
+E: 647 (increased)
+F: 716 (increased)
+G: 769 (increased)
+H: 792 (increased)
+#+end_src
+
+In this example, there are 5 sums that are larger than the previous sum.
+
+Consider sums of a three-measurement sliding window. How many sums are
+larger than the previous sum?
+
+* Solution
+
+Slurp all the input values by line and store them as integer:
+
+#+begin_src raku
+my Int @inputs = "input".IO.lines>>.Int;
+#+end_src
+
+Loop over the input elements and compare with previous value,
+~$larger-than-previous~ stores the counter. It's pretty straightforward.
+
+#+begin_src raku
+my Int $larger-than-previous = 0;
+
+for (^@inputs.elems).skip -> $idx {
+    $larger-than-previous++ if @inputs[$idx] > @inputs[$idx - 1];
+}
+
+put "Part 1: ", $larger-than-previous;
+#+end_src
+
+** Part 2
+
+Here, we compare the sum of current set (previous 3 inputs) to the
+previous set.
+
+#+begin_src raku
+my Int $larger-than-previous = 0;
+
+for (^@inputs.elems).skip(3) -> $idx {
+    $larger-than-previous++ if @inputs[$idx - 2 .. $idx].sum > @inputs[$idx - 3 .. $idx - 1].sum;
+}
+
+put "Part 2: ", $larger-than-previous;
+#+end_src
diff --git a/2021/day-01/day-01.raku b/2021/day-01/day-01.raku
new file mode 100644
index 0000000..ae77c28
--- /dev/null
+++ b/2021/day-01/day-01.raku
@@ -0,0 +1,23 @@
+#!/usr/bin/env raku
+
+my Int @inputs = "input".IO.lines>>.Int;
+
+{
+    my Int $larger-than-previous = 0;
+
+    for (^@inputs.elems).skip -> $idx {
+        $larger-than-previous++ if @inputs[$idx] > @inputs[$idx - 1];
+    }
+
+    put "Part 1: ", $larger-than-previous;
+}
+
+{
+    my Int $larger-than-previous = 0;
+
+    for (^@inputs.elems).skip(3) -> $idx {
+        $larger-than-previous++ if @inputs[$idx - 2 .. $idx].sum > @inputs[$idx - 3 .. $idx - 1].sum;
+    }
+
+    put "Part 2: ", $larger-than-previous;
+}
diff --git a/2021/day-01/input b/2021/day-01/input
new file mode 100644
index 0000000..9bc1629
--- /dev/null
+++ b/2021/day-01/input
@@ -0,0 +1,2000 @@
+193
+195
+204
+208
+219
+230
+231
+233
+234
+241
+253
+260
+261
+265
+268
+279
+277
+297
+299
+300
+306
+308
+312
+313
+329
+349
+361
+362
+369
+371
+373
+378
+380
+382
+383
+382
+384
+385
+386
+388
+417
+419
+424
+429
+435
+438
+439
+454
+468
+498
+504
+510
+512
+514
+518
+526
+528
+533
+555
+561
+565
+585
+590
+617
+633
+635
+640
+641
+652
+653
+657
+659
+673
+690
+696
+690
+691
+712
+718
+708
+711
+723
+733
+734
+736
+739
+738
+739
+761
+764
+767
+768
+774
+779
+791
+797
+800
+804
+807
+810
+811
+810
+812
+814
+813
+817
+827
+824
+847
+848
+850
+852
+880
+882
+892
+896
+898
+899
+900
+906
+921
+933
+935
+937
+935
+937
+944
+951
+955
+963
+964
+979
+981
+985
+996
+997
+998
+1005
+1009
+1011
+1015
+1019
+1021
+1022
+1006
+1009
+1017
+1018
+1019
+1022
+1028
+1022
+1023
+1043
+1046
+1047
+1053
+1054
+1078
+1079
+1091
+1111
+1115
+1119
+1127
+1128
+1129
+1130
+1147
+1160
+1161
+1176
+1177
+1171
+1183
+1189
+1190
+1191
+1193
+1195
+1201
+1203
+1215
+1219
+1229
+1222
+1206
+1212
+1232
+1235
+1242
+1257
+1258
+1261
+1267
+1269
+1267
+1265
+1267
+1273
+1275
+1278
+1282
+1285
+1288
+1306
+1330
+1345
+1354
+1355
+1358
+1360
+1358
+1367
+1368
+1366
+1363
+1365
+1366
+1367
+1369
+1371
+1374
+1377
+1378
+1381
+1382
+1387
+1400
+1421
+1425
+1445
+1459
+1461
+1463
+1483
+1487
+1488
+1490
+1491
+1493
+1531
+1544
+1546
+1548
+1549
+1556
+1559
+1563
+1544
+1558
+1577
+1590
+1592
+1599
+1596
+1599
+1617
+1621
+1623
+1624
+1627
+1628
+1631
+1634
+1666
+1696
+1697
+1700
+1699
+1710
+1715
+1717
+1720
+1730
+1726
+1727
+1741
+1739
+1745
+1751
+1754
+1763
+1765
+1767
+1792
+1797
+1798
+1814
+1838
+1852
+1858
+1884
+1889
+1898
+1899
+1898
+1907
+1908
+1921
+1922
+1942
+1944
+1954
+1956
+1961
+1967
+1971
+1972
+1973
+1995
+2021
+2027
+2039
+2045
+2043
+2044
+2048
+2055
+2056
+2058
+2083
+2086
+2093
+2106
+2107
+2110
+2112
+2118
+2121
+2133
+2139
+2146
+2150
+2155
+2160
+2164
+2165
+2166
+2160
+2159
+2158
+2164
+2175
+2179
+2186
+2191
+2192
+2196
+2187
+2207
+2214
+2222
+2223
+2225
+2229
+2231
+2228
+2229
+2230
+2233
+2236
+2238
+2241
+2245
+2225
+2229
+2231
+2235
+2237
+2240
+2243
+2245
+2246
+2249
+2250
+2251
+2256
+2259
+2271
+2272
+2273
+2268
+2269
+2270
+2275
+2272
+2273
+2275
+2276
+2282
+2285
+2289
+2300
+2306
+2337
+2338
+2359
+2353
+2354
+2357
+2364
+2370
+2359
+2360
+2361
+2373
+2384
+2398
+2399
+2395
+2403
+2406
+2408
+2414
+2415
+2420
+2419
+2427
+2443
+2455
+2457
+2477
+2479
+2487
+2488
+2491
+2493
+2496
+2505
+2511
+2513
+2514
+2517
+2546
+2530
+2532
+2533
+2537
+2541
+2542
+2541
+2567
+2576
+2592
+2611
+2616
+2622
+2640
+2665
+2679
+2687
+2693
+2699
+2706
+2715
+2721
+2742
+2739
+2756
+2762
+2771
+2772
+2773
+2770
+2788
+2789
+2798
+2799
+2800
+2801
+2800
+2803
+2807
+2808
+2812
+2815
+2848
+2854
+2855
+2857
+2858
+2868
+2870
+2884
+2888
+2890
+2900
+2901
+2909
+2912
+2918
+2919
+2925
+2939
+2942
+2956
+2963
+2967
+2968
+2972
+2986
+2998
+3001
+3023
+3037
+3047
+3050
+3054
+3062
+3065
+3064
+3066
+3067
+3068
+3082
+3084
+3090
+3097
+3099
+3098
+3094
+3078
+3081
+3083
+3085
+3068
+3076
+3077
+3078
+3080
+3086
+3090
+3102
+3107
+3111
+3114
+3119
+3124
+3125
+3126
+3127
+3131
+3135
+3137
+3138
+3139
+3143
+3173
+3190
+3191
+3192
+3194
+3198
+3199
+3200
+3194
+3196
+3220
+3222
+3223
+3210
+3213
+3214
+3218
+3232
+3243
+3251
+3266
+3267
+3266
+3270
+3273
+3275
+3278
+3283
+3300
+3306
+3307
+3326
+3329
+3332
+3333
+3334
+3340
+3343
+3345
+3359
+3361
+3362
+3373
+3378
+3379
+3380
+3383
+3386
+3409
+3422
+3431
+3433
+3434
+3438
+3454
+3479
+3481
+3490
+3503
+3511
+3516
+3503
+3505
+3530
+3527
+3529
+3532
+3553
+3556
+3557
+3562
+3571
+3572
+3574
+3575
+3584
+3602
+3603
+3606
+3597
+3624
+3644
+3669
+3670
+3676
+3690
+3713
+3714
+3741
+3743
+3725
+3745
+3749
+3758
+3759
+3775
+3796
+3798
+3799
+3805
+3817
+3818
+3829
+3869
+3886
+3881
+3882
+3887
+3888
+3907
+3902
+3901
+3922
+3920
+3897
+3890
+3920
+3937
+3947
+3949
+3953
+3967
+3976
+3977
+3988
+3998
+3999
+4004
+4009
+3973
+3975
+3988
+3990
+3994
+4001
+4005
+4016
+4017
+4018
+4027
+4028
+4023
+4029
+4000
+4001
+4002
+4009
+4010
+4013
+4014
+4029
+4032
+4034
+4039
+4040
+4050
+4055
+4050
+4055
+4058
+4059
+4061
+4064
+4080
+4082
+4081
+4082
+4084
+4085
+4088
+4090
+4091
+4109
+4118
+4119
+4140
+4145
+4150
+4151
+4147
+4150
+4156
+4175
+4177
+4178
+4181
+4182
+4183
+4191
+4190
+4191
+4223
+4225
+4233
+4263
+4270
+4277
+4280
+4302
+4304
+4316
+4319
+4320
+4312
+4320
+4321
+4356
+4354
+4355
+4361
+4374
+4402
+4384
+4389
+4390
+4392
+4390
+4402
+4408
+4409
+4449
+4453
+4454
+4462
+4464
+4465
+4467
+4469
+4470
+4472
+4474
+4473
+4474
+4478
+4490
+4493
+4495
+4503
+4506
+4509
+4512
+4524
+4525
+4526
+4541
+4557
+4558
+4559
+4560
+4561
+4568
+4583
+4584
+4587
+4589
+4598
+4603
+4606
+4607
+4610
+4611
+4612
+4627
+4630
+4653
+4656
+4657
+4659
+4660
+4682
+4684
+4683
+4684
+4685
+4686
+4691
+4692
+4701
+4702
+4706
+4713
+4714
+4745
+4772
+4773
+4781
+4783
+4802
+4807
+4812
+4815
+4821
+4823
+4825
+4831
+4832
+4847
+4848
+4849
+4850
+4858
+4857
+4858
+4874
+4852
+4858
+4869
+4882
+4884
+4886
+4896
+4887
+4888
+4893
+4903
+4907
+4909
+4905
+4915
+4940
+4944
+4961
+4967
+4968
+4960
+4983
+4987
+4986
+4988
+4991
+4993
+4983
+4985
+4987
+4989
+4993
+4994
+4967
+4980
+4975
+4980
+4999
+5000
+5001
+5003
+5005
+5007
+5016
+5024
+5026
+5027
+5028
+5029
+5030
+5045
+5055
+5056
+5066
+5064
+5081
+5083
+5084
+5090
+5061
+5063
+5069
+5091
+5102
+5103
+5106
+5116
+5123
+5141
+5146
+5149
+5150
+5167
+5168
+5170
+5171
+5182
+5181
+5185
+5186
+5191
+5195
+5213
+5232
+5233
+5242
+5251
+5266
+5270
+5268
+5269
+5284
+5290
+5294
+5300
+5302
+5303
+5304
+5332
+5335
+5329
+5332
+5334
+5343
+5346
+5356
+5357
+5363
+5365
+5366
+5367
+5373
+5377
+5384
+5394
+5395
+5392
+5403
+5405
+5394
+5399
+5401
+5412
+5413
+5416
+5418
+5424
+5429
+5402
+5408
+5418
+5420
+5428
+5430
+5437
+5438
+5442
+5444
+5474
+5486
+5488
+5501
+5514
+5520
+5519
+5522
+5547
+5551
+5553
+5557
+5558
+5581
+5583
+5587
+5572
+5575
+5574
+5575
+5578
+5593
+5595
+5596
+5597
+5606
+5612
+5613
+5623
+5624
+5636
+5637
+5646
+5671
+5675
+5680
+5691
+5693
+5720
+5721
+5733
+5738
+5750
+5729
+5730
+5731
+5732
+5734
+5729
+5748
+5750
+5751
+5753
+5756
+5761
+5768
+5771
+5775
+5777
+5791
+5793
+5795
+5798
+5795
+5808
+5809
+5810
+5812
+5813
+5820
+5821
+5824
+5854
+5868
+5869
+5874
+5880
+5886
+5887
+5908
+5909
+5918
+5926
+5931
+5941
+5957
+5967
+5960
+5961
+5958
+5971
+5973
+5975
+5976
+5978
+5979
+5986
+5991
+5994
+5977
+5982
+5983
+5987
+5989
+6013
+6012
+6019
+6022
+6033
+6034
+6037
+6038
+6066
+6068
+6073
+6075
+6077
+6082
+6094
+6108
+6109
+6111
+6113
+6116
+6117
+6121
+6122
+6124
+6129
+6132
+6140
+6141
+6153
+6164
+6185
+6183
+6197
+6198
+6196
+6203
+6204
+6224
+6227
+6230
+6231
+6240
+6257
+6259
+6261
+6280
+6288
+6290
+6291
+6293
+6304
+6306
+6308
+6310
+6316
+6319
+6334
+6335
+6336
+6337
+6345
+6346
+6347
+6350
+6353
+6356
+6364
+6369
+6374
+6380
+6384
+6403
+6410
+6411
+6415
+6416
+6417
+6419
+6420
+6433
+6437
+6443
+6454
+6455
+6458
+6481
+6492
+6496
+6517
+6527
+6532
+6547
+6548
+6552
+6560
+6553
+6568
+6572
+6574
+6575
+6571
+6576
+6580
+6596
+6597
+6624
+6628
+6629
+6642
+6645
+6629
+6634
+6640
+6645
+6646
+6655
+6661
+6673
+6680
+6683
+6674
+6679
+6690
+6691
+6692
+6707
+6713
+6714
+6721
+6741
+6746
+6762
+6766
+6767
+6773
+6784
+6785
+6786
+6790
+6791
+6792
+6824
+6828
+6833
+6835
+6836
+6837
+6838
+6826
+6829
+6864
+6876
+6877
+6878
+6880
+6882
+6883
+6889
+6900
+6901
+6938
+6939
+6943
+6949
+6955
+6959
+6961
+6962
+6965
+6967
+6968
+6969
+6983
+6989
+6997
+6998
+7002
+6981
+6995
+6997
+7005
+7023
+7026
+7036
+7041
+7043
+7052
+7067
+7068
+7069
+7079
+7088
+7098
+7111
+7109
+7119
+7120
+7121
+7129
+7130
+7142
+7144
+7141
+7145
+7150
+7151
+7173
+7179
+7180
+7182
+7191
+7205
+7207
+7209
+7218
+7229
+7239
+7241
+7243
+7271
+7265
+7267
+7269
+7272
+7274
+7276
+7305
+7306
+7307
+7308
+7311
+7313
+7316
+7318
+7320
+7322
+7340
+7343
+7344
+7354
+7360
+7367
+7370
+7371
+7372
+7389
+7391
+7392
+7399
+7418
+7400
+7403
+7404
+7405
+7406
+7411
+7395
+7402
+7417
+7419
+7420
+7424
+7426
+7427
+7414
+7412
+7413
+7417
+7420
+7421
+7422
+7449
+7454
+7459
+7462
+7464
+7463
+7464
+7466
+7481
+7486
+7485
+7487
+7488
+7489
+7494
+7509
+7526
+7529
+7530
+7531
+7538
+7541
+7547
+7550
+7554
+7561
+7562
+7563
+7564
+7566
+7574
+7576
+7577
+7578
+7581
+7609
+7623
+7626
+7627
+7630
+7631
+7653
+7654
+7657
+7658
+7659
+7662
+7664
+7674
+7675
+7677
+7676
+7694
+7696
+7711
+7734
+7735
+7742
+7746
+7749
+7753
+7759
+7760
+7767
+7781
+7805
+7807
+7808
+7826
+7843
+7844
+7845
+7853
+7870
+7871
+7872
+7875
+7876
+7887
+7895
+7896
+7913
+7914
+7916
+7929
+7933
+7935
+7928
+7929
+7930
+7933
+7949
+7976
+7977
+7978
+7998
+7999
+8002
+8010
+8011
+8012
+8015
+8016
+8023
+8028
+8029
+8031
+8035
+8036
+8037
+8056
+8057
+8062
+8067
+8081
+8082
+8096
+8099
+8116
+8121
+8125
+8126
+8128
+8129
+8132
+8119
+8129
+8151
+8181
+8161
+8163
+8184
+8186
+8191
+8192
+8197
+8186
+8184
+8194
+8216
+8219
+8220
+8221
+8223
+8239
+8240
+8241
+8246
+8273
+8274
+8283
+8284
+8285
+8293
+8294
+8300
+8303
+8305
+8336
+8340
+8344
+8347
+8348
+8349
+8356
+8363
+8361
+8362
+8364
+8365
+8383
+8389
+8390
+8405
+8406
+8404
+8410
+8411
+8412
+8413
+8414
+8419
+8422
+8425
+8428
+8448
+8449
+8453
+8464
+8466
+8468
+8469
+8470
+8478
+8483
+8477
+8488
+8489
+8493
+8510
+8520
+8533
+8545
+8547
+8562
+8560
+8555
+8557
+8558
+8559
+8581
+8577
+8578
+8579
+8582
+8590
+8591
+8569
+8570
+8569
+8570
+8573
+8578
+8561
+8558
+8563
+8564
+8575
+8580
+8582
+8593
+8596
+8585
+8588
+8598
+8612
+8613
+8622
+8629
+8639
+8640
+8647
+8655
+8656
+8657
+8671
+8672
+8683
+8690
+8691
+8694
+8693
+8698
+8706
+8713
+8714
+8716
+8718
+8736
+8733
+8741
+8731
+8736
+8737
+8738
+8746
+8747
+8746
+8749
+8761
+8762
+8780
+8784
+8785
+8791
+8793
+8797
+8807
+8818
+8836
+8837
+8838
+8845
+8846
+8849
+8857
+8858
+8877
+8876
+8875
+8883
+8887
+8888
+8892
+8895
+8901
+8915
+8916
+8915
+8921
+8929
+8935
+8944
+8981
+8985
+8990
+8991
+9001
+8995
+8998
+9001
+9002
+9003
+9026
+9036
+9047
+9070
+9080
+9083
+9089
+9098
+9118
+9135
+9123
+9127
+9131
+9117
+9123
+9124
+9131
+9136
+9139
+9141
+9144
+9149
+9156
+9157
+9160
+9163
+9168
+9170
+9177
+9179
+9199
+9200
+9211
+9212
+9222
+9224
+9211
+9224
+9246
+9252
+9277
+9294
+9301
+9302
+9310
+9311
+9313
+9316
+9319
+9320
+9321
+9322
+9323
+9324
+9337
+9340
+9357
+9378
+9379
+9381
+9397
+9398
+9399
+9400
+9405
+9407
+9421
+9437
+9438
+9442
+9440
+9453
+9458
+9459
+9463
+9464
+9465
+9464
+9465
+9468
+9478
+9496
+9498
+9499
+9504
+9509
+9525
+9522
+9523
+9527
+9531
+9533
+9537
+9533
+9546
+9547
+9570
+9576
+9577
+9586
+9604
+9607
+9618
+9621
+9643
+9657
+9665
+9666
+9667
+9668
+9678
+9679
+9680
+9684
+9694
+9697
+9694
+9700
+9705
+9706
+9708
+9728
+9729
+9730
+9732
+9737
+9744
+9745
+9758
+9774
+9776
+9774
+9771
+9776
+9777
+9779
+9780
+9781
+9799
+9802
+9803
+9806
+9824
+9825
+9828
+9837
+9829
+9833
+9836
+9837
+9832
+9834
+9835
+9840
+9848
+9874
+9890
+9917
+9922
+9926
+9928
+9929
+9937
+9940
+9947
+9950
+9949
+9951
+9952
+9963
+9962
+9963
+9997
+10011
+10017
+10038
+10039
+10040
+10086
+10087
+10088
+10089
+10091
+10092
+10103
+10104
+10113
+10115
+10132
+10146
+10148
+10154
+10158
+10166
+10168
+10166
+10167
+10176
+10191
+10185
+10191
+10196
+10206
+10210
+10212
+10213
+10216
+10238
+10254
+10258
+10260
+10261
+10267
+10291
+10305
+10308
+10313
+10315
+10326
+10331
+10339
+10346
+10348
+10358
+10381
+10385
+10386
+10392
+10393
+10394
+10397
+10408
+10431
+10433
+10437
+10438
+10443
+10447
+10449
+10452
+10454
+10456
+10460
+10461
+10462
+10463
+10462
+10463
+10480
+10481
+10489
+10488
+10491
+10493
+10517
+10519
+10537
+10550
+10560
+10573
+10588
+10591
+10597
+10605
+10609
+10610
+10615
+10618
+10620
+10619
+10625
+10640
+10642
+10645
+10651
+10660
+10659
+10673
+10691
+10709
+10711
+10732
+10739
+10743
+10751
+10755
+10757
+10758
+10761
+10777
+10779
+10776
+10783
+10789
+10803
+10806
+10825
+10838
+10851
+10852
+10853
+10854
+10865
+10866
+10876
+10877
+10885
+10887
+10899
+10898
+10897
+10902
+10907
+10909
+10913
+10924
+10950
+10947
+10949
+10954
+10965
+10983
diff --git a/2022/day-01/day-01.raku b/2022/day-01/day-01.raku
new file mode 100644
index 0000000..cbe8b92
--- /dev/null
+++ b/2022/day-01/day-01.raku
@@ -0,0 +1,7 @@
+#!/usr/bin/env raku
+
+# @calories records calories carried by each Elf, sorted.
+my Int @calories = "input".IO.split("\n\n").map(*.lines.sum).sort;
+
+put "Part 1: " ~ @calories.tail;
+put "Part 2: " ~ @calories.tail(3).sum;
diff --git a/2022/day-01/input b/2022/day-01/input
new file mode 100644
index 0000000..c624c99
--- /dev/null
+++ b/2022/day-01/input
@@ -0,0 +1,2231 @@
+8417
+8501
+5429
+2112
+6482
+7971
+9636
+4003
+
+4697
+2941
+3275
+6060
+4879
+7158
+5066
+3196
+5780
+3143
+2510
+7073
+
+3820
+6710
+4781
+6241
+3975
+6308
+5289
+6575
+2662
+4804
+5352
+4610
+
+18980
+3731
+16643
+
+6500
+2810
+13252
+5288
+2110
+12393
+
+5354
+5521
+6015
+2501
+6067
+2465
+2201
+3864
+2661
+4078
+2399
+3212
+2831
+3268
+2726
+
+4701
+4530
+1699
+3015
+3682
+2537
+4554
+2826
+1895
+2652
+4074
+
+3650
+2113
+4750
+6639
+5177
+3823
+1529
+5671
+3679
+7061
+
+1984
+3240
+7139
+1931
+6740
+5695
+6572
+3264
+2904
+7199
+
+4982
+3483
+3358
+2762
+3983
+1341
+7420
+5830
+5709
+6140
+5363
+2636
+
+8943
+9452
+14560
+11685
+9792
+
+51549
+
+4032
+3303
+6291
+2010
+1099
+4304
+3308
+3226
+7038
+5911
+
+3627
+4414
+3217
+3388
+5294
+1914
+4938
+1120
+3825
+4163
+5549
+1712
+2589
+1550
+
+3683
+5829
+3937
+6935
+8588
+2765
+9142
+6662
+
+2440
+1029
+5550
+4674
+3176
+1791
+3867
+2779
+5259
+4676
+5868
+2371
+4557
+1058
+
+5431
+7001
+1789
+7292
+2550
+6087
+6538
+3913
+6977
+2262
+5710
+2555
+
+10586
+1560
+9521
+6677
+7222
+7567
+9516
+
+2974
+4438
+5184
+1797
+3472
+3685
+4252
+3512
+6003
+3274
+6482
+5545
+6207
+3442
+
+2542
+2128
+3556
+3399
+2355
+2355
+2887
+5069
+6026
+2508
+1716
+1556
+2295
+3955
+
+25725
+15128
+7375
+
+14056
+1829
+18860
+
+55324
+
+6072
+6692
+4264
+6261
+1588
+1143
+7373
+6603
+5488
+3320
+2545
+5954
+
+18062
+29180
+
+3677
+6522
+4883
+7097
+5284
+2549
+
+48546
+
+3552
+4460
+1059
+2662
+4123
+4032
+4430
+3578
+3441
+3895
+3487
+1717
+5564
+2195
+5687
+
+3760
+3157
+2112
+5937
+5018
+4986
+1568
+7508
+2288
+4252
+4226
+
+8943
+35829
+
+3615
+4087
+16628
+9725
+
+18133
+3552
+19658
+8840
+
+5401
+2506
+2988
+4760
+5149
+2556
+1375
+2458
+1349
+6012
+3101
+1719
+4705
+
+1915
+4351
+4834
+6064
+1864
+6366
+1081
+4066
+4200
+6982
+1148
+6685
+
+6497
+19940
+5418
+19755
+
+6763
+4697
+4844
+6105
+7080
+7110
+3403
+1635
+2373
+4737
+1538
+4517
+
+55242
+
+5390
+4892
+9004
+6322
+2309
+
+14406
+2408
+3189
+13705
+15881
+
+8001
+4336
+7789
+3403
+7771
+5339
+3603
+2882
+2789
+5457
+
+5291
+1004
+4796
+5162
+3295
+5628
+6048
+8055
+2805
+2979
+6347
+
+4342
+2131
+3900
+9516
+9941
+10085
+9855
+4946
+
+3766
+12591
+6027
+7521
+2532
+2965
+
+6640
+8130
+2235
+3616
+1513
+4982
+5757
+6450
+7833
+2535
+
+11114
+9350
+5189
+7416
+2510
+12480
+
+2161
+1329
+6055
+5304
+1213
+5987
+1021
+1484
+2736
+1594
+3897
+1298
+3701
+3500
+5264
+
+1393
+8359
+7732
+1479
+1367
+9665
+4956
+8989
+2423
+
+14947
+26722
+
+4382
+1257
+4970
+3681
+4299
+2421
+3996
+4978
+3178
+5039
+3989
+5297
+1322
+1941
+
+2901
+5088
+5876
+5770
+4000
+5408
+5932
+3787
+4428
+3649
+3000
+4528
+3172
+5852
+4803
+
+3841
+6352
+7104
+3285
+8693
+7082
+8890
+10598
+
+32634
+
+5064
+4469
+2675
+5662
+1483
+5918
+3117
+4976
+3964
+2474
+5210
+1632
+4618
+2106
+3214
+
+1940
+5559
+2138
+6436
+1860
+5369
+5147
+2794
+1714
+3409
+1892
+5806
+3899
+2305
+
+4500
+2147
+4251
+4609
+3619
+2567
+5201
+3390
+1319
+4424
+3005
+1397
+1693
+4714
+
+2415
+4424
+3809
+3615
+3269
+1986
+2018
+4848
+5122
+1968
+3075
+2470
+5922
+1937
+4125
+
+6317
+6637
+4533
+5743
+4806
+3129
+1306
+3957
+4663
+7623
+
+14487
+
+34032
+11976
+
+5839
+5692
+6716
+1473
+1572
+6622
+7735
+2335
+5670
+6461
+2705
+
+5643
+1721
+3150
+6460
+5134
+1124
+3925
+1463
+1951
+6910
+6680
+3038
+2685
+
+3205
+2335
+4418
+2358
+5683
+2334
+1910
+4780
+1315
+1613
+1523
+2882
+
+3266
+12924
+8477
+7172
+13876
+9290
+
+18737
+7661
+5950
+
+61407
+
+24968
+23181
+
+4341
+5288
+9306
+10062
+9350
+4045
+
+4607
+2565
+2507
+4183
+3101
+5356
+3384
+4707
+2040
+5622
+2513
+2429
+2496
+1069
+
+3590
+5290
+5371
+6878
+6657
+8246
+4479
+4906
+3830
+
+7894
+7018
+5222
+7556
+7754
+3433
+4862
+9010
+6891
+
+6337
+21986
+2791
+
+1075
+5278
+3373
+3820
+1277
+3217
+1349
+1758
+2934
+1298
+5885
+1544
+4560
+4384
+4804
+
+6345
+1952
+1082
+5949
+3946
+5991
+6474
+6288
+4526
+5059
+6081
+1155
+1388
+5735
+
+1166
+6023
+6465
+2215
+7056
+7369
+6983
+1051
+6578
+6131
+6334
+6491
+
+4486
+5666
+5937
+5460
+2587
+1803
+3938
+1771
+4157
+5144
+2624
+4098
+5403
+2063
+2746
+
+6953
+11646
+2940
+6280
+4667
+1413
+
+5913
+2811
+1258
+5507
+6685
+1464
+3137
+6716
+4217
+3656
+6306
+4198
+4557
+
+5846
+2427
+3635
+6365
+5987
+5964
+4458
+4119
+4522
+3972
+6216
+5551
+1705
+
+2125
+5680
+1450
+1701
+5256
+4673
+5045
+5515
+1432
+3565
+3246
+6050
+5755
+3390
+5847
+
+1655
+5405
+6132
+3714
+1627
+7477
+10344
+6058
+
+4914
+4975
+4158
+2466
+5685
+2484
+3594
+1037
+3369
+1022
+3917
+3185
+5233
+5571
+5222
+
+6996
+4804
+1923
+3688
+4808
+1448
+2836
+5346
+5266
+4603
+2173
+1082
+
+5730
+9574
+5903
+6668
+5482
+5088
+8905
+5333
+7135
+
+5377
+2192
+6250
+1581
+5354
+3088
+1125
+2676
+3780
+3977
+4634
+3810
+4168
+
+3173
+4961
+1384
+5868
+4666
+2902
+7158
+8275
+5856
+6056
+
+7098
+12466
+4255
+10181
+13726
+4866
+
+1681
+1910
+5175
+4773
+7702
+5183
+5759
+2788
+2596
+5676
+5361
+
+6560
+5352
+5182
+13627
+7612
+10355
+
+4780
+1702
+5111
+1101
+6959
+4120
+5441
+4818
+8091
+6480
+
+8332
+5999
+6744
+9027
+7948
+3470
+9144
+6675
+2996
+
+6961
+19157
+1485
+19127
+
+22926
+
+17211
+14166
+1463
+
+5074
+9836
+4387
+10138
+10072
+5791
+3683
+9806
+
+5623
+3668
+4324
+9990
+4865
+1793
+10752
+
+9739
+18699
+14526
+4157
+
+2785
+1804
+4527
+4430
+3373
+10323
+6855
+
+2075
+4828
+2026
+3909
+6410
+4035
+3709
+5177
+3259
+6033
+5534
+6097
+2578
+
+2246
+6146
+5899
+1864
+2881
+4628
+3176
+5663
+3088
+3834
+2935
+
+16262
+11795
+14098
+15140
+13228
+
+4323
+8674
+5497
+8305
+6261
+7846
+2593
+10156
+
+5309
+3112
+4563
+1434
+1107
+7130
+5727
+4950
+7466
+6218
+3641
+
+6379
+1200
+2050
+6235
+4257
+2532
+3132
+6179
+4883
+6282
+6576
+
+11097
+12482
+7593
+3300
+3342
+2184
+
+1950
+2753
+4277
+8130
+5451
+7991
+4993
+7978
+8004
+
+20042
+19430
+5442
+
+7059
+6666
+5832
+6485
+2405
+2744
+4710
+1726
+1121
+
+2277
+1842
+1575
+1955
+1906
+4176
+4114
+5040
+5552
+4857
+2775
+5033
+3488
+3971
+3550
+
+11844
+9703
+6549
+7779
+9117
+1536
+
+8861
+25738
+
+3649
+10095
+4132
+1888
+6453
+7269
+5898
+9769
+
+5465
+8855
+12706
+6698
+3456
+4949
+
+3093
+8425
+8580
+8693
+1401
+6281
+8069
+7607
+6368
+7467
+
+6885
+1469
+1315
+2335
+6669
+3226
+5261
+2477
+1931
+6691
+2575
+1377
+5029
+
+5220
+4639
+5985
+1669
+1162
+4269
+6532
+4630
+4169
+3164
+6896
+6432
+
+12705
+4248
+5011
+7544
+2040
+7767
+
+60119
+
+58181
+
+69195
+
+10643
+5605
+3433
+3275
+4741
+2858
+8151
+10582
+
+4299
+10093
+12455
+2583
+2604
+11520
+
+4609
+8245
+1989
+17043
+
+4998
+8893
+3978
+4961
+2847
+8109
+9266
+1034
+4808
+
+6593
+3208
+3966
+1649
+5952
+1961
+4517
+3911
+4239
+3255
+4144
+
+3721
+2249
+3195
+1827
+3942
+2713
+4481
+2475
+3566
+2701
+2832
+2372
+5281
+3315
+6029
+
+5817
+6495
+8621
+7101
+3936
+1675
+3309
+1873
+8737
+4558
+
+6533
+4655
+4205
+6051
+2902
+2566
+2173
+1535
+5827
+2807
+6391
+7194
+
+5844
+2233
+4210
+2293
+2529
+3081
+1524
+5844
+5931
+6456
+6427
+4873
+3195
+
+3101
+3627
+9503
+1451
+9148
+1990
+2748
+5949
+
+1357
+
+4305
+4183
+8665
+9225
+5169
+8711
+7360
+4352
+8762
+
+19297
+6700
+3922
+13161
+
+7177
+5207
+12649
+10712
+3766
+
+3197
+11717
+4128
+14139
+
+5844
+4035
+9789
+5874
+6510
+6863
+9172
+3398
+
+3289
+3003
+7463
+5109
+6382
+5082
+2587
+5094
+7545
+2487
+2585
+
+15763
+18524
+4143
+8602
+
+4828
+2314
+3592
+3742
+4802
+3369
+3590
+5778
+5439
+4261
+4063
+3117
+3004
+2803
+4503
+
+3356
+1306
+6227
+5953
+1962
+1596
+1031
+6259
+1314
+5303
+4053
+6606
+6141
+
+23367
+13468
+
+7561
+3664
+10113
+11060
+7173
+6770
+
+14496
+3114
+2958
+10451
+12975
+
+2779
+8809
+7880
+9646
+5169
+11946
+10951
+
+1808
+8038
+4003
+2639
+4307
+2437
+3374
+6114
+3179
+2414
+6346
+
+3683
+4271
+5347
+4651
+4209
+3216
+4860
+5151
+3676
+3964
+5855
+5537
+2334
+2847
+
+3036
+4491
+2992
+5222
+1007
+3398
+4412
+5978
+4514
+5111
+2173
+4115
+3297
+3917
+4087
+
+1120
+9199
+13194
+8285
+12725
+2925
+
+4647
+8917
+5082
+2858
+7782
+3193
+7282
+2432
+6432
+
+8143
+1337
+7526
+4612
+3111
+2914
+2283
+7143
+
+13219
+11724
+11762
+13753
+11229
+9784
+
+2649
+8191
+6390
+2745
+7430
+6038
+7916
+7448
+2535
+
+16115
+13575
+13440
+12313
+7022
+
+3839
+5604
+3500
+1413
+4189
+2483
+4394
+4244
+5173
+4677
+2620
+3916
+2756
+3345
+5480
+
+3136
+4946
+2793
+3039
+4646
+6070
+4631
+1187
+1349
+5338
+3411
+2576
+3330
+
+1836
+11177
+12819
+12092
+11081
+5211
+
+3380
+3522
+6853
+4943
+3560
+6687
+2925
+1849
+7189
+2430
+4195
+4027
+
+17162
+17251
+
+12148
+6285
+8465
+9842
+2740
+9321
+
+5968
+1099
+5670
+12712
+4090
+10669
+
+5599
+11408
+2321
+8643
+7657
+3127
+
+5527
+5415
+3154
+7523
+7113
+7944
+1210
+4328
+2435
+7446
+
+9572
+2600
+4927
+7038
+2863
+8806
+6209
+5458
+6332
+
+14202
+11728
+4854
+
+2445
+4571
+5676
+4766
+6356
+3013
+7160
+4432
+4641
+5337
+2949
+7099
+
+5446
+5189
+2921
+4698
+4187
+2921
+3446
+4539
+3540
+5492
+2071
+1449
+1923
+4901
+5579
+
+13333
+5770
+5180
+9001
+7376
+8291
+
+3865
+4909
+3073
+1720
+1261
+5913
+1136
+2052
+5530
+5411
+1702
+1550
+2913
+5178
+2584
+
+10717
+2353
+1830
+5310
+8508
+10132
+10255
+
+9848
+11390
+1490
+8553
+4819
+2115
+
+2023
+1214
+1606
+9515
+5918
+1391
+
+32192
+31035
+
+6595
+5614
+7624
+8271
+4408
+5528
+1851
+1879
+7449
+6260
+
+6197
+7995
+9114
+
+1713
+5615
+1103
+6443
+4641
+4952
+6313
+1337
+6825
+3202
+5031
+4031
+4673
+
+17667
+14248
+18603
+7973
+
+4832
+5010
+1017
+2983
+1808
+6429
+5847
+5974
+2629
+2190
+5018
+5594
+3316
+2445
+
+8857
+1902
+6649
+5100
+2108
+2331
+7523
+9370
+2149
+
+4877
+2080
+3225
+1529
+6630
+3562
+2262
+2460
+3366
+5855
+1527
+2721
+5946
+
+32414
+14299
+
+6015
+2017
+6133
+9382
+3482
+7670
+1090
+4911
+4220
+
+4475
+5519
+2909
+1638
+5199
+3699
+3179
+1962
+4396
+1750
+2375
+5751
+3907
+2693
+3037
+
+2510
+6869
+3477
+4511
+1178
+4193
+6442
+5839
+3640
+4681
+4547
+4390
+4146
+
+4965
+3818
+1807
+1184
+2238
+5347
+3971
+5439
+5111
+6372
+2632
+2137
+1616
+
+5784
+6903
+3123
+5558
+6147
+3532
+4366
+2303
+6913
+1180
+6775
+2658
+5388
+
+3315
+4958
+3185
+2507
+4022
+3424
+1123
+3518
+5329
+5409
+5895
+4483
+5391
+3281
+1485
+
+5753
+2212
+6587
+4668
+1712
+6688
+1846
+3009
+3829
+5361
+6819
+1247
+
+3500
+23879
+
+3471
+4339
+3831
+4004
+5783
+5540
+5242
+5588
+4065
+5878
+1615
+1441
+4345
+3932
+3752
+
+4206
+5411
+8355
+5696
+1314
+1549
+8447
+10241
+
+4882
+4973
+3042
+7802
+5574
+4666
+2738
+7655
+7766
+
+2498
+2714
+2695
+4724
+4075
+5588
+6234
+5988
+5455
+4229
+4890
+3590
+1722
+5413
+
+1034
+2896
+4742
+4024
+5667
+6076
+5041
+8378
+3271
+8737
+
+1411
+23272
+6602
+
+3363
+12044
+11777
+7395
+4856
+2881
+12001
+
+2064
+4239
+2992
+6806
+6814
+3037
+3173
+3336
+5565
+
+2053
+2518
+5120
+4318
+1240
+3674
+7302
+1160
+3537
+4288
+2983
+
+5826
+5926
+7843
+2996
+6079
+7832
+2716
+8027
+1470
+8005
+
+10435
+24340
+11044
+
+7277
+4053
+1588
+2648
+5715
+3133
+5720
+6702
+7375
+2244
+7196
+2918
+
+20699
+12028
+
+11053
+11400
+3604
+7989
+7666
+7379
+10696
+
+5916
+13989
+
+6510
+4784
+2679
+11144
+
+5017
+3999
+6453
+1013
+3002
+4568
+6255
+6327
+5108
+2654
+1390
+3828
+5913
+2765
+
+1242
+8316
+3256
+1006
+6026
+10319
+3552
+6538
+
+2266
+2011
+7466
+2302
+5729
+1468
+1527
+6297
+7443
+3490
+6348
+
+2767
+5816
+5452
+2946
+3461
+1647
+5520
+5237
+3193
+6009
+5393
+5583
+2746
+4326
+3446
+
+2147
+1913
+3254
+5992
+7458
+4791
+7670
+3815
+2950
+6429
+1796
+
+17982
+7519
+
+33743
+
+2744
+8866
+15440
+10433
+15680
+
+1710
+3609
+1849
+4343
+5780
+4180
+3584
+2376
+4885
+4627
+1885
+3348
+2099
+1006
+2550
+
+22016
+29227
+
+22422
+12606
+11998
+
+5357
+2121
+2744
+4713
+6531
+5164
+5774
+3553
+4974
+2279
+3932
+2702
+
+4518
+3189
+3337
+1722
+2096
+5583
+2532
+1486
+2548
+2643
+5666
+6102
+4889
+5184
+
+4730
+6382
+3208
+6277
+2724
+5944
+2098
+5082
+1984
+5999
+
+6747
+7644
+8933
+2013
+7112
+3608
+7377
+5398
+1166
+
+9919
+6479
+7831
+6544
+5801
+10986
+10245
+
+9314
+10790
+5728
+3835
+9597
+7245
+
+12744
+1502
+11126
+8626
+13645
+8998
+
+5883
+2823
+2589
+5695
+6506
+2769
+4070
+4731
+5193
+2890
+2243
+
+5437
+6241
+1398
+3651
+7865
+1854
+4169
+2921
+5701
+2839
+2277
+
+4279
+4987
+5933
+1476
+2572
+1320
+2304
+1148
+4617
+4571
+1202
+3799
+3033
+2079
+5217
+
+4247
+3918
+7174
+7333
+2215
+8351
+1339
+7229
+5266
+
+1357
+3298
+3348
+6580
+1364
+6996
+6527
+3579
+4631
+1355
+7165
+4424
+
+19948
+18739
+15360
+
+2666
+3271
+1581
+6748
+3957
+6221
+1543
+2058
+5185
+1264
+2211
+1826
+
+9309
+5622
+9303
+2516
+12117
+4126
+2700
+
+9949
+16352
+18404
+
+3351
+10708
+10017
+2594
+4711
+1749
+9432
+
+8877
+7738
+10940
+6554
+6358
+
+4961
+7610
+1594
+5133
+5937
+2581
+5131
+4044
+9096
+
+2157
+6653
+5601
+1394
+5724
+6487
+4100
+3519
+2273
+5199
+6924
+6953
+4903
+
+26443
+31228
+
+2953
+10062
+5321
+4145
+2668
+2525
+4886
+2965