Compare commits
2 Commits
3070407092
...
40248e82e9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40248e82e9 | ||
|
|
476332c7aa |
5
in/2.txt
Normal file
5
in/2.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL
|
||||||
|
LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU
|
||||||
|
RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD
|
||||||
|
ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR
|
||||||
|
LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL
|
||||||
@ -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
108
src/days/d2.rs
Normal 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"))
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user