2017 Day 01 Complete in Rust
This commit is contained in:
parent
36e2202023
commit
09b1c9740d
47
2017/day01/day01.rs
Normal file
47
2017/day01/day01.rs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
mod helpers;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input = helpers::read_std_in();
|
||||||
|
part1(input.clone());
|
||||||
|
part2(input.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(input: String) {
|
||||||
|
let max = input.chars().count()-1;
|
||||||
|
let mut total = 0i32;
|
||||||
|
for (i, c) in input.chars().enumerate() {
|
||||||
|
let tst_idx = get_compare_idx(i, 1, max);
|
||||||
|
total += get_compare_result(c, input.chars().nth(tst_idx).unwrap());
|
||||||
|
}
|
||||||
|
println!("Part 1: {}", total);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(input: String) {
|
||||||
|
let max = input.chars().count()-1;
|
||||||
|
let mut total = 0i32;
|
||||||
|
for (i, c) in input.chars().enumerate() {
|
||||||
|
let tst_idx = get_compare_idx(i, (input.chars().count() / 2), max);
|
||||||
|
total += get_compare_result(c, input.chars().nth(tst_idx).unwrap());
|
||||||
|
}
|
||||||
|
println!("Part 2: {}", total);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_compare_idx(curr: usize, add: usize, max: usize) -> usize {
|
||||||
|
let mut ret = curr + add;
|
||||||
|
if ret > max {
|
||||||
|
ret -= max+1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_compare_result(c1: char, c2: char) -> i32 {
|
||||||
|
if c1 != c2 {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
match c1.to_digit(10) {
|
||||||
|
Some(v) => {
|
||||||
|
return v as i32;
|
||||||
|
},
|
||||||
|
None => 0,
|
||||||
|
}
|
||||||
|
}
|
20
2017/day01/helpers.rs
Normal file
20
2017/day01/helpers.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
use std::io;
|
||||||
|
|
||||||
|
pub fn read_std_in() -> String {
|
||||||
|
let mut input = String::new();
|
||||||
|
let mut done = false;
|
||||||
|
while !done {
|
||||||
|
match io::stdin().read_line(&mut input) {
|
||||||
|
Ok(n) => {
|
||||||
|
if n == 0 {
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(error) => {
|
||||||
|
println!("error: {}", error);
|
||||||
|
done = true;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return String::from(input.trim());
|
||||||
|
}
|
@ -18,7 +18,7 @@ func main() {
|
|||||||
func part1(inp string) {
|
func part1(inp string) {
|
||||||
sum := 0
|
sum := 0
|
||||||
for k := range inp {
|
for k := range inp {
|
||||||
tstIdx := getCompareIndex(k, k+1, len(inp))
|
tstIdx := getCompareIndex(k, 1, len(inp))
|
||||||
sum += getCompareResult(inp[k], inp[tstIdx])
|
sum += getCompareResult(inp[k], inp[tstIdx])
|
||||||
}
|
}
|
||||||
fmt.Println("Part 1:", sum)
|
fmt.Println("Part 1:", sum)
|
||||||
|
Loading…
Reference in New Issue
Block a user