summaryrefslogtreecommitdiff
path: root/d08
diff options
context:
space:
mode:
Diffstat (limited to 'd08')
-rw-r--r--d08/Cargo.toml6
-rw-r--r--d08/input.txt162
-rw-r--r--d08/src/main.rs78
3 files changed, 246 insertions, 0 deletions
diff --git a/d08/Cargo.toml b/d08/Cargo.toml
new file mode 100644
index 0000000..fbd4f83
--- /dev/null
+++ b/d08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "d08"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/d08/input.txt b/d08/input.txt
new file mode 100644
index 0000000..6085312
--- /dev/null
+++ b/d08/input.txt
@@ -0,0 +1,162 @@
+rect 1x1
+rotate row y=0 by 6
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 4
+rect 2x1
+rotate row y=0 by 5
+rect 2x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 5
+rect 4x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 6
+rect 4x1
+rotate row y=0 by 4
+rotate column x=0 by 1
+rect 3x1
+rotate row y=0 by 6
+rotate column x=0 by 1
+rect 4x1
+rotate column x=10 by 1
+rotate row y=2 by 16
+rotate row y=0 by 8
+rotate column x=5 by 1
+rotate column x=0 by 1
+rect 7x1
+rotate column x=37 by 1
+rotate column x=21 by 2
+rotate column x=15 by 1
+rotate column x=11 by 2
+rotate row y=2 by 39
+rotate row y=0 by 36
+rotate column x=33 by 2
+rotate column x=32 by 1
+rotate column x=28 by 2
+rotate column x=27 by 1
+rotate column x=25 by 1
+rotate column x=22 by 1
+rotate column x=21 by 2
+rotate column x=20 by 3
+rotate column x=18 by 1
+rotate column x=15 by 2
+rotate column x=12 by 1
+rotate column x=10 by 1
+rotate column x=6 by 2
+rotate column x=5 by 1
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 35x1
+rotate column x=45 by 1
+rotate row y=1 by 28
+rotate column x=38 by 2
+rotate column x=33 by 1
+rotate column x=28 by 1
+rotate column x=23 by 1
+rotate column x=18 by 1
+rotate column x=13 by 2
+rotate column x=8 by 1
+rotate column x=3 by 1
+rotate row y=3 by 2
+rotate row y=2 by 2
+rotate row y=1 by 5
+rotate row y=0 by 1
+rect 1x5
+rotate column x=43 by 1
+rotate column x=31 by 1
+rotate row y=4 by 35
+rotate row y=3 by 20
+rotate row y=1 by 27
+rotate row y=0 by 20
+rotate column x=17 by 1
+rotate column x=15 by 1
+rotate column x=12 by 1
+rotate column x=11 by 2
+rotate column x=10 by 1
+rotate column x=8 by 1
+rotate column x=7 by 1
+rotate column x=5 by 1
+rotate column x=3 by 2
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 19x1
+rotate column x=20 by 3
+rotate column x=14 by 1
+rotate column x=9 by 1
+rotate row y=4 by 15
+rotate row y=3 by 13
+rotate row y=2 by 15
+rotate row y=1 by 18
+rotate row y=0 by 15
+rotate column x=13 by 1
+rotate column x=12 by 1
+rotate column x=11 by 3
+rotate column x=10 by 1
+rotate column x=8 by 1
+rotate column x=7 by 1
+rotate column x=6 by 1
+rotate column x=5 by 1
+rotate column x=3 by 2
+rotate column x=2 by 1
+rotate column x=1 by 1
+rotate column x=0 by 1
+rect 14x1
+rotate row y=3 by 47
+rotate column x=19 by 3
+rotate column x=9 by 3
+rotate column x=4 by 3
+rotate row y=5 by 5
+rotate row y=4 by 5
+rotate row y=3 by 8
+rotate row y=1 by 5
+rotate column x=3 by 2
+rotate column x=2 by 3
+rotate column x=1 by 2
+rotate column x=0 by 2
+rect 4x2
+rotate column x=35 by 5
+rotate column x=20 by 3
+rotate column x=10 by 5
+rotate column x=3 by 2
+rotate row y=5 by 20
+rotate row y=3 by 30
+rotate row y=2 by 45
+rotate row y=1 by 30
+rotate column x=48 by 5
+rotate column x=47 by 5
+rotate column x=46 by 3
+rotate column x=45 by 4
+rotate column x=43 by 5
+rotate column x=42 by 5
+rotate column x=41 by 5
+rotate column x=38 by 1
+rotate column x=37 by 5
+rotate column x=36 by 5
+rotate column x=35 by 1
+rotate column x=33 by 1
+rotate column x=32 by 5
+rotate column x=31 by 5
+rotate column x=28 by 5
+rotate column x=27 by 5
+rotate column x=26 by 5
+rotate column x=17 by 5
+rotate column x=16 by 5
+rotate column x=15 by 4
+rotate column x=13 by 1
+rotate column x=12 by 5
+rotate column x=11 by 5
+rotate column x=10 by 1
+rotate column x=8 by 1
+rotate column x=2 by 5
+rotate column x=1 by 5
diff --git a/d08/src/main.rs b/d08/src/main.rs
new file mode 100644
index 0000000..cbdd1fd
--- /dev/null
+++ b/d08/src/main.rs
@@ -0,0 +1,78 @@
+use std::fs;
+
+fn solve_puzzle(lines: &Vec<&str>) -> [[bool; 6]; 50] {
+ let mut pixels = [[false; 6]; 50];
+
+ for line in lines {
+ let words: Vec<&str> = line.split_ascii_whitespace().collect();
+ if words[0] == "rect" {
+ // Read operation parameters
+ let wxh: Vec<&str> = words[1].split('x').collect();
+ let w: usize = wxh[0].parse().unwrap();
+ let h: usize = wxh[1].parse().unwrap();
+
+ // Apply operation to state
+ for x in 0..w {
+ for y in 0..h {
+ pixels[x][y] = true;
+ }
+ }
+ } else if words[0] == "rotate" && words[1] == "row" {
+ // Read operation parameters
+ let which: Vec<&str> = words[2].split('=').collect();
+ let y: usize = which[1].parse().unwrap();
+ let n: usize = words[4].parse().unwrap();
+
+ // Apply operation to state
+ let mut old = Vec::new();
+ for x in 0..50 {
+ old.push(pixels[x][y]);
+ }
+ for x in 0..50 {
+ pixels[x][y] = old[(x + 50 - n) % 50];
+ }
+ } else if words[0] == "rotate" && words[1] == "column" {
+ // Read operation parameters
+ let which: Vec<&str> = words[2].split('=').collect();
+ let x: usize = which[1].parse().unwrap();
+ let n: usize = words[4].parse().unwrap();
+
+ // Apply operation to state
+ let old = pixels[x];
+ for y in 0..6 {
+ pixels[x][y] = old[(y + 6 - n) % 6];
+ }
+ }
+ }
+
+ pixels
+}
+
+fn main() {
+ let input = fs::read_to_string("input.txt").unwrap();
+ let lines = input.lines().collect();
+
+ let pixels = solve_puzzle(&lines);
+
+ // Part 2 must be read by eye, gives "UPOJFLBCEZ" for me
+ println!("Part 2 solution:");
+ let mut total = 0;
+ for y in 0..6 {
+ print!("\t");
+ for x in 0..50 {
+ print!(
+ "{}",
+ if pixels[x][y] {
+ total += 1;
+ '#'
+ } else {
+ ' '
+ }
+ );
+ }
+ print!("\n");
+ }
+
+ // Part 1 gives 116 for me
+ println!("Part 1 solution: {}", total);
+}