Skip to content

Instantly share code, notes, and snippets.

@gysel
Created December 18, 2019 20:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gysel/b814a471f8d6a9f9263534401781a165 to your computer and use it in GitHub Desktop.
Save gysel/b814a471f8d6a9f9263534401781a165 to your computer and use it in GitHub Desktop.
Advent of Code 2019 in GO
222222212022222202222222222220122222222020212222021202220200222202221222002222221222022202220222020222222222222222022222222222212222222222222201222222222222212222222222222222222221222222222122212222121212222220202212221222212222221222022222220222021222222222222222222222222222212222222222222201222222222222222122222222222222222220122222222122212222022212220222222202220222222222222222122212222222021222222222222222022222222222202221222222222200222222222222212022222222222222222221202222222121222222022202221200222202220222112222222222222212222222021222222222222222022222222222222222222222222212222222222222212122122212222222222222212222222022212222120212222202202222220222022222220222222222220222222222222222222222022222222222222221222222222221222222222222212222222212222222222222122222222222212222120212221211212202221222222222222222222212222222022222222222222222022222222220202220222222222220222222222222222222222222222222222222112222222121222222121222221220212222221222012222222222221222222222220222222222222222222222222221222221222222222212222222222222212122122202222222222221002222222021212222021222022211112222222222102222221222221222222222021222222222222222022222222222212220222222222210222222222222222022022222222222222222012222222020212222022212121222222202220222202222220222022212220222220222222222222222222222222221212222222222222210222222222222202022022222222222222222012222222022222222122212020211212212220222012222221222222212221222020222222222222222122222222220212221222222222202222222222222222022022222222222222221212222222020212122022212220211102222221222212222222222221212221222121222222222222222122222222220222220222222222220222222222222222222022212222222222221002222222122222022221202021212012212221222122222221222121202222222122222222222222222222222222222202221222222222220222222222222222222122202222222222220112222222221222022122202022210002212222222022222220222220212221222021222222222222222222222222221212220222222222201222222222222212222022202222222222221102222222222202122120222122210112222222222122222221222112222220222221222222222202222222222222220222222222222222220222222222222212122122202222222222220202222222222202122120212020221012212222222022222222222101202220222020222222222212222022222222221202221222222222200222222222222212022222212222222222222002222222022212022220222021221102202221222112222221222001202221222220222222222202222022022222222202222202222222220221222222222212022122212222222222222212222222122222122120222121202002202221222022222222222022202220222020222222222202222222222222222202220222222222212221222222222212222022212222222222221212222022022202222122222220212012222221222222222220222021212221222020222222222212222022222222222222221202222222201222222222222212122222222222222222220112222222022202222221212021212102212221222112222222222001222222222022222220222202222222022222222202220222222222212221222222222212222222222222222222221222222222220202022120212021200202202222222002222221222101222222222022222221222222222222022222221212220202222222201220212222222202122022212222222222221202222022021222222121222121200212212221222102222220222101222221222022222220222222222022022222221202222222222222201222222222222212122022212222222222222012222222221202122222222020212102202222222222222220222100202221222020222222222202222022222222222202220222222222211221212222222222122222202222222222220202222122020202022122202220211012212220222002122221222022212221222220222222222202222022222222222222220212222222212220212222222212022122202222222222222102222222122202222221012222211002222222222012122222222211222220222122222222222212222222222222222202222212222222221220212222222212022022222222222222222212222022120222022220202022022202202221222212122222222201202221222222222222222212222022122222222222221212222222200220222222222222022022212222222222222202222122222212022221202221122122222221222012122221222001212221222221222220222212022022222222222212222222222222221222212222222210022122212222222222221112222222022212002020222021121102222222222222122220222201212221222221222221222222222122122222221222220212222222200222202222222200222122212222222222222112222022220222022221122120101012222220222202122221222110212222222221222222222222122222222122220212222102222222210220202222222211222222202222222222220122222222120222212020112120122222222221222112102220222100222220222121222221222222222122022122222212222202222222211221112222222201022022202222222222220012222022021212002220022222222022202222222000122220222112212221222220222221222222222222222222222212220122222222220222012212222221022222222222222222221122222022021002202021202120211102212222222000112221222111222221222020222222222212222222022122222202221102222222212221012222222200022122202202222222222022222122221222102022002220200222202221222122211222222220202222222020222222222212222122222022222212222122222222221220012202022212222122202222222222020102222222122202022021022121220122222220222210211222222011222221222122222220222202022022122222220212221112222202220221012212122202122222222212222222222002222222121102022120222020111102212221222120022222222011222220222121222221222212222222122122220212222122222222222220122202020211222022222222022222022122222222222202122220100222201222222222222212001220222211222221222022222221222212022022022022222212222222222002201221212222022220222222212202022222020022222122222102202222111121222122202220222102022222222221212221222221222220222222122122122022221202221112222202222222222212020210122222222202222222221212222222221212112220212021002102222220222221222221222112212221222222222222222202022122222022222212222012222112210220012222021221022020202202222222220212222022122202122220120120012002222222222112211221222102212220222220222222222202222022122020220222222002222022210222102222120202222022222202122222022112222022021202222020210121202102222220222102211220222111202222222022222221222212222022222220222222220122222122221221102002220220022021222222122220221102222022222112212020221020021212212220222010010221222201202220222120222221222202022222022222222212221002222102211222112022220220021222222222222220020112222022220012202022121222211002222220222001012220222101202220222221222221222222122222022122220212220102222222211222002012121212022220202212122210120122222222121222212022201212010212212222222111000221222021202222222121222222222202222222022120222202220022222202201222012002022200221220212222222201120122222122020112212222020011111112202222222122222220222021222221222222222221222212222222222122221222222102222112201221012122121221121022202222022200220102222222220102102222110010222222222222222122001221222211222221222221222220222222222022122200222202220002222022212222212202020221222020202202122200022212222022122022222120102021010012202220222110220222222210212222222220222222222212122222022100220122222222222202210221012002020222221120222212022202221022222222120212202122201002112212202220222001120221222122212221222222222220222222022122222011222202220112222112221221002212021200121120212222022221022022222022122222202021122220012212202221222020220222222011222222222020222220220202122122022220221122220122222002201222112202120211021220202202022220021202222022122112022122001020212102202222222122102221222200202220221120222221220202222022222200220022222012222212220222222202220200022221212212122211222212222222122022222020022200112202102222222122001220222101222221220122222220202212022222222101220112222122222012201220122212020201021022222222022210221022222022022222212222122122020022112220222122000220222002202222221121222222200212202120120200221222220012222222221222222012122212220020202212122202222212222222220102210020021100212002002221222102020222222111222221221022222222222202212220120121220022222222222202220220112212120212021022202202122212020212222122222202022220001010012222112222222012022222222220212221222221222220212212012122120012221112221002222112220222222202021210220222212202022212221222222122022122112022122020120012122222222201211221222200222220222220222221202222112120220120222012222112222012212220012102121221220020222222222210122202222022121012000222211110022002222222222102010221222120222222222121222221210202112221022222221212221222222122221221122212122212221202222222122202021002222222121102102220010112022022002222222200121221222201202220220120222222220202012020020220221112022022222112222221022122222212221202212222022222022212202122221102121121000202220012222220222222001220222202222221221122222220222212022020122010222012221022222202212221002102021222022120202212122210021102222222222112202222011002020012002222222011002220222101202221222220222220211202012022121201222012022112222222221221222112020202122120202222222220222112222122220212102120020000120102212221222222101220222012212222221222222222220202022122121212222222020112222012211222002202020201121110202202022221121202212221121022000121200211212012122221222210200222222101222220221122222222220212002121121000222112022222222202222222202122020220222021212212222202222202212121222002201021021100012002012221222220020221222111202121222220222221210222022222222000222222020212222022201220102022022210121210222212122220121022222121221122000122222221122002102221222221122221222101212222220122222222210212022220221020222122020202222012211220022012022210021111212202022211220222212120121122121020211120120202022220222221201222222212202021121222222220212212212020121101222022120002222122210220112221020221020002212202222221122222202220020202001020110212222002202222222012002222222002212020222221222222221222212121020122222012022012222112202222222021221200120122222202122221020202212220022222111020110112222202212220222012202220222201202222020121222222210212102220110210222202122112222212201221212222120201221110202211122221221212212222121002000220000222122022212221222111021221222212222121120020222220201202202222000011222112221112222122211220112121022222220102212210222202022122212122020202112022201212020212122222222001111220222120212020022120222220200212202122201112221112121012222222211222002012021201122220212220122200122012212020022012201222001211200002202220222021002222222010202122222221220222221212102022220022222102021212222012202222222220121222120101212212222220020022222122220002210220010011221102222221222011201201222012212120220120212220202202012021022121222102221022222022210222022101122212022001200220222220122212222021221102210221202110200122112221222011000210222010212221120222222221212222102121221020220112221202222222222222002002021211022112200201122202122010222021222222022021000121102022022221222000200220222102202120022020212221202221002021111121221212022112222022212220022000120210221120202222122210020022212121222122221020010120220212102222222022200212222010212020220220222022200200222210120002221112022122222222202222012110021202221120210222122220020202212221021102222222112110111112022220222011222201222122222021020020212222200202022211021002222112122222222012210220212011121200220220200202122210121012212222022212110222000200221222222222222121001211222202222122120221210022212201212220020221222022221002222222210220212211020211122001202201022202221121202121121222122221211101011212012221222202110222222202212020121220200021210220022020100210220212022212222102212220112022021201022221211221122202220120202121021112210122101210022102102220222210120212222121212221022120221020210222012211021200220022120212222012200220122210022220021100201220122220020022222120022112202020212212121022102220222110120200222201222022100121202221211220222212112022221122220212220012211220110122022220221112201201122211120122222021220112210120021121121212012222222100111222222110202221010020201221200220112221022012222002020202221202022220011110120101222001200212122200120120222222222012111022002211222222222220222220102221222021222221000220220221221201102222120011222222222202222022021222111001121011120002222210022202022111202021121122112122002000012102222222222120101201222212202222121021201121222211022220120111222022120222221022112222001000020222020221221202222212222202202220220112121220200201012012112221222001211221202012212220211021221220202202102022001010220002022112220112011212202212020212222020210220222211022020212022122022021121210022211022212220222020020201222022202020221020022122221210122101000111222212122202222202110202200020121221120100200202022202222010222120010002212222210100222112012221222022210220202100212220210021200222211221212020001112222202221202222102001200101201022102121211200210022201022202212002101102010220122020011002102220222010010200202202222120210022012222201210202121211202222102122102220002121020102012120102212010212200022212010110202020020122221121112120021022122221222202201220222220202220120020122122222201022121021122222022222102220202211002020020120001222020212220122212001222222101210122200120212101112212012221222201020212212200222120201222021021200201022122200111221222222112221022201102110102122201202110210222222222210011212112110012202220111121102212102221222110000201202021210120122022000222200221102221020110220222122112221112212000222200222202121022201221222211120200222020002112012120210211121112002221222000011210222221220021112020221122202222222221021002221102121022221002201020111110220121122112202202222222100222201200021102220022021021220102201212222012001202222101211121010120211222210220202221221222220002021202220002102002212111120122122101212211022221202120221020211020000022220101202222011221222012112220212002211021011121210220220200102212222200220002122102221122000022221021020110211121222211122202111122221212100202202022120200220122220201222002012212202212102022002222022220200210022010110002221112220122202122221222010101122002202110221220022222012021221102001222220022212001022112210222222221211202202210112120010221111021210222222001012020221012122112201112110011201212121202001122210202222210010101220120200000211122121102020112001222222221212222222212012122202222202122211220112210201021222212020022201022010221202111020220221120212220022202010200211111111202021022022112020122200221222102211222202120210021201121111221201211202011220010222212021222200212202002111201021102120221221221122221220122202002000021220020202020010012102221222102202211222002121220112022122220211212012010220220221202221222212012001201221220122221201211220211022212221221220200112112121121110020121112120212220020111221202210102222020021002120221220022212201200221012022022221212111101102011021111122200211220222212200210201111002112011120220202021022011200220210120211222012202021211222011220210201102220021111220122120122202202111201002021221101122001220221222222122120201120011010222120010200210012021201220010022210202212000121022121121022211211002000010111220102021102222012011020002000222022201010220220022200000200202112100202012022201222220012000221222020002221202221022220020221201221202212202122122120221022122202221202101101101100120000211211220201020201211112100100012011222022022021202102101221221221020212212001200121220120002020200220202122001200221012222212212202011211112011202102120022121100202012220020012012000220111002000101210210021102010222011121010222001201201101121112101112220200112102000201101210120111222120022
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
const Width = 25
const Height = 6
const Pixels = Width * Height
func main() {
data := ParseFile("day08-input.txt")
layerCount := len(data) / Pixels
// find layer with fewest 0 digits
var layer []int
var layerZeros = 999999
for i := 0; i < layerCount; i++ {
startIndex := i * Pixels
currentLayer := data[startIndex : startIndex+Pixels]
currentLayerCount := CountNumber(currentLayer, 0)
if currentLayerCount < layerZeros {
layer = currentLayer
layerZeros = currentLayerCount
}
}
// the number of 1 digits multiplied by the number of 2 digits
result := CountNumber(layer, 1) * CountNumber(layer, 2)
fmt.Printf("Answer one is %v\n", result) // expected: 1862
// part two
merged := MergeLayers(data, layerCount)
fmt.Println("Answer two:")
PrintImage(merged)
}
func CountNumber(layer []int, number int) int {
count := 0
for _, v := range layer {
if v == number {
count++
}
}
return count
}
func ParseFile(name string) []int {
file, err := os.Open(name)
if err != nil {
log.Fatal(err)
}
defer file.Close()
data, _ := ioutil.ReadAll(file)
result := make([]int, len(data))
const AsciiZero = 48
for i, _ := range data {
result[i] = int(data[i]) - AsciiZero
}
return result
}
func MergeLayers(data []int, layerCount int) [Pixels]int {
var merged [Pixels]int
for i := 0; i < Pixels; i++ {
var visiblePixel int
for j := 0; j < layerCount; j++ {
pixel := data[i+(j*Pixels)]
if pixel != 2 {
visiblePixel = pixel
break
}
}
merged[i] = visiblePixel
}
return merged
}
func PrintImage(image [Pixels]int) {
for line := 0; line < Height; line++ {
for _, v := range image[line*Width : line*Width+Width] {
if v == 0 {
fmt.Print(" ")
} else {
fmt.Print("O")
}
}
fmt.Print("\n")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment