From 0fbbe517c674d90f3e4254cbf32ff7f58b1af90e Mon Sep 17 00:00:00 2001 From: Alphyron Date: Sun, 8 Dec 2019 18:14:49 +0100 Subject: [PATCH] :sparkles: Finish Part 1 & Part 2 from Day 8 --- day8/input.txt | 1 + day8/main.go | 153 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 day8/input.txt create mode 100644 day8/main.go diff --git a/day8/input.txt b/day8/input.txt new file mode 100644 index 0000000..29390a5 --- /dev/null +++ b/day8/input.txt @@ -0,0 +1 @@ +222222022022200222221110022202222222222222222222222122222222222122202022222222222221212220122221120222222122222222220222220222222222220222222222222222222222222222202222222100222202222222222222222222222122222222222022222222222222222222222221022221022222222222222222220222221222222222222222222222222222222222222122201222222021222212222222222222222222222222222222222022202222222222222221212220122220022222222022222222221212220222222222221222202222222222222222222121221222222210022202222222222222222222222122222222222022222122222222222221202220022222221222222022222222222222221222212222222222212222222222222222122021220222220020022202222222222222222222222022222222222122222222222222222222222221122222020222222122222222220222220222102222222222212222222222222222222022202222222220122200222222222222222222222022222222222222222022222222222222212220122220121222222222222222222202220222002222220222202222222222222222022021212222222022222211222222222222222222222222222222222022222222222222222220212220122222121222222122222222222212222222202222220222202222222222222222222122210222220211022211222222222222222222222122222222222222202022222222222221212220222222021222222122222222220222220222112222221222212222222222222222122122220222220120222210222222222222222222222022222222122022202222222222222221222222022222120222222222222222221212221222022222221222202222222222222222222222212222222102222200222222222222222222222122222222022122222122222222222021202220122220221222222022222222222202220222212222221222222222222222222222122222202222220202222211222222222222222222222122222222222122212022222222222022212220222222122222222122222222220212220222022222220222202222222220222222222220212222221220022222222222222222222222222122222222022022222122222222222122212221222220020222222222222222222202220222202222220222212222222220222222122222202222201000022200222222222222222222222222222222022122212122222222222120212221022220021222222122222222222202222222102222222222202222222221222222022222211222202111122210222222222222222222222022222222022022202222222222222221222222122221020222222222222222222202222222122222222222202222222220222222122222202222222221222211222222222222222222222222222222122222222022222222222022222222222220122222222122222222220222221222122222220222202222222222222222122222221222222011222222222222222222222222222122222222022222202022222222222120222220222222220222222122222222212202221222002222220122212222222222222222022120201222200021222222222222222222222222222122222222122222202222222222222201202222222220021222222022222222212222221222022222221022202221222220222222122120210222220210222210222222222222222222222222222222222022202222222222222202202222122222221222222222222222210212220222022222220222202222222222222222022022210222211120022211222222222222222222222022222222122222202022222222222022202221022221122222222122222222210212221222002222221222202220222221222222122121212222202011222221222222222222222222222222222222122222222222222222220221202222222220020222222222222222212212221222202222221022212220222221222222222021200222201101122211222222222222222222222222222222022022212022222222220202212220122222120222222222222222200202221222102222222022222222222221222222022220222222211001222211222222222222222222222222222222122022202222222222221112202221122220222222222020222222212202221222222222201022222220222221222222222021220222211021122201222122222222222222222022222222022222212122222222220121202222122222222222222121222222220202220222222222220022202221222221222222022120200222200122122211222222222222222222222222222222022222222122222222221110212220122200221222222222222222221222222222212222210222212221222221222222222120212222200000222210222122222222222222222122222222122022202222222222222101212222022222221222222022222222222212222222102222222022222222222222222222222022221222202202222200222122222222222222222222222222122122212122222222220022202220122221222222222120222222200212221222122222202122202222222220222222222022210222222002222210022022222222222222222222222222022222202122222222221122212221022201020222222121222222202212222222012222210022222222222222222222122121200222200202122221022022222222222222222222222222222022212022222222220111222220022222020222222021222222210202220222002222211022212210222221222222022221221222212020022212122022222222222222222022222222022222202222222222222000202222022220220222222021222222200222222222112222220222202220222222222222222122200222200011022211122222222222222222222022222222122222202022222222222002202220022221222222222222222222220202221222222222200122222211222220222222022020112222200210222201122122222222222222222022222220222122212022222222221001202221022201120222222020222222211222221222212222200022202220222221222222222120110222210212022221122122222222222222222222222220122022222222222222220221212221222222020022222120222222210222220222112222221022222201222221222222222020010222202102122200122022222222222222222222222221222222212022222222221221222222122202120122222221222222212222222222012222220222212221222221222222122122001222211001222222222022222222222222222222222221222222202122222222220112212220022222222022222120222212221212220222002222222222212212222222222222122120122222202211022220222222222022222222222022222221222222212222222222221121212221022220220122222022222222212212220222202222200222102212222220222222122122000222211001122221022022222222222222222222222222222222212122222222221210212220122210122120222120222212221222222222022222211122222222222221222222122121102222202111022221122222222222222222222122222222022122222022222222220221212220022200220220022022222202200222222222212222200222122212222220222222122220121222221201222201222222222022222222222122222222222122222022222222022100222221022212122122022221222222222222222222202222212022222201222222222222222020112222220000022201222122222222222222222122222221022022212022222222220220202221122220021021222020222222200212220222202222201022122211222200222222022222020222212201222200222222222022222222221122222221222222212022222222222212212221222211121021122221222202221212221222212222211122222222222202222222122221101222202021022222022222222122222220220122222222222022202022222222222122212222222211022020222120222212200212221222112222201022112202222221222222122122022222201001122211222222222022222220220022222220122222222222222222022000202221122212121220222022222212201202222222112222202222102210222222222222222021201222201121222201222022222222222220221022222220022222202022222222222221222221222220221021022021222222001212222222002222222022122112212220222222122221101222212022122201022122222022222221222122222222022122222222222222222122212221222202122021022122222222021212221222012222201102112221202200222222022221121222210200222221222122222022222222221222222221022222212022222222220100222221122222120021002221222222121222221222102222202122102222212221222222022122212222201211122210220022222022222220220222222222022222002122222222122010222220102222222222202021222202210202220222022222222112102100202221222222022222121222210022122201122202222222222220221222222221022022212122222222120212212221102220120020102221222212212222221222022222221012202000222210222222022122120222211011222212122022222222222221220122222222122222112122222222122101212220102212020122012221222202021212220222002222201002200222202212222222222120121222221100222202022212222222222221220022222220022122112122212222221201212222102211122221112221222212020202220222022222200212021211212200222222222022210222200211222220022212222012222222220022222220122222222222222222121102212201012212120222002022222202000222222222102222211202111220222222222222222220100222220121022210001202222012222221222222222221122222102022202222020202222201002221121120202222222222112212220222112222220222101000212212222222022222002222202120122211020212222212222220220222222220222122122122212222022000202221022221222021212022222202020202221222102222222002222111012212222222022221222222222101122211201102222222222222220022220221122222112222212202122011222200112201220020112222222212010222221222102222220022211101122200222222122020200222211112222220010122222002222220222022220222222022112022202222120211222200022202221220222220202212011202222222002222212102111101002211222222122121112222200001022220121002222102222221222222222221022222022022212212022110212220012212122122102122202202201222220222111222200022012010112210222222222120221222222110222210022222222112222220221022222220222222222222212212021210222202222210020022212022202202221222221222001222200102010021102221222222222020220222222120022220112022222122222220220222222220222222020022212212022121222221222221120222022021202212110212221222102222210212102121002210222222122122102222211011222202012012022222222220221122220221122122112022202202021012222222212201121221212121212222020202220222100222212002022220012211222222022121201222211002022211120102122222222220221022221220022222012122202202021100222201112211220121022120222202210222221022210222212122022021222200222222222221102222212100122212002222022122222222222122220222022022001122202212222212202202022221222022002220222200221222220222211222200202122221022201222222222122000222210122220222121112022002222221221022220221022122021222202212222202212201122211221222212021202221200212220022212222212112002000202211222222222022022222221001020221012022222122222222222122222220122222122122222202021200201202102212021120102022212212012002222022000222210202200111112201222222022220120222202110221220121022122012222220220122221220222022112122222212222102211200122220221122112220202211101022221022011222210122000001002220222222222021210222210112021201101012122102222201220222221220022222112122202212220221221211102211222020012122202222012002222122020222221102110112102221222222122122211222202202120212112222122022222210222022222222022202022022222212122200211202112220122121002021212221220022221222102222220222120122202200222222022222211222221111022212221012022222222202220222221221122002121222212212020200221201212200220222222022212220220112220022222222202022111121112221222222122021020222210111220201102202022122222211200222220221122022120222202210222010202212022210022122100220222201000222222022200222202012002010202212222222222221121222200002020220221212022002222200200122222222022212211122202221021212212222112210120020221222202212010102222222002222210202011100222012222222222121020212220012121200120222122002222212221122221220122122022222202221022201212201002220022120020120222220110112222022221222212202201210012002222222022121111202221221120222011212022122222220220222021221222002020222212202122201222211022201222220002122212202100012220122002222201222211200112012222222222122010222200012022221110122222222222200220222120222022002121022212212220112200211022210022021122122212212201112221022020222211112002210002222222222222022202222212202121200122002222212220202211222222221022201002122222202220221201201022210022020000221222221001002222022120222200122002101022202222222122221222222220201021221021212222222221211222222020220022010200222222200020102202220012202022120222021202211211212221222202222202220202210102112222222222222002202222001220210110112122002221211210022221222122022222122202220020221210221222221021120120220212200000122221222222222220202010102022100222222222021200202211110122220102012022222220200211222220222122120210022202220122120210210002221020020101022202220011012221022112222221200110001022110222222222222201222202001020202110002022202222201220022020220222000111022212220120200210201012221220122210222202212020012220122022222211021020221122220222222122121211202222220221220101012222002221220221122020220022102212012202200020220220201212212122221211221202202120122220122110222211001001002222212222222122022121222201021121220001102022112220210211222220220022111212112222202220221212222202211122121111122222222100102221222102222212011011122022122222202122222120202221201122210112012122102220211221022221220022210112212202222120010210210202210121220112122202200222102220122112222202002221200202020222212022220100211210122020222010112222112222200212022121222222022202002220200221021201212202201120220001222202002010102222122002222202011102202222110221222122211210201212001022202021222122222220222200122221221122002111112222212222002202220122222220022222120102210022202221022020222212000112202122212222222222120020202212002121222001022122002221210222122022222122022100212211210202101202222012212121122002022002011022002220122100222211222010000222201222200222101001201222200122201021202122102220222211222221222222020212002220202102020201222222212222222120220022011122122220022221221200020100201202010122202022211110222200202022201121022022012221220202222121220222122021202222210200212212211112212020222100220202110221202220122100202222110100021202011020201022101002201200010220201112122122112221220221222020020222012222012202211021021201200212210021021000120122221022122221122010221220022101011022210022202222201121212222102120000012022022012222221200022221022122012221202200202212210200210102211120221210122112112111212222221011220200202110002102012222212222000100221220002022210120222122112221202201122220220022012212102222201012122200200202212120221212122002001022122221121120200222101111011012122120222222121211221221002222210201202022012220102221222022121022200002022221210212122221201222211121221120221012012101212222020221221200120212020222222121200222121111210210102122122202002022212221001222022222020122001101112201200100000221202202211011022221222022012121202220022001222200000001221222111120200122200002200200221121022100012102122222211222222120120222221102112222200111212220212002202201021122222222120021022222120021220210000200102212221122221222000001211202201221111001222022112221022120022101220022121202102212212110111211210022211002022001220002120000102222122010221220120110202102120220211122001220202221000120101102102122012221100222122002022222021012002200221210010200222002201001120022122012121010212222021002200212121110022022201122202122222022220212120020110010022122202220222102022111120122221002212211200202110210200202212012222110022002002102020220122120222220220101011222012221210122111222210212201221210100022022102222110102022102122122000210002200222021112201221012220000122212221202112101112221020122212212001222022122200222200122102101200200211022201222222212000221200112212220121222021222112211222001222220221122221011121100122002202202012220122200220202022201022122221122201022012200221202122221212100002012102020111110102111121122111100102221212001200212120112210102122201020122102121120222020111202220120001111022201021220222020212202220002021200200202022102221212102002212222122002122022221211002020210120211202211221211220002212110221220120212212222000201022122011222211122101111211220122021110011012112002221211211002220220122100210102200202212021000000022201100121200221112220120212222120011211202011102020112000221212222102020210221120120020110202222112222122200012210022022021021022220211222110201122210202102122201122112222011202221022112210222122111112012201012122011200022010020210112220212011121222011201010220112012100012111020000121022202001102120101022110120102011122021112100101210010110102002102000210 diff --git a/day8/main.go b/day8/main.go new file mode 100644 index 0000000..28a3944 --- /dev/null +++ b/day8/main.go @@ -0,0 +1,153 @@ +package main + +import ( + "bufio" + "fmt" + "log" + "math" + "os" + "strconv" + "strings" +) + +type Layer struct { + Data [][]int +} + +type Image struct { + layers []Layer +} + +func main() { + file, err := os.Open("input.txt") + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + if !scanner.Scan() { + log.Fatalln("Problem while read line.") + return + } + + stringarr := strings.Split(scanner.Text(), "") + t2 := make([]int, 0) + + for _, i := range stringarr { + j, err := strconv.Atoi(i) + if err != nil { + panic(err) + } + t2 = append(t2, j) + } + + SolvePuzzle1(t2) + SolvePuzzle2(t2) +} + +func SolvePuzzle1(pixels []int) { + image := ParseImage(pixels, 25, 6) + + fewestZeroCount := math.MaxInt32 + fewestZeroLayer := -1 + for index, layer := range image.layers { + count := CountNumberInLayer(0, layer) + + if count < fewestZeroCount { + fewestZeroCount = count + fewestZeroLayer = index + } + } + + count1 := CountNumberInLayer(1, image.layers[fewestZeroLayer]) + count2 := CountNumberInLayer(2, image.layers[fewestZeroLayer]) + + log.Println("Part1: " + strconv.Itoa(count1*count2)) +} + +func SolvePuzzle2(pixels []int) { + image := ParseImage(pixels, 25, 6) + layer := WrapImageLayers(image) + log.Println("Part2: ") + WriteLayerImageToConsole(layer) +} + +func WrapImageLayers(image Image) Layer { + layer := Layer{} + layer.Data = make([][]int, 0) + for i, line := range image.layers[0].Data { + layer.Data = append(layer.Data, make([]int, 0)) + for range line { + layer.Data[i] = append(layer.Data[i], 2) + } + } + + for _, inLayer := range image.layers { + for i, line := range inLayer.Data { + for j, _ := range line { + num := inLayer.Data[i][j] + + if layer.Data[i][j] == 2 { + layer.Data[i][j] = num + } + + } + } + } + return layer +} + +func CountNumberInLayer(number int, layer Layer) int { + sum := 0 + for i := 0; i < len(layer.Data); i++ { + for j := 0; j < len(layer.Data[i]); j++ { + if layer.Data[i][j] == number { + sum++ + } + } + } + return sum +} + +func WriteImageToConsole(image Image) { + for index, layer := range image.layers { + log.Printf("Layer %d:", index) + + for _, line := range layer.Data { + lineStr := strings.Join(strings.Fields(fmt.Sprint(line)), "") + log.Println(lineStr) + } + log.Println("") + } +} + +func WriteLayerImageToConsole(layer Layer) { + for _, line := range layer.Data { + lineStr := strings.Trim(strings.Join(strings.Fields(fmt.Sprint(line)), " "), "[]") + log.Println(lineStr) + } +} + +func ParseImage(pixels []int, wide int, tall int) Image { + image := Image{layers: make([]Layer, 0)} + for i := 0; i < len(pixels); i += wide * tall { + layer := ParseLayer(pixels[i:(i+wide*tall)], wide, tall) + image.layers = append(image.layers, layer) + } + return image +} + +func ParseLayer(pixels []int, wide int, tall int) Layer { + index := 0 + layer := Layer{Data: make([][]int, 0)} + for i := 0; i < tall; i++ { + layer.Data = append(layer.Data, make([]int, 0)) + for j := 0; j < wide; j++ { + layer.Data[i] = append(layer.Data[i], pixels[index]) + + index++ + } + } + return layer +}