test1 = { "1h": "bking", "6c": "wqueen", "2g": "bbishop", "5h": "bqueen", "3e": "wking", } test2 = { "9h": "bking", } test3 = { "1r": "bking", } test4 = { "8h": "cking", } test5 = { "8h": "wring", } test6 = { "8h": "wking", "7h": "wking", } test7 = None def isValidChessBoard(board): pieces = "pawn knight bishop rook queen king".split() players = {"w": {}, "b": {}} totals = {"pa": 8, "kn": 2, "bi": 2, "ro": 2, "qu": 1, "ki": 1} if not isinstance(board, dict): return False for k, v in board.items(): if len(k) > 2 or k[0] not in "12345678" or k[1] not in "abcdefgh": return False if not isinstance(v, str) or v[0] not in "bw" or v[1:] not in pieces: return False players[v[0]].setdefault(v[1:3], 0) players[v[0]][v[1:3]] += 1 # TODO for board in players.values(): if board != totals: return False return True for test in [test1, test2, test3, test4, test5, test6, test7]: print(f"Testing board '{test}': ", end="") if isValidChessBoard(test): print("Valid") else: print("Invalid")