diff --git a/in/2.txt b/in/2.txt new file mode 100644 index 0000000..ba5a73d --- /dev/null +++ b/in/2.txt @@ -0,0 +1,5 @@ +RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL +LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU +RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD +ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR +LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL diff --git a/src/days.rs b/src/days.rs index e88513f..c31753b 100644 --- a/src/days.rs +++ b/src/days.rs @@ -1,5 +1,5 @@ pub mod d1; -// pub mod d2; +pub mod d2; // pub mod d3; // pub mod d4; // pub mod d5; diff --git a/src/days/d2.rs b/src/days/d2.rs new file mode 100644 index 0000000..441ad16 --- /dev/null +++ b/src/days/d2.rs @@ -0,0 +1,108 @@ +use crate::prelude::*; + +pub type I = Vec>; +pub type O = String; + +fn _parse (data: &str) -> I { + data.trim().lines().map(|line| line.trim().chars().map(|c| match c { + 'L' => (-1, 0), + 'U' => (0, -1), + 'R' => (1, 0), + 'D' => (0, 1), + _ => unreachable!() + }).collect()).collect() +} + +fn _solve (data: &I) -> O { + Default::default() +} + +fn _silver (data: &I) -> O { + let mut out = format!(""); + + let mut x = 1; + let mut y = 1; + + let r = 0..=2; + + for n in data { + for (dx, dy) in n { + let nx = x + dx; + let ny = y + dy; + + if r.contains(&nx) && r.contains(&ny) { + x = nx; + y = ny; + } + } + + out.push(((y * 3 + x) as u8 + b'1') as char); + } + + out +} + +fn _gold (data: &I) -> O { + let mut out = format!(""); + + let mut x = 2; + let mut y = 2; + + let m = M::from([ + ((0, 2), '1'), + ((1, 1), '2'), + ((1, 2), '3'), + ((1, 3), '4'), + ((2, 0), '5'), + ((2, 1), '6'), + ((2, 2), '7'), + ((2, 3), '8'), + ((2, 4), '9'), + ((3, 1), 'A'), + ((3, 2), 'B'), + ((3, 3), 'C'), + ((4, 2), 'D'), + ]); + + for n in data { + for (dx, dy) in n { + let nx = x + dx; + let ny = y + dy; + + if m.contains_key(&(ny, nx)) { + x = nx; + y = ny; + } + } + + out.push(*m.get(&(y, x)).unwrap()); + } + + out +} + +#[cfg(test)] +mod test { + use super::*; + + fn read () -> I { + let data = inc!(2); + _parse(data) + } + + #[test] + fn silver () { + let data = read(); + let ans = _silver(&data); + + assert_eq!(ans, s!(74921)) + } + + #[test] + fn gold () { + let data = read(); + let ans = _gold(&data); + + assert_eq!(ans, s!("A6B35")) + } +} diff --git a/src/days/template.rs b/src/days/template.rs index 1f66641..e26d1a5 100644 --- a/src/days/template.rs +++ b/src/days/template.rs @@ -3,16 +3,20 @@ use crate::prelude::*; pub type I = String; pub type O = i64; -fn solve (data: I) -> O { - 0 +fn _parse (data: &str) -> I { + Default::default() } -fn silver (data: I) -> O { - 0 +fn _solve (data: I) -> O { + Default::default() } -fn gold (data: I) -> O { - 0 +fn _silver (data: I) -> O { + Default::default() +} + +fn _gold (data: I) -> O { + Default::default() } #[cfg(test)] @@ -20,16 +24,23 @@ mod test { use super::*; fn read () -> I { - Default::default() + let data = inc!(_); + _parse(data) } #[test] fn silver () { + let data = read(); + let ans = _silver(&data); + assert_eq!(ans, 1) } #[test] fn gold () { + let data = read(); + let ans = _gold(&data); + assert_eq!(ans, 1) } }