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
|
||||
|
||||
[[package]]
|
||||
name = "helloworld"
|
||||
name = "day1"
|
||||
version = "0.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "day2"
|
||||
version = "0.1.0"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[workspace]
|
||||
members = ["day1"]
|
||||
members = ["day1", "day2"]
|
||||
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() {
|
||||
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