summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2017-12-15 14:12:42 -0500
committerJune McEnroe <programble@gmail.com>2017-12-15 14:12:42 -0500
commit05e4c44e6f505bb354d683373fb7ac2efb56a1cd (patch)
treec1c3530bbd18551a5d3ff2abd0fa448dc1bc0b54
parentDay 10 (diff)
downloadaoc-05e4c44e6f505bb354d683373fb7ac2efb56a1cd.tar.gz
aoc-05e4c44e6f505bb354d683373fb7ac2efb56a1cd.zip
Day 10, part 2
-rw-r--r--2017/src/bin/day10.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/2017/src/bin/day10.rs b/2017/src/bin/day10.rs
index af90961..615f468 100644
--- a/2017/src/bin/day10.rs
+++ b/2017/src/bin/day10.rs
@@ -25,14 +25,46 @@ fn solve1(size: u32, input: &str) -> u32 {
     ring[0] * ring[1]
 }
 
+fn solve2(input: &str) -> String {
+    let mut ring: Vec<_> = (0..256).collect();
+    let mut index = 0;
+    let mut skip = 0;
+
+    let mut lens: Vec<_> = input.as_bytes().to_vec();
+    lens.extend(&[17, 31, 73, 47, 23]);
+
+    for _ in 0..64 {
+        for len in lens.iter().cloned() {
+            reverse(&mut ring, index, len as usize);
+            index += len as usize + skip;
+            index %= ring.len();
+            skip += 1;
+        }
+    }
+
+    ring.chunks(16)
+        .map(|chunk| chunk.iter().fold(0, |a, b| a ^ b))
+        .map(|n| format!("{:02x}", n))
+        .collect()
+}
+
 fn main() {
     let mut input = String::new();
     io::stdin().read_to_string(&mut input).unwrap();
 
     println!("Part 1: {}", solve1(256, input.trim()));
+    println!("Part 2: {}", solve2(input.trim()));
 }
 
 #[test]
 fn part1() {
     assert_eq!(12, solve1(5, "3,4,1,5"));
 }
+
+#[test]
+fn part2() {
+    assert_eq!("a2582a3a0e66e6e86e3812dcb672a272", solve2(""));
+    assert_eq!("33efeb34ea91902bb2f59c9920caa6cd", solve2("AoC 2017"));
+    assert_eq!("3efbe78a8d82f29979031a4aa0b16a9d", solve2("1,2,3"));
+    assert_eq!("63960835bcdc130f0b66d7ff4f6a5a8e", solve2("1,2,4"));
+}
class='logmsg'> Fun. 2019-10-14Set the write variable for nvim man modeJune McEnroe Embarrassing... 2019-10-13Add All Systems RedJune McEnroe 2019-10-10Add The Book of PhoenixJune McEnroe 2019-10-03Add two Kim Petras songsJune McEnroe 2019-10-02Update neovim 0.4.2June McEnroe Finally a release with my man mode fix... Meanwhile neovim itself has probably gotten worse. 2019-10-02Claim to be curl(1) in titleJune McEnroe IMDB serves a page to our dumb User-Agent whose <title> is past the 8K boundary but serves something normal to curl(1). 2019-10-02Add The Red Threads of FortuneJune McEnroe 2019-09-28Add The Black Tides of HeavenJune McEnroe 2019-09-27Fail on HTTP failure status in titleJune McEnroe 2019-09-23Add Trail of LightningJune McEnroe 2019-09-22Revert "Enable cookies in title"June McEnroe This reverts commit 3231fe21d3b389448c9a5ca7b4c91fdd25c9e677. 2019-09-20Enable cookies in titleJune McEnroe Perhaps this will make it less suspicious to Google. Who knows. 2019-09-16Use sensitivity aliases in TF2June McEnroe 2019-09-16Add The Just CityJune McEnroe 2019-09-12Only GET the final redirect locationJune McEnroe 2019-09-12Consume entire bodyJune McEnroe Aborting the request and leaving data around may be causing intermittent errors. Just discard the rest of the data. 2019-09-10Add title -v flagJune McEnroe 2019-09-10Use curl error bufferJune McEnroe 2019-09-10Set Accept-Encoding in titleJune McEnroe Because apparently it's fine for servers to respond with Content-Encoding you didn't ask for, and curl won't decode it if you didn't ask for it. 2019-09-08Set title User-AgentJune McEnroe Some things don't like you if you don't send one. 2019-09-07Add -x flag to titleJune McEnroe 2019-09-07Ignore SIGPIPE in relayJune McEnroe Allows restarting consumers safely. 2019-09-07Add A Memory Called EmpireJune McEnroe 2019-09-05Handle lack of Content-TypeJune McEnroe 2019-09-05Use CURLINFO_CONTENT_TYPEJune McEnroe Oops, didn't see this. 2019-09-05Decode entities in titlesJune McEnroe 2019-09-05Print title as soon as it's availableJune McEnroe 2019-09-05Use CURL_PREFIX to set flagsJune McEnroe 2019-09-05Add titleJune McEnroe 2019-09-04Add Avorter n'est pas tuerJune McEnroe 2019-08-29Unset executable on shell scriptsJune McEnroe 2019-08-29Add long-missing setopt to bin.7June McEnroe 2019-08-29Add editJune McEnroe