Compare commits
2 commits
dab145d2d4
...
2b85cd754b
Author | SHA1 | Date | |
---|---|---|---|
2b85cd754b | |||
9fe0199321 |
9 changed files with 2142 additions and 3 deletions
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -3,5 +3,9 @@
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "helloworld"
|
name = "day1"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["day1"]
|
members = ["day1", "day2"]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
1001
day1/input.txt
Normal file
1001
day1/input.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,11 @@
|
||||||
|
|
||||||
|
mod part1;
|
||||||
|
mod part2;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
|
||||||
|
part1::part1();
|
||||||
|
part2::part2();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
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
|
||||||
|
}
|
||||||
|
}
|
8
day2/Cargo.toml
Normal file
8
day2/Cargo.toml
Normal 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
1001
day2/input.txt
Normal file
File diff suppressed because it is too large
Load diff
0
day2/src/main.rs
Normal file
0
day2/src/main.rs
Normal file
Loading…
Reference in a new issue