精華區beta mud_sanc 關於我們 聯絡資訊
內   容 -──────-────────────────────────╮ 關鍵字(pattern):       ({你大喝:使用『解析』!查詢小字條|備註:}) =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 指令(Commands):有套上黃色(亮或暗)表示為同一行,因版面不夠,所以分行。 #if (%1="你大喝:使用『解析』!查詢小字條") {#noop "你大喝:使用『解析』" #var bombword.n {0} {} {} #loop 1,10 {#var data.%item("_OOO_O___OO___OO___O_OOO_| __O____O____O____O____O__|OOOOO____OOOOOOO____OOOOO| OOOOO____OOOOOO____OOOOOO|O___OO___OOOOOO____O____O| OOOOOO____OOOOO____OOOOOO|OOOOOO____OOOOOO___OOOOOO| OOOOO____O____O____O____O|OOOOOO___OOOOOOO___OOOOOO| OOOOOO___OOOOOO____O____O",%i) %eval(%i-1)} data.fc={5|13|21|29|37|45} #var bombword.6 {%ansi(15)1234%ansi(2)56789%ansi(4)B%ansi(15)12%ansi(2)34567%ansi(15)89 %ansi(4)C%ansi(2)12345%ansi(15)678%ansi(2)9%ansi(4)D%ansi(2)123 %ansi(15)456%ansi(2)789%ansi(4)E1%ansi(15)234%ansi(2)56789%ansi(4)F %ansi(15)12} #trigger {({@|*|+|#})} {#add bombword.n 1 #var bombword.@bombword.n {%repeat("_",%eval(@bombword.n-1))%line}} {bomb} #c+ hmmlskill} {#noop "備註"段 #c- hmmlskill #delkey bombword an #untrigger {({@|*|+|#})} {bomb} #forall {*|+|#|@} {#var bombword %replace(@bombword,%i,"O")} #var bombword %replace(@bombword," ","_") #var bombword %replace(@bombword,"__OO_","___O_") #var bombword.2 %replace(@bombword.2,"O_O___","O___O___") #var bombword %replace(@bombword,"_OOOO_","__OOO_") #noop #showdb {"bombword <取代完成,干擾移除,0 修正,9 修正。>: "%crlf@bombword}} {#noop} #forall @data.fc {#if (%copy(@bombword.4,%i,5)="_O___") {#var bombword.4 %insert("___",@bombword.4,%i)} #if (%copy(@bombword.5,%i,5)="_O___") {#var bombword.5 %insert("___",@bombword.5,%i)}} #loop 6 {#var number.%i {%copy(@bombword.1,%item(@data.fc,%i),5) %copy(@bombword.2,%item(@data.fc,%i),5) %copy(@bombword.3,%item(@data.fc,%i),5) %copy(@bombword.4,%item(@data.fc,%i),5) %copy(@bombword.5,%item(@data.fc,%i),5)}}} #noop #showdb {"bombword <全部修正>:"%crlf@bombword} #noop #showdb {"number <數字>:"%crlf@number} #var bombword.an {%expand(@data.,-1)@number.1 %expand(@data.,-1)@number.2 %expand(@data.,-1)@number.3 %expand(@data.,-1)@number.4 %expand(@data.,-1)@number.5 %expand(@data.,-1)@number.6} #exec {#show @bombword.an input @bombword.an}} ╰─────────────────────────────────────╯ 結   構 -──────-────────────────────────╮ 這裡有個例子,後續以此演練: 你大喝:使用『解析』!查詢小字條 <<啟動擷取並輸入參考資料。 ──────────────────────────── 小字條(word) ──────────────────────────── 重量:10 價格:100 │ +++++ +++++ ##### @@@@@ ++++ ## 1 │ │ # # @ @ * @ + + + 2 │ │ ***** +++++ @ +++++ + + @ 3 │ │ ## + * # * * # 4 │ │ * + @ +++++ @@@ # 5抓這五行。 │ ──────────────────────────── 備註: <<結束擷取並開始分析內容。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 關鍵字串為:    ({你大喝:使用『解析』!查詢小字條|備註:}) 代表有兩段字串可以觸發它: 1.你大喝:使用『解析』!查詢小字條    經由這字串開始擷取小字條內容。並寫入判斷用的資料。  2.備註: 出現這個字串時,代表小字條的內容結束。同時開始處理    小字條的內容。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #IF分成兩個區塊 #if (%1="你大喝:使用『解析』!查詢小字條") {擷取內容並寫入參考資料} {停止擷取並開始分析}   {擷取內容並寫入參考資料}從#noop "你大喝:使用『解析』"開始, 到 #c+ hmmlskill} 結束。 {停止擷取並開始分析}從#noop "備註"段到最後。 ╰─────────────────────────────────────╯ 擷取內容並寫入參考資料}的內容 ─────────────────────╮ #noop "你大喝:使用『解析』" 這行只是提示段落,方便檢視內容。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword.n {0} {} {} 變數bombword有很多內容,而bombword.n用來分配擷取的資料會到哪個變數去。 在開始擷取資料前,要先將它歸零。好覆寫前次的變數內容。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #loop 1,10 {#var data.%item("_OOO_O___OO___OO___O_OOO_| __O____O____O____O____O__|OOOOO____OOOOOOO____OOOOO| OOOOO____OOOOOO____OOOOOO|O___OO___OOOOOO____O____O| OOOOOO____OOOOO____OOOOOO|OOOOOO____OOOOOO___OOOOOO| OOOOO____O____O____O____O|OOOOOO___OOOOOOO___OOOOOO| OOOOOO___OOOOOO____O____O",%i) %eval(%i-1)} 這是一行,BBS版面不夠長,所以斷行。 這裡會建立10個變數,內容是0-9。執行後得到: data._OOO_O___OO___OO___O_OOO_=0 data.__O____O____O____O____O__=1 data.OOOOO____OOOOOOO____OOOOO=2 data.OOOOO____OOOOOO____OOOOOO=3 data.O___OO___OOOOOO____O____O=4 data.OOOOOO____OOOOO____OOOOOO=5 data.OOOOOO____OOOOOO___OOOOOO=6 data.OOOOO____O____O____O____O=7 data.OOOOOO___OOOOOOO___OOOOOO=8 data.OOOOOO___OOOOOO____O____O=9 其中"_"與"0"的組合,就是小字條的內容整理後應呈現的結果,如: data._OOO_O___OO___OO___O_OOO_=0 裡面的_OOO_O___OO___OO___O_OOO_就是0。將它以5個字元長度斷行後: _OOO_ O___O O___O O___O _OOO_ 看出來否? =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- data.fc={5|13|21|29|37|45} 小字條6個數字,符號的起點。雖然字條的內容是斜體字,讓各行符號的 起點移位了,實際上移位再推回去就可以了。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword.6 {%ansi(15)1234%ansi(2)56789%ansi(4)B%ansi(15)12%ansi(2)34567%ansi(15)89 %ansi(4)C%ansi(2)12345%ansi(15)678%ansi(2)9%ansi(4)D%ansi(2)123 %ansi(15)456%ansi(2)789%ansi(4)E1%ansi(15)234%ansi(2)56789%ansi(4)F %ansi(15)12} 這是檢察內容有沒有推正的尺規。它是彩色的所以內容才這麼長。 用#showdb可以讓這個尺規很準確地對準數字的資料。 輸出結果如下: 123456789B123456789C123456789D123456789E123456789F12 加上小字條的內容即可明白: 5 13 21 29 37 45 123456789B123456789C123456789D123456789E123456789F12 +++++ +++++ ##### @@@@@ ++++ # # # @ @ * @ + + + ***** +++++ @ +++++ + + @ # + * # * * # * + @ +++++ @@@ # 綠字代表每個數字應該在的位長。紅字是0。本行不一定要留。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #trigger {({@|*|+|#})} {#add bombword.n 1 #var bombword.@bombword.n {%repeat("_",%eval(@bombword.n-1))%line}} {bomb} 這行在建立一個觸發,關鍵字是:@|*|+|# 指令有: #add bombword.n 1 小字條的數字長度有5到6行,對!它不是固定5行,有低機率會多一行。 每抓到1行就加1。 #var bombword.@bombword.n {%repeat("_",%eval(@bombword.n-1))%line} {} 這行會將小字條數字部份的各行依序放到: 0 +++++ +++++ ##### @@@@@ ++++ ## 1 # # @ @ * @ + + + 2 ***** +++++ @ +++++ + + @ 3## + * # * * # 4* + @ +++++ @@@ # bombword.1: +++++ +++++ ##### @@@@@ ++++ ## bombword.2: # # @ @ * @ + + + bombword.3: ***** +++++ @ +++++ + + @ bombword.4: ## + * # * * # bombword.5: * + @ +++++ @@@ # 同時利用函數%repeat的功能,從第2行開始補1個_,第3行會補2個_,好推正斜體。 用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: +++++ +++++ ##### @@@@@ ++++ ## 2: _ # # @ @ * @ + + + 3: __ ***** +++++ @ +++++ + + @ 4: ___ ## + * # * * # 5: ____ * + @ +++++ @@@ # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #c+ hmmlskill 開始擷取到視窗hmmlskill去。方便觀察小字條的結構,好除錯。機子穩定就沒用。 ╰─────────────────────────────────────╯ {停止擷取並開始分析}的內容 ───────────────────────╮ #noop "備註"段 這行只是提示段落,方便檢視內容。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #c- hmmlskill 停止擷取到視窗hmmlskill去。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #delkey bombword an 移除bombword.an,任何使用additem或add來寫入內容的變數都要特別清空。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #untrigger {({@|*|+|#})} {bomb} 移除在上段建立的,用來擷取小字條數字的觸發。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #forall {*|+|#|@} {#var bombword %replace(@bombword,%i,"O")} 將用來標示數字的符號,統一成"O"。用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: OOOOO OOOOO OOOOO OOOOO OOOO OO 2: _ O O O O O O O O O 3: __ OOOOO OOOOO O OOOOO O O O 4: ___ OO O O O O O O 5: ____ O O O OOOOO OOO O =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword %replace(@bombword," ","_") 把空格改成_。用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO___OOOO_____OO___ 2: ____O_O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: ____OO_______O_______O___O_______O___O_____O___ 5: _____O_______O_______O___OOOOO____OOO______O___ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword %replace(@bombword,"__OO_","___O_") 把用來干擾判斷的,不必要的贅字清除掉。如下例: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO___OOOO______O___ 2: ____O_O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: _____O_______O_______O___O_______O___O_____O___ 5: _____O_______O_______O___OOOOO____OOO______O___ 與前一個步驟相比,紅色部份的贅字已經消除了。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword.2 %replace(@bombword.2,"O_O___","O___O___") 處理9不正常顯示的問題。只要9正常,一切就正常。9的常態錯誤如下: 1:OOOOO OOOOO 2:O_O__ >修正後> O___O__ 3:OOOOO OOOOO │4:_O___ _O___ │ │5:_O___ _O___ 本行指令就是處理紅字行就問題,就將在兩個O間補上短缺的兩個_。 後方的混亂就解決了。只剩綠字行。用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO___OOOO______O___ 2: ____O___O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: _____O_______O_______O___O_______O___O_____O___ 5: _____O_______O_______O___OOOOO____OOO______O___ 紅色部份正常了。有點數字的樣子了吧! =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword %replace(@bombword,"_OOOO_","__OOO_") 贅字中,規則不同的只有0。第一行與第五行都有可能: │1:OOOO_ >修正後>   _OOO_ 2:O___O         O___O 3:O___O         O___O 4:O___O         O___O │5:OOOO_ >修正後>   _OOO_ 用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO____OOO______O___ 2: ____O___O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: _____O_______O_______O___O_______O___O_____O___ 5: _____O_______O_______O___OOOOO____OOO______O___ 與前一個步驟相比,紅色部份的贅字已經消除了。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #showdb {"bombword <取代完成,干擾移除,0 修正,9 修正。>: "%crlf@bombword} 檢查用。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #forall @data.fc {#if (%copy(@bombword.4,%i,5)="_O___") {#var bombword.4 %insert("___",@bombword.4,%i)} #if (%copy(@bombword.5,%i,5)="_O___") {#var bombword.5 %insert("___",@bombword.5,%i)}} 本行處理9的第4第5行的移位問題。因為無明顯特徵,所以要用data.fc的定位點 來找。6個數字要找6次。找到後,直接在定位點上插入3個_。 1:OOOOO OOOOO 2:O___O__ O___O__ 3:OOOOO OOOOO │4:_O___ >修正後> ____O___   │5:_O___ >修正後> ____O___ 如此一來,數字就正常了。除了機率很低的6行。 用#showdb @bombword可看到: n: 5 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO____OOO______O___ 2: ____O___O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: ________O_______O_______O___O_______O___O_____O___ 5: ________O_______O_______O___OOOOO____OOO______O___ 此時內容已經很清楚了。  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #loop 6 {#var number.%i {%copy(@bombword.1,%item(@data.fc,%i),5) %copy(@bombword.2,%item(@data.fc,%i),5) %copy(@bombword.3,%item(@data.fc,%i),5) %copy(@bombword.4,%item(@data.fc,%i),5) %copy(@bombword.5,%item(@data.fc,%i),5)}}} 依照data.fc的定位點,把每個數字寫到 number.1 number.2 number.3 number.4 number.5 number.6 number.2 number.4 number.6 number.1 │ number.3 │ number.5 │ ↓ ↓ ↓ ↓ ↓ ↓ 6: 123456789B123456789C123456789D123456789E123456789F12 1: ____OOOOO___OOOOO___OOOOO___OOOOO____OOO______O___ 2: ____O___O___O___O_______O_______O___O___O_____O___ 3: ____OOOOO___OOOOO_______O___OOOOO___O___O_____O___ 4: ________O_______O_______O___O_______O___O_____O___ 5: ________O_______O_______O___OOOOO____OOO______O___ 用#showdb @number可看到: 1: OOOOOO___OOOOOO____O____O 2: OOOOOO___OOOOOO____O____O 3: OOOOO____O____O____O____O 4: OOOOO____OOOOOOO____OOOOO 5: _OOO_O___OO___OO___O_OOO_ 6: __O____O____O____O____O__ 理論上,@data.@number.1=@data.OOOOOO___OOOOOO____O____O=9 所以只要堆疊起來輸出就有正確的答案。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #showdb {"bombword <全部修正>:"%crlf@bombword} 偵錯用。偵得是bombword的數字修得怎麼樣。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #showdb {"number <數字>:"%crlf@number} 偵錯用,偵得是number的內容長度有沒有一樣。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #var bombword.an {%expand(@data.,-1)@number.1 %expand(@data.,-1)@number.2 %expand(@data.,-1)@number.3 %expand(@data.,-1)@number.4 %expand(@data.,-1)@number.5 %expand(@data.,-1)@number.6} @data.@number.1應該會得到所要的內容,但結果跟想像中不同。 應該@number.1有展開,但@data沒展開,變得顯示字串,所以要用 %expand強制展開。之後就會得到答案了。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #exec {#show @bombword.an input @bombword.an} 顯示答案給自己過目,並送出去。炸彈解除了。 ╰─────────────────────────────────────╯