Compare commits

..

2 commits

Author SHA1 Message Date
2b85cd754b fixed wrong day2 problem 2023-12-01 09:50:15 -08:00
9fe0199321 completed day1 2023-12-01 09:47:08 -08:00
9 changed files with 2142 additions and 3 deletions

6
Cargo.lock generated
View file

@ -3,5 +3,9 @@
version = 3
[[package]]
name = "helloworld"
name = "day1"
version = "0.1.0"
[[package]]
name = "day2"
version = "0.1.0"

View file

@ -1,3 +1,3 @@
[workspace]
members = ["day1"]
members = ["day1", "day2"]
resolver = "2"

1001
day1/input.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,11 @@
mod part1;
mod part2;
fn main() {
println!("Hello, world!");
part1::part1();
part2::part2();
}

37
day1/src/part1.rs Normal file
View 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
View 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
}
}

8
day2/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "day2"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

1001
day2/input.txt Normal file

File diff suppressed because it is too large Load diff

0
day2/src/main.rs Normal file
View file