diff --git a/days/08.go b/days/08.go new file mode 100644 index 0000000..7e6ba80 --- /dev/null +++ b/days/08.go @@ -0,0 +1,102 @@ +package days + +import ( + "fmt" + "math" + "strings" + + "parnic.com/aoc2019/utilities" +) + +type Day08 struct { + img [][]int +} + +const ( + imgWidth = 25 + imgHeight = 6 +) + +func (d *Day08) Parse() { + contents := utilities.GetStringContents("08p") + imgSize := imgWidth * imgHeight + layers := len(contents) / imgSize + d.img = make([][]int, layers) + for layer := 0; layer < layers; layer++ { + d.img[layer] = make([]int, imgSize) + for i := 0; i < imgSize; i++ { + d.img[layer][i] = int(contents[(layer*imgSize)+i] - '0') + } + } +} + +func (d Day08) Num() int { + return 8 +} + +func (d *Day08) Part1() string { + fewestZeroes := math.MaxInt + var layerFewestZeroes int + for layer := range d.img { + zeroes := 0 + for i := range d.img[layer] { + if d.img[layer][i] == 0 { + zeroes++ + } + } + + if zeroes < fewestZeroes { + fewestZeroes = zeroes + layerFewestZeroes = layer + } + } + + numOne := 0 + numTwo := 0 + for i := range d.img[layerFewestZeroes] { + if d.img[layerFewestZeroes][i] == 1 { + numOne++ + } else if d.img[layerFewestZeroes][i] == 2 { + numTwo++ + } + } + + return fmt.Sprintf("Fewest zeroes on layer %d, #1s * #2s = %d * %d = %s%d%s", + layerFewestZeroes, + numOne, + numTwo, + utilities.TextBold, + numOne*numTwo, + utilities.TextReset, + ) +} + +func (d *Day08) Part2() string { + imgSize := imgWidth * imgHeight + finalImg := make([]int, imgSize) + for i := 0; i < imgSize; i++ { + for layer := 0; layer < len(d.img); layer++ { + if d.img[layer][i] != 2 { + finalImg[i] = d.img[layer][i] + break + } + } + } + + outStr := strings.Builder{} + outStr.WriteString("Message received:\n") + outStr.WriteString(utilities.TextBold) + for y := 0; y < imgHeight; y++ { + for x := 0; x < imgWidth; x++ { + if finalImg[(y*imgWidth)+x] == 0 { + outStr.WriteRune(' ') + } else { + outStr.WriteRune('█') + } + } + outStr.WriteRune('\n') + } + outStr.WriteString(utilities.TextReset) + + return outStr.String() +} diff --git a/inputs/08p.txt b/inputs/08p.txt new file mode 100644 index 0000000..1e1b9af --- /dev/null +++ b/inputs/08p.txt @@ -0,0 +1 @@ +102222122222222022202222020222220222222220222222221222212202220222222222222222222202222202202222000022220122221222222222222222222222222222222210222222022222222222222122222222122222222222222222222222221222212212220222222222222222022202222212212222012122220122222222222222222222222222222222222220222222012222222222222022222222120222222222222222222222220222212102221222222222222222222212222202202222202122222222222222222222222222222222222222222222222222112222122222222022202222020222220222222222222222220222202122220222222222222222222202222212222222221122220222220222222222222222222222222222222210222222202222222222222122212222220222220222222222222222220222222222221222222222222222122212222202212222102122221122220222222222222222222222222222222212222222222222122222222122222222221222220222222222222222220222212122221222222222222222022222222202212222011222222222222222222222222022222222222222222221222222102222122222222222202222221222220222222222222222221222222122220222222222222222122212222202212222212222221122222222222222222122222222222222222222222222212222022222222022202222021222220222222222222222221222202002221222222222222222022212222202202222111122220022222222222222222122222222222222222210222222022222122222222222222222122222222222222221222222221222202102221221222222222222222212222212202222001222221022221222222222222122222222222222222220222222102222122222222122222212221222220222222221222222222222212012222220222222222222022222222202212222001222220022221222222222222222222222222222222202222222222222122222222022202222020222221222222222222222222222202102221222222222222222022202222212202222100122222022220222222222222022222222222222222202222222122222022222222222222222020222222222222222222222221222202102220221222222222222022202222222222222012222221022221222222222222122222222222222222201222222102222222222222022202212122222222222222220222222221222212012222222222222222222222212222202212222002222220022222222222222222222222222222222222211222222112222022222222122202222220222221222222221222222221222202002220221222222222222122212222202202222102022221122220222222222222222222222222222222212222222222222122222222012202212120222222222222222222222222222221122221220222222222222222212222222212222210022220122221222222222222122222222222222222222222222122222222222222022222222221222221222222222222222221222211022222220222222222222222222222222202222101022220022220222222222222022222222222222222201222222122222022222222202212212021222222222222220222222221222211022222222222222222222121212222212222222211222022122220222222222222022222222222222222201222222102222222222222012202222220222222222222222222222221222202212220220222222222222022222222212222222100122120222222222222222202022222222222222222201222222002222022222222002222202020222221222221222222222222222202102221222222222222222022212222212202222220122120122200222222222202222222222222222222220222222022222222222222002222202220222222222221222222222221222200212220220222222222222221212222202122222111122022022211222222222212222222222222222222201222222122222222221222212202222122022220222221221222222201222212002221220222222222222121212222222112222010122220122211222222222222222222222222222222220222222222222222220222222222222220122222222220211222222220222211012221220222222222222221212222222112222221122020122220222222222222122222222222222222210222222102222122222222002212222221122220222221211222202202222200112220222222222222222121212222202202222122022120022212222222222202022222222222222222201222222202222220222222212212202022222221222220201222222202222200022220221222222222222022222222202022222101022222122200222222222222222222222222222222202222222102222022222222212222202220122222222221220222212221222202122221221222222222222020222222222122222120022120122211222222222202122222222222222222210222222212222221220222122202202120022220222221221222202012222201202221220222222222222022212222212202222001022221122221222222222212022222222222222222211222222212222121222222122202222222122221222220212222222000222222022221222222222222202022212222212022222121122222022202222222022202022222222222222222200222222002222220221222112212222122022220222222221222222211222201222220221222222222222022202222202002222010122020220222222222222210222222222222222222222222222122222020222222002222212121022221222220211222222011222220022220220222222222222220202222212122222021222222122222222222222221222222222222202222200222222002222221220222222202202122122221222220210222222112222200122220221222222222212021222222202012222012122020222221222222122200122212222222200222201222222112222122220222102212202220022220222221200222222212222201012222221222222222222022212222202002222101222022022202222222122211022212222222222222220222222212222220220222022202212220122221222220221222220121222211112221220222212222222022202222202122222020222222021211222222022222222202222222211222212222222212222021220222122202212120022220222220212222210112222220002220222222222222202221212222212022222212122221220210222222222202022212222222211222222222222112222220220222102222202020022220222220200222212221222202022221221222202222222021222222222112222011222022121222222222122201022222222222222222222222222102222222222222022222202221022220222221210222202202222222022220220222222222212022222222212022222000122121120222222222122200222202222222202222220222222102222221221222002212212222122222222220210222211211222212222221222222222222212122222222212122222002222221122222222222122201222212222222210222200222222122222021220222202222202222222222222222222222211120222210202222220222222222212120222222222002222220022122122220222222022211122202222222222222222221222002222222221222012212222022122220122221211222222220222220012220222222212222212221202222202022222100122221021222222222012200122202222222221222202221222212222020222222112212222021122202222222210222201210222211112202220222222222222221222222202202222202022220022220222222022212122222222222210222201220222122222120222222202202202021222212122220200222211220222222102221222222212222222021202222222102222102222021220222222222222200122222222222221222201220222212222021222222022212202120122210122220210222210120222210012201220222212222202020222222212112222011222022220221222222002211122202022202201222220221222102222022222222002202212220122221022220202222201001222202012201221222202222212220201222202222222010122120021212222222222221022212122212222222200221222122222121220222202202222121002200222220200222200111222202022200221222222222202020212222222112222200222021221221222222102212122212222212222222202222222022222221220222022212222022212202222222202222222020222211012201220222222222222220221222212112222022022020220220222222022220222212222202211222212220222102222122222222112202212122212220122221211222211212222212012222222220202222212121200222212222222121222221020221222222002210122222222202220222201220222112222121220222212212222022012200022220221222222020222222102212220220222222222121202222222102222101222022121202222222212211122112122212200222111220222202222121220222222222222122212221222222221220212222222200112211220220202222222221211222202122222202222120121211222222112210222002022212202222111220222012222221222222202202202120122210122222211220201100222212022222220220212222222221200222202202222022222120220110222222112220022022222202201222000221222212222221221222002222222021022112122220222222210012222212222211222220211222212222222222202222222102122021122101222222012201122112222212221122100211222022222021221222012202212222002000222221221221210102222220222210220221210222222122201222222212202022022021222212222222102222022022112202221122112211222022222020220222012222212220002011222222220221211222222220002211220221201222202021202222222122222211122022020021222222102212222222122222221122200202222212222121220202002202212121022002222221221221211001222210102201222220220222212022212222222012202010122220020110222222102210122222102222212222002221222022222122221222122212222222212012022220211220221122202210002200221222211222212120202222212112222121122122122000222222202212122212222202200222202201222202222022222202122222222111122212122221202220220102212221012202220220200222222121212222202202222100022122121010222222202221222212112222221222211202222202222022222212102202202222122122022221222222202122222202112201221221220220202120221222212202212122222022220002222222002201122012112202211122121222222012222121222212222222202222022211222220211220210222222210122222220221202221222220210222202122202100022021122020222222112201022102102222220022211210222012222221020222122212212021202100222222222220212012212212202220222221212220222122212222212002222001022120120022222222012201022022202222210020202221222102222121021222122222212100102101122220221221211101222221102210221222200221202021212222202002212010222221222101212222112200222022202222221122212202222202222220221212122202202212102102122222211220112100222222112222220221211220202221221222222212212112112221121201202222212200022022012212222221210210222002222022022222102222222122012112022222200222010022202220012222220220221222202122202222202102222102102120221122212222022221122112122212220021010201222122222122022212112212222121002012122221221222210102022221212221220220212220212121202222202122202022002121020002222222022211222022002222212122122212222002202222122212002222202200212101022020201221220121102210002212221222202221222222201222212102212221212220220211202222002200122012202202220220001221222202202122221212012222212212202010122222200222222012022212112200221221222222212220201222202202212000222120222012222222102220022202102222221021020220222222212120022212012202222001102001222120212221010001122200102202222220211122222120210222222212212021012122220010222222122112222012002202200022121211220202222220220212122222212220012010122020210220010110212222202222222222210221222121202222202212212211012222022012222222122120222102112102210221020211220112202221022212122202212002212210022221212221110221202202002212222221210222202122212222202202202001202220022120202222202120122112212022200122202222221102212221120212212212212021122221022222220222101001112200222211222221210022222020201222222102202122002221221220222222122200122002002212220021201221220112212121220222202202202000212020022121211222221220100211222220222222221122202021200222222122222111002222220012222222222022122202012202211122200212221002202120221202022202222220022211022022212222012122202200102220222222201020212022220222212202222002022022120201202222022202222002002122220122220220220112212022012212002212222111212001022220220221110012210201012210222221212121212120200222212102212111002122022210200222012101222102222202201022210221220012202122100210212222122100022200222221210222102020111222112202221221210020212222212222202012212222012222022200200222212112222022012002202221211210222212222221210201202202022211012012221021212222212000111202002211202221210120202021210222212112202122012220122122220222202221222102202202222120020202221222202221200200102222012210222110020021210220211102011220212212210222220220202221200222202102212012212121021022202222212222122102111012202220210221221002222221100210122212102200102110222120222220112020222221122221221221201120202021201222212012202111012220122011220222012100122012102000221220020221220102202022002202002222212022002102220001220222001220010211022201212222212121222220211222102022212000222020020000201222002122222112111002212022120210221012202020210202102212002000102221020120221221000021101221002201200220201022222121212222202122212200012120021212200222112001022112111022210121012212220002212021001201112202012021122220122011201221120110120200222211202222212220102022221222002222202011112222122210211222002012022102102000211220221220220202012222210101022222002110222120222001200221112202020200212221221221211221222222222222212012202110212221222121210222112012222112200110220121012211221120212021211212212221202122022222221122221222002002211210012221211222202021122022200222112222202012202020120202212222012221122002221001210121222212221012212022122221112221222202002021221120212222022110120211112221211220220021102221202222102112202012202220020021222222212001122002002211220022000222221220102020121010202001122001002011022112202020212012020202212212211220220022222021221222002202222122212222021102211022212110122202220001222122221202220120102021101001002200002112212100221002210220020222110210022220200221222121122121201222022002212111022220220202221122112222222022201021210120101201121201012222012121202100022210222100221211220020011220221212022222201222212022010122200222122102202110212120220121212122002110022102102001201120222220021012022020200101202122022201212111021011220222202211201221002220212222210020211022222222102122212201212122122212212222012010022222121222222022221221021021202220100002212202012222122122121122202220001110221211012201202220202020211022221222212122212120102120020110222022202110122202200201220020000212020102122121211200022111122211012200222121210020222110020211212202221222202220102122202222212222222001122220021200220022002222122102001002221002020202221200102120010020022222112001012021122021212122000010010211022210220201200221222120222222012002212201222021122210202022022212122202222011211012121201121011002222200000211120111211020222220010201221012221202202222200210211211122220121212222002222212011002121220020201022212011022102001220222110021200222102212222221212200000011202012011020212211222220111211221112220221221210221100020212222022120202112212220120001211222102002122212220022221212122210122221002121010110100112212211112210021002202120200210210212022222221212222222121222200222222121202102222021221220200122222022022202011011212010221212120221012120222020000002002000002000220120220220120112000221112211211202202021212021200222212211222011022122120022202122002112222212011121220002012220222201022021211210022210022110110201120001211020202201110210102211202222202220201201210222012110212110022221221200202222002121122012111210211021202000020012212120012112111220111201021110021001222220210010112201022202200212202122122100221222122110202000122221220100201222002220002122122001222020112010121000122020202000201200111012121110122221210021211102222201122210200211221121001012211222112002212111102020220102222120102102212012011120200000120111121100122122120020012101211100102001222011201220200101012212012211202211202220112010211222222110212120110220022020202020022102102212000212222010011020120121102121102001122202200020110211021101222022221121200222122221201220202220100022212222212200222011212121222211221120212021022222012020202112010221220011202021120010220101210100101220022010202121100210021211222210212220210122102220212222122001202211212022022010211121202000122212211110222120010200220011012121100201101121222000101200021202212121102112011221112220201221210220011020202022012202212220111122121201220120202112202122112122221200222022220211012021120120120010201202001102220120210121001102102202022220220222202121112002200122202122222100201222122000222122222010022202022021211220001011121012021011011100022222210012120021000000022111021212011012120100111020002101100212000011020110001120212101202222000212020122221211110002110201120021011 \ No newline at end of file diff --git a/inputs/08s1.txt b/inputs/08s1.txt new file mode 100644 index 0000000..4d38188 --- /dev/null +++ b/inputs/08s1.txt @@ -0,0 +1 @@ +123456789012 \ No newline at end of file diff --git a/main.go b/main.go index 783362f..d5bac69 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,7 @@ var dayMap = []day{ &days.Day05{}, &days.Day06{}, &days.Day07{}, + &days.Day08{}, } func main() {