package day11 import ( "fmt" "tools" ) func incrementPassword(password []byte) { allFine := false index := len(password) - 1 for !allFine { password[index]++ if password[index] > 122 { password[index] = 'a' index-- } else { allFine = true } } } func checkPasswordValid(password []byte) bool { ascendingTripple := false firstDouble := 0 doubleDouble := false for i := 0; i < len(password); i++ { if password[i] == 'i' || password[i] == 'o' || password[i] == 'l' { return false } if !ascendingTripple && i < len(password)-3 { if password[i] == password[i+1]-1 && password[i+1] == password[i+2]-1 { ascendingTripple = true } } if !doubleDouble && i > 0 { if password[i] == password[i-1] { if firstDouble > 0 && firstDouble+2 < i { doubleDouble = true } else { firstDouble = i } } } } return ascendingTripple && doubleDouble } func Part1(puzzle tools.AoCPuzzle) interface{} { currentPassword := []byte(puzzle.GetInputArray()[0]) for !checkPasswordValid(currentPassword) { incrementPassword(currentPassword) } return fmt.Sprintf("%s", string(currentPassword)) } func Part2(puzzle tools.AoCPuzzle) interface{} { currentPassword := []byte(Part1(puzzle).(string)) incrementPassword(currentPassword) for !checkPasswordValid(currentPassword) { incrementPassword(currentPassword) } return fmt.Sprintf("%s", string(currentPassword)) }