fixed wrong day2 problem
This commit is contained in:
parent
9fe0199321
commit
2b85cd754b
4 changed files with 122 additions and 113 deletions
|
@ -1,38 +1,11 @@
|
||||||
use std::fs;
|
|
||||||
|
mod part1;
|
||||||
|
mod part2;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
let file_contents = fs::read_to_string("./input.txt").unwrap();
|
part1::part1();
|
||||||
|
part2::part2();
|
||||||
let sum: i64 = file_contents
|
|
||||||
.lines()
|
|
||||||
.map(|x| sum_first_last(x))
|
|
||||||
.sum::<i64>();
|
|
||||||
println!("Answer is: {}", sum);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sum_first_last(input: &str) -> i64 {
|
|
||||||
let mut first: i64 = -64;
|
|
||||||
let mut last: i64 = -64;
|
|
||||||
let _: Vec<_> = input
|
|
||||||
.chars()
|
|
||||||
.map(|x| {
|
|
||||||
if char::is_digit(x, 10) {
|
|
||||||
if first == -64 {
|
|
||||||
first = char::to_digit(x, 10).unwrap() as i64;
|
|
||||||
} else {
|
|
||||||
last = char::to_digit(x, 10).unwrap() as i64;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).collect();
|
|
||||||
|
|
||||||
if first == -64 {
|
|
||||||
first = 0;
|
|
||||||
}
|
|
||||||
if last == -64 {
|
|
||||||
last = first.clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
return first * 10 + last;
|
|
||||||
}
|
|
||||||
|
|
37
day1/src/part1.rs
Normal file
37
day1/src/part1.rs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub fn part1() {
|
||||||
|
let file_contents = fs::read_to_string("./input.txt").unwrap();
|
||||||
|
|
||||||
|
let sum: i64 = file_contents
|
||||||
|
.lines()
|
||||||
|
.map(|x| sum_first_last(x))
|
||||||
|
.sum::<i64>();
|
||||||
|
println!("Answer is: {}", sum);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sum_first_last(input: &str) -> i64 {
|
||||||
|
let mut first: i64 = -64;
|
||||||
|
let mut last: i64 = -64;
|
||||||
|
let _: Vec<_> = input
|
||||||
|
.chars()
|
||||||
|
.map(|x| {
|
||||||
|
if char::is_digit(x, 10) {
|
||||||
|
if first == -64 {
|
||||||
|
first = char::to_digit(x, 10).unwrap() as i64;
|
||||||
|
} else {
|
||||||
|
last = char::to_digit(x, 10).unwrap() as i64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
if first == -64 {
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
if last == -64 {
|
||||||
|
last = first.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
return first * 10 + last;
|
||||||
|
}
|
80
day1/src/part2.rs
Normal file
80
day1/src/part2.rs
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
pub fn part2() {
|
||||||
|
|
||||||
|
let file_contents = fs::read_to_string("./input.txt").unwrap();
|
||||||
|
|
||||||
|
let sum: i64 = file_contents
|
||||||
|
.lines()
|
||||||
|
.map(|x| sum_first_last(x))
|
||||||
|
.sum::<i64>();
|
||||||
|
println!("Answer is: {}", sum);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sum_first_last(input: &str) -> i64 {
|
||||||
|
let mut first: i64 = -64;
|
||||||
|
let mut last: i64 = -64;
|
||||||
|
|
||||||
|
|
||||||
|
let _: Vec<_> = input
|
||||||
|
.lines()
|
||||||
|
.map(|line| {
|
||||||
|
// if !line.contains(["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]){
|
||||||
|
for n in 0..line.len() {
|
||||||
|
if char::is_digit(line.chars().nth(n).unwrap(), 10){
|
||||||
|
if first == -64 {
|
||||||
|
first = char::to_digit(line.chars().nth(n).unwrap(), 10).unwrap() as i64;
|
||||||
|
} else {
|
||||||
|
last = char::to_digit(line.chars().nth(n).unwrap(), 10).unwrap() as i64;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let val = get_str_num(line.get(n..).unwrap());
|
||||||
|
match val {
|
||||||
|
Some(val) => {
|
||||||
|
if first == -64 {
|
||||||
|
first = val;
|
||||||
|
} else {
|
||||||
|
last = val;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
if first == -64 {
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
|
if last == -64 {
|
||||||
|
last = first.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
return first * 10 + last;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_str_num(x: &str) -> Option<i64> {
|
||||||
|
// check timing of branch pre-check version
|
||||||
|
if x.starts_with("one") {
|
||||||
|
Some(1)
|
||||||
|
} else if x.starts_with("two") {
|
||||||
|
Some(2)
|
||||||
|
} else if x.starts_with("three") {
|
||||||
|
Some(3)
|
||||||
|
} else if x.starts_with("four") {
|
||||||
|
Some(4)
|
||||||
|
} else if x.starts_with("five") {
|
||||||
|
Some(5)
|
||||||
|
} else if x.starts_with("six") {
|
||||||
|
Some(6)
|
||||||
|
} else if x.starts_with("seven") {
|
||||||
|
Some(7)
|
||||||
|
} else if x.starts_with("eight") {
|
||||||
|
Some(8)
|
||||||
|
} else if x.starts_with("nine") {
|
||||||
|
Some(9)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,81 +0,0 @@
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
|
|
||||||
let file_contents = fs::read_to_string("./input.txt").unwrap();
|
|
||||||
|
|
||||||
let sum: i64 = file_contents
|
|
||||||
.lines()
|
|
||||||
.map(|x| sum_first_last(x))
|
|
||||||
.sum::<i64>();
|
|
||||||
println!("Answer is: {}", sum);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fn sum_first_last(input: &str) -> i64 {
|
|
||||||
let mut first: i64 = -64;
|
|
||||||
let mut last: i64 = -64;
|
|
||||||
|
|
||||||
|
|
||||||
let _: Vec<_> = input
|
|
||||||
.lines()
|
|
||||||
.map(|line| {
|
|
||||||
// if !line.contains(["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]){
|
|
||||||
for n in 0..line.len() {
|
|
||||||
if char::is_digit(line.chars().nth(n).unwrap(), 10){
|
|
||||||
if first == -64 {
|
|
||||||
first = char::to_digit(line.chars().nth(n).unwrap(), 10).unwrap() as i64;
|
|
||||||
} else {
|
|
||||||
last = char::to_digit(line.chars().nth(n).unwrap(), 10).unwrap() as i64;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let val = get_str_num(line.get(n..).unwrap());
|
|
||||||
match val {
|
|
||||||
Some(val) => {
|
|
||||||
if first == -64 {
|
|
||||||
first = val;
|
|
||||||
} else {
|
|
||||||
last = val;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).collect();
|
|
||||||
|
|
||||||
if first == -64 {
|
|
||||||
first = 0;
|
|
||||||
}
|
|
||||||
if last == -64 {
|
|
||||||
last = first.clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
return first * 10 + last;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_str_num(x: &str) -> Option<i64> {
|
|
||||||
// check timing of branch pre-check version
|
|
||||||
if x.starts_with("one") {
|
|
||||||
Some(1)
|
|
||||||
} else if x.starts_with("two") {
|
|
||||||
Some(2)
|
|
||||||
} else if x.starts_with("three") {
|
|
||||||
Some(3)
|
|
||||||
} else if x.starts_with("four") {
|
|
||||||
Some(4)
|
|
||||||
} else if x.starts_with("five") {
|
|
||||||
Some(5)
|
|
||||||
} else if x.starts_with("six") {
|
|
||||||
Some(6)
|
|
||||||
} else if x.starts_with("seven") {
|
|
||||||
Some(7)
|
|
||||||
} else if x.starts_with("eight") {
|
|
||||||
Some(8)
|
|
||||||
} else if x.starts_with("nine") {
|
|
||||||
Some(9)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue