package main import "fmt" import _ "os" import "math/rand" const cifre = 4 func min(a, b int) int { if a < b { return a } else { return b } } /* Dato un tentativo e un segreto da indovinare, dice quante cifre sono giuste al posto giusto e quante sono giuste al posto sbagliato */ func compare(secret, attempt string) (gg int, gs int) { var contaAttempt, contaSecret map[byte]int contaAttempt = make(map[byte]int) // es. contaAttempt['3'] è il numero di 3 in attempt che non sono giusti al posto giusto contaSecret = make(map[byte]int) // es. contaSecret['3'] è il numero di 3 in secret che non sono giusti al posto giusto for i:=0; i < cifre; i++ { if secret[i] == attempt[i] { gg++ } else { contaAttempt[attempt[i]]++ contaSecret[secret[i]]++ } } for k,_ := range contaSecret { gs += min(contaSecret[k], contaAttempt[k]) } return } func main() { var attempt string secret := "" for len(secret) < cifre { secret += string('0' + rand.Intn(10)) } fmt.Println(secret) for { fmt.Scan(&attempt) gg, gs := compare(secret, attempt) fmt.Println(gg, gs) } }