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() {
|
||||
|
||||
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);
|
||||
part1::part1();
|
||||
part2::part2();
|
||||
|
||||
}
|
||||
|
||||
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