logo

adventofcode

Code used to solve https://adventofcode.com/, one branch per year git clone https://anongit.hacktivis.me/git/adventofcode.git/

day3.ha (1086B)


  1. // SPDX-FileCopyrightText: 2023 Haelwenn (lanodan) Monnier <contact+aoc2023@hacktivis.me>
  2. // SPDX-License-Identifier: MIT
  3. use bufio;
  4. use os;
  5. use strings;
  6. use ascii;
  7. export fn main() void = {
  8. let symbols: [](size, size) = [];
  9. let numbers: [](size, size, rune) = [];
  10. for(let y = 0z; true; y += 1) {
  11. const line = match(bufio::read_line(os::stdin)) {
  12. case let l: []u8 => yield l;
  13. case io::EOF => break;
  14. case => abort();
  15. };
  16. const line = strings::fromutf8(line)!;
  17. let iter = strings::iter(line);
  18. for(let x = 0z; true; x += 1) {
  19. const c = match(strings::next(&iter)) {
  20. case let c: rune => yield c;
  21. case void => break;
  22. };
  23. if(c == '.') {
  24. continue;
  25. } else if(ascii::isdigit(c)) {
  26. append(numbers, (x, y, c));
  27. } else {
  28. // assume symbol
  29. append(symbols, (x, y));
  30. };
  31. };
  32. };
  33. for(let n = 0z; n < len(numbers); n += 1) {
  34. const num = numbers[n];
  35. for(let s = 0z; s < len(symbols); s += 1) {
  36. const sym = symbols[s];
  37. if(
  38. (math::absi(num.0 - sym.0) < 2) &&
  39. (math::absi(num.1 - sym.1) < 2)
  40. ) {
  41. };
  42. };
  43. };
  44. };