百度上有个最难数独, 用python跑它
直接上代码
#!/usr/bin/python3
#coding=GB2312
import tkinter as tk
import threading
import time
import random
import copy
import sys class Sudoku(threading.Thread):
winw = 500
winh = 510 def __init__(self):
threading.Thread.__init__(self)
self.ui = tk.Tk()
self.centerDisplay()
self.cells = []
self.createSudoku() self.initUi()
def checkRow(self, row, value):
if value in self.tmpCells[row]:
return False
return True
def checkCol(self, col, value):
for row in range(9):
if value == self.tmpCells[row][col]:
return False
return True
def checkBlock(self, row, col, value):
for i in range(3):
for j in range(3):
if value == self.tmpCells[int(row / 3) * 3 + i][int(col / 3) * 3 + j]:
return False
return True
def solveSudoku(self):
for i in range(9):
for j in range(9):
if 0 == self.tmpCells[i][j]:
for tmp in range(1, 10):
if(self.checkRow(i, tmp) and \
self.checkCol(j, tmp) and \
self.checkBlock(i, j, tmp)):
self.tmpCells[i][j] = tmp
if (self.solveSudoku()):
return True
else:
self.updateUi()
self.tmpCells[i][j] = self.cells[i][j]
continue
else:
continue
return False
return True def createSudoku(self):
#self.cells = [[None for i in range(9)] for i in range(9)]
self.cells = [\
[0, 0, 5, 3, 0, 0, 0, 0, 0], \
[8, 0, 0, 0, 0, 0, 0, 2, 0], \
[0, 7, 0, 0, 1, 0, 5, 0, 0], \
[4, 0, 0, 0, 0, 5, 3, 0, 0], \
[0, 1, 0, 0, 7, 0, 0, 0, 6], \
[0, 0, 3, 2, 0, 0, 0, 8, 0], \
[0, 6, 0, 5, 0, 0, 0, 0, 9], \
[0, 0, 4, 0, 0, 0, 0, 3, 0], \
[0, 0, 0, 0, 0, 9, 7, 0, 0]]
self.tmpCells = copy.deepcopy(self.cells) def initUi(self):
self.cs = tk.Canvas(self.ui, bg = '#7fb081')
self.cs.pack(fill = tk.BOTH, expand = 1)
w = self.winw / 9.0
h = self.winh / 9.0
for n in range(9):
if 0 == n % 3:
width = 4
else:
width = 1
self.cs.create_line(0, n * h, self.winw, n * h, \
width = width, fill = '#2b4490')
self.cs.create_line(n * w, 0, n * w, self.winh, \
width = width, fill = '#2b4490')
for i in range(9):
for j in range(9):
if self.cells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.cells[i][j])
def updateUi(self):
self.cs.delete('test')
for i in range(9):
for j in range(9):
if not self.cells[i][j] and self.tmpCells[i][j]:
self.cs.create_text(30 + j * 55, 30 + i * 57, \
font = ('Times -55 bold'), text = self.tmpCells[i][j], \
tag = 'test', fill = '#aa363d') def centerDisplay(self):
screenw = self.ui.winfo_screenwidth()
screenh = self.ui.winfo_screenheight()
self.ui.geometry('{}x{}+{}+{}'.format(\
self.winw, self.winh, int((screenw - self.winw)/2), \
int((screenh - self.winh)/2)))
self.ui.title('Sudoku by jianc') def run(self):
print(self.solveSudoku()) self.updateUi() sys.setrecursionlimit(100000)
sudoku = Sudoku()
sudoku.start()
tk.mainloop()
百度上有个最难数独, 用python跑它的更多相关文章
- swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~
title: swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~description: 阅读 sowft 框架源码, swoft 第一步, ...
- ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库
ZhuSuan 是建立在Tensorflow上的贝叶斯深层学习的 python 库. 与现有的主要针对监督任务设计的深度学习库不同,ZhuSuan 的特点是深入到贝叶斯推理中,从而支持各种生成模式:传 ...
- Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!
Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!
- 史上最详细的C语言和Python的插入排序算法
史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...
- 在Ubuntu 18.04上安装OpenCV 4(C ++和Python)
OpenCV于11月20日发布了OpenCV-3.4.4和OpenCV-4.0.0.这些版本中有很多错误修复和其他更改.发布重点如下: OpenCV现在是C ++ 11库,需要符合C ++ 11标准的 ...
- 百度上传插件WebUploader,angularjs指令封装
1.WebUploader特点 官网地址:http://fex.baidu.com/webuploader/ 1.1 分片.并发 分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上 ...
- 百度上传插件---webuploader的使用
需求:朋友让找一个兼容IE8的上传插件,卧槽,IE8,我当时是崩溃的,然后就搜到了这个百度的插件,官网是这样描述的 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HT ...
- [转载] 百度上传&下载脚本
下载百度网盘中的文件,最简单的办法是使用wget命令.找到百度网盘文件,点击下载,然后找到相应的下载地址,复制链接地址即可.但这种方法有一个bug,因为百度云网盘访问文件的链接地址是动态的,当文件比较 ...
- 百度上传工具webuploader,图片上传附加参数
项目中需要上传视频,图片等资源.最先做的是上传图片,开始在网上找了一款野鸡插件,可以实现图片上传预览(无需传到后台).但是最近这个插件出了莫名的问题,不易修复,一怒之下,还是决定找个大点的,靠谱的插件 ...
随机推荐
- 【原】git命令行查看全部分支与远程分支不同步问题
git branch -a 查看全部分支 git fetch 重新拉一下分支
- selenium2-java 浏览器cookie的获取
//成功登陆后增加如下代码 File cookieFile = new File("C:\\tmp\\tangdai.cookie.txt"); ...
- python 装饰器 第七步:带有参数的装饰器
#第七步:带有参数的装饰器 #两个基本函数用同一个装饰器装饰 def outer(arg): print(arg) #这是装饰器的代码 def kuozhan(func): print(func) # ...
- 1.Jmeter 快速入门教程(一) - 认识jmeter和google插件
Jmeter是免费开源的性能测试工具( 同时也可以用作功能测试,http协议debug工具 ). 在如今越来越注重知识产权的今天, 公司越来越不愿意冒着巨大的风险去使用盗版的商业性能测试工具. 但如 ...
- 在虚拟机的Linux系统下安装wineqq
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 本文参考教程:http://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread& ...
- 视区相关单位vw, vh ,vm,CSS/CSS3长度、时间、频率、角度单位大全
一.CSS长度值 em 相对于父元素的字体大小 ex 相对于小写字母"x"的高度 gd 一般用在东亚字体排版上,这个与英文并无关系 rem 相对于根元素字体大小 vw 相对于视窗的 ...
- jQuery对于demo元素的上移、下移、删除操作等实现
今天给大家分享一个实用的jQuery技能:dom元素的操作:我们经常会去获取dom元素去实现交互效果,以及数据的操作. 首先复习一下jQuery DOM 元素方法: .get() 获得由选择器指定的D ...
- 背包九讲(Orz)
P01: 01背包问题 题目 有\(N\)件物品和一个容量为\(V\)的背包.第\(i\)件物品的费用是\(c[i]\),价值是\(w[i]\).求解将哪些物品装入背包可使这些物品的费用总和不超过背包 ...
- css-目标伪类选择器:target的应用
目标伪类选择器:target是众多CSS3众多 动态 伪类选择器中的一个,用来匹配锚点指向的元素,突出显示活动的HTML锚. <style> p:target{ border: 2px s ...
- C语言实现Windows下获取IP和MAC地址。
C语言实现Windows下获取IP和MAC地址. #include <winsock2.h> #include <stdio.h> #include <stdlib.h& ...