71 lines
1.2 KiB
Go
71 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var req map[string]int
|
||
|
|
||
|
func main() {
|
||
|
var input []string
|
||
|
scanner := bufio.NewScanner(os.Stdin)
|
||
|
for scanner.Scan() {
|
||
|
input = append(input, scanner.Text())
|
||
|
}
|
||
|
|
||
|
req = make(map[string]int)
|
||
|
req["children"] = 3
|
||
|
req["cats"] = 7
|
||
|
req["samoyeds"] = 2
|
||
|
req["pomeranians"] = 3
|
||
|
req["akitas"] = 0
|
||
|
req["vizslas"] = 0
|
||
|
req["goldfish"] = 5
|
||
|
req["trees"] = 3
|
||
|
req["cars"] = 2
|
||
|
req["perfumes"] = 1
|
||
|
|
||
|
for i := range input {
|
||
|
if checkString(input[i]) {
|
||
|
fmt.Println(input[i])
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func checkString(s string) bool {
|
||
|
split := strings.SplitN(s, ": ", 2)
|
||
|
items := strings.Split(split[1], ", ")
|
||
|
for i := range items {
|
||
|
tst := strings.Split(items[i], ": ")
|
||
|
if tst[0] == "trees" || tst[0] == "cats" {
|
||
|
if req[tst[0]] > mustAtoi(tst[1]) {
|
||
|
return false
|
||
|
}
|
||
|
} else if tst[0] == "pomeranians" || tst[0] == "goldfish" {
|
||
|
if req[tst[0]] < mustAtoi(tst[1]) {
|
||
|
return false
|
||
|
}
|
||
|
} else {
|
||
|
if req[tst[0]] != mustAtoi(tst[1]) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func mustAtoi(s string) int {
|
||
|
var i int
|
||
|
var err error
|
||
|
if i, err = strconv.Atoi(s); err != nil {
|
||
|
fmt.Println("Tried to atoi " + s)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
return i
|
||
|
}
|