Re: [請問] 樹狀資料 階層資料 整理方式...吧?

看板 C_Chat
作者 drm343 (一卡)
時間 2022-02-15 21:45:08
留言 4則留言 (3推 0噓 1→)

: ※ [本文轉錄自 ask 看板 #1Y1mWKb5 ] : 作者: kindyayaya (Auto魂) 看板: ask : 標題: [請問] 樹狀資料整理方式...吧? 口卡口卡吃光光 : ps.合成範例如下 : 死亡之浪(目標)=大爆發+瘟疫噴灑器+瘟疫 : 大爆發=魔法齒輪+火箭炸彈+流星雨 : 火箭炸彈=爆發之箭+同時射擊 : 爆發之箭=魔法齒輪+弩+爆發 : 弩=箭+投石器 : 投石器=箭+巨大化 : 同時射擊=箭+箭 : 流星雨=隕石+同時射擊+爆發 : 隕石=爆發+焚燒+落石 : 同時射擊=箭+箭 : 黃字為底材,這樣完成1/3,後面兩個設施就不打了 : 到底我要幾支箭幾個齒輪阿 崩潰(T_T) 原文恕刪 先補一下程式網址 https://reurl.cc/5Gb1Ov 前幾天看到這篇,不過沒時間回 這問題我拆成兩部分 第一個部分是找零錢,基礎材料就是可以用的零錢種類 但是零錢不夠必須換成特定幾種種類才有辦法找開 總之這問題可以把全部的合成公式轉換成 total = a1 * n1 + a2 * n2 +... 第二部分,撇開需要的數量這點,單純看合成公式 可以把這問題看成親子血緣圖 這部分最好用的就是 prolog 了,可以用這來表達關係 合成目標是父母,合成材料是小孩 於是每一條公式都可以拆解成 formula(total, a1, n1) formula(total, a2, n2)... 在拆解完問題後,我們得到合成公式的關係表 接下來就可以查表解問題了 這邊我選擇用 minikanren 由於 formula 只能找出親子這一層,我需要動態產生 祖父母或更上層關係的查詢函數 composite_items 就是用來查詢用的函數,後面簡稱 f 第一個參數是合成目標 第二個參數是合成材料 第三個參數是材料數量 完成之後你可以正向查找,也可以反向查找 run 這個函數第一個參數不用管,直接填 0 就好 第二個參數是想知道的結果,例如說箭可以合成什麼, 或是材料的總量等等 第三個開始的參數就是查詢函數 比方說我想知道箭可以做什麼,我參數只要帶一個 f(q, "箭", Var()) 之後就能知道箭可以合成什麼 # 第 92 行開始 想知道箭可以合成四層內的什麼道具,就在 f 裡面加入 max_count = 4 就可以了 最後原 po 的問題答案在 99 行那邊 f("死亡之浪", q, v, max_count =10) base_item(q) 第一個會函數會告訴你死亡之浪需要哪些素材跟數量 第二個函數只會保留基本素材 之後計算總和就完成了 補充,這個我沒寫在上面 你只要問 f(q, "箭", Var()) f(q, "投石器", Var()) 它就會告訴你這兩個材料可以合出什麼了 原 po 有問想知道問題的關鍵字,給你參考 prolog、logic programming、minikanren 以上 --
※ 批踢踢實業坊(ptt.cc), 來自: 61.227.224.77 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1644932710.A.A3C.html

spfy: 不是 現在下班了欸 02/15 21:50

HHH555JJJ: 嗚…頭好痛 02/15 22:14

guolong: 你這樣比996還血汗了 02/15 22:21

Leo123457: 知道了好多新東西 02/15 23:35

您可能感興趣