Day 11 Cleanup and streamline
This commit is contained in:
parent
ea8d72e5d0
commit
a66482a257
BIN
day11/day11
BIN
day11/day11
Binary file not shown.
@ -11,18 +11,51 @@ import (
|
|||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
// x < 60
|
// This is a purely mathematical solution to this problem
|
||||||
|
// We don't care about what the elements are.
|
||||||
var elevatorFloor int
|
// Loop on each floor and consider:
|
||||||
var floorInv [][]string
|
// 1: We have less than 3 items on the floor
|
||||||
var componentRegistry []string
|
// So move them all up; 1 total move
|
||||||
|
// 2: We have more than 3 items on the floor
|
||||||
|
// So move two up and one back down; 2 total moves
|
||||||
|
|
||||||
// Setting visual to true will output what's happening
|
// Setting visual to true will output what's happening
|
||||||
var visual bool
|
var visual bool
|
||||||
|
|
||||||
// This code requires oxford commas in the input
|
|
||||||
func main() {
|
func main() {
|
||||||
input := stdinToStringSlice()
|
input := stdinToStringSlice()
|
||||||
|
var numMoves int
|
||||||
|
if !visual {
|
||||||
|
var lvlItmCnts []int
|
||||||
|
for i := range input {
|
||||||
|
lvlItmCnts = append(lvlItmCnts, strings.Count(input[i], "generator")+strings.Count(input[i], "microchip"))
|
||||||
|
}
|
||||||
|
for i := 0; i < 3; i++ {
|
||||||
|
for lvlItmCnts[i] > 0 {
|
||||||
|
if lvlItmCnts[i] < 3 {
|
||||||
|
lvlItmCnts[i+1] = lvlItmCnts[i+1] + lvlItmCnts[i]
|
||||||
|
lvlItmCnts[i] = 0
|
||||||
|
numMoves++
|
||||||
|
} else {
|
||||||
|
lvlItmCnts[i] = lvlItmCnts[i] - 1
|
||||||
|
lvlItmCnts[i+1] = lvlItmCnts[i+1] + 1
|
||||||
|
numMoves = numMoves + 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Visual mode spits a lot more stuff out, so it has
|
||||||
|
// to track a lot more things...
|
||||||
|
numMoves = VisualMode(input)
|
||||||
|
}
|
||||||
|
fmt.Println("Number of moves:", numMoves)
|
||||||
|
}
|
||||||
|
|
||||||
|
func VisualMode(input []string) int {
|
||||||
|
// This code requires oxford commas in the input :)
|
||||||
|
var elevatorFloor int
|
||||||
|
var floorInv [][]string
|
||||||
|
var componentRegistry []string
|
||||||
for i := range input {
|
for i := range input {
|
||||||
listIdx := strings.Index(input[i], "a ")
|
listIdx := strings.Index(input[i], "a ")
|
||||||
if listIdx == -1 {
|
if listIdx == -1 {
|
||||||
@ -33,6 +66,7 @@ func main() {
|
|||||||
floorInv = append(floorInv, strings.Split(input[i], ", "))
|
floorInv = append(floorInv, strings.Split(input[i], ", "))
|
||||||
}
|
}
|
||||||
for i := range floorInv {
|
for i := range floorInv {
|
||||||
|
elevatorFloor = i
|
||||||
for j := range floorInv[i] {
|
for j := range floorInv[i] {
|
||||||
tp := "G"
|
tp := "G"
|
||||||
if strings.Contains(floorInv[i][j], "microchip") {
|
if strings.Contains(floorInv[i][j], "microchip") {
|
||||||
@ -70,19 +104,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
if visual {
|
if visual {
|
||||||
ClearScreen()
|
ClearScreen()
|
||||||
PrintScreen()
|
PrintScreen(floorInv, elevatorFloor, componentRegistry)
|
||||||
time.Sleep(time.Millisecond * 250)
|
time.Sleep(time.Millisecond * 250)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Println("Number of moves:", numMoves)
|
return numMoves
|
||||||
}
|
}
|
||||||
|
|
||||||
func ClearScreen() {
|
func ClearScreen() {
|
||||||
fmt.Print("\033[H\033[2J")
|
fmt.Print("\033[H\033[2J")
|
||||||
}
|
}
|
||||||
|
|
||||||
func PrintScreen() {
|
func PrintScreen(floorInv [][]string, elevatorFloor int, componentRegistry []string) {
|
||||||
c := color.New(color.FgCyan)
|
c := color.New(color.FgCyan)
|
||||||
w := color.New(color.FgWhite)
|
w := color.New(color.FgWhite)
|
||||||
for i := len(floorInv); i > 0; i-- {
|
for i := len(floorInv); i > 0; i-- {
|
||||||
|
Loading…
Reference in New Issue
Block a user