package main // 解説読んだ import . "fmt" import . "os" import bf "bufio" func main() { rd := bf.NewReader(Stdin) wr := bf.NewWriter(Stdout) defer wr.Flush() nums := make([]int, 0, 30240) for i := 0; i < 1e5; i++ { ccc := make([]int, 10) for k, t := 0, i; k < 5; k++ { ccc[t%10]++ if ccc[t%10] > 1 { ccc[0] = -1 break } t /= 10 } if ccc[0] < 0 { continue } nums = append(nums, i) } omits := make([]int, 0, len(nums)) tnums := make([]int, 0, len(nums)) for len(nums)+len(omits) > 0 { var n int if len(omits) > 0 { n = omits[0] omits = omits[1:] } else { n = nums[0] nums = nums[1:] } Fprintf(wr, "%05d\n", n) wr.Flush() fin := false mm := make([]int, 100) for i := 0; i < 30; i++ { var hi, bi int Fscan(rd, &hi, &bi) if i == 0 && hi == 5 { fin = true } mm[hi * 10 + bi]++ } if fin { return } tnums = tnums[:0] for _, t := range nums { h, b := hitAndBlow(n, t) if mm[h*10+b] > 0 { tnums = append(tnums, t) } else { omits = append(omits, t) } } nums, tnums = tnums, nums } } func hitAndBlow(x, y int) (h, b int) { for i := 0; i < 5; i++ { for j, ty := 0, y; j < 5; j++ { if x % 10 == ty % 10 { if i == j { h++ } else { b++ } } ty /= 10 } x /= 10 } return }