Cracking this Tetris Puzzle with My Custom Brute-Force Search Program

แชร์
ฝัง
  • เผยแพร่เมื่อ 5 พ.ย. 2024

ความคิดเห็น • 222

  • @sweroger
    @sweroger  ปีที่แล้ว +228

    ==== 補充一些影片中沒說到的資訊 ====
    「俄羅斯拼圖」應該不是這類拼圖的正式中文名稱,
    在英文裡有一個正式的名稱是 polyomino tiling puzzle(可譯為:多連方平鋪謎題),
    或者就簡稱為 polyomino puzzle。
    en.wikipedia.org/wiki/Polyomino#Tiling_with_polyominoes
    如同有些留言提到的,
    解這類 puzzle 有一個非常高效的演算法:dancing links algorithm(又稱 algorithm X, DLX),
    en.wikipedia.org/wiki/Dancing_Links
    可惜在做這支影片時我還不知道有這個演算法,
    當然也就沒能實作出來。
    後來我理解了 DLX 並且用 Python 實作出來,
    可以用單核 CPU 在 15 分鐘內找出全部 69415 個解,
    已經比我影片中寫的版本還要快 5 倍以上(影片中的是單核 80 分鐘)。
    後來在 Github 上找到別人用 C++ 實作的 DLX 程式碼,
    github.com/jlaire/dlx-cpp
    解這個拼圖可以用單核在 9.5 秒內找出全部 69415 個解,
    等於比我影片中的版本快 500 倍,
    實在是喪心病狂😂
    另外也有人提到可以用 BurrTools 這個開源軟體來解,
    我去找來用了(花了不少時間才終於學會),
    它可以用單核在 1.2 分鐘內找出 69415 個答案,
    也已經非常快了。
    根據官方說明,它內部也是用 DLX 演算法。
    以上實驗都是在 M1 MacBook 上測試的。
    總之非常感謝各路大神留言告訴我這些我本來不知道的知識!
    ==== 以下是做這支影片的感想 ====
    這支影片絕對是我目前為止花最多時間製作的影片,
    從去年八月就開始製作,
    程式就寫了好幾個版本,
    也花了超多時間思考如何拍攝、如何呈現程式和演算法、哪些內容大眾會感興趣、哪些內容大眾可能不感興趣或看不懂,
    也常常懷疑:「我花這麼多時間製作一支影片真的值得嗎?會不會做完沒人看?」
    (結果影片發布後的前 10 個月真的沒什麼人看,觀看數不到 2000,後來才突然飆升到接近 10 萬)
    總之在各種憂慮和拖延下,
    我終於還是把這支影片做出來了,
    這是我目前能力範圍內能做到的最好的版本了。
    喜歡這支影片的話歡迎透過按讚、留言、超級感謝支持我!
    也歡迎給我任何合理的批評、建議!

    • @阿亮阿亮-l4f
      @阿亮阿亮-l4f ปีที่แล้ว +9

      好強,看到一半心裡也默默的在想有這種手把手引導怎麼去思考解決問題演算法的影片真好。
      不過這樣影片真的超級費功夫呢。
      非常感謝🙏

    • @timleb3141
      @timleb3141 8 หลายเดือนก่อน

      你好, 可以拍一下影片講解一下怎麼用程式表達拼圖加進去嗎? 例如加一片拼圖, 地盤是發生了什麼事?

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +6

      @@timleb3141 盤面是用一個二維陣列來表示(實作上我用的是 numpy.array),
      例如一個空的盤面就是
      [[0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0]]
      把拼圖放進去之後,被覆蓋的地方就變成 1
      例如把 H 這片放進去之後就變成:
      [[0, 0, 0, 0, 0, 0, 0, 0],
      [1, 0, 1, 0, 0, 0, 0, 0],
      [1, 1, 1, 0, 0, 0, 0, 0],
      [1, 0, 1, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0]]

    • @laujimmy9282
      @laujimmy9282 8 หลายเดือนก่อน

      我覺得這種影片超讚的。 讓大家知道開發的思維和遇到的問題。

    • @kai-ot9ye
      @kai-ot9ye 8 หลายเดือนก่อน

      @3141 偷懶一點也可以找處理圖像用的函式庫,直接開一張8*8像素的圖當地盤,這樣就可以直接把每個拼圖都當成一張小圖複製貼上到地盤上,這樣只要貼上前或後檢查像素顏色就知道有沒有重疊,拼好圖後也可以直接看顏色就知道這是哪一塊

  • @mighty_sin
    @mighty_sin 8 หลายเดือนก่อน +140

    身為資工系的學生 學長讓我理解到好好念書的重要性

    • @phonedr.1013
      @phonedr.1013 8 หลายเดือนก่อน +2

      我也是資工系,佩服學長的還有說故事以及剪輯手法 已跪😂

  • @Jefftw2
    @Jefftw2 8 หลายเดือนก่อน +62

    這個puzzle是8x8,最常見的一種是12塊 Pentominoes 再加上一個2x2所組成。
    後來發現它有H與3x2方塊,雖然相對上,可能沒那邊有數學意義上。但有調校過,所以組合數才會如此之多,讓玩家挫折感比較沒那麼大。可以很快就拼出新的一種。
    你尋找最漂亮的solution,是靠著配色漸層的方式,但這取決於初始顏色的配置。另一種思路是將一組解,是否能將其中兩個互換,馬上又變成另一組解。若某組解,可以找到三組pairs互換,那就可以用最小調動的方式,找出八組解。
    和你一樣,我小學時最喜歡玩的,是Brain Block Hexiamond Puzzle,有4968組解。我印象中有找出一組解,可以變化出32組解。

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +15

      哇,你真的非常專業!
      我也認為這個拼圖加入了不少 4 格的 polyominoes 是為了降低難度。
      其實在做這個企劃的過程中,為了驗證我的程式沒有問題,就有跑過你說的 12 pentominoes plus 2x2 tetromino tiling 8x8 square 的解,總共找到了 16146 unique solutions,跟我在網路上找到的解答一樣。

  • @HamadaChu
    @HamadaChu 8 หลายเดือนก่อน +8

    我不是IT專業,但我還是把這個短片仔細看完了。影片開頭那一段父子一起同樂的敘述相信是博主最深的回憶,令尊若看到這支影片一定格外開心 👍

  • @Memesqueen777
    @Memesqueen777 8 หลายเดือนก่อน +28

    ❤設計師路過很喜歡 產生了學程式的想法

  • @Hasnotsleptallnight
    @Hasnotsleptallnight 7 หลายเดือนก่อน +2

    以前小時候老爸也有買類似的給我玩,是一個黑色小小片的薄盒,打開後就是這種拼圖,後來還買了二代,我還把一二代的拼圖混著拼,也感謝演算法讓我看到這影片

  • @wei1234
    @wei1234 8 หลายเดือนก่อน +16

    10個月後演算法帶我(好像還有很多人)來看這隻優質影片
    真的很有趣也很用心 做出來的那個漸層拼圖的效果也很好
    加油 希望你的影片能被更多人看到

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +3

      謝謝你的祝福!真的,這支影片直到上個月都還只有 1500 觀看,讓我蠻受挫的,覺得可能台灣觀眾就是對這類題材沒興趣吧。
      現在終於知道還是有很多人喜歡這類題材😊

  • @huyi122
    @huyi122 8 หลายเดือนก่อน +7

    很棒!我以前也喜欢自己写点小程序,解决一些有意思的问题,虽然已经不做软件了,不过那种靠写代码解决问题的成就感是很让人上瘾。 我个人最喜欢的是 把面前的问题数学化的思考过程,这也是最可贵的部分。

  • @yojaychang
    @yojaychang 8 หลายเดือนก่อน +27

    蠻佩服這類型的youtuber,
    畢竟這很燒腦又很小眾(大多資工資管另加少數路人甲),
    感覺CP值太低了(以站在收益的角度上,跟彈彈鋼琴等相比,訂閱就破幾十萬幾百萬,真的是「彈指之間」)
    願意繼續分享蠻感謝的就是。
    (所以各位網友看完要心存感激呀

    • @Musicoca
      @Musicoca 8 หลายเดือนก่อน +5

      你是懂踩一捧一的

    • @youushinn._.
      @youushinn._. 7 หลายเดือนก่อน

      不如您去拍點彈彈鋼琴的影片吧,彈指之間就有高收益,有什麼理由不去做

    • @yojaychang
      @yojaychang 7 หลายเดือนก่อน

      @@youushinn._. 不能兼職,這理由夠充分嗎?

    • @youushinn._.
      @youushinn._. 7 หลายเดือนก่อน

      @@yojaychang 拍影片不是需要兼職才能做的事情

    • @yojaychang
      @yojaychang 7 หลายเดือนก่อน

      @@youushinn._. 你來法務部問呀

  • @K59820433
    @K59820433 หลายเดือนก่อน

    喜歡這種講思路不講code的流程
    因為懂了思路code就很好寫了
    翻轉的問題我本來以為要用矩陣,沒想到鎖定一個拼圖就能達成效果,好強

  • @kevenpeter2000
    @kevenpeter2000 ปีที่แล้ว +13

    演算法工程師!優秀!

  • @yunhsuantsai6036
    @yunhsuantsai6036 8 หลายเดือนก่อน +1

    聲音好好聽,人又帥,頭腦又不簡單。拜託多一點影片分享知識,不要太花時間的也好,今天才找到寶,真的是太期待了😊

  • @damnit00000001
    @damnit00000001 8 หลายเดือนก่อน +8

    演算法帶我來看!雖然30年前老師誤我一生,讓我們班大約50個人放棄寫程式。但是寫程式果然跟CODE無關,是和思緒方法有關。清楚的頭腦能讓程式很漂亮!

    • @yojaychang
      @yojaychang 8 หลายเดือนก่อน

      寫程式就是跟code有關,
      你說的是solution或演算吧!

  • @dodolii3543
    @dodolii3543 8 หลายเดือนก่อน +1

    能夠把邏輯、思考順序整理出來好厲害!佩服~

  • @poohcheng3905
    @poohcheng3905 7 หลายเดือนก่อน

    生为一个developer我想说的是, 你真强, 除了上班写代码, 根本不会想要任何一个时候再碰代码了。。

  • @鄭東章
    @鄭東章 8 หลายเดือนก่อน +4

    國中的時候買過這組
    大學的時候是用qbasic跟C寫程式來解出全部的解
    這些拼片可以排出8*8的正方形
    如果厚度剛好跟一格的長度一樣
    也可以排成4*4*4的正立方體唷

  • @陳遠謀-l9y
    @陳遠謀-l9y 7 หลายเดือนก่อน

    厲害了! 程式寫的好厲害! 而且講解的很易懂!

  • @enw8171
    @enw8171 6 หลายเดือนก่อน

    影片超級棒~~
    最近剛好在研究floorplan相關技術布局的論文
    看到這個很舒壓又厲害又可愛的影片
    期待厲害前輩再出更多類似的題材!!!!

  • @mr15pw
    @mr15pw 7 หลายเดือนก่อน

    同樣也是軟體工程師被引導來,很推薦想嘗試程式的學生來思考,期待你的下部作品

  • @BaiXiao-hc7bz
    @BaiXiao-hc7bz 8 หลายเดือนก่อน

    也是被演算法推薦而來
    蠻喜歡這種一點一滴找到最優解的方法
    過程雖然燒腦 但成功後的成就感很棒
    看到您那麼認真 還拍了一部片出來 索性按下訂閱了~

  • @aliensouo
    @aliensouo 7 หลายเดือนก่อน

    這就是寫程式有趣的地方,想當初專題弄了3個月最後變成我滿意的形狀也是滿滿的成就感

  • @Hemophagocytic
    @Hemophagocytic 8 หลายเดือนก่อน +5

    我覺得寫程式最厲害的就是各種發想
    要知道目前的題目可以對應到哪些方法/演算法,那個聯想力真的要很豐富
    自己是在公司有稍微寫VBA但不是專業的那種,頂多就是整理數據和各種懶人處理寫成一鍵完成
    但就是會在不經意的時候突然想到好像可以這樣寫!然後就會趕快筆記下來
    最後寫出來真的會很有成就感XD
    這部片真的也是玩心大發,如果我更厲害的話感覺也會愛上寫這類型的題目
    不過...還是看看你的影片過過癮就好XD

  • @kukisun2008
    @kukisun2008 8 หลายเดือนก่อน

    有很多有趣的題目可以玩。例如 400年有幾個13號星期5。 找出拍之後的100萬位數有幾個3。 找出任意宮格的橫加豎加斜加相等的數字,例如9,16,25,36,64....等。

  • @yojaychang
    @yojaychang 8 หลายเดือนก่อน +1

    蠻有趣的,演算法感覺類似迷宮鼠(回溯)跟魔術方塊(方塊與方塊的連結)的結合,尤其是找出最佳解的方式,跟迷宮鼠有異曲同工之妙(還多了間隙檢查跟旋轉反面)

  • @BencyLin
    @BencyLin 8 หลายเดือนก่อน +1

    身為趕 code 郎的一員,看到這麼精美的動畫肯定是要訂閱給讚的

  • @曾禎攸-q3t
    @曾禎攸-q3t 8 หลายเดือนก่อน

    經過了半年在高中電資班群被抹滅熱情的時間,我又感覺到了最初愛上程式和選擇電資的原因❤

  • @JohnTaiKAO
    @JohnTaiKAO 7 หลายเดือนก่อน

    有趣,最近帶小孩在學程式也在思考這個

  • @TheOneHong
    @TheOneHong 7 หลายเดือนก่อน

    其實可以用GPU來算?(無論DFS還是最終的打分),或者用numpy那樣底層C++加速的第三方庫來寫也能更加快,不過生出大量答案之後選出最佳的就是機器學習的本質吧

  • @林貓貓-c9z
    @林貓貓-c9z 8 หลายเดือนก่อน +1

    這種拼圖 用dancing link的資料結構 當作exact cover的問題去解 可以很快

    • @morrisyang8999
      @morrisyang8999 7 หลายเดือนก่อน

      建議播主把更先進的資訊補上資訊欄,dancing links 配上 algorithm x 解決精準覆蓋問題 (exact cover problem) 是目前公認最快的通用算法

  • @JasonChen-cf8ox
    @JasonChen-cf8ox 8 หลายเดือนก่อน +2

    好喜歡這個企劃 淺顯易懂而且很有趣

  • @micako6309
    @micako6309 8 หลายเดือนก่อน

    初見 想法好有趣
    每一步都拆分的很合理又簡單易懂
    特別喜歡最後用漸層計分的發想
    把美感數值化的部分好評

  • @vernyjex9338
    @vernyjex9338 8 หลายเดือนก่อน +3

    彷彿看到楓之谷裡面的戰地方塊

    • @騷彌
      @騷彌 7 หลายเดือนก่อน

      戰地可能更難拼😂

  • @龍-q2e
    @龍-q2e 8 หลายเดือนก่อน +7

    人帥又會寫程式 真好

  • @Jiajia-f1q
    @Jiajia-f1q ปีที่แล้ว +5

    我也覺得蹭一下 chatGPT 解一次說不定就有流量了 XD

  • @zayawei
    @zayawei 8 หลายเดือนก่อน

    這我小時候也有一樣形狀的拼圖!
    直到現在我都能記得一兩個解XD
    感謝你告訴我它有55萬種拼法🤣

  • @wargreymon2024
    @wargreymon2024 8 หลายเดือนก่อน +1

    解釋很清淅,支持!

  • @morrisyang8999
    @morrisyang8999 7 หลายเดือนก่อน +1

    建議播主把更先進的資訊補上資訊欄,dancing links 配上 algorithm x 解決精準覆蓋問題 (exact cover problem) 是目前公認最快的通用算法

    • @allenchen8559
      @allenchen8559 7 หลายเดือนก่อน

      真的嗎~~ 評論區看到有用SA演算法、burrtools工具、轉化成Floorplanning等等的,但我都不會哈哈
      我這邊實驗用影片裡DFS和剪枝C++單核跑約3分45秒,用 dancing links X 演算法C++單核跑約1分9秒。(但處理轉化拼圖成exact cover problem需要的01矩陣輸入花蠻多時間弄的哈哈,總共2209列、64+13行)

    • @sweroger
      @sweroger  4 หลายเดือนก่อน

      感謝建議!我把 dancing links algorithm 和 BurrTools 的相關資訊補充在置頂留言和資訊欄了!

  • @oneyearhou2331
    @oneyearhou2331 8 หลายเดือนก่อน

    So impressive !!! 結合小時候的玩具跟長大後的技能, 做出來一定很有成就感!
    圖形視覺化的部分也簡單易懂

  • @TheWaiting910
    @TheWaiting910 ปีที่แล้ว +2

    設定好constraint給solver解很快

  • @twcaa
    @twcaa 8 หลายเดือนก่อน

    思考過程很有趣,應該能延申成組成3d模型。
    另外,也有一個open source叫burr tools,是專門用來求解這種題目。

  • @大大-b4v
    @大大-b4v 7 หลายเดือนก่อน

    小時候有玩過木頭製的立體版本 可以組成一個正方形 不知道有幾種解法 我想應該會有很多 不過我猜會比平而的少

  • @c.kc.k3830
    @c.kc.k3830 7 หลายเดือนก่อน

    很厲害 很特別的頻道 會脫穎而出的

  • @kee40040310
    @kee40040310 ปีที่แล้ว +2

    學長好厲害!

  • @yangyang-im9nb
    @yangyang-im9nb ปีที่แล้ว +3

    越來越帥

  • @terry3612
    @terry3612 8 หลายเดือนก่อน +2

    覺得在跑"有多少種可能的方法"之前可以先加一些簡單的判斷來快速刪去不可能的結果,例如:判斷出完全獨立的被分隔的區塊(1格到3格)(6:34時"H"字型分隔出獨立的1格,明顯不可能是其中的解),這樣會不會可以減少更多時間?(我只是一個C++初學)

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      是,可能會更快一點~

  • @boxunwu1518
    @boxunwu1518 8 หลายเดือนก่อน

    很讚的影片,希望未來的我也能寫出這麼複雜的東西出來

  • @MrkTuoCNd3S3R8ulrjqOXQ
    @MrkTuoCNd3S3R8ulrjqOXQ 7 หลายเดือนก่อน

    這個影片很生活化👍

  • @周哲煒-u1r
    @周哲煒-u1r 8 หลายเดือนก่อน +1

    有趣的東西,沒想過這東西也可以用程式來解。小時候有玩過類似這個的,只是是立體的,要拚成金字塔(單位元件是小球組成的,不是正方體),但這我就不知道怎麼coding了,旋轉的角度好多種可能

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      我知道你說的是什麼😆

    • @zayawei
      @zayawei 8 หลายเดือนก่อน

      龍博士

  • @夢幻-d5d
    @夢幻-d5d 8 หลายเดือนก่อน

    這就是為什麼我要學電腦工程的原因,它自己一直跳東西真的很療癒

  • @uTubeElmer
    @uTubeElmer 8 หลายเดือนก่อน

    感謝大大無私的分享, 這是一個非常不錯的練功好題材.

  • @FBI-mi2ne
    @FBI-mi2ne 8 หลายเดือนก่อน +1

    這麼優質的東西我居然10個月後才看到

  • @jasontsai8596
    @jasontsai8596 7 หลายเดือนก่อน

    我家有個四角拼圖,這個怎麼拚都拚不起來
    問了chatgpt,也是給我這個backtracking的方法
    其實我不太了解跟其他演算法 ex廣度優先搜索 速度上會有甚麼差異

  • @mingchi21
    @mingchi21 8 หลายเดือนก่อน

    做的太棒了,講述很有條理,拍的也很專業

  • @bird8130976
    @bird8130976 8 หลายเดือนก่อน

    有一種產品叫做【時間拼圖】,可以用這樣的方式拼出月份+日期+星期,拼法跟本影片的極為相似,期待有一天工程師能破解看看是怎麼算出外框和零件形狀的(外框不是正方形)

    • @Jefftw2
      @Jefftw2 8 หลายเดือนก่อน

      我有看過這類puzzle,這種都設計得很巧妙。然後原設計者一定有用電腦跑過所有組合,確定都有解。
      但老實說,每天要解一組特定日期的puzzle 將當日日期空出來,會非常耗時。除非有程式輔助。

  • @willhsieh6700
    @willhsieh6700 7 หลายเดือนก่อน

    值得鼓勵, 對我而言這是會讓我看完有收獲的影片!

  • @北方-o9x
    @北方-o9x 8 หลายเดือนก่อน

    我玩的時候正方形是放在外面,然後搞很久才把正方形 塞進去

  • @呂奕珣
    @呂奕珣 8 หลายเดือนก่อน +2

    可以靠顏值硬要靠實力

  • @ozone924
    @ozone924 8 หลายเดือนก่อน

    超級有趣!!希望你繼續做更多有趣的題目😍

  • @c434rdd410
    @c434rdd410 8 หลายเดือนก่อน

    所以市售500,1000片人像風景圖像拼圖 拼法不是唯一? 這程式演算法有機會可以把碎紙機碎出來的紙還原?

  • @80307100
    @80307100 8 หลายเดือนก่อน +3

    嗨嗨,謝謝大大的分享
    我覺得可以用SA (退火模擬演算法)或是一些greedy 的方式減少runtime。使用heuristic 的演算法應該會比branch and bound暴力搜索的方式再有效一點。但考慮到problem size比較小的話,可以試試ILP(整數規劃求解)也是很有效率的。
    此外這問題可以model成floorplaning的問題,可以用一些常見的EDA演算法,或是使用graph的algorithm 也是一個很棒的方向。

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      感謝建議!請問你說的這些演算法,有哪些是可以找出全部解答的,有哪些是只能找出一部分的解答的呢?

    • @chngh
      @chngh 8 หลายเดือนก่อน +3

      上學期剛修完EDA就看到影片XDD
      馬上就想到Floorplaning的B*tree算法,沒用SA的話應該也是能順利找到所有解答

  • @nuc_bobo
    @nuc_bobo 8 หลายเดือนก่อน

    資工學生邊看就回想起修ADA(Algorithm Design and Analysis)的痛苦時光😂

  • @raylo4056
    @raylo4056 8 หลายเดือนก่อน

    同樣為軟體工程師,覺得佩服
    下班只想躺平,雖然上班也是😅

  • @ddyjis
    @ddyjis 8 หลายเดือนก่อน +2

    想問一下,除了 F 以外的拼圖片都會試八個方向放進去嗎?

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +2

  • @vesdhiteas5378
    @vesdhiteas5378 8 หลายเดือนก่อน

    圖做的很清楚很棒耶,我在想是不是可以用recursion來寫? 6:33 先確定拼圖盤子的邊緣都沒有空格,然後再往盤子的中心遞迴

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +2

      可以啊,我的程式實作上也是用 recursion 來實現 backtracking🙂

  • @脫線寶寶-f5u
    @脫線寶寶-f5u 7 หลายเดือนก่อน

    可以請問程式是怎麼判斷拼成死路的嗎?

  • @scott5227
    @scott5227 8 หลายเดือนก่อน

    加上memorization應該會更快一點,意思是8*8的表格上,如果使用了相同的積木且拼出相同的圖形,那麼後續的情況必定相同。因此如果在第一次跑到新的使用積木情形或是新的圖形就紀錄,第二次遇到這個情況就不用再多跑一次。(我想應該會有相同積木能夠拼出相同形狀的情形吧?)

    • @zz3060506
      @zz3060506 8 หลายเดือนก่อน +3

      是memoization哦第一次看到的時候我也看錯

    • @scott5227
      @scott5227 8 หลายเดือนก่อน

      @@zz3060506 哈哈,最近剛好用過

    • @cheakimlong6079
      @cheakimlong6079 8 หลายเดือนก่อน +1

      应该有,我玩过类似的游戏。

  • @allenli123
    @allenli123 8 หลายเดือนก่อน +2

    請問這題的程式有可能儘量用 ChatGPT 來寫嗎?要如何描述呢?

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +2

      我覺得可以,但具體要怎麼描述我不確定
      初始可以給他這些關鍵字: polyominoes tiling 8x8 square
      他應該就能抓到概念

  • @ttps870820
    @ttps870820 7 หลายเดือนก่อน

    好棒的影片❤ 支持

  • @修-i5q
    @修-i5q 8 หลายเดือนก่อน

    這種企劃真的蠻有趣的 就算不會寫程式也可以享受到樂趣 點讚

  • @yang20101990
    @yang20101990 8 หลายเดือนก่อน

    真感動!

  • @好棒的專業教室
    @好棒的專業教室 ปีที่แล้ว +3

    好厲害

  • @pork2862
    @pork2862 5 หลายเดือนก่อน

    我只覺得你很厲害 XDD
    我們不是同一個世界的人

  • @joshualiu2693
    @joshualiu2693 7 หลายเดือนก่อน

    您好,您在做避免出现旋转翻转等操作的时候,会不会出现可能的丢解情况?比如部分拼图块被翻转了,但是仍然可以拼出来。您给的原始图块都是某个固定面朝上的,所得到的所谓翻转的多余解是指所有拼图块都翻转的结果。但是如果只是某一两块出现翻转,会不会也能恰好拼出来呢?这种情况可能需要考虑进去。

    • @sweroger
      @sweroger  6 หลายเดือนก่อน

      這有考慮進去了,除了某一片被固定方向以外,其他每一片都可以任意旋轉、翻轉,所以應該不會丟解

  • @陳涵宇-d4s
    @陳涵宇-d4s 7 หลายเดือนก่อน

    這個太好看啦!!

  • @彥燐傅
    @彥燐傅 8 หลายเดือนก่อน

    學長 翻轉跟旋轉的限制怎麼做 聽不懂

  • @Frank-uk3tl
    @Frank-uk3tl 8 หลายเดือนก่อน

    Python的multiprocessing只是concurrent on a single processor 不會變快吧

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      不是喔,Python 的 multiprocessing 會建立多個進程(processes),每個進程都可以運行在不同的處理器或核心上

  • @paulperkinstein7139
    @paulperkinstein7139 7 หลายเดือนก่อน

    只差5種就是完美的拼圖了

  • @peterxiau
    @peterxiau 8 หลายเดือนก่อน +1

    好驚人,竟然有這麼多組合。我知道你有過濾「全盤面對稱」。
    但不知道有沒有過濾「單一 piece 對稱」的狀況?
    比方說ㄇ字形或是工字形的 piece,其實都有軸對稱,會導致很多答案重複。

    • @sweroger
      @sweroger  8 หลายเดือนก่อน +3

      這個我有處理到喔,如果一個 piece 旋轉或翻轉之後跟已出現過的形狀一樣,我就不會把它當成一個變體。
      例如:H那塊只有兩種變體,V那塊則有四種變體。

    • @ivanwong1849
      @ivanwong1849 8 หลายเดือนก่อน

      @@sweroger H有四種變體,旋轉對稱和前後反轉

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      @@ivanwong1849 H 只有兩種變體。前後反轉不會變成新的形狀

    • @yojaychang
      @yojaychang 8 หลายเดือนก่อน

      ​@@ivanwong1849你來你來,畫出4種H看看😂

  • @frankyya1
    @frankyya1 8 หลายเดือนก่อน

    看到你的雷射眼頭貼
    代表.. 未來可能會講一些加密貨幣相關的嗎? 真期待

  • @peterxiau
    @peterxiau 8 หลายเดือนก่อน +1

    也寫了一下,我這邊也是 69415 組解,跟你一樣。用了跟你大不相同的一些剪枝方法,但沒有用多執行序,單核 3 分 15 秒。不過我作弊跑 C++ 就是了。跑 Python 的話可能要 30 分鐘 XD

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      讚喔!C++ 是王道啦,用 Python 才是偏門😆
      你用了什麼剪枝方法?

    • @peterxiau
      @peterxiau 8 หลายเดือนก่อน

      ​@@sweroger 就我嘗試從左上到右下,判斷每一個 cell 可以被什麼方塊填入。Pseudo code 有點像這樣
      for x in range(0, 8):
       for y in range(0, 8):
        for p in rest_pieces:
         if try_put(p, x, y)
          # 每放下一塊,直接用掃描的方式找到下一個空格的 x, y
          # 跳掉一堆中間座標,x, y 本來有 64 總組合,
          # 但因為每次放下一片以後,都可以往前 fast forward 很多 x, y,減少大量的分枝
          # 總共 13 片,每次搜到一個答案,最少的時候可能只有 13 種分支,多的話…我也不知道 XD
          x, y = fast_forward(x, y)
      然後我的 piece 的 points 有先做一種正規化,就是讓它「如果放的下,一定是在這個位置,不需要往右一格或是往下一格」這個有點難以用文字描述。但主要就是我的 piece 是 List[Point],然後第一個 Point 一定是這個 piece 最左上角的 Point。有很多東西可以 preprocess,包含 piece 的對稱性以及正規劃。
      有點長,改天再來看看能不能寫的簡單一點
      github.com/yocox/PackSixPuzzle/blob/tetris13/main.cpp

    • @allenchen8559
      @allenchen8559 7 หลายเดือนก่อน

      可以參考大大的程式嗎🥹
      (我使用影片中的剪枝方法 但跑得時間還是不太理想 我寫C++)

    • @peterxiau
      @peterxiau 7 หลายเดือนก่อน

      奇怪了,我之前有寫了一些 pseudo code 描述我的作法,結果那個 reply 不見了 XD

    • @allenchen8559
      @allenchen8559 7 หลายเดือนก่อน

      ​@@peterxiau
      剛剛又發現我的遞迴起始點寫錯,改完後已經跟影片裡剪枝方法應該是完全一樣,現在C++ single process時間3分多。(一開始我遞迴寫成以各拼圖放置左上角為起點,等於剪枝效果很差,後來改成將H拼圖放置在各個位置做起始點,剪枝效果才出來。)
      ===========================================
      剛剛嘗試將vector改為array了,時間節省為1/3,大約30分鐘
      (但如果和影片python以單核(80分鐘)相比,感覺我的實作細節還是有點問題QQ)
      ===========================================
      能向大大請教一些問題嗎?
      我用影片的演算法和剪枝,C++照理應該要比python單核速度快很多,但我演算時間是一個多小時。想向請教在表示拼圖時使用vector和array效能會差很多嗎?(函數都用&傳參考)我拼圖表示的vector有四層:shapes[形狀][旋翻轉][i][j]

  • @imjeffreylee
    @imjeffreylee 8 หลายเดือนก่อน

    把backtracking應用在實際生活中 推一個

  • @Azxc2426
    @Azxc2426 ปีที่แล้ว +1

    太強了👍

  • @willywoo7869
    @willywoo7869 8 หลายเดือนก่อน

    這個題目難度估計leetcode有medium~hard等級了

  • @andrewmeowmeow
    @andrewmeowmeow 8 หลายเดือนก่อน

    想請教一下,在improved algorithm section中的提到了計算可能性表格,對於表格的數值是如何計算的我不是很理解,能否解答一下呢?Thanks in advance!

    • @andrewmeowmeow
      @andrewmeowmeow 8 หลายเดือนก่อน

      會是先有一個for each 剩餘圖片 do 然後 for each 剩餘空格 do 然後 if 圖片插入是valid +1 ?抱歉,在comment裡寫pseudocode format非常難看😂這是我大致想法,希望大大能指正和解答。

    • @sweroger
      @sweroger  8 หลายเดือนก่อน

      我猜你的理解應該是對的,但我還是用我的方法說一次:
      先初始化一個 8x8 的表格(二維陣列),將每一格的數字設為 0,這個表格用於記錄每個格子的「被覆蓋方法數」。
      對於每個剩餘拼圖片,找出每一片能夠放到當前盤面上的全部「放置方法」(考慮所有的旋轉、翻轉、位置);
      對於每一個「放置方法」,看看該放置方法會讓該拼圖片覆蓋哪些格子,就把那些格子的「被覆蓋方法數」+1。
      這樣就能得到影片中的表格了。
      關於「放置方法」的一些例子:
      例如 2x2 正方形那塊,在盤面全空的時候,總共有 (7 * 7) * 1 = 49 種放置方法。
      2x3 長方形那塊,在盤面全空的時候,總共有 (7 * 6) * 2 = 84 種放置方法。
      F5 那塊(就是影片 8:21 那塊),在盤面全空的時候,總共有 (6 * 6) * 8 = 288 種放置方法(假設不鎖定它的方向)。
      隨著盤面上有越來越多的拼圖片被放入,每個拼圖片可行的放置方法會越來越少。

    • @andrewmeowmeow
      @andrewmeowmeow 8 หลายเดือนก่อน

      感謝!嗯嗯,找出全部的「放置方法」是key point,目前我沒想到很有效的方法只能將每個可用拼圖插入到剩餘可用的格子裡。

  • @Pomo-lb5ct
    @Pomo-lb5ct 8 หลายเดือนก่อน

    看起來沒有不爽呀,明明很想繼續拼。

  • @祈願-g7d
    @祈願-g7d 7 หลายเดือนก่อน

    有個工具叫burrtools

  • @hoihenry6345
    @hoihenry6345 8 หลายเดือนก่อน

    想問一下 不是很理解加速技巧1那里,如果先固定,后面再通過旋轉跟翻轉固定那塊不是也會找到重覆的答案嗎?

    • @jorsonlee
      @jorsonlee 8 หลายเดือนก่อน

      正是因為一種解法其實只要通過翻轉、旋轉就可以找出另外七組解,所以我們可以設定條件讓算法在解題的過程中,避開那些其實就是先前找出來的解法的「變體」,最後再對每個解法做旋轉跟翻轉就可以找出所有解;優化的點在於:直接旋轉跟翻轉已知解比從頭找快太多

  • @Trigeminalnerve
    @Trigeminalnerve 6 หลายเดือนก่อน

    覺得自己超笨🥺 像井底之蛙
    這對我來說太超乎想像了!
    居然也能這樣使用

  • @lushikuyo1866
    @lushikuyo1866 7 หลายเดือนก่อน +4

    這個人是假的工程師,真正的工程師髮量不會是長這個樣子的

  • @FlAsChang
    @FlAsChang 8 หลายเดือนก่อน

    好棒喔 感謝演算法

  • @zackzack933
    @zackzack933 8 หลายเดือนก่อน

    你好帥 喜歡你 ❤

  • @a86692472
    @a86692472 8 หลายเดือนก่อน +1

    程式一點也不強大
    你想出的搜索方法與平行處理才強大

  • @shihuacheng8073
    @shihuacheng8073 8 หลายเดือนก่อน +4

    你的智商應該很高

    • @yojaychang
      @yojaychang 8 หลายเดือนก่อน

      一定的,畢竟這很燒腦

    • @cheakimlong6079
      @cheakimlong6079 8 หลายเดือนก่อน

      应该的,他很聪明。

  • @Jones_tonny
    @Jones_tonny 7 หลายเดือนก่อน

    好想知道這個影片背後的程式碼QAQ

  • @siatelin8617
    @siatelin8617 8 หลายเดือนก่อน

    之前我也搞過類似的,然後結果我也是嚇傻了XD

  • @syutengu
    @syutengu 8 หลายเดือนก่อน

    想请教如何排除并非因为积木自身(既局部)旋转或翻转,而是盘面(既整体)旋转或翻转造成的重复? e.g.H7位于盘面左上角和右下角时实质上是盘面旋转重复, 如何在搜索中排除这类重复?

    • @syutengu
      @syutengu 8 หลายเดือนก่อน

      啊理解了,搜索全过程始终锁定任意一片且仅一片非对称积木

  • @guojun868
    @guojun868 ปีที่แล้ว +6

    程式設計師的快樂

  • @only_channel
    @only_channel 8 หลายเดือนก่อน

    很強欸

  • @joelui6981
    @joelui6981 8 หลายเดือนก่อน

    有夠強

  • @nono4816
    @nono4816 8 หลายเดือนก่อน

    推用心