my solutions to advent of code
aoc advent-of-code

part 2 in rust

aylac.top a7c69299 fbe12393

verified
Changed files
+74 -21
2025
7
+18 -21
2025/7/gleam/src/main.gleam
··· 2 2 import gleam/int 3 3 import gleam/io 4 4 import gleam/list 5 - import gleam/result 6 5 import gleam/set 7 6 import gleam/string 8 7 import simplifile as file ··· 67 66 68 67 let timelines = 69 68 splitters_map 70 - |> list.fold(dict.new() |> dict.insert(0, start), fn(timelines, splitters) { 71 - // echo #(timelines, splitters) 72 - timelines 73 - |> dict.fold(timelines, fn(timelines, timeline, beam) { 74 - case splitters |> set.contains(beam) { 75 - False -> timelines 76 - True -> { 77 - timelines 78 - |> dict.delete(timeline) 79 - |> dict.insert( 80 - int.random(100_000_000_000_000_000_000_000), 81 - beam - 1, 82 - ) 83 - |> dict.insert( 84 - int.random(100_000_000_000_000_000_000_000), 85 - beam + 1, 86 - ) 69 + |> list.index_fold( 70 + dict.new() |> dict.insert("", start), 71 + fn(timelines, splitters, i) { 72 + echo i 73 + // echo #(timelines, splitters) 74 + timelines 75 + |> dict.fold(timelines, fn(timelines, timeline, beam) { 76 + case splitters |> set.contains(beam) { 77 + False -> timelines 78 + True -> { 79 + timelines 80 + |> dict.delete(timeline) 81 + |> dict.insert(timeline <> "-", beam - 1) 82 + |> dict.insert(timeline <> "+", beam + 1) 83 + } 87 84 } 88 - } 89 - }) 90 - }) 85 + }) 86 + }, 87 + ) 91 88 echo timelines 92 89 timelines 93 90 |> dict.size
+7
2025/7/rust/Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "rust" 7 + version = "0.1.0"
+6
2025/7/rust/Cargo.toml
··· 1 + [package] 2 + name = "rust" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies]
+43
2025/7/rust/src/main.rs
··· 1 + use std::{ 2 + char, 3 + collections::{HashMap, HashSet}, 4 + }; 5 + 6 + fn main() { 7 + let input = include_str!("../../input_example.txt").trim(); 8 + 9 + let mut input: Vec<&str> = input.trim().split("\n").collect(); 10 + let start = input[0].find("S").unwrap() as u32; 11 + let splitters_map: Vec<HashSet<u32>> = input[0..input.len()] 12 + .iter() 13 + .enumerate() 14 + .map(|(i, line)| if i % 2 != 0 { "" } else { line }) 15 + .filter(|line| line != &"") 16 + .map(|line| { 17 + line.chars() 18 + .enumerate() 19 + .fold(HashSet::new(), |mut s, (i, char)| { 20 + if char == '^' { 21 + s.insert(i as u32); 22 + } 23 + s 24 + }) 25 + }) 26 + .collect(); 27 + 28 + let timelines = { 29 + let mut timelines: HashMap<String, u32> = HashMap::new(); 30 + timelines.insert("".to_string(), start); 31 + for splitters in splitters_map { 32 + for (timeline, pos) in timelines.clone() { 33 + if splitters.contains(&pos) { 34 + timelines.remove(&timeline); 35 + timelines.insert(format!("{timeline}+"), pos + 1); 36 + timelines.insert(format!("{timeline}-"), pos - 1); 37 + } 38 + } 39 + } 40 + timelines 41 + }; 42 + println!("{}", timelines.len()); 43 + }