diff --git a/2016/02/Cargo.lock b/2016/02/Cargo.lock new file mode 100644 index 0000000..97d416c --- /dev/null +++ b/2016/02/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "02" +version = "0.1.0" + diff --git a/2016/02/Cargo.toml b/2016/02/Cargo.toml new file mode 100644 index 0000000..e4c367f --- /dev/null +++ b/2016/02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "02" +version = "0.1.0" +authors = ["logaritmisk "] + +[dependencies] diff --git a/2016/02/input.txt b/2016/02/input.txt new file mode 100644 index 0000000..5dcca1a --- /dev/null +++ b/2016/02/input.txt @@ -0,0 +1,5 @@ +LDUDDRUDRRURRRRDRUUDULDLULRRLLLUDDULRDLDDLRULLDDLRUURRLDUDDDDLUULUUDDDDLLLLLULLRURDRLRLRLLURDLLDDUULUUUUDLULLRLUUDDLRDRRURRLURRLLLRRDLRUDURRLRRRLULRDLUDRDRLUDDUUULDDDDDURLDULLRDDRRUDDDDRRURRULUDDLLRRDRURDLLLLLUUUDLULURLULLDRLRRDDLUDURUDRLRURURLRRDDLDUULURULRRLLLDRURDULRDUURRRLDLDUDDRLURRDRDRRLDLRRRLRURDRLDRUDLURRUURDLDRULULURRLDLLLUURRULUDDDRLDDUDDDRRLRDUDRUUDDULRDDULDDURULUDLUDRUDDDLRRRRRDLULDRLRRRRUULDUUDRRLURDLLUUDUDDDLUUURDRUULRURULRLLDDLLUDLURRLDRLDDDLULULLURLULRDLDRDDDLRDUDUURUUULDLLRDRUDRDURUUDDLRRRRLLLUULURRURLLDDLDDD +DRURURLLUURRRULURRLRULLLURDULRLRRRLRUURRLRRURRRRUURRRLUDRDUDLUUDULURRLDLULURRLDURLUUDLDUDRUURDDRDLLLDDRDDLUUDRDUDDRRDLDUDRLDDDRLLDDLUDRULRLLURLDLURRDRUDUDLDLULLLRDLLRRDULLDRURRDLDRURDURDULUUURURDLUDRRURLRRLDULRRDURRDRDDULLDRRRLDRRURRRRUURDRLLLRRULLUDUDRRDDRURLULLUUDDRLDRRDUDLULUUDRDDDDLRLRULRLRLLDLLRRDDLDRDURRULLRLRRLULRULDDDRDRULDRUUDURDLLRDRURDRLRDDUDLLRUDLURURRULLUDRDRDURLLLDDDRDRURRDDRLRRRDLLDDLDURUULURULRLULRLLURLUDULDRRDDLRDLRRLRLLULLDDDRDRU +URUUDUDRDDRDRRRDLLUDRUDRUUUURDRRDUDUULDUDLLUDRRUDLLRDLLULULDRRDDULDRLDLDDULLDDRDDDLRLLDLLRDUUDUURLUDURDRRRRLRRLDRRUULLDLDLRDURULRURULRRDRRDDUUURDURLLDDUUDLRLDURULURRRDRRUUUDRDDLRLRRLLULUDDRRLRRRRLRDRUDDUULULRRURUURURRLRUDLRRUUURUULLULULRRDDULDRRLLLDLUDRRRLLRDLLRLDUDDRRULULUDLURLDRDRRLULLRRDRDLUURLDDURRLDRLURULDLDRDLURRDRLUUDRUULLDRDURLLDLRUDDULLLLDLDDDLURDDUDUDDRLRDDUDDURURLULLRLUDRDDUDDLDRUURLDLUUURDUULRULLDDDURULDDLLD +LRRLLRURUURRDLURRULDDDLURDUURLLDLRRRRULUUDDLULLDLLRDLUDUULLUDRLLDRULDDURURDUUULRUDRLLRDDDURLRDRRURDDRUDDRRULULLLDLRLULLDLLDRLLLUDLRURLDULRDDRDLDRRDLUUDDLURDLURLUDLRDLDUURLRRUULDLURULUURULLURLDDURRURDRLUULLRRLLLDDDURLURUURLLLLDLLLUDLDLRDULUULRRLUUUUDLURRURRULULULRURDDRRRRDRUDRURDUDDDDUDLURURRDRRDRUDRLDLDDDLURRRURRUDLDURDRLDLDLDDUDURLUDUUDRULLRLLUUDDUURRRUDURDRRUURLUDRRUDLUDDRUUDLULDLLDLRUUDUULLDULRRLDRUDRRDRLUUDDRUDDLLULRLULLDLDUULLDRUUDDUDLLLLDLDDLDLURLDLRUUDDUULLUDUUDRUDLRDDRDLDRUUDUDLLDUURRRLLLLRLLRLLRLUUDULLRLURDLLRUUDRULLULRDRDRRULRDLUDDURRRRURLLRDRLLDRUUULDUDDLRDRD +DDLRRULRDURDURULLLLRLDDRDDRLLURLRDLULUDURRLUDLDUDRDULDDULURDRURLLDRRLDURRLUULLRUUDUUDLDDLRUUDRRDDRLURDRUDRRRDRUUDDRLLUURLURUDLLRRDRDLUUDLUDURUUDDUULUURLUDLLDDULLUURDDRDLLDRLLDDDRRDLDULLURRLDLRRRLRRURUUDRLURURUULDURUDRRLUDUDLRUDDUDDRLLLULUDULRURDRLUURRRRDLLRDRURRRUURULRUDULDULULUULULLURDUDUDRLDULDRDDULRULDLURLRLDDDDDDULDRURRRRDLLRUDDRDDLUUDUDDRLLRLDLUDRUDULDDDRLLLLURURLDLUUULRRRUDLLULUUULLDLRLDLLRLRDLDULLRLUDDDRDRDDLULUUR diff --git a/2016/02/src/main.rs b/2016/02/src/main.rs new file mode 100644 index 0000000..d05eb35 --- /dev/null +++ b/2016/02/src/main.rs @@ -0,0 +1,144 @@ +use std::io::{self, Read}; + + +fn main() { + let mut buffer = String::new(); + + io::stdin().read_to_string(&mut buffer).unwrap(); + + let code = process_2(&buffer); + + println!("code={}", code); +} + +fn process_1(input: &str) -> String { + let mut code = Vec::new(); + let mut state = '5'; + + for line in input.lines() { + for ch in line.chars() { + state = match (ch, state) { + ('R', '1') => '2', + ('D', '1') => '4', + + ('R', '2') => '3', + ('L', '2') => '1', + ('D', '2') => '5', + + ('L', '3') => '2', + ('D', '3') => '6', + + ('R', '4') => '5', + ('U', '4') => '1', + ('D', '4') => '7', + + ('R', '5') => '6', + ('L', '5') => '4', + ('U', '5') => '2', + ('D', '5') => '8', + + ('L', '6') => '5', + ('U', '6') => '3', + ('D', '6') => '9', + + ('R', '7') => '8', + ('U', '7') => '4', + + ('R', '8') => '9', + ('L', '8') => '7', + ('U', '8') => '5', + + ('L', '9') => '8', + ('U', '9') => '6', + + _ => state, + }; + } + + code.push(state); + } + + code.iter().map(|x| x.to_string()).collect::>().join("") +} + +fn process_2(input: &str) -> String { + let mut code = Vec::new(); + let mut state = '5'; + + for line in input.lines() { + for ch in line.chars() { + state = match (ch, state) { + ('D', '1') => '3', + + ('R', '2') => '3', + ('D', '2') => '6', + + ('R', '3') => '4', + ('L', '3') => '2', + ('U', '3') => '1', + ('D', '3') => '7', + + ('L', '4') => '3', + ('D', '4') => '8', + + ('R', '5') => '6', + + ('R', '6') => '7', + ('L', '6') => '5', + ('U', '6') => '2', + ('D', '6') => 'A', + + ('R', '7') => '8', + ('L', '7') => '6', + ('U', '7') => '3', + ('D', '7') => 'B', + + ('R', '8') => '9', + ('L', '8') => '7', + ('U', '8') => '4', + ('D', '8') => 'C', + + ('L', '9') => '8', + + ('R', 'A') => 'B', + ('U', 'A') => '6', + + ('R', 'B') => 'C', + ('L', 'B') => 'A', + ('U', 'B') => '7', + ('D', 'B') => 'D', + + ('L', 'C') => 'B', + ('U', 'C') => '8', + + ('U', 'D') => 'B', + + _ => state, + }; + } + + code.push(state); + } + + code.iter().map(|x| x.to_string()).collect::>().join("") +} + + +#[cfg(test)] +mod tests { + use super::{process_1, process_2}; + + #[test] + fn example_01() { + let input = "ULL\nRRDDD\nLURDL\nUUUUD"; + + assert_eq!("1985", process_1(input)); + } + + #[test] + fn example_02() { + let input = "ULL\nRRDDD\nLURDL\nUUUUD"; + + assert_eq!("5DB3", process_2(input)); + } +}