aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-16 04:01:30 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-16 04:01:30 +0100
commitb2c6978311010cd522d2680e7078e496fab28744 (patch)
treeeda3e3ca790d481a53531ef4210ad60e23aea8c1 /src
parent7769eb17b7d9c0ed4fd28a26f485a76da46b5a5d (diff)
day15
Diffstat (limited to 'src')
-rw-r--r--src/day14pt2.rs1
-rw-r--r--src/day15pt1.rs21
-rw-r--r--src/day15pt2.rs68
-rw-r--r--src/main.rs8
4 files changed, 93 insertions, 5 deletions
diff --git a/src/day14pt2.rs b/src/day14pt2.rs
index a5d5bed..04db818 100644
--- a/src/day14pt2.rs
+++ b/src/day14pt2.rs
@@ -111,7 +111,6 @@ pub fn main() {
.map(|s| s.chars().collect::<Vec<char>>())
.collect::<Vec<Vec<char>>>();
-
let mut a = vec![];
for i in 0..1000 {
cycle(&mut input);
diff --git a/src/day15pt1.rs b/src/day15pt1.rs
new file mode 100644
index 0000000..ff76f54
--- /dev/null
+++ b/src/day15pt1.rs
@@ -0,0 +1,21 @@
+fn hash(s: String) -> u64 {
+ let mut sum: u64 = 0;
+ for c in s.chars() {
+ sum += c as u64;
+ sum *= 17;
+ sum %= 256;
+ }
+ return sum;
+}
+
+pub fn main() {
+ let txt = std::fs::read_to_string("./input/day15.txt").unwrap();
+
+ let mut sum: u64 = 0;
+ let input = txt.trim().split(",");
+ for s in input {
+ sum += hash(s.to_string());
+ }
+
+ println!("{}", sum);
+}
diff --git a/src/day15pt2.rs b/src/day15pt2.rs
new file mode 100644
index 0000000..6f9e53c
--- /dev/null
+++ b/src/day15pt2.rs
@@ -0,0 +1,68 @@
+fn hash(s: String) -> u64 {
+ let mut sum: u64 = 0;
+ for c in s.chars() {
+ sum += c as u64;
+ sum *= 17;
+ sum %= 256;
+ }
+ return sum;
+}
+
+pub fn main() {
+ let txt = std::fs::read_to_string("./input/day15.txt").unwrap();
+
+ let input = txt.trim().split(",");
+ let mut boxes: [Vec<&str>; 256] = vec![Vec::new(); 256].try_into().expect("static");
+
+ for s in input {
+ let fp;
+ if s.chars().last().unwrap() == '-' {
+ fp = s.split("-").collect::<Vec<_>>();
+ } else {
+ fp = s.split("=").collect::<Vec<_>>();
+ }
+
+ let box_ind = hash(fp[0].to_string()) as usize;
+
+ if fp[1].len() != 0 {
+ // dodaj
+ let mut ind = true;
+ for el in boxes[box_ind].iter_mut() {
+ if el.split("=").collect::<Vec<_>>()[0] == fp[0] {
+ *el = s;
+ ind = false;
+ break;
+ }
+ }
+ if ind {
+ boxes[box_ind].push(s);
+ }
+ } else {
+ // obrisi
+ let mut x = -1;
+ for i in 0..boxes[box_ind].len() {
+ if boxes[box_ind][i].split("=").collect::<Vec<_>>()[0] == fp[0] {
+ x = i as isize;
+ break;
+ }
+ }
+ if x != -1 {
+ boxes[box_ind].remove(x as usize);
+ }
+ }
+ }
+
+ let mut sum: u64 = 0;
+
+ for (i, b) in (&boxes).iter().enumerate() {
+ for (j, l) in b.iter().enumerate() {
+ sum += (i + 1) as u64
+ * (j + 1) as u64
+ * (l.split("=").collect::<Vec<_>>()[1])
+ .parse::<u64>()
+ .unwrap();
+ }
+ }
+
+ println!("{}", sum);
+}
diff --git a/src/main.rs b/src/main.rs
index ed80bc3..f3c0d0b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,7 @@
-mod day14pt1;
-mod day14pt2;
+mod day15pt1;
+mod day15pt2;
fn main() {
- day14pt1::main();
- day14pt2::main();
+ day15pt1::main();
+ day15pt2::main();
}