summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorcurly <curly@infernal.garden>2023-12-06 11:26:18 -0700
committercurly <curly@infernal.garden>2023-12-06 11:26:18 -0700
commit5d66cec6c41a62dacd9ac232808bfac526f76500 (patch)
tree32806921b553a89ca28957135a67a573a7a95210 /src/main.rs
downloadaoc23-01-master.tar.gz
aoc23-01-master.tar.bz2
aoc23-01-master.zip
part one and twoHEADmaster
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..f7896a5
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,129 @@
+use std::fs;
+
+fn main() {
+ let f = fs::read_to_string("input2").unwrap();
+ let mut nums_vec: Vec<u32> = vec![];
+
+ // part one
+ for line in f.lines() {
+ let mut first = 0;
+ let mut second = 0;
+
+ // part two
+ // convert words to numbers
+ let nline = replace(line);
+ // println!("replaced:{}", nline);
+
+ // Read first int
+ for c in nline.chars() {
+ first = get_num(&c);
+ if first != 0 {
+ break
+ }
+ }
+
+ // Read the second int
+ let chars = nline.chars().rev();
+ for c in chars {
+ second = get_num(&c);
+ if second != 0 {
+ break
+ }
+ }
+
+ if first == 0 || second == 0 {
+ println!("{}:{}", first, second);
+ panic!();
+ }
+
+ let num = (first * 10) + second;
+ // println!("result:{}\n", num);
+ nums_vec.push(num);
+ }
+
+ // println!("{:?}", nums_vec);
+
+ let mut final_num = 0;
+ for num in nums_vec {
+ final_num += num
+ }
+
+ println!("{}", final_num);
+}
+
+fn replace(s: &str) -> String {
+ let wordmap: Vec<(&str, &str)> = vec![
+ ("one", "1"),
+ ("two", "2"),
+ ("three", "3"),
+ ("four", "4"),
+ ("five", "5"),
+ ("six", "6"),
+ ("seven", "7"),
+ ("eight", "8"),
+ ("nine", "9")
+ ];
+
+ // println!("{}", s);
+ let mut s = s.to_string().clone();
+
+ //first
+ let mut nstring = "".to_string();
+ let mut len = 0;
+ for _ in s.chars() {
+ len += 1;
+ }
+
+ 'main: for cidx in 0..len {
+ let temp = s.split_at(cidx);
+
+ // skip if a number is first
+ for c in temp.0.chars() {
+ if get_num(&c) > 0 {
+ break 'main
+ }
+ }
+
+ for word in &wordmap {
+ let replace = temp.0.replace(word.0, word.1);
+
+ if replace != temp.0 {
+ nstring = replace.to_string() + temp.1;
+ break 'main;
+ }
+ }
+ nstring = s.clone();
+ }
+ s = nstring.clone();
+
+ // println!("{}", s);
+
+ //second
+ let mut len = 0;
+ for _ in s.chars() {
+ len += 1;
+ }
+
+ 'main: for cidx in (0..len).rev() {
+ let temp = s.split_at(cidx);
+
+ for word in &wordmap {
+ let replace = temp.1.replace(word.0, word.1);
+
+ if replace != temp.1 {
+ nstring = temp.0.to_string() + &replace;
+ break 'main;
+ }
+ }
+ nstring = s.clone();
+ }
+
+ nstring
+}
+
+fn get_num(c: &char) -> u32 {
+ match c.to_digit(10) {
+ Some(n) => n,
+ None => 0,
+ }
+}