Sudoku Puzzle Checker Python

时间:2014-03-08 15:31:57

标签: python

我有一个文件,其中包含一个9x9数独谜题,每个数字之间有空格,如何删除所有空格并检查列或行中没有重复的数字和3x3子部分

while True:
    try:
        file = input("Enter the filename: ")
        myfile = open (file, "r")
        break
    except FileNotFoundError: 
        print ("The File You Have Entered Does Not Exist")
myfile.close() 
my_var = [myfile]

我基本上不知道如何计算该文件中的数字量而不包括它们之间的空格,以及它们是否是任何重复出现的数字。我已经尝试了一切

1 个答案:

答案 0 :(得分:6)

将一行以空格分隔的数字转换为整数列表:

puzzle = [int(n) for n in line.split()]

并测试数独是否有效:

from itertools import product

block_indices = [[x + y + s for s in (0, 1, 2, 9, 10, 11, 18, 19, 20)]
                 for x, y in product(range(0, 81, 27), range(0, 9, 3))]

def per9(iterable):
    # group iterable in chunks of 9
    return zip(*([iter(iterable)] * 9))

def is_valid_sudoku(s):
    return (
        # rows
        all(len(set(r)) == 9 for r in per9(s)) and
        # columns
        all(len(set(c)) == 9 for c in zip(*per9(s))) and
        # blocks
        all(len(set(s[i] for i in ix)) == 9 for ix in block_indices)
    )

给定一个数独数字列表(81个整数),如果数字代表有效的Soduku解决方案,is_valid_sudoku()将返回True。

该解决方案紧凑,快速,高效;它使用生成器和all()测试来检测行,列或块是否每个都包含9个唯一的整数。没有进行输入验证;它假设您的输入只是整数1 - 9。

我将理解这一切对读者来说是一种锻炼方式;如果您无法向自己解释它是如何工作的,您可能也不想向老师展示它!