Finish Day 1

This commit is contained in:
Blizzard Finnegan 2023-12-01 13:16:01 -05:00
parent 40b1277b55
commit d3d1c25299
Signed by: blizzardfinnegan
GPG key ID: 61C1E13067E0018E
6 changed files with 142 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
**/target/

7
day01/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day01"
version = "0.1.0"

8
day01/Cargo.toml Normal file
View file

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

View file

@ -0,0 +1,8 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

17
day01/src/bin/first.rs Normal file
View file

@ -0,0 +1,17 @@
use std::fs;
const FILE_NAME:&str = "./data/data.txt";
fn main() {
let file_contents = fs::read_to_string(FILE_NAME).unwrap();
let lines:Vec<&str> = file_contents.split('\n').collect();
let mut final_output = 0;
for line in lines{
let line_string = line.to_string();
if line_string.is_empty() { break; }
let front_iter = line_string.clone().chars().find(|c:&char| c.is_ascii_digit()).unwrap();
let back_iter = line_string.clone().chars().rfind(|c:&char| c.is_ascii_digit()).unwrap();
let temp = (front_iter.to_digit(10).unwrap() * 10) + back_iter.to_digit(10).unwrap();
final_output += temp;
}
println!("{}",final_output);
}

101
day01/src/bin/second.rs Normal file
View file

@ -0,0 +1,101 @@
use std::{fs, collections::HashMap};
const ONE:&str = "one";
const TWO:&str = "two";
const THREE:&str = "three";
const FOUR:&str = "four";
const FIVE:&str = "five";
const SIX:&str = "six";
const SEVEN:&str = "seven";
const EIGHT:&str = "eight";
const NINE:&str = "nine";
const NUMBERS:[&str;9] = [ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE];
const FILE_NAME:&str = "./data/data.txt";
fn main() {
let mut MAP:HashMap<&str,u8> = HashMap::new();
MAP.insert(ONE,1);
MAP.insert(TWO,2);
MAP.insert(THREE,3);
MAP.insert(FOUR,4);
MAP.insert(FIVE,5);
MAP.insert(SIX,6);
MAP.insert(SEVEN,7);
MAP.insert(EIGHT,8);
MAP.insert(NINE,9);
let file_contents = fs::read_to_string(FILE_NAME).unwrap();
let lines:Vec<&str> = file_contents.split('\n').collect();
let mut final_output:u64 = 0;
for line in lines{
let line_string = line.to_string();
if line_string.is_empty() { break; }
let mut front_iter = line_string.chars();
let mut front_digit:u8 = 0;
let mut back_digit:u8 = 0;
let mut potential_word = String::new();
while let Some(next_char) = front_iter.next(){
if next_char.is_ascii_digit(){
front_digit = next_char.to_digit(10).unwrap() as u8;
break;
} else {
potential_word.push(next_char);
let digit_convert = is_text_digit(MAP.clone(), potential_word.clone());
println!("current:{:?}\t detect:{:?}",potential_word,digit_convert);
match digit_convert{
None => {
potential_word.remove(0);
},
Some(0) => {
continue;
},
Some(value) => {
front_digit = value;
break;
}
}
}
}
let mut back_iter = line_string.chars();
potential_word.clear();
while let Some(next_char) = back_iter.next_back(){
if next_char.is_ascii_digit(){
back_digit = next_char.to_digit(10).unwrap() as u8;
break;
} else {
let mut char_string = next_char.to_string();
char_string.push_str(&potential_word);
let digit_convert = is_text_digit(MAP.clone(), char_string.clone());
println!("last:{:?}\t current:{:?}\t detect:{:?}",potential_word,char_string,digit_convert);
match digit_convert{
None => {
potential_word = char_string;
potential_word.pop();
},
Some(0) => {
potential_word = char_string;
},
Some(value) => {
back_digit = value;
break;
}
}
}
}
let temp = (front_digit * 10) + back_digit;
println!("{:?} + {:?}",final_output,temp);
final_output += temp as u64;
}
println!("{}",final_output);
}
fn is_text_digit(map:HashMap<&str,u8>,string:String) -> Option<u8>{
for digit in NUMBERS{
if string.contains(digit){
return Some(*map.get(digit).unwrap());
}
if digit.contains(&string){
return Some(0);
}
};
None
}