aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-03-07 15:50:04 -0500
committerH.J <thechairman@thechairman.info>2024-03-07 15:50:04 -0500
commit2a5e033b2d8882f50f2bfe4da25906c57f2a41f0 (patch)
treec7345e2dcdafa71f4069a34fb4ad200b5bc3f3d9
parent58269644808af2ce4eed40e546d82fee74db10c1 (diff)
downloadgleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.tar.gz
gleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.zip
CodingQuest days 3 and 4 in Gleam
-rw-r--r--codingquest2024/src/day3/data.txt1
-rw-r--r--codingquest2024/src/day3/solution.gleam50
-rw-r--r--codingquest2024/src/day4/data.txt181
-rw-r--r--codingquest2024/src/day4/solution.gleam49
4 files changed, 281 insertions, 0 deletions
diff --git a/codingquest2024/src/day3/data.txt b/codingquest2024/src/day3/data.txt
new file mode 100644
index 0000000..ac7d887
--- /dev/null
+++ b/codingquest2024/src/day3/data.txt
@@ -0,0 +1 @@
+301 3 96 5 5 1 1 1 1 1 1 1 8 1 74 4 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 9 1 1 37 4 6 1 1 1 1 1 1 1 8 1 26 14 8 1 25 5 4 1 1 1 1 1 1 1 19 6 11 14 9 1 1 1 1 1 1 1 1 1 1 1 14 5 4 1 1 1 1 1 19 9 10 15 7 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 8 4 4 1 1 1 1 1 20 3 1 1 1 4 9 7 1 8 7 19 6 5 3 1 1 1 1 1 7 1 1 1 9 3 6 3 8 5 5 6 8 7 1 1 1 1 1 1 1 1 1 2 6 5 3 1 1 2 7 1 1 1 1 1 8 3 6 3 8 5 6 5 8 6 11 2 5 5 4 1 1 1 6 1 1 1 1 3 7 3 6 3 8 5 5 6 9 4 12 1 6 5 3 1 1 1 8 1 1 1 2 2 6 3 6 3 8 5 6 5 8 6 19 4 4 1 1 1 6 1 1 2 2 2 6 3 6 3 6 1 1 5 6 5 8 6 6 1 1 1 10 4 3 1 1 1 8 1 1 1 1 1 1 1 6 3 6 3 8 5 5 6 1 1 7 6 1 1 1 1 1 2 11 5 2 1 1 2 6 1 1 1 1 1 1 1 1 1 5 3 6 3 6 1 1 5 1 1 1 7 2 1 6 8 1 5 11 4 2 1 1 1 1 1 6 1 1 1 1 1 1 1 1 1 5 3 6 3 8 15 1 1 8 13 17 1 1 1 1 1 8 1 1 1 10 3 4 3 9 13 2 1 9 5 6 1 19 1 1 1 1 1 20 10 9 11 3 4 6 6 7 1 1 1 15 1 1 1 1 1 1 1 19 9 8 1 1 2 1 2 1 2 1 1 1 1 1 2 10 5 8 1 17 1 1 1 1 1 1 1 20 6 9 1 3 1 1 1 1 1 1 6 1 2 7 5 15 1 11 1 1 1 1 1 1 1 1 1 32 1 1 1 7 1 2 1 1 1 1 1 1 1 7 6 13 2 10 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 36 1 1 1 1 1 1 1 9 6 1 1 1 1 1 1 1 1 1 1 1 3 10 1 1 2 1 1 1 1 1 2 1 2 1 2 1 1 49 9 1 11 12 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 49 12 1 3 1 4 80 1 1 1 2 1 1 2 1 7 1 1 92 1 1 5 1026 2 1 4 9 10 14 3 1 1 1 1 7 1 1 1 10 2 1 2 26 9 7 14 11 11 1 6 8 6 26 10 7 14 12 17 7 1 1 6 24 1 1 4 2 3 6 6 4 6 10 18 7 8 18 1 4 5 4 3 5 5 7 6 9 5 1 1 1 1 1 1 1 1 1 1 10 8 16 1 1 1 1 1 1 1 1 4 4 3 5 5 8 5 9 5 20 7 16 1 2 1 2 1 1 4 6 2 5 5 8 5 10 3 22 7 17 1 1 1 2 4 2 1 3 3 5 5 8 5 9 5 19 2 1 6 19 1 1 4 1 3 4 2 5 6 6 6 9 14 11 1 1 6 20 4 2 3 3 4 5 5 6 6 8 6 1 1 1 7 10 7 20 4 2 4 3 3 6 7 2 1 1 6 8 6 3 1 1 6 9 1 1 6 19 4 1 5 4 3 5 16 9 4 7 7 9 6 19 3 2 6 3 4 7 13 10 1 1 1 10 6 7 7 17 5 1 7 4 3 10 1 1 1 1 6 11 1 11 6 7 1 1 6 16 4 2 7 3 4 14 6 24 5 7 1 1 5 16 4 4 1 2 1 7 2 14 5 24 7 6 1 1 5 16 12 1 1 3 4 12 6 25 6 7 1 1 5 16 14 4 3 12 5 26 7 6 1 1 5 17 13 3 4 11 6 26 6 7 1 1 5 17 13 3 4 10 6 15 1 11 5 8 7 17 2 1 7 1 1 4 1 1 2 9 6 12 7 7 6 8 1 1 6 18 19 9 5 14 6 5 1 1 6 9 1 1 1 1 1 1 1 17 1 1 1 1 16 28 9 1 7 1 1 8 9 20 1 2 1 1 8 1 1 30 15 1 1 9 1 1 3 1 2 68 1 1 6 1 1 91 1 2 1 1 1 1 1 233 4 4 4 88 5 3 4 88 4 4 4 85 2 2 2 93 3 10 4 82 4 4 2 4 4 14 2 65 5 3 4 2 5 13 3 58 12 3 11 12 5 32 11 12 13 4 11 12 9 16 26 6 14 7 10 13 14 2 35 2 13 15 5 15 60 20 3 18 36 7 15 46 21 21 8 56 5 34 1 21 \ No newline at end of file
diff --git a/codingquest2024/src/day3/solution.gleam b/codingquest2024/src/day3/solution.gleam
new file mode 100644
index 0000000..6314060
--- /dev/null
+++ b/codingquest2024/src/day3/solution.gleam
@@ -0,0 +1,50 @@
+import gleam/bit_array
+import gleam/int
+import gleam/io
+import gleam/string
+import gleam/string_builder.{type StringBuilder}
+import simplifile
+
+pub fn main() {
+ let assert Ok(data) = simplifile.read(from: "./src/day3/data.txt")
+
+ data
+ |> string.split(" ")
+ |> build_flat_image(" ", string_builder.new())
+ |> bit_array.from_string()
+ |> print_next_slice()
+}
+
+fn build_flat_image(
+ nums: List(String),
+ pixel: String,
+ acc: StringBuilder,
+) -> String {
+ case nums {
+ [] -> string_builder.to_string(acc)
+ [h, ..t] -> {
+ let assert Ok(n) = int.parse(h)
+ let pixels = string.repeat(pixel, n)
+ build_flat_image(t, next_pixel(pixel), string_builder.append(acc, pixels))
+ }
+ }
+}
+
+fn print_next_slice(str: BitArray) -> Nil {
+ case str {
+ <<slice:bytes-size(100), rest:bytes>> -> {
+ let assert Ok(out) = bit_array.to_string(slice)
+ io.println(out)
+ print_next_slice(rest)
+ }
+ _ -> Nil
+ }
+}
+
+fn next_pixel(p: String) -> String {
+ case p {
+ " " -> "#"
+ "#" -> " "
+ _ -> panic
+ }
+}
diff --git a/codingquest2024/src/day4/data.txt b/codingquest2024/src/day4/data.txt
new file mode 100644
index 0000000..4b9a60e
--- /dev/null
+++ b/codingquest2024/src/day4/data.txt
@@ -0,0 +1,181 @@
+System Dist X Y Z
+Proxima Centauri 4.247 2.945 -3.056 -0.143
+Barnard's star 5.963 4.958 2.980 1.449
+Luhman 16 A 6.503 1.697 -6.249 0.600
+WISE J085510.83-071442.5 7.532 -3.967 -5.664 2.985
+Wolf 359 7.856 -1.916 -3.938 6.522
+Lalande 21185 8.305 -3.439 -0.308 7.553
+Sirius A 8.659 -5.809 -6.280 -1.338
+Luyten 726-8 A 8.817 -2.171 0.171 -8.544
+Ross 154 9.706 9.365 1.873 -1.733
+Ross 248 10.306 -3.370 9.265 -3.003
+Epsilon Eridani 10.502 -6.753 -1.917 -7.811
+Lacaille 9352 10.724 4.352 0.388 -9.794
+Ross 128 11.008 0.014 -5.577 9.490
+EZ Aquarii A 11.109 4.123 4.432 -9.315
+61 Cygni A 11.404 1.516 11.244 -1.156
+Procyon A 11.437 -9.270 -6.183 2.577
+HD 173739 11.491 0.130 10.478 4.716
+Groombridge 34 A 11.619 -4.949 9.849 -3.677
+DX Cancri 11.680 -9.428 -2.885 6.262
+Epsilon Indi A 11.867 7.259 -3.203 -8.825
+Tau Ceti 11.906 -3.369 0.408 -11.412
+Luyten 372-58 11.984 -2.249 -6.869 -9.559
+YZ Ceti 12.122 -2.040 1.192 -11.890
+Luyten's star 12.349 -10.262 -6.499 2.224
+Teegarden's star 12.497 -9.391 3.369 -7.526
+Kapteyn's star 12.831 -3.460 -9.787 -7.542
+Lacaille 8760 12.947 9.252 0.631 -9.036
+DENIS J184504.9-635747 A 13.064 10.530 -5.713 -5.211
+Kruger 60 A 13.078 -3.316 12.651 -0.001
+DENIS J104814.7-395606 13.193 1.904 -12.468 3.872
+Ross 614 A 13.424 -11.202 -7.255 -1.447
+WISEP J072227.27-054029.9 13.433 -10.027 -8.883 1.000
+Wolf 1061 14.050 12.845 0.752 5.643
+van Maanen's Star 14.072 -3.996 6.424 -11.865
+Wolf 424 A 14.112 1.448 -4.264 13.375
+HD 225213 14.175 3.311 -0.977 -13.748
+2MASS J04292568+3806095 14.355 -13.630 4.128 -1.799
+TZ Arietis 14.578 -8.480 5.369 -10.573
+BD+68 946 14.840 -1.883 12.448 7.856
+CD-46 11540 14.849 14.102 -4.310 -1.752
+LHS 292 14.871 -1.749 -11.036 9.813
+Luyten 145-141 15.123 6.625 -13.574 -0.753
+V1581 Cygni A 15.203 2.905 14.752 2.250
+Ross 780 15.239 4.743 6.071 -13.148
+Luyten 143-23 15.759 4.928 -14.958 -0.555
+2MASS J23400761+4625080 15.794 -5.307 14.325 -4.008
+LHS 2 15.806 -0.258 5.986 -14.627
+DENIS J025503.3-470049 15.877 -1.350 -8.144 -13.563
+Groombridge 1618 15.886 -9.453 2.380 12.543
+Lalande 21258 A 15.997 -7.099 1.444 14.263
+WISE J163940.83-684738.6 16.123 12.167 -9.781 -4.032
+AD Leonis 16.194 -7.549 -5.577 13.197
+HD 204961 16.201 10.984 -2.101 -11.722
+CD-44 11909 16.333 15.741 -3.929 -1.887
+Omicron2 Eridani A 16.340 -12.033 -4.560 -10.071
+EV Lacertae 16.476 -2.954 15.775 -3.726
+70 Ophiuchi A 16.707 14.200 8.163 3.293
+Altair 16.731 11.115 12.234 -2.591
+EI Cancri A 16.800 -11.979 -6.249 9.985
+WISE J150649.97+702736.1 16.818 -3.879 11.755 11.385
+G 99-49 16.986 -15.208 -6.951 -2.991
+DENIS J081730.0-615520 17.002 1.737 -16.376 -4.228
+LHS 2459 17.137 -8.104 10.814 10.538
+WISEA J154045.67-510139.3 17.374 14.713 -9.182 1.032
+WISEA J093935.93-244838.9 17.414 -3.694 -15.891 6.089
+LHS 1723 17.531 -13.929 -6.923 -8.087
+Wolf 498 17.727 5.298 -0.785 16.898
+Stein 2051 A 17.992 -15.151 9.430 2.290
+WISEP J111448.80-261828.2 18.201 1.992 -15.352 9.573
+Wolf 294 18.215 -17.560 -0.901 4.756
+LP 816-60 18.331 13.106 7.617 -10.308
+2MASS J23402010+4631110 18.334 -6.182 16.629 -4.626
+2MASS J04163296+3100022 18.500 -17.453 4.188 -4.483
+WISE J174124.25+255319.6 18.532 10.672 12.769 8.154
+WISEA J183537.82+325945.4 18.554 8.406 15.577 5.562
+Wolf 1453 18.605 -15.640 -7.947 -6.194
+WISE J041521.21-093500.6 18.617 -13.334 -5.644 -11.701
+HD 42581 A 18.791 -11.786 -13.374 -5.944
+Sigma Draconis 18.800 -3.419 17.107 7.005
+Ross 47 18.889 -18.114 -4.418 -3.024
+Lalande 27173 A 19.199 15.009 -5.990 10.366
+Luyten 205-128 19.208 16.899 -7.771 -4.794
+Luyten 347-14 19.273 17.464 -2.343 -7.809
+Lalande 46650 19.275 -0.655 10.511 -16.143
+Wolf 1055 A 19.293 14.658 12.495 -1.105
+CD-40 9712 19.300 16.764 -8.662 4.055
+WISE J035000.32-565830.2 19.318 -0.230 -13.254 -14.052
+Eta Cassiopeiae A 19.328 -10.379 16.216 -1.703
+Luyten 722-22 A 19.374 0.490 4.595 -18.815
+36 Ophiuchi A 19.414 19.266 -0.579 2.325
+WISEP J154151.66-225025.2 19.525 17.174 -4.108 8.331
+Ross 882 19.533 -15.397 -11.128 4.546
+HD 191408 A 19.610 16.752 1.534 -10.078
+82 Eridani 19.705 -3.626 -10.382 -16.351
+Ross 986 A 19.742 -18.559 0.339 6.721
+Delta Pavonis 19.894 14.509 -8.456 -10.664
+WISEP J013657.45+093347.0 19.955 -9.644 7.749 -15.657
+WISEP J093735.61+293127.7 19.973 -12.825 -4.129 14.745
+HD 191849 20.107 16.798 -1.527 -10.943
+LHS 455 20.259 -3.453 17.077 10.339
+Wolf 1481 20.395 13.836 -5.472 13.950
+EQ Pegasi A 20.428 -2.363 15.667 -12.895
+Wolf 562 20.550 15.654 -1.624 13.214
+HD 79210 A 20.658 -14.668 3.948 14.001
+LHS 2090 20.739 -14.853 -7.021 12.657
+HD 155876 A 20.865 5.404 15.999 12.254
+WISEP J150319.70+252525.4 20.938 8.222 6.238 18.218
+LP 944-20 20.962 -6.865 -10.440 -16.831
+LHS 32 21.011 -17.584 -10.242 -5.230
+WISE J140518.39+553421.3 21.042 -2.438 10.695 17.957
+GL Virginis 21.084 0.658 -6.386 20.082
+WISE J220905.73+271143.9 21.123 2.051 19.317 -8.297
+G 202-48 21.131 1.833 15.400 14.354
+2MASS J00124716+5215456 21.138 -9.427 18.549 -3.728
+Wolf 630 A 21.184 19.392 3.785 7.640
+Luyten 100-115 21.213 6.159 -19.816 -4.399
+WISE J041022.71+150248.4 21.260 -19.109 0.684 -9.293
+WISE J031325.94+780744.3 21.318 -13.116 15.566 6.335
+HD 219134 21.337 -7.251 20.032 -1.191
+Luyten 471-42 21.733 9.959 -17.100 8.986
+DENIS J072003.2-084650 A 21.919 -15.752 -15.217 0.875
+Ksi Bootis A 22.006 9.704 4.136 19.313
+Ross 104 22.009 -7.637 -5.635 19.857
+Ross 619 22.080 -16.964 -11.497 8.219
+Ross 775 A 22.113 7.070 18.976 -8.885
+LHS 6158 A 22.192 -14.354 -12.127 11.807
+WISEP J192841.35+235604.9 22.278 11.675 18.936 1.188
+ULAS J025409.58+022358.7 22.325 -14.758 1.854 -16.648
+BD-17 588 A 22.387 -11.090 -4.143 -19.001
+CWISE J105512.11+544328.3 22.494 -11.366 5.941 18.480
+Ross 671 22.398 0.902 17.581 -13.848
+Wolf 358 22.723 -5.976 -11.615 18.594
+Ross 446 22.954 -6.760 -14.156 16.757
+HD 199305 22.960 -3.413 22.272 4.417
+2MASS J21462206+3813047 22.986 0.977 22.495 -4.627
+LHS 3003 23.003 18.392 -9.014 10.471
+WISE J052126.29+102528.4 23.099 -21.794 -4.961 -5.831
+WISEP J000517.48+373720.5 23.157 -8.216 19.432 -9.548
+Luyten 230-188 23.182 -1.988 -16.246 -16.418
+LHS 546 23.408 1.405 11.884 -20.118
+WISE J082507.35+280548.5 23.462 -19.247 -5.219 12.360
+HD 16160 A 23.555 -15.223 4.538 -17.392
+WISE J205628.91+145953.2 23.580 10.459 19.667 -7.737
+V488 Hydrae 23.581 -13.398 -17.868 7.569
+Luyten 788-34 23.596 10.387 8.907 -19.224
+HD 156384 A 23.632 23.386 -3.352 0.587
+WISEP J060738.65+242953.4 23.624 -23.467 -2.594 0.834
+WISE J173835.53+273259.0 23.937 13.208 16.691 10.951
+2MASS J04292844+3001563 24.088 -23.085 4.408 -5.278
+WISEP J004945.61+215120.0 24.136 -9.763 15.373 -15.839
+WISEA J150747.56-162749.3 24.170 18.976 -5.400 13.961
+Wolf 25 24.251 -6.795 11.083 -20.472
+Wolf 922 24.325 13.604 12.791 -15.590
+Beta Hydri 24.328 10.662 -15.357 -15.567
+WISE J200050.19+362950.1 24.505 7.274 23.358 1.418
+CWISE J061741.79+194512.8 A 24.524 -24.012 -4.925 0.766
+G 203-47 A 24.785 7.210 18.632 14.667
+WISEA J235402.79+024014.1 24.974 -1.366 13.480 -20.980
+Fomalhaut A 25.126 9.981 3.729 -22.755
+G 141-36 24.845 19.139 15.738 1.817
+Ross 490 24.879 7.252 -3.658 23.516
+LHS 3376 24.926 -2.321 21.906 11.664
+107 Piscium 24.932 -14.170 12.372 -16.362
+Luyten 499-56 25.009 14.891 1.681 -20.022
+Mu Cassiopeiae A 25.034 -14.355 20.221 -3.429
+Vega 25.045 9.069 21.839 8.252
+Ross 556 25.052 -19.129 9.879 -12.809
+AN Sextantis 25.137 -7.899 -17.330 16.406
+HD 157881 25.158 21.471 9.902 8.594
+SIPS J1259-4336 25.200 13.441 -19.632 8.305
+LP 881-64 A 25.222 2.230 1.356 -25.087
+G 192-13 25.225 -21.673 10.540 7.449
+HD 165222 25.241 22.625 10.491 3.894
+G 109-35 25.287 -23.858 -7.025 4.565
+G 227-22 25.421 -1.444 22.069 12.533
+WISEP J180026.60+013453.1 25.471 21.895 11.875 5.321
+G 202-45 A 25.586 4.699 17.781 17.787
+CD-68 47 A 25.702 8.366 -14.413 -19.568
+2MASS J07290002-3954043 25.824 -7.589 -24.237 -4.677
+G 154-44 25.999 25.236 6.179 0.974 \ No newline at end of file
diff --git a/codingquest2024/src/day4/solution.gleam b/codingquest2024/src/day4/solution.gleam
new file mode 100644
index 0000000..a03b2be
--- /dev/null
+++ b/codingquest2024/src/day4/solution.gleam
@@ -0,0 +1,49 @@
+import gleam/float
+import gleam/io
+import gleam/list
+import gleam/regex
+import gleam/result
+import gleam/string
+import simplifile
+
+pub type Star {
+ Star(name: String, x: Float, y: Float, z: Float)
+}
+
+pub fn main() {
+ let assert Ok(data) = simplifile.read(from: "./src/day4/data.txt")
+
+ let assert [_, ..stars] = string.split(data, "\n")
+
+ stars
+ |> list.map(parse_star_record)
+ |> list.combination_pairs()
+ |> list.map(star_distance)
+ |> list.reduce(float.min)
+ |> io.debug
+}
+
+fn parse_star_record(str: String) -> Star {
+ let assert Ok(re) = regex.from_string("\\s{2,}")
+
+ let assert [name, ..coords] = regex.split(with: re, content: str)
+ let assert [_, x, y, z] =
+ coords
+ |> list.map(float.parse)
+ |> result.values
+
+ Star(name, x, y, z)
+}
+
+fn star_distance(stars: #(Star, Star)) -> Float {
+ let #(star1, star2) = stars
+ let assert Ok(dist) =
+ float.square_root(
+ sq(star1.x -. star2.x) +. sq(star1.y -. star2.y) +. sq(star1.z -. star2.z),
+ )
+ dist
+}
+
+fn sq(x: Float) -> Float {
+ x *. x
+}