兩秒解世界上最難的數獨

2021-03-01 MacTrick

 「芬蘭數學家因卡拉,花費3個月時間設計出了世界上迄今難度最大的數獨遊戲,而且它只有一個答案。因卡拉說只有思考能力最快、頭腦最聰明的人才能破解這個遊戲。」這是英國《每日郵報》2012年6月30日的一篇報導。

小編今天給大家分享一段Python代碼,它能解這道世界上最難的數獨,小編測試,最快2.512018秒!(可能更快)

數獨如下:

視頻如下:


("世界上最難的數獨.py"貌似打成"世界上最難的數軸.py"了。。。。。。各位看官多多見諒)

代碼如下:

import time
t0=time.time()class point:    def __init__(self,x,y):        self.x=x        self.y=y        self.available=[]        self.value=0def rowNum(p,sudoku):    row=set(sudoku[p.y*9:(p.y+1)*9])    row.remove(0)    return row def colNum(p,sudoku):    col=[]    length=len(sudoku)    for i in range(p.x,length,9):        col.append(sudoku[i])    col=set(col)    col.remove(0)    return col def blockNum(p,sudoku):    block_x=p.x//3    block_y=p.y//3    block=[]    start=block_y*3*9+block_x*3    for i in range(start,start+3):        block.append(sudoku[i])    for i in range(start+9,start+9+3):        block.append(sudoku[i])    for i in range(start+9+9,start+9+9+3):        block.append(sudoku[i])    block=set(block)    block.remove(0)    return block def initPoint(sudoku):    pointList=[]    length=len(sudoku)    for i in range(length):        if sudoku[i]==0:            p=point(i%9,i//9)            for j in range(1,10):                if j not in rowNum(p,sudoku) and j not in colNum(p,sudoku) and j not in blockNum(p,sudoku):                    p.available.append(j)            pointList.append(p)    return pointListdef tryInsert(p,sudoku):    availNum=p.available    for v in availNum:        p.value=v        if check(p,sudoku):            sudoku[p.y*9+p.x]=p.value            if len(pointList)<=0:                t1=time.time()                useTime=t1-t0                showSudoku(sudoku)                print('\nuse Time: %f s'%(useTime))                exit()            p2=pointList.pop()            tryInsert(p2,sudoku)            sudoku[p2.y*9+p2.x]=0            sudoku[p.y*9+p.x]=0            p2.value=0            pointList.append(p2)        else:            pass    def check(p,sudoku):    if p.value==0:        print('not assign value to point p!!')        return False    if p.value not in rowNum(p,sudoku) and p.value not in colNum(p,sudoku) and p.value not in blockNum(p,sudoku):        return True    else:        return Falsedef showSudoku(sudoku):    for j in range(9):        for i in range(9):            print('%d '%(sudoku[j*9+i]),end='')        print('')    if __name__=='__main__':    sudoku=[            8,0,0,0,0,0,0,0,0,            0,0,3,6,0,0,0,0,0,            0,7,0,0,9,0,2,0,0,            0,5,0,0,0,7,0,0,0,            0,0,0,0,4,5,7,0,0,            0,0,0,1,0,0,0,3,0,            0,0,1,0,0,0,0,6,8,            0,0,8,5,0,0,0,1,0,            0,9,0,0,0,0,4,0,0,            ]    pointList=initPoint(sudoku)    showSudoku(sudoku)    print('\n')    p=pointList.pop()    tryInsert(p,sudoku)

另外,小編成功在github上建了一個個人博客網站

~\(≧▽≦)/~

網址:smartchen2005.github.io

(點擊文末的閱讀原文即可訪問)

(以後會買一個簡潔的域名的!)

That's all.

btw,關注MacTrick公眾號,回復「教程」,獲取Python教程;接收更多有種有趣有料的Python文章

相關焦點

  • 重慶八旬老翁閉關15天破解世界最難數獨題(圖)
    還記得7月2日重慶晚報刊登的那道數獨難題嗎?這道號稱世界最難的數獨題,吸引了許多高手挑戰。江北區一位83歲的退休老人閉關15天,前天凌晨終於把這道題解了出來。玩數獨5年寫了本書這道號稱世界最難的數獨題是一位名叫因卡拉的芬蘭數學家耗時3個月設計的,號稱只有世上最聰明的頭腦才可能得到答案。
  • 周末|號稱世界最難的數獨題,夠聰明的人才能解開它!
    但是這個遊戲又可以讓玩不出來的人抓狂恨不得撕了手中的紙再把筆掰成兩段經過改良推出後的遊戲才正式有了名字「數獨(sudoku)」。到這裡,數獨紅遍天下的大業就完成了三分之二。據說多虧了一位曾在香港任職的紐西蘭裔退休法官,他1997年到日本旅遊無意中看到了數獨遊戲,就把它帶到了英國倫敦,並向《泰晤士報》推薦,這個充滿了智慧和趣味的邏輯遊戲很快就風行起來。數獨有多紅呢,你甚至在衛生紙上、水杯上都能看到它的身影。
  • 69歲農民3天破解世界最難數獨(圖)
    芬蘭數學家設計的世界「最難」數獨小剛 攝69歲農民3天破解世界最難數獨「芬蘭數學家因卡拉,花費3個月時間設計出了世界上迄今難度最大的數獨遊戲,而且它只有一個答案。因卡拉說只有思考能力最快、頭腦最聰明的人才能破解這個遊戲。」這是英國《每日郵報》2012年6月30日的一篇報導。這個號稱「世界最難數獨」的「超級遊戲」,卻被揚州一位69歲的農民花三天時間解了出來。
  • 號稱世界上最難的一道數獨題,你敢來挑戰嗎?據說答案只有一種
    說起一說,金庸老先生的武俠小說無疑是陪伴我們最久的,也是最受我們所喜愛的。金庸老先生的武俠作品陪伴著許許多多的80後、90後度過了童年時光。當金庸老先生與世長辭的消息一經爆出,許多忠實粉絲也是主動的將曾經的經典翻看了一遍。其中有這樣一個故事:聰明的黃蓉會解數獨嗎?
  • 69歲農民3天破解世界最難數獨 海歸女兒幫父尋"數友"
    小剛 攝   「芬蘭數學家因卡拉,花費3個月時間設計出了世界上迄今難度最大的數獨遊戲,而且它只有一個答案。因卡拉說只有思考能力最快、頭腦最聰明的人才能破解這個遊戲。」這是英國《每日郵報》2012年6月30日的一篇報導。這個號稱「世界最難數獨」的「超級遊戲」,卻被揚州一位69歲的農民花三天時間解了出來。而這個具有初中文化的老漢,數獨遊戲啟蒙正是源於揚子晚報。
  • 數學家號稱設計全球最難數獨遊戲 歡迎挑戰(圖)
    芬蘭一名數學家號稱設計出全球最難的數獨遊戲  中新網7月1日電 據臺灣「中廣新聞網」6月30日報導,芬蘭一位數學家號稱設計出全球最難的「數獨遊戲」,並刊登在報紙上,讓大家去挑戰。這位數學家說,他相信只有「智慧最頂尖」的人才有可能破解這個 「數獨之謎」。  據介紹,目前,數獨遊戲難度的等級有一到五級,一是入門等級,五則比較難。不過這位數學家說,他所設計的數獨遊戲難度等級是十一,可以說是所有數獨遊戲中,難度最高的等級。  他還表示,他目前還沒遇過解不出來的數獨遊戲,因此他認為「最具挑戰性」的數獨遊戲並沒有出現。
  • 芬蘭數學家號稱設計出全球最難數獨遊戲(圖)
    芬蘭一位數學家號稱設計出全球最難的「數獨遊戲」,並刊登在報紙上,讓大家去挑戰。這位數學家說,他相信只有「智慧最頂尖」的人才有可能破解這個 「數獨之謎」。據介紹,目前,數獨遊戲難度的等級有一到五級,一是入門等級,五則比較難。不過這位數學家說,他所設計的數獨遊戲難度等級是十一,可以說是所有數獨遊戲中,難度最高的等級。他還表示,他目前還沒遇過解不出來的數獨遊戲,因此他認為「最具挑戰性」的數獨遊戲並沒有出現。
  • 世界上最難的智力遊戲 你能做出來嗎?
    世界上最難的智力遊戲 你能做出來嗎?在下面的題目中,你或許可以看到諸如數獨,Killer數獨之類熟悉的題型,也會有一些沒有見過的新穎題型,但不變的是他們對答題者邏輯思維能力的超高要求。那麼,你準備好了嗎?1.世界上最難的數獨
  • 數獨背後的四個數學問題(組圖)
    讓畫中天使牽掛的就是牆上掛著的數字迷宮,橫向、縱向、對角線數字的和都是34,在最下面一行的中間兩格,畫家自娛地留下了創作年代1514.  一般常見的初盤數字個數在22—28之間,而數獨愛好者們常問的一個問題是:最少給出多少個數字,數獨遊戲才確保有惟一解?具體地說:最少需要在初盤中給出多少個數字,使得移除其中任何一個數字該數獨遊戲便沒有惟一解。  事實上,這個問題是數獨中最有數學趣味的問題之一,並且至今仍未得到解決。
  • 每天一道數獨題,佳學慧帶你由淺入深學數獨
    說到數獨想必很家長朋友都覺得既簡單又困難。說它簡單,是因為數獨規則很簡單,在9X9的數字格中給出一定的已知數字和解題條件,利用邏輯和推理,在其他的空格上填入1-9的數字,使1-9每個數字在每一行、每一列和每一宮中都只出現一次就算完成解題。
  • Leetcode 37 超越100%算法,解數獨@python
    Leetcode 37 解數獨,具體代碼見上圖,下面講一些注意點1.本題採用算法思想:交集回溯,即使用行、列、3*3矩陣已有數字,通過交集推算每個框可能的數據,然後驗證,驗證不通過回溯,直至驗證通過(1)交集推算每個框可能的數據,大字體數據為已有數據,小數字為可能的解,如下所示:數獨交集圖可能的解
  • 數獨遊戲怎麼玩
    工具/原料紙,筆,數獨題數獨一:數獨的玩法。數獨的玩法比較多,比較常見也是我們經常玩的是九宮格。另外還有變形數獨,包括對角線數獨,鋸齒數獨,killer數獨(也稱為殺手數獨)等。在這八十一格中給出一定的已知數字和解題條件,利用邏輯和推理,在其他的空格上填入1-9的數字。使1-9每個數字在每一行、每一列和每一宮中都只出現一次。每一個粗線宮內的數字均含1-9,不重複。注意:每一道合格的數獨謎題都有且僅有唯一答案,推理方法也以此為基礎,任何無解或多解的題目都是不合格的。
  • 中國將首次舉辦數獨、謎題兩大智力世錦賽
    中國將首次舉辦數獨、謎題兩大智力世錦賽   中新網北京6月5日電 (記者 尹力)第八屆世界數獨錦標賽和第二十二屆世界謎題錦標賽兩項智力賽事將於10月在北京舉行。
  • 玩數獨真的能開發大腦嗎?學數獨需要報班嗎?向您分享我家的經歷
    讀幼兒園大班時,我家小子在我的引導下開始接觸數獨。我在某寶上買了一副木質的數獨遊戲盤和一本小學生數獨集,與小子一起玩起了數獨。數獨規則簡單,入門技巧也不難(可上網搜索),小子很快就接受了,開始嘗試解題。這時我會在旁邊看著小子做題,當他在某個點卡住時,進一步向他講解解題技巧;當他某個數字重複填寫時,及時指出來;當他把題完整的做完時,大聲地誇獎他"寶寶真棒!
  • 12歲打敗數獨世界第一,15歲保送北大,從小玩數獨的孩子多厲害?
    他在從6歲開始玩數獨,10歲就參加了中國數獨錦標賽,並且獲得冠軍,12歲時在最強大腦中打敗了「世界數獨第一人森西亨太」,後來更是進入了數獨國家隊,15歲就被保送進北大,由此可見從小開始接觸數獨的孩子有多厲害!
  • 簡單的六宮數獨怎麼玩?
  • 6歲玩數獨,12歲獲數獨世界第一,從小玩數獨的孩子有多優秀?
    相信有不少家長回答的都是「數獨」,為什麼家長都特別支持孩子玩數獨呢?因為數獨可以說是世界上公認培養數學思維最有效的遊戲之一。要想孩子數學好,數學思維可以說是必不可少的。因為數學在孩子小學階段主要考的是孩子的邏輯思維,而越是高年級越是需要孩子有良好的邏輯思維。
  • 數獨簡史(4)
    給你一道數獨題,它是什麼難度這個基本上很難。評價標準很多,第一種是按提示數多少,很多網站或書都是以這個為標準。在解題程序還不是技術解法的時候,每暴力一個數就要多花費更多的一點時間,費時多的就難。所以有人說22個數以下的都比較難的。後來,人們發現雖然從統計上說大多數難題提示數字都少,但也不存在絕對的關係。
  • 玩數獨厲害的孩子,長大有多牛?他12歲登頂世界第一,15歲上北大
    不知道各位父母有沒有接觸過數獨,玩數獨需要很強的思維能力和邏輯推理能力。如果一個孩子從小玩數獨就很厲害,說明他們的思維邏輯能力很強,未來大有前途。那麼從小玩數獨厲害的孩子,長大後有多牛?然而12歲的胡宇軒,憑藉超強的思維邏輯能力,戰勝了當時中國數獨成績最好的陳詩雨。一個月後,胡宇軒迎戰2014年和2015年世界數獨錦標賽的冠軍——當時數獨的世界第一,來自日本的森西亨太。
  • 玩轉數獨之九宮數獨初級技巧解題實例
    上次我們講了九宮數獨初級技巧玩轉數獨之標準九宮數獨初級技巧,並留下了一道題,今天我們來將這道題完整的解出來。完成了部分的九宮數獨繼續觀察,因為又填出來了一些數字,可能有些行、列、宮又可以有唯一數法了,所以還是從最簡單的方法入手