Compare commits

..

2 Commits

Author SHA1 Message Date
YK
40248e82e9 solution: day 2 2024-11-19 21:11:32 +03:00
YK
476332c7aa feat: new utils 2024-11-19 21:11:17 +03:00
5 changed files with 138 additions and 8 deletions

5
in/2.txt Normal file
View File

@ -0,0 +1,5 @@
RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL
LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU
RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD
ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR
LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL

View File

@ -1,5 +1,5 @@
pub mod d1; pub mod d1;
// pub mod d2; pub mod d2;
// pub mod d3; // pub mod d3;
// pub mod d4; // pub mod d4;
// pub mod d5; // pub mod d5;

108
src/days/d2.rs Normal file
View File

@ -0,0 +1,108 @@
use crate::prelude::*;
pub type I = Vec<Vec<(i8, i8)>>;
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"))
}
}

View File

@ -3,16 +3,20 @@ use crate::prelude::*;
pub type I = String; pub type I = String;
pub type O = i64; pub type O = i64;
fn solve (data: I) -> O { fn _parse (data: &str) -> I {
0 Default::default()
} }
fn silver (data: I) -> O { fn _solve (data: I) -> O {
0 Default::default()
} }
fn gold (data: I) -> O { fn _silver (data: I) -> O {
0 Default::default()
}
fn _gold (data: I) -> O {
Default::default()
} }
#[cfg(test)] #[cfg(test)]
@ -20,16 +24,23 @@ mod test {
use super::*; use super::*;
fn read () -> I { fn read () -> I {
Default::default() let data = inc!(_);
_parse(data)
} }
#[test] #[test]
fn silver () { fn silver () {
let data = read();
let ans = _silver(&data);
assert_eq!(ans, 1)
} }
#[test] #[test]
fn gold () { fn gold () {
let data = read();
let ans = _gold(&data);
assert_eq!(ans, 1)
} }
} }

View File

@ -3,3 +3,9 @@ pub macro inc {
include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/in/", $d, ".txt")) include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/in/", $d, ".txt"))
} }
} }
pub macro s {
($s: literal) => {
format!("{}", $s)
}
}