aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2019-12-08 10:39:10 +0100
committerReiner Herrmann <reiner@reiner-h.de>2019-12-08 10:39:10 +0100
commit4b2db1e29345fcd722bcdc266d06acade53445fc (patch)
tree901fb48236fd37e39e66a91bcd2895985cb30412 /src
parent066ed71771d1c025aee797513f91fe414f9aeb78 (diff)
day8
Diffstat (limited to 'src')
-rw-r--r--src/main.rs48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs
index 087cb7c..53060ce 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -575,8 +575,54 @@ fn day7() {
println!("7b: {}", max_thruster_signal_feedback(&program));
}
+fn day8() {
+ let input = read_file("input8");
+ let input = input.trim_end();
+ let pixels : Vec<u32> = input.chars()
+ .map(|x| x.to_digit(10).unwrap())
+ .collect();
+
+ const WIDTH : usize = 25;
+ const HEIGHT : usize = 6;
+
+ let mut lowest = (i32::max_value(), 0);
+ let mut image = [2; WIDTH * HEIGHT];
+ for layer in pixels.chunks(WIDTH * HEIGHT) {
+ let mut digits = HashMap::new();
+ for i in 0..layer.len() {
+ let pixel = layer[i];
+ let count = digits.entry(pixel).or_insert(0);
+ *count += 1;
+ if image[i] == 2 {
+ image[i] = pixel;
+ }
+ }
+ let count0 = *digits.entry(0).or_insert(0);
+ let count1 = *digits.entry(1).or_insert(0);
+ let count2 = *digits.entry(2).or_insert(0);
+ if count0 < lowest.0 {
+ lowest.0 = count0;
+ lowest.1 = count1 * count2;
+ }
+ }
+
+ println!("8a: {}", lowest.1);
+
+ println!("8b:");
+ for row in image.chunks(WIDTH) {
+ for pixel in row {
+ match pixel {
+ 0 => print!("#"),
+ 1 => print!(" "),
+ _ => panic!("invalid pixel"),
+ };
+ }
+ println!();
+ }
+}
+
fn main() {
- day7();
+ day8();
}
#[cfg(test)]