首頁 >後端開發 >Python教學 >最後,我的 FSM 庫的應用程式! 11 月 11 日代碼的出現

最後,我的 FSM 庫的應用程式! 11 月 11 日代碼的出現

Linda Hamilton
Linda Hamilton原創
2025-01-21 20:12:14854瀏覽

這個《密碼的降臨》謎題提出了一個令人著迷的挑戰,巧妙地隱藏在看似簡單的前提下。 我的解決方案探索了多種方法,強調了使用有限狀態機 (FSM) 庫的效率和優雅之間的權衡。

這個謎題涉及操縱代表石頭的數字序列,根據數字的屬性(值、位數)應用三種不同的轉換規則。 最初,我實作了一個簡單的解決方案,直接將規則轉換為程式碼。這涉及到 2024 年分割偶數、增加零以及乘以其他數字的函數。這些轉換使用 toolz.pipeitertools.repeat 連結在一起,以模擬「眨眼」過程 - 重複應用轉換。 第 1 部分的解決方案需要眨眼 25 次,非常簡單。

然而,謎題的描述巧妙地暗示了潛在的最佳化。 在強調保存棋子順序的同時,雙方都只要求眨眼後計數棋子。這一觀察導致了更有效的方法。 我沒有追蹤單個石頭,而是使用 toolz.merge_with 聚合它們的數量,直接計算每次眨眼後的最終石頭數量。 這種基於計數的解決方案顯著提高了效能,尤其是第 2 部分的 75 次眨眼。

出於說明目的(並測試我自己的庫),我還使用我的 FSM 庫 Genstates 實現了該解決方案。 這涉及定義保護條件(檢查每個轉換規則的函數)和操作(轉換函數本身)。 Genstates 允許將石頭轉換建模為狀態轉換。雖然這種方法提供了問題邏輯的清晰表示,但由於庫的設計不允許條件檢查的短路,事實證明它比基於計數的方法效率較低。 檢查每個步驟中所有條件的詳盡性會影響效能。

簡單的、基於計數的和基於 FSM 的解決方案之間的比較強調了選擇正確的演算法和資料結構以獲得最佳性能的重要性。基於計數的方法明顯優於其他方法,特別是對於大量迭代。 FSM 實現雖然優雅,但主要用作Genstates功能的演示。

謎題關於石頭順序的微妙誤導增加了一層有趣的複雜性,促使人們反思仔細考慮問題描述的各個方面的重要性。

Finally, an application for my FSM library! Advent of Code ay 11 由 Microsoft Copilot 產生的非常神秘的插圖

Finally, an application for my FSM library! Advent of Code ay 11 說明石頭轉換的狀態機圖。

作者最後提到了工作申請所施加的時間限制,強調了經常影響編碼實踐和專案選擇的現實世界壓力。

以上是最後,我的 FSM 庫的應用程式! 11 月 11 日代碼的出現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn