1use crate::util::parse::*;
3
4pub fn parse(input: &str) -> Vec<i32> {
7 let mut x = 1;
8 let mut xs = vec![1];
9
10 for token in input.split_ascii_whitespace() {
11 match token {
12 "noop" | "addx" => (),
13 delta => x += delta.signed::<i32>(),
14 }
15 xs.push(x);
16 }
17
18 xs
19}
20
21pub fn part1(input: &[i32]) -> i32 {
24 input.iter().enumerate().skip(19).step_by(40).map(|(i, x)| ((i + 1) as i32) * x).sum()
25}
26
27pub fn part2(input: &[i32]) -> String {
29 let mut result = String::new();
30
31 for row in input.chunks_exact(40) {
32 result.push('\n');
33 for (i, &c) in row.iter().enumerate() {
34 result.push(if ((i as i32) - c).abs() <= 1 { '#' } else { '.' });
35 }
36 }
37
38 result
39}