Function advent_solutions::advent2017::knot_hash::hash [] [src]

pub fn hash(nums: &mut [u8], lengths: &[u8], rounds: usize)

To achieve this, begin with a list of numbers from 0 to 255, a current position which begins at 0 (the first element in the list), a skip size (which starts at 0), and a sequence of lengths (your puzzle input). Then, for each length:

The list is circular; if the current position and the length try to reverse elements beyond the end of the list, the operation reverses using as many extra elements as it needs from the front of the list. If the current position moves past the end of the list, it wraps around to the front. Lengths larger than the size of the list are invalid.

Here's an example using a smaller list:

Suppose we instead only had a circular list containing five elements, 0, 1, 2, 3, 4, and were given input lengths of 3, 4, 1, 5.

let mut nums = knot_hash::new_nums(4);

knot_hash::hash(&mut nums, &[3, 4, 1, 5], 1);
assert_eq!(nums, &[3, 4, 2, 1, 0]);