◢ 內 容 -──────-────────────────────────╮
│關鍵字(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} │
│顯示答案給自己過目,並送出去。炸彈解除了。 │
╰─────────────────────────────────────╯