← Home
For problem statement at 1000-1999/1700-1799/1760-1769/1769/problemD3.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1760-1769/1769/verifierD3.go ends with case 1 failed: output mismatch
exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var k int
	if _, err := fmt.Fscan(in, &k); err != nil {
		return
	}

	ranks := []string{"6", "7", "8", "9", "T", "J", "Q", "K", "A"}
	suits := []string{"C", "D", "S", "H"}

	type Card struct {
		r, s string
	}
	var deck []Card
	for _, s := range suits {
		for _, r := range ranks {
			deck = append(deck, Card{r: r, s: s})
		}
	}

	printLayout := func(a, b []Card) {
		for i := 0; i < 18; i++ {
			if i > 0 {
				fmt.Print(" ")
			}
			fmt.Printf("%s%s", a[i].r, a[i].s)
		}
		fmt.Println()
		for i := 0; i < 18; i++ {
			if i > 0 {
				fmt.Print(" ")
			}
			fmt.Printf("%s%s", b[i].r, b[i].s)
		}
		fmt.Println()
	}

	idx := map[string]int{}
	for i, c := range deck {
		idx[c.r+c.s] = i
	}

	{
		used := make([]bool, 36)
		var alice, bob []Card
		for _, s := range suits {
			i := idx["9"+s]
			alice = append(alice, deck[i])
			used[i] = true
		}
		for i := 0; i < 36 && len(alice) < 18; i++ {
			if used[i] {
				continue
			}
			alice = append(alice, deck[i])
			used[i] = true
		}
		for i := 0; i < 36; i++ {
			if !used[i] {
				bob = append(bob, deck[i])
			}
		}
		printLayout(alice, bob)
	}

	genLayout := func(seed int) {
		owner := make([]int, 36)
		for si, s := range suits {
			card := "9" + s
			i := idx[card]
			if (seed+si)%2 == 0 {
				owner[i] = 0
			} else {
				owner[i] = 1
			}
		}
		for si, s := range suits {
			base := 0
			down := []int{2, 1, 0}
			up := []int{4, 5, 6, 7, 8}
			sideFlip := ((seed + si) % 3)
			for di, rp := range down {
				card := ranks[rp] + s
				i := idx[card]
				switch sideFlip {
				case 0:
					if (di+base)%2 == 0 {
						owner[i] = owner[idx["9"+s]]
					} else {
						owner[i] = 1 - owner[idx["9"+s]]
					}
				case 1:
					if di < 2 {
						owner[i] = 1 - owner[idx["9"+s]]
					} else {
						if (di+base)%2 == 0 {
							owner[i] = owner[idx["9"+s]]
						} else {
							owner[i] = 1 - owner[idx["9"+s]]
						}
					}
				default:
					owner[i] = owner[idx["9"+s]]
				}
			}
			for di, rp := range up {
				card := ranks[rp] + s
				i := idx[card]
				switch sideFlip {
				case 0:
					if di == 0 {
						owner[i] = 1 - owner[idx["9"+s]]
					} else {
						owner[i] = owner[idx["9"+s]]
					}
				case 1:
					if (di+base)%2 == 0 {
						owner[i] = 1 - owner[idx["9"+s]]
					} else {
						owner[i] = owner[idx["9"+s]]
					}
				default:
					owner[i] = 1 - owner[idx["9"+s]]
				}
			}
		}
		var alice, bob []Card
		for i := 0; i < 36; i++ {
			if owner[i] == 0 {
				alice = append(alice, deck[i])
			} else {
				bob = append(bob, deck[i])
			}
		}
		if len(alice) != 18 {
			if len(alice) > 18 {
				for i := 0; i < 36 && len(alice) > 18; i++ {
					c := deck[i]
					if c.r == "9" {
						continue
					}
					if owner[i] == 0 {
						owner[i] = 1
						alice = alice[:0]
						bob = bob[:0]
						for j := 0; j < 36; j++ {
							if owner[j] == 0 {
								alice = append(alice, deck[j])
							} else {
								bob = append(bob, deck[j])
							}
						}
					}
				}
			} else {
				for i := 35; i >= 0 && len(alice) < 18; i-- {
					c := deck[i]
					if c.r == "9" {
						continue
					}
					if owner[i] == 1 {
						owner[i] = 0
						alice = alice[:0]
						bob = bob[:0]
						for j := 0; j < 36; j++ {
							if owner[j] == 0 {
								alice = append(alice, deck[j])
							} else {
								bob = append(bob, deck[j])
							}
						}
					}
				}
			}
		}
		for len(alice) != 18 {
			if len(alice) > 18 {
				for i := 0; i < 36 && len(alice) > 18; i++ {
					if deck[i].r != "9" && owner[i] == 0 {
						owner[i] = 1
						alice = alice[:0]
						bob = bob[:0]
						for j := 0; j < 36; j++ {
							if owner[j] == 0 {
								alice = append(alice, deck[j])
							} else {
								bob = append(bob, deck[j])
							}
						}
					}
				}
			} else {
				for i := 35; i >= 0 && len(alice) < 18; i-- {
					if deck[i].r != "9" && owner[i] == 1 {
						owner[i] = 0
						alice = alice[:0]
						bob = bob[:0]
						for j := 0; j < 36; j++ {
							if owner[j] == 0 {
								alice = append(alice, deck[j])
							} else {
								bob = append(bob, deck[j])
							}
						}
					}
				}
			}
		}
		printLayout(alice, bob)
	}

	for seed := 1; seed < k; seed++ {
		genLayout(seed)
	}
}