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

tiny refactor idk

aylac.top 06a183c3 008db5dd

verified
Changed files
+22 -30
2015
14
gleam
+22 -30
2015/14/gleam/src/main.gleam
··· 25 25 LeadKm(km: Int, leads: Set(String)) 26 26 } 27 27 28 - pub type RunState { 29 - RunState(lead_km: LeadKm, state: Dict(String, ReindeerState)) 30 - } 28 + pub type RunState = 29 + Dict(String, ReindeerState) 31 30 32 31 pub fn to_int(number_string) { 33 32 let assert Ok(number) = number_string |> int.base_parse(10) ··· 39 38 case sec > 0 { 40 39 False -> state 41 40 True -> { 42 - let RunState(LeadKm(_, leads), state) = 41 + let #(LeadKm(_, leads), state) = 43 42 reindeers 44 - |> list.fold(state, fn(s, reindeer) { 45 - let RunState(lead_km, state) = s 43 + |> list.fold(#(LeadKm(0, set.new()), state), fn(s, reindeer) { 44 + let #(lead, state) = s 46 45 let Reindeer(name, speed, run, rest) = reindeer 47 46 let ReindeerState(points, km, action, time_until_change) = 48 47 state ··· 61 60 } 62 61 |> dict.insert(state, name, _) 63 62 64 - let lead_km = case int.compare(km, lead_km.km) { 65 - Eq -> LeadKm(km, lead_km.leads |> set.insert(name)) 63 + let lead = case int.compare(km, lead.km) { 64 + Eq -> LeadKm(km, lead.leads |> set.insert(name)) 66 65 Gt -> LeadKm(km, set.new() |> set.insert(name)) 67 - Lt -> lead_km 66 + Lt -> lead 68 67 } 69 68 70 - RunState(lead_km, state) 69 + #(lead, state) 71 70 }) 72 71 73 - let state = 74 - leads 75 - |> set.fold(state, fn(state, reindeer_name) { 76 - let assert Ok(ReindeerState(points, km, action, time_until_change)) = 77 - state 78 - |> dict.get(reindeer_name) 72 + leads 73 + |> set.fold(state, fn(state, reindeer_name) { 74 + let assert Ok(ReindeerState(points, km, action, time_until_change)) = 79 75 state 80 - |> dict.insert( 81 - reindeer_name, 82 - ReindeerState(points + 1, km, action, time_until_change), 83 - ) 84 - }) 85 - 86 - RunState(LeadKm(0, set.new()), state) 76 + |> dict.get(reindeer_name) 77 + state 78 + |> dict.insert( 79 + reindeer_name, 80 + ReindeerState(points + 1, km, action, time_until_change), 81 + ) 82 + }) 87 83 |> do_calculate_run_state(reindeers, sec - 1) 88 84 } 89 85 } 90 86 } 91 87 92 88 pub fn calculate_run_state(reindeers: List(Reindeer), sec: Int) { 93 - do_calculate_run_state( 94 - RunState(LeadKm(0, set.new()), dict.new()), 95 - reindeers, 96 - sec, 97 - ) 89 + do_calculate_run_state(dict.new(), reindeers, sec) 98 90 } 99 91 100 92 pub fn get_winner_km(state: RunState) { 101 - state.state 93 + state 102 94 |> dict.fold(0, fn(winner, _, state) { 103 95 case state.km > winner { 104 96 True -> state.km ··· 108 100 } 109 101 110 102 pub fn get_winner_points(state: RunState) { 111 - state.state 103 + state 112 104 |> dict.fold(0, fn(winner, _, state) { 113 105 case state.points > winner { 114 106 True -> state.points