d10p2
This commit is contained in:
parent
176149a167
commit
2cbcc69ff3
@ -26,7 +26,7 @@ fn parse_line(line: String) -> Result<Inst, ParseError> {
|
|||||||
fn main() {
|
fn main() {
|
||||||
let file = File::open(&env::args().nth(1).unwrap()).unwrap();
|
let file = File::open(&env::args().nth(1).unwrap()).unwrap();
|
||||||
let reader = io::BufReader::new(file);
|
let reader = io::BufReader::new(file);
|
||||||
let mut xs: Vec<i64> = vec![0, 1];
|
let mut xs: Vec<i64> = vec![1];
|
||||||
|
|
||||||
for line in reader.lines().flatten() {
|
for line in reader.lines().flatten() {
|
||||||
let last_x = *xs.last().unwrap();
|
let last_x = *xs.last().unwrap();
|
||||||
@ -36,10 +36,12 @@ fn main() {
|
|||||||
Err(e) => { eprintln!("error: {:?}", e); process::exit(1) },
|
Err(e) => { eprintln!("error: {:?}", e); process::exit(1) },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let res: i64 = xs.iter().enumerate()
|
|
||||||
.skip(20).step_by(40)
|
let screen: Vec<_> = xs.iter().enumerate()
|
||||||
.map(|(i, &x)| (i as i64)*x)
|
.map(|(i, &x)| if ((i as i64) % 40 - x).abs() <= 1 { '#' } else { '.' })
|
||||||
.sum();
|
.collect();
|
||||||
println!("{:?}", res);
|
for i in 0..6 {
|
||||||
|
println!("{}", screen[(i*40)..((i+1)*40)].iter().collect::<String>());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
day10/src/main1.rs
Normal file
45
day10/src/main1.rs
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::process;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{self, BufRead};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Inst{
|
||||||
|
AddX(i64),
|
||||||
|
Noop,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct ParseError(String);
|
||||||
|
|
||||||
|
fn parse_line(line: String) -> Result<Inst, ParseError> {
|
||||||
|
match &line[..4] {
|
||||||
|
"noop" => Ok(Inst::Noop),
|
||||||
|
"addx" => match line[5..].parse::<i64>() {
|
||||||
|
Ok(operand) => Ok(Inst::AddX(operand)),
|
||||||
|
Err(e) => Err(ParseError(e.to_string())),
|
||||||
|
},
|
||||||
|
_ => Err(ParseError(String::from("bad instruction"))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file = File::open(&env::args().nth(1).unwrap()).unwrap();
|
||||||
|
let reader = io::BufReader::new(file);
|
||||||
|
let mut xs: Vec<i64> = vec![0, 1];
|
||||||
|
|
||||||
|
for line in reader.lines().flatten() {
|
||||||
|
let last_x = *xs.last().unwrap();
|
||||||
|
match parse_line(line) {
|
||||||
|
Ok(Inst::Noop) => { xs.push(last_x) },
|
||||||
|
Ok(Inst::AddX(x)) => { xs.push(last_x); xs.push(last_x + x) },
|
||||||
|
Err(e) => { eprintln!("error: {:?}", e); process::exit(1) },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let res: i64 = xs.iter().enumerate()
|
||||||
|
.skip(20).step_by(40)
|
||||||
|
.map(|(i, &x)| (i as i64)*x)
|
||||||
|
.sum();
|
||||||
|
println!("{:?}", res);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user