From 05e4c44e6f505bb354d683373fb7ac2efb56a1cd Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 15 Dec 2017 14:12:42 -0500 Subject: Day 10, part 2 --- 2017/src/bin/day10.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to '2017/src/bin') 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")); +} -- cgit 1.4.1 earch' size='10' name='q' value=''/>
path: root/bin/man3 (unfollow)
Commit message (Expand)Author
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