✨ Finish Part 1 & Part 2 from Day 8
This commit is contained in:
		
							parent
							
								
									da97805203
								
							
						
					
					
						commit
						0fbbe517c6
					
				
							
								
								
									
										1
									
								
								day8/input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								day8/input.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										153
									
								
								day8/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								day8/main.go
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user