diff options
author | H.J <thechairman@thechairman.info> | 2024-03-07 15:50:04 -0500 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-03-07 15:50:04 -0500 |
commit | 2a5e033b2d8882f50f2bfe4da25906c57f2a41f0 (patch) | |
tree | c7345e2dcdafa71f4069a34fb4ad200b5bc3f3d9 | |
parent | 58269644808af2ce4eed40e546d82fee74db10c1 (diff) | |
download | gleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.tar.gz gleam_aoc-2a5e033b2d8882f50f2bfe4da25906c57f2a41f0.zip |
CodingQuest days 3 and 4 in Gleam
-rw-r--r-- | codingquest2024/src/day3/data.txt | 1 | ||||
-rw-r--r-- | codingquest2024/src/day3/solution.gleam | 50 | ||||
-rw-r--r-- | codingquest2024/src/day4/data.txt | 181 | ||||
-rw-r--r-- | codingquest2024/src/day4/solution.gleam | 49 |
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 +} |