Dag: 6
Språk: Go
Lösning:
Försöker idag att använda mera funktioner och snygga upp koden lite. Första delen blev "ful" men andra delen är jag ganska nöjd med.
package main
import (
"fmt"
"os"
)
func first4Unique(inputString string) int {
for i, _ := range inputString {
if i < 4 {
continue
}
if inputString[i-1] != inputString[i-2] && inputString[i-1] != inputString[i-3] && inputString[i-1] != inputString[i-4] && inputString[i-2] != inputString[i-3] && inputString[i-2] != inputString[i-4] && inputString[i-3] != inputString[i-4] {
return i
}
}
return 0
}
func checkUnique(onlyUnique []rune, ch rune) int {
//Check for duplicates
for i, v := range onlyUnique {
if v == ch {
return i
}
}
return -1
}
func startMarkerPos(inputString string) int {
//Create an array of unique runes
var onlyUnique []rune
//Loop through the input string
for i, ch := range inputString {
//If the rune is in the array, remove everything including the first instance of it
if checkUnique(onlyUnique, ch) != -1 {
onlyUnique = onlyUnique[checkUnique(onlyUnique, ch)+1:]
}
//Add the rune to the array
onlyUnique = append(onlyUnique, ch)
//Check if we are done
if len(onlyUnique) == 14 {
return i + 1
}
}
return 0
}
func main() {
input, _ := os.ReadFile("input.txt")
inputString := string(input)
fmt.Println(first4Unique(inputString))
fmt.Println(startMarkerPos(inputString))
}