commit 1a4dc10972eae693fdce4c9464eeea1e52f2b876 parent 6a1814ede3084bebd115916cdda6ea163c960198 Author: Shimmy Xu <shimmy.xu@shimmy1996.com> Date: Sun, 8 Dec 2019 09:18:14 -0500 Add Rust solution for day 08 Diffstat:
A | day-08/Makefile | | | 9 | +++++++++ |
A | day-08/day-08.rs | | | 64 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | day-08/input.txt | | | 1 | + |
3 files changed, 74 insertions(+), 0 deletions(-) diff --git a/day-08/Makefile b/day-08/Makefile @@ -0,0 +1,9 @@ +CC := g++ +CCFLAGS := --std=c++17 -Wall + +all: day-08-rust day-08.jl + julia day-08.jl + ./day-08-rust + +day-08-rust: day-08.rs + rustc $^ -o $@ diff --git a/day-08/day-08.rs b/day-08/day-08.rs @@ -0,0 +1,64 @@ +fn main() { + let input = std::fs::read_to_string("input.txt") + .unwrap() + .trim() + .chars() + .map(|op| op.to_digit(10).unwrap() as usize) + .collect::<Vec<usize>>(); + println!("Rust:"); + println!("Part 1: {}", part_1(&input)); + println!("Part 2: "); + part_2(&input); +} + +fn part_1(input: &Vec<usize>) -> usize { + let width = 25; + let height = 6; + let num_layer = input.len() / (width * height); + let mut num_0 = vec![0; num_layer]; + let mut num_1 = vec![0; num_layer]; + let mut num_2 = vec![0; num_layer]; + + input.iter().enumerate().for_each(|(i, val)| { + let layer = i / (width * height); + match val { + 0 => num_0[layer] += 1, + 1 => num_1[layer] += 1, + 2 => num_2[layer] += 1, + _ => unreachable!(), + } + }); + + let min_0_layer = num_0 + .iter() + .enumerate() + .min_by_key(|&(_, value)| value) + .unwrap() + .0; + + num_1[min_0_layer] * num_2[min_0_layer] +} + +fn part_2(input: &Vec<usize>) { + let width = 25; + let height = 6; + let num_layer = input.len() / (width * height); + let mut image = vec![2; width * height]; + + for i in 0..image.len() { + // Find first non-transparent cell. + let mut layer = 0; + while image[i] == 2 && layer < num_layer { + image[i] = input[layer * width * height + i]; + layer += 1; + } + } + + image.chunks_exact(width).for_each(|line| { + line.iter().for_each(|x| match x { + 1 => print!("██"), + _ => print!(" "), + }); + println!(""); + }); +} diff --git a/day-08/input.txt b/day-08/input.txt @@ -0,0 +1 @@ +122221222222220212122210222222220222222022222122222001211222102222122222222222222222222222222022222222222122202022222222222222120222222222222222220222022220222222222202122222022222221222222022222222222100211222222122222222222222222222222222222122222222222222212022222222222222221222222222222222220222122222222222222212022201022222220222222022222022222000200222212122122222220222222022222222222022222222022122222222222222222222121222222222222222220222122221222222220212122210222222221222222122220122222221201222202022022222222222222022222222222122222222122122202222222222222222221222222222222222222222022221222222222222222222022222222222222022221022222100220222012022122222222222222222222222222222222222122222222222222222222222022222222222222222222222022222222222220212022210022222221222222022220022222121202222112122020222222222222222022222222222222222022122212222222222222222220222222222222222222222122221222222222212122200022222221222222022220022222020220222112222020222220222222022122222222022222222222022222222222222222222220222222222222222220222222220222222222222222221022222221222222122221122222211202222212022022222221222222122222222222222222222122022202122222222222222120222222222222222222222022220222222220202222222022222220222222122221222222201201222112222221222220222222022022222222022222222122222212222222222222222020222222222222222220222222222222222220202122201122222221222222222221122222222220222202022021222222222222022022222222022222222222120202122222222222222220222222222222222220222022221222222221212122201222222221222222122222222222222220222212022222222221222222222022222222102222222222022222022222222222222221222222222222222220222022221222222221222122210122222221222222122220022222000212222202122122222221222222122022222222122222222222122222122222222222022221222222222222222221222222220222222221212022210222222222222222222220022222112200222122221122222222222222222222222222222222222122020212122222222222222022222222222222222222222022220222222220212222202022222221222222122220022202002210222012120121222222222222122222222222002222222222120202222222222222122122222222222222222222222122222212222220222202220022222221222222222222222102202221222122220222222220222222222122222222112222222222020222022222222222022121222222222222222221222222220222222222202012211122222220222222122222222102121211222202220022222220222222022122222222202222222022020222222222222222222122222222222222222221222122220212222221202022212122222220222222122222122212100212222222220020222222222222022022222222012222222022122222222222222222022021222222222222222222222222221222222221202122220222222220222222022220002222120212222102220122222222222222222222222222112222222022121222122222222222022220222222222222222220222022220222222220202102202222222222222222222220122012211220222120020222222220222222222022212222212222222022022222122222222222222022222222222222222222222122221212222222212212210122222220222222122222212112220201222102120122222222222222022022222222022222222022022222022222222222022220222222222222222221222222222222222222222012202222022220222222222222112202202210222211221122222222222222122122202222122222222022222212122222222222222222222222222222222220222022222212222220222112221022122221222222022220212022200200222110020122222220222222222222222222222222222122020202022222222222222221222222222222222220222022220212222222212102212022222222222222122221012002101210222211222120222222222222222122222222002222222022021202122222222222222220222222222222222220222022222202222220202002221122122221222222222222202102220220222022221020222220222222022122222222022222222122222202222222222222022021222222222222220222222122220202222221212122220022222221222022222221102222110211222121221122222221222222122022212222002222222022220212222222222222022021221222222222020221222222220222222220202112212022222221222022222220122212111212222221122022222222222222222122202222222222222122121202122222222222022121220222222222120221222222220202222221222112201022122220222122022221012002211212222101220221222221222222122022212222021222222122020212022222222222122021222222222222121221222022220212222220202122202022122222222122122221212212211211222111222221220222222222022122222222201222222122222202222222222222022121222222222222220221222022220222222221222112212022022220222122122220202102221212222001020020220220222222222022202222122222222222120202222222222222122021222222222222020221222222220212222221212112122122222220222022122222212122112210202200121122220222222222122022202222101220222122220202222222222122222022221122222222121220022122221212222220202002120122020222222022212220122022221220202201020121221222222222222122212222001221222222022202122222222222122120221122222222021221122022221212222222222022111222222222222022012222222222121202222000122222221222222222022222222222021221222122122222022222222222122220220122222222022221022122202212222222212002121122222122222022112220122222211222212012122220222222222222022022202222002222022022022222222222222222122120222222222222020222222122211222222221212002221022222120222222102221222202221222202022120221221220122222122222202222001220122122222202122222222122022021220122222222020220022022222222222220222102022122120120222222022222022012101202212022022020222222222222022122212222211220022022122212122222222122122022221222222222121222222222200212222222212202222222121121222122222220202212102211222110221122221221122222222222202222122221222122221202222222222122022121220022222222220222222122210202222220212002022122021220222122122221012022112220202010022121222220222122022022212222122222222122120212222222222222022221222122222222020222222022210212222222202212212022222221222022002222002022202211212122021122222222022122222222212222022221222222021222022222222222122221220222222222020221222022211202222222222222221022121122222122012221122122222220202012222120221020122122122222222222010220222022021222122222222122022020222122222222121222022222212222222222212112202122021220222022222221102022122222202211121121221020022022222122222222102220022122221222222222222022122120220022222222020222022022212212222222202202020122122122222022112220022102110212222121222120220122122122122122212202122220122022001212121222222222122222222022222222022222122022222202222220202202111222020222222222022221002012010201222011021222221120222122122122202212220221222222120202122222222122022022220022222222222222122122222202222221222002112022222121222222202220112212212212202000222222222122022022122222222202020221022122110202022222222222022020221122222222222222222022211212222220202102211022221222222022202221022002122221212111222021221221222022122222212202022222022222202222220222222222022221222122222222020220222122220222222221212112000222020220222122112220002212211201202011122220221021022022122222210202122222222022202222122222222222222221220222222222020221122122210202222220202002221222120121222222212221022102001222222020122021220122222222222022221222000222222022222202220222222022122221221022222222220222122022201212222221202112221122220022222022102220222002010202222011021022220121222122222222201222000222022022210202022222222022222221221222222222120221122122210222222220202012220222222122222222012222222112200200202110022021220120122222122022211202220222022122220212222222220022122122221222222222122221122122211202222221202222122022020222222222212221212002211200212110222022222020022222122122202222002222022022112212122222222022122021220222222222020222122222220202222221202212020022020122222222112220102102210211202100021020221121002022022022202222201220222022002202221222221122022020220222222222121220222122201202222222212002220222021220222022102220122122101200222200021121221022112022222122201222202222122122101202021222221022022022220022222222120221222222200202222220122212121022021221222022202222122002211221202220021220220122012022122122202212000221022120210202022222220022122021220222222222022222122122220202222222202022201112120020222122122222112022002200212001122121220222012122022222212202121210222121222222020222221222022221220022222222122221222022211220222220102022120112212221222222002220102102121211202220121020220222222022022222222222211212122120010202121222221022122221222122222222021221022022202210222222022222202222012122222122020222212112001200222110222020220020112122222122201202001211122221110202120222221022222021222022222222121222022122211210222221012222112012121021222222121222112212110210212210220020222220212122022222212202020222022020210202021222220122022222222022222222220221222022100200222221002022020002111021222122100220012212222222202000001212222121222122022222221212012201222021222202121222221122022121222222222222022220122022122202222222122221210212002222222022011222212002110200202100202220221122112122222122221212122202222020222222020222221120022021221122222222120221022122200210222221102202001122021021222222102222102012112222212220120000221022112122222022211212001211022022200212020222220222222220221222222222120220222022012212222220111100211002221020222122000221012102000210202111111202220121012022122022200212112221022220212202022222222020122121220022222222220221122222220202222221121120102012120121222022222201122102012202212102120111221120112222022122222222112201022022120201020222221222222222222222222222221221122022111222222221201222110212020121222122011221212222211211222002120200220221122122122022202222200221022121222222120222221021022121220122222222120221022122111222222222120110021102100222222022210201022112002200222211021201220022212122222122221212020201222121121221021222222122122022222222222222222222222222201211222220012112111012102121222022022222012202200201212211022021220022212022022022200212002211122022110212202222222020022020221122222222222222022022021212222221212022110212211220222222220221012122100202222002121011220022222222022022222202200220222122121221222222220022022022221022222222222222222022201221222221020200110112210122222022002200012012101202202120112101220020012122202222212202221211122221200211011222221220220220222122222222120222022122201221222220110012122220120021222122012202012022102210212100000001220021212222202222201212121211222220101220111222222221122021220222222222120221022222212212222222211122010221000120222022011212002222121222222111021011020010002002102022210222200210122022221200222222220020121221220222222222022221022122111211222221022202120122212122222022201200212202012220222111012010212202122012201022222222100212122222202210012222220020122021221122222222021221222022102200222220102000212222121222222022201221102102211220212022220011221111002002121022200202010211122122012211012222222121121222221122222222122220022222212200222220110022202022202122222122202201112222111200202101101122020120012012011122200212112221022020001210202222220021120120220122222222222222222022111221212221120222022202102022202222212211002212012222222222212022122000222202200222212212222200222122220200210222220220222122221122222222222222122022221211202220120010022011011120212122220211000202012202220200121110211011122012221022210222112200222021200221120222220121220021222122222222221221122022121221212221220010210220102120212122022221000222112200220110221100012121222012111222200202101200222221112201001222222120222120222122222222021222022222121211212221211111121101010221202222002201111212222220211220000002210111110012002222210212212221022122010212221212221121022221221022222222021220022122101222212222211220010020110120102122010211011022212210101120012012212002020212020222201202001210022121101200010222020221021222222122222221021222022122011210222222211210021122120021202122111211120202220212202202000111201021100002010222010202002210122222020222202202221122222222222022222220121221022122011211222222002102120001200020112022012202020222210210012100200121020012020012222122020202022220022221200200211222020222221121220222222220022221022022022212202221121010220102211020222122110221210211012202110100102012122021221112112022000202011200122222001202122202220222021122221022222222221220122122202211220221102111110010011222002222122212211111111222221110000012111210222002200122021202201221022021122221011212021120101021220122222220020222122222121211211221022021101112021122212222101201210120210212000110001222222120101222111222200222110210222221212202020212122021222021222022222221221221022022112210212220010001021111102221002122222201202120220200011001002112012112211012002022110222002202122120212210111222221220021021220222222222121220022022021211202220200110122000100021112022012211210202122202021210001100020100222112120222000202010202222021002221120222222021220022221222222022021220122122102212211220112002001110210120112021220210020011210210112001012021200112100222101222012222002221122222211221000202222120201021221022222020120222022022211210200220200201210000012222112222021210002111211202200122010210120010010112210222000212021222222220220210111222022222010222220122222020221222222022022222221222111112121001110120102122010211120202222220010122001221222220212122201222110222102222122222000202211212022220021121222222222121121221022122221201211222120201220211221222122222212200102012022220221200110011122122100002020122200222101201122122112210122202221021022121220122222022222221022122101211221220220201210100011021012221210210001100212202120002002101201002110202022122021212110212122220101220200212121122111022222122222121022220122022021211222221220020211101220021222222122202110102220222012020212010002211011211101022100222220202122022021201121212122021112022220222222222021220222222011220220221012110001120120020012200202201102111022211001220110011202120222121011122120212210212222020002211121202222221000020220222212021020222222122012222220222001112200101112022222012021210022112011221012011221120102101202202122222022212002222222121102220212202122221210120221222222120221221222022012201201221111111022201021222102110111202000112202211021111202101220111221102012122221212010222022222020222221212220220221022221222202221120221122202011212211020122112111212221122022210112210222210111010010110202100112022111111000122101202120222022021100220010222020221201222221022222221220222022202222222002022001101101220220020112102202200220111212201122001222100011112000201101022011202121210122120122212221202022221001022220222202220222221222012010222102121100021120110020222122020200210210221222002002212101202101200021102112022200122011201122222111212101012122220000222222122202120121220222212021202221222112122222020002020202221122212221020122100111110221011010222020201210022122022111201122222021222010222122020001020221122202221220222222222221220121021020112010011001022022220211200121022202011100211120111011120020001021122202222112210222221110222000122020221011020221002222022122222122212101201101121012020212012112021022121000222211102202010202102112100210101010222201222011212102200120121221201100012122122121120210202202001121221122002102102021121200211200211102120012211020212122010210112222000222101012221202021100022222112021201122120110201200212121122110222210112212221020221222020020012111011002000110000122202001211222020002120220121221121212021112220201100201110121000002121111010012122221200001101102211002010021122102011200