Compare commits
10 commits
0c9f8224ec
...
49311e3637
Author | SHA1 | Date | |
---|---|---|---|
49311e3637 | |||
716770ea20 | |||
386b296c47 | |||
94b3b3fd3b | |||
e0e68e5b6a | |||
db5983659f | |||
ac7a676033 | |||
1dc3707401 | |||
923cb07872 | |||
f07e8b1ea2 |
17 changed files with 562 additions and 7 deletions
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
.idea
|
||||||
|
target
|
||||||
|
l1.json
|
||||||
|
l2.json
|
||||||
|
list.txt
|
||||||
|
input.txt
|
|
@ -1,14 +1,14 @@
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let mut list1: Vec<i32> =
|
||||||
|
serde_json::from_reader(std::fs::File::open("l1.json").unwrap()).unwrap();
|
||||||
let mut list1: Vec<i32> = serde_json::from_reader(std::fs::File::open("l1.json").unwrap()).unwrap();
|
let mut list2: Vec<i32> =
|
||||||
let mut list2: Vec<i32> = serde_json::from_reader(std::fs::File::open("l2.json").unwrap()).unwrap();
|
serde_json::from_reader(std::fs::File::open("l2.json").unwrap()).unwrap();
|
||||||
|
|
||||||
list1.sort();
|
list1.sort();
|
||||||
list2.sort();
|
list2.sort();
|
||||||
|
|
||||||
if list1.len() != list2.len() {
|
if list1.len() != list2.len() {
|
||||||
panic!("your lists are fucked")
|
panic!("your lists are broken. The length is not equal.")
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut totaldiff: i64 = 0;
|
let mut totaldiff: i64 = 0;
|
||||||
|
@ -17,8 +17,7 @@ fn main() {
|
||||||
let int2 = list2[i];
|
let int2 = list2[i];
|
||||||
if int1 > int2 {
|
if int1 > int2 {
|
||||||
totaldiff += (int1 - int2) as i64;
|
totaldiff += (int1 - int2) as i64;
|
||||||
}
|
} else if int1 < int2 {
|
||||||
else if int1 < int2 {
|
|
||||||
totaldiff += (int2 - int1) as i64;
|
totaldiff += (int2 - int1) as i64;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
96
2024/day1/part2/Cargo.lock
generated
Normal file
96
2024/day1/part2/Cargo.lock
generated
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "part2"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.215"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.215"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.133"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"memchr",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.90"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
|
8
2024/day1/part2/Cargo.toml
Normal file
8
2024/day1/part2/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[package]
|
||||||
|
name = "part2"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
serde = "1.0.215"
|
||||||
|
serde_json = "1.0.133"
|
19
2024/day1/part2/src/main.rs
Normal file
19
2024/day1/part2/src/main.rs
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
fn main() {
|
||||||
|
let mut list1: Vec<i32> =
|
||||||
|
serde_json::from_reader(std::fs::File::open("l1.json").unwrap()).unwrap();
|
||||||
|
let mut list2: Vec<i32> =
|
||||||
|
serde_json::from_reader(std::fs::File::open("l2.json").unwrap()).unwrap();
|
||||||
|
|
||||||
|
let mut simScoreTotal: i64 = 0;
|
||||||
|
|
||||||
|
for i in &list1 {
|
||||||
|
let mut totalsRight: i32 = 0;
|
||||||
|
for j in &list2 {
|
||||||
|
if i == j {
|
||||||
|
totalsRight += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
simScoreTotal += (totalsRight * i) as i64;
|
||||||
|
}
|
||||||
|
println!("{simScoreTotal}")
|
||||||
|
}
|
7
2024/day2/part1/Cargo.lock
generated
Normal file
7
2024/day2/part1/Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "part1"
|
||||||
|
version = "0.1.0"
|
6
2024/day2/part1/Cargo.toml
Normal file
6
2024/day2/part1/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "part1"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
78
2024/day2/part1/src/main.rs
Normal file
78
2024/day2/part1/src/main.rs
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
use std::thread::current;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// read file input
|
||||||
|
let lines: Vec<String> = read_to_string("input.txt")
|
||||||
|
.unwrap()
|
||||||
|
.lines()
|
||||||
|
.map(String::from)
|
||||||
|
.collect();
|
||||||
|
// current safe total count
|
||||||
|
let mut safecount = 0;
|
||||||
|
// for each line
|
||||||
|
for i in lines {
|
||||||
|
println!("{i}");
|
||||||
|
// for each line, split into a Vec<String> of the values
|
||||||
|
let mut frfrstr: Vec<String> = i.split_whitespace().map(|s| s.parse().unwrap()).collect();
|
||||||
|
// convert that Vec<String> into Vec<Int>
|
||||||
|
let mut frfr: Vec<i64> = Vec::new();
|
||||||
|
for j1 in frfrstr {
|
||||||
|
let j2: i64 = j1.parse::<i64>().unwrap();
|
||||||
|
frfr.push(j2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each line, check if safe. Start false. If it ends up being fine then it'll be set to true.
|
||||||
|
let mut safemini = false;
|
||||||
|
|
||||||
|
// sorted regular and reverse to check condition 1
|
||||||
|
let mut sort1 = frfr.clone();
|
||||||
|
sort1.sort();
|
||||||
|
let mut sort2 = sort1.clone();
|
||||||
|
sort2.reverse();
|
||||||
|
if frfr == sort1 || frfr == sort2 {
|
||||||
|
let mut mode = 0;
|
||||||
|
let tempval0 = frfr[*&0];
|
||||||
|
let tempval1 = frfr[*&1];
|
||||||
|
if tempval0 < tempval1 {
|
||||||
|
println!("increasing mode");
|
||||||
|
mode = 1;
|
||||||
|
} else if tempval0 > tempval1 {
|
||||||
|
println!("decreasing mode");
|
||||||
|
mode = -1;
|
||||||
|
} else if tempval0 == tempval1 {
|
||||||
|
println!("its equal and so its discarded");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// condition 2 but only if cond 1 passes
|
||||||
|
// starts true, becomes invalid
|
||||||
|
let mut currentcheckstate = true;
|
||||||
|
'fr1: for i2 in 1..frfr.len() {
|
||||||
|
let realdiff = frfr[*&i2 - 1] - (frfr[*&i2]);
|
||||||
|
if mode == 1 {
|
||||||
|
if realdiff > -1 || realdiff < -3 {
|
||||||
|
println!("realdiff {realdiff} plus");
|
||||||
|
currentcheckstate = false;
|
||||||
|
println!("abs diff averted");
|
||||||
|
}
|
||||||
|
} else if mode == -1 {
|
||||||
|
if realdiff > 3 || realdiff < 1 {
|
||||||
|
println!("realdiff {realdiff} minus");
|
||||||
|
currentcheckstate = false;
|
||||||
|
println!("abs diff averted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if currentcheckstate {
|
||||||
|
safemini = true;
|
||||||
|
println!("allowed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if safemini {
|
||||||
|
safecount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{safecount}")
|
||||||
|
}
|
7
2024/day2/part2/Cargo.lock
generated
Normal file
7
2024/day2/part2/Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "part1"
|
||||||
|
version = "0.1.0"
|
6
2024/day2/part2/Cargo.toml
Normal file
6
2024/day2/part2/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "part1"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
84
2024/day2/part2/src/main.rs
Normal file
84
2024/day2/part2/src/main.rs
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
use std::thread::current;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// read file input
|
||||||
|
let lines: Vec<String> = read_to_string("input.txt")
|
||||||
|
.unwrap()
|
||||||
|
.lines()
|
||||||
|
.map(String::from)
|
||||||
|
.collect();
|
||||||
|
// current safe total count
|
||||||
|
let mut safecount = 0;
|
||||||
|
// for each line
|
||||||
|
for i in lines {
|
||||||
|
println!("{i}");
|
||||||
|
// for each line, split into a Vec<String> of the values
|
||||||
|
let mut frfrstr: Vec<String> = i.split_whitespace().map(|s| s.parse().unwrap()).collect();
|
||||||
|
// convert that Vec<String> into Vec<Int>
|
||||||
|
let mut frfrfr: Vec<i64> = Vec::new();
|
||||||
|
for j1 in frfrstr {
|
||||||
|
let j2: i64 = j1.parse::<i64>().unwrap();
|
||||||
|
frfrfr.push(j2);
|
||||||
|
}
|
||||||
|
// for each line, check if safe. Start false. If it ends up being fine then it'll be set to true.
|
||||||
|
let mut safemini = false;
|
||||||
|
|
||||||
|
for i in 0..frfrfr.len() {
|
||||||
|
let mut frfr: Vec<i64> = frfrfr.clone();
|
||||||
|
if i != frfr.len() {
|
||||||
|
frfr.remove(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sorted regular and reverse to check condition 1
|
||||||
|
let mut sort1 = frfr.clone();
|
||||||
|
sort1.sort();
|
||||||
|
let mut sort2 = sort1.clone();
|
||||||
|
sort2.reverse();
|
||||||
|
if frfr == sort1 || frfr == sort2 {
|
||||||
|
let mut mode = 0;
|
||||||
|
let tempval0 = frfr[*&0];
|
||||||
|
let tempval1 = frfr[*&1];
|
||||||
|
if tempval0 < tempval1 {
|
||||||
|
println!("increasing mode");
|
||||||
|
mode = 1;
|
||||||
|
} else if tempval0 > tempval1 {
|
||||||
|
println!("decreasing mode");
|
||||||
|
mode = -1;
|
||||||
|
} else if tempval0 == tempval1 {
|
||||||
|
println!("its equal and so its discarded");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// condition 2 but only if cond 1 passes
|
||||||
|
// starts true, becomes invalid
|
||||||
|
let mut currentcheckstate = true;
|
||||||
|
'fr1: for i2 in 1..frfr.len() {
|
||||||
|
let realdiff = frfr[*&i2 - 1] - (frfr[*&i2]);
|
||||||
|
if mode == 1 {
|
||||||
|
if realdiff > -1 || realdiff < -3 {
|
||||||
|
println!("realdiff {realdiff} plus");
|
||||||
|
currentcheckstate = false;
|
||||||
|
println!("abs diff averted");
|
||||||
|
}
|
||||||
|
} else if mode == -1 {
|
||||||
|
if realdiff > 3 || realdiff < 1 {
|
||||||
|
println!("realdiff {realdiff} minus");
|
||||||
|
currentcheckstate = false;
|
||||||
|
println!("abs diff averted");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if currentcheckstate {
|
||||||
|
safemini = true;
|
||||||
|
println!("allowed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if safemini {
|
||||||
|
safecount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{safecount}")
|
||||||
|
}
|
54
2024/day3/part1/Cargo.lock
generated
Normal file
54
2024/day3/part1/Cargo.lock
generated
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aho-corasick"
|
||||||
|
version = "1.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day3"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "1.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick",
|
||||||
|
"memchr",
|
||||||
|
"regex-automata",
|
||||||
|
"regex-syntax",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-automata"
|
||||||
|
version = "0.4.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick",
|
||||||
|
"memchr",
|
||||||
|
"regex-syntax",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-syntax"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
7
2024/day3/part1/Cargo.toml
Normal file
7
2024/day3/part1/Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[package]
|
||||||
|
name = "day3"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
regex = "1.11.1"
|
48
2024/day3/part1/src/main.rs
Normal file
48
2024/day3/part1/src/main.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
use regex::Regex;
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let lines: Vec<String> = read_to_string("input.txt")
|
||||||
|
.unwrap()
|
||||||
|
.lines()
|
||||||
|
.map(String::from)
|
||||||
|
.collect();
|
||||||
|
let pattern1 = Regex::new(r"mul\((\d+,\d+)\)").unwrap();
|
||||||
|
let pattern2 = Regex::new(r"mul\((\d+)\,(\d+)\)").unwrap();
|
||||||
|
|
||||||
|
let mut finalvec1 = mul_parse(lines, pattern1);
|
||||||
|
let finalint = mul_process(finalvec1,pattern2);
|
||||||
|
println!("{:?}",finalint)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn mul_parse(thelines: Vec<String>, pattern: Regex) -> Vec<String>{
|
||||||
|
let mut mulvec: Vec<String> = Vec::new();
|
||||||
|
for i in thelines {
|
||||||
|
let tempvec: Vec<String> =
|
||||||
|
pattern.find_iter(&i)
|
||||||
|
.filter_map(|fr| fr.as_str().parse::<String>().ok()).collect();
|
||||||
|
|
||||||
|
for i2 in tempvec {
|
||||||
|
mulvec.push(i2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
mulvec
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mul_process(mulvec: Vec<String>, pattern: Regex) -> i64 {
|
||||||
|
let mut mulint: i64 = 0;
|
||||||
|
for i in mulvec {
|
||||||
|
let captures = pattern.captures(&i).unwrap();
|
||||||
|
let capture1 = captures.get(1).unwrap().as_str().parse::<i32>().unwrap();
|
||||||
|
|
||||||
|
let capture2 = captures.get(2).unwrap().as_str().parse::<i32>().unwrap();
|
||||||
|
mulint += (capture1 * capture2) as i64;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mulint
|
||||||
|
|
||||||
|
}
|
54
2024/day3/part2/Cargo.lock
generated
Normal file
54
2024/day3/part2/Cargo.lock
generated
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aho-corasick"
|
||||||
|
version = "1.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day3"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"regex",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memchr"
|
||||||
|
version = "2.7.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "1.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick",
|
||||||
|
"memchr",
|
||||||
|
"regex-automata",
|
||||||
|
"regex-syntax",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-automata"
|
||||||
|
version = "0.4.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick",
|
||||||
|
"memchr",
|
||||||
|
"regex-syntax",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-syntax"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
7
2024/day3/part2/Cargo.toml
Normal file
7
2024/day3/part2/Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[package]
|
||||||
|
name = "day3"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
regex = "1.11.1"
|
69
2024/day3/part2/src/main.rs
Normal file
69
2024/day3/part2/src/main.rs
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
use regex::Regex;
|
||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let lines: Vec<String> = read_to_string("input.txt")
|
||||||
|
.unwrap()
|
||||||
|
.lines()
|
||||||
|
.map(String::from)
|
||||||
|
.collect();
|
||||||
|
let pattern1 = Regex::new(r"(mul\((\d+)\,(\d+)\))|(do\(\))|(don\'t\(\))").unwrap();
|
||||||
|
let finalvec1 = mul_parse(lines, pattern1.clone());
|
||||||
|
let finalint = mul_process(finalvec1,pattern1.clone());
|
||||||
|
// println!("{:?}",finalint)
|
||||||
|
println!("{finalint}")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn mul_parse(thelines: Vec<String>, pattern: Regex) -> Vec<String>{
|
||||||
|
let mut mulvec: Vec<String> = Vec::new();
|
||||||
|
for i in thelines {
|
||||||
|
let tempvec: Vec<String> =
|
||||||
|
pattern.find_iter(&i)
|
||||||
|
.filter_map(|fr| fr.as_str().parse::<String>().ok()).collect();
|
||||||
|
|
||||||
|
for i2 in tempvec {
|
||||||
|
mulvec.push(i2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
println!("mulvec is {:?}",mulvec);
|
||||||
|
mulvec
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mul_process(mulvec: Vec<String>, pattern: Regex) -> i64 {
|
||||||
|
let mut enabled = true;
|
||||||
|
let mut mulint: i64 = 0;
|
||||||
|
let matchmul = Regex::new(r"mul\((\d+)\,(\d+)\)").unwrap();
|
||||||
|
let matchdo = Regex::new(r"do\(\)").unwrap();
|
||||||
|
let matchdont = Regex::new(r"don\'t\(\)").unwrap();
|
||||||
|
for i in mulvec {
|
||||||
|
if let Some(t) = matchdo.find(&i) {
|
||||||
|
println!("matchdo");
|
||||||
|
enabled = true;
|
||||||
|
}
|
||||||
|
else if let Some(t) = matchdont.find(&i) {
|
||||||
|
println!("matchdont");
|
||||||
|
enabled = false;
|
||||||
|
}
|
||||||
|
else if let Some(t) = matchmul.find(&i) {
|
||||||
|
if enabled {
|
||||||
|
println!("matchmul");
|
||||||
|
let captures = pattern.captures(&i).unwrap();
|
||||||
|
let capture1 = captures.get(2).unwrap().as_str().parse::<i32>().unwrap();
|
||||||
|
let capture2 = captures.get(3).unwrap().as_str().parse::<i32>().unwrap();
|
||||||
|
mulint += (capture1 * capture2) as i64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mulint
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue