c422: 中國象棋棋譜記錄
Tags : 中國 象棋
Accepted rate : 5人/5人 ( 100% ) [非即時]
評分方式:
Tolerant

最近更新 : 2019-08-05 13:37

Content

鴿了兩年的題目

中國象棋流傳多年、博大精深,對於自古至今大量的棋局或刻意排擬的棋譜,有人發明了「四字記譜法(中式記譜法)」來記錄棋子的移動、棋盤的變化,用以方便地保存棋譜,以供後人研究、閱讀,是象棋發展十分重要的關鍵。

現在給你一些中國象棋的對局,請你把他轉成「中式記譜法」的棋譜。

 

  • 路的編號從雙方棋手各自所面向的方向來看,從右到左,紅方為中文漢字的一至九路,黑方為阿拉伯數字的 1 至 9 路。

 象棋初始局面

 

中式記譜法的規則:

  • 一步的記譜由四個字組成。
  • 第一個字為該步欲行棋的兵種,如:相/象、帥/將等。
  • 第二個字為該子所在的路,且紅方以中文數字、黑方以阿拉伯數字表示,如:紅方若要走位於七路的傌,則為「七」、黑方要走位於 1 路的卒,則為「1」。
  • 第三個字為兵種(第一個字)的移動方式,只有「進、退、平」三種可能;但是若兵種為斜向移動型(仕/士、相/象、傌/馬),則只有「進」或「退」兩種。
  • 第四個字為一數字(紅方為中文數字,黑方為阿拉伯數字),其含義會因兵種及移動方式的不同而不同。 
    • 若兵種為斜向移動型(仕/士、相/象、傌/馬),則此數字代表要進到哪一路,或要退到哪一路。
    • 若兵種為直橫向移動型(帥/將、俥/車、炮/砲、兵/卒),則分兩種情況:
      • 若移動方式為「進」或「退」,則此數字代表「縱向」移動的距離。
      • 若為「平」,則此數字代表要平「移」到哪一路。
  • 記譜時,該子移動的目的地上若有敵方棋子為吃子;反之為走子。記譜規則不會因吃子或走子而發生改變。
  • 特殊情況:若有相同兵種且不是仕/士或相/象的兩個同方棋子位於同一路,則上述規則無法分辨走的是哪一個棋子,因此當有該種情況發生時,第一及第二個字將分別改成「前、後」及兵種種類(因為知道兩個子都在同一路上,因此不需要記錄路的資訊)。如:前傌、後卒等。
  • 仕/士或相/象也會發生兩個同方的棋子位於同一路的情況,但是因其各自的移動限制(仕/士只有五個、相/象只有七個可移動位置),只要依靠路與進退的資訊(即第二及第三個字)即可分辨移動的是哪一個棋子,因此仕/士、相/象不存在上述特殊情況時記譜的改法,即不可能出現「前相、後士」之類的文字。
  • 理論上是有可能發生三個或以上的兵,或三個或以上的卒在同一路的情況,但實際上幾乎沒有任何棋手會這樣下(因為不符合棋理),因此本題不會存在這樣的測資。也不存在「有兩路都有兩個或以上的兵/卒的情況」的測資
  • 注意,「前、後、進、退」的判斷是以該棋手所面向的方向來看的,離棋手較遠的方向為「前」;反之為「後」,將棋子往「前」移動為「進」;反之為「退」。

 

例子:

記譜 走棋方 解釋
帥五進一 紅方 帥在五路,往前進一格。
將4平5 黑方 將在 4 路,平到 5 路。
仕六退五 紅方 仕在高六路(從底線往上數第三條橫線),往斜後方退到五路。
士6進5 黑方 士在 6 路底線,往斜前方進到 5 路。
相三退一 紅方 相在三路河口(從底線往上數第五條橫線),並退到一路。
象7進9 黑方 象在 7 路底線,並進到 9 路。
俥八進九 紅方 俥在八路,往前進九格。
前車退2 黑方 從黑方的方向來看的前面的(較遠的)車,往後退 2 格。
後傌進五 紅方 從紅方的方向來看的後面的(較近的)傌,進到五路。
前馬退8 黑方 從黑方的方向來看的前面的(較遠的)馬,退到 8 路。
後炮平四 紅方 從紅方的方向來看的後面的(較近的)炮,平到四路。
砲9退9 黑方 砲在 9 路,往後退 9 格。
兵七平六 紅方 兵在七路,平到六路。
卒5進1 黑方 卒在 5 路,往前進 1 格。

 

Input
  • 每個檔案只會有一筆測資,一筆測資代表一個棋局。
  • 每個棋局由若干個棋盤盤面組成。
  • 每個局面皆由 9 x 10 共 90 個字符組成,每個局面間以只有一個 # 的一行分隔;最後一行也有一個 # 行。
  • 每筆測資的第一個局面一定是雙方皆沒動過的初始棋盤盤面。
  • 本題不考慮各種情況可以簡化敘述的中式記譜法,一步的記錄一律是四個字。
  • 本題也不考慮殘局、或特意擺擬的布局,皆為完整棋局,因此必定是紅方先走棋。
  • 紅方在下方,黑方在上方。
  • 紅方的兵種符號為大寫英文字母,映照表如下:
K A E R H C P

  • 黑方的兵種符號為小寫英文字母,映照表如下:
k a e r h c p

  • 沒有棋子的位置以 . 號代表。
  • 測資保證每一步皆為合理著法。
  • 測資保證不會有三個或以上的兵,或三個或以上的卒在同一路的情況。
  • 也不存在「有兩路都有兩個或以上的兵/卒的情況」的測資。
Output
  • 輸出 ⌊ 局面數 / 2 ⌋ 行,每行開頭有一個編號加一個 . 號,從 1 開始(編號不足三位數請補零)。
  • 除了最後一行外,每行應有兩個譜,分別為紅方及黑方的走子記錄。
  • 編號、紅方記譜及黑方記譜之間,皆以一個空白隔開。
  • 最後一行有可能只有紅方的走子記錄而沒有黑方的;當然也可能雙方都有。
  • 中文漢字請使用繁體中文,棋子的中文名稱請參照題目敘述或輸入說明裡的映照表。
Sample Input
rheakaehr
.........
.c.....c.
p.p.p.p.p
.........
.........
P.P.P.P.P
.C.....C.
.........
RHEAKAEHR
#
rheakaehr
.........
.c.....c.
p.p.p.p.p
.........
.........
P.P.P.P.P
.C..E..C.
.........
RHEAKA.HR
#
rheakaehr
.........
.c..c....
p.p.p.p.p
.........
.........
P.P.P.P.P
.C..E..C.
.........
RHEAKA.HR
#
rheakaehr
.........
.c..c....
p.p.p.p.p
.........
.........
P.P.P.P.P
.CH.E..C.
.........
R.EAKA.HR
#
rheakaehr
.........
.c..c....
p...p.p.p
..p......
.........
P.P.P.P.P
.CH.E..C.
.........
R.EAKA.HR
#
rheakaehr
.........
.c..c....
p...p.p.p
..p......
.........
P.P.P.P.P
.CH.E..C.
.....H...
R.EAKA..R
#
rheakaeh.
........r
.c..c....
p...p.p.p
..p......
.........
P.P.P.P.P
.CH.E..C.
.....H...
R.EAKA..R
#
Sample Output
001. 相三進五 砲8平5
002. 傌八進七 卒3進1
003. 傌二進四 車9進1
測資資訊:
記憶體限制: 512 MB
公開 測資點#0 (9%): 1.0s , <1M
公開 測資點#1 (9%): 1.0s , <1M
公開 測資點#2 (9%): 1.0s , <1M
公開 測資點#3 (9%): 1.0s , <1M
公開 測資點#4 (9%): 1.0s , <1M
公開 測資點#5 (9%): 1.0s , <1M
公開 測資點#6 (9%): 1.0s , <1M
公開 測資點#7 (9%): 1.0s , <1M
公開 測資點#8 (9%): 1.0s , <1M
公開 測資點#9 (9%): 1.0s , <1M
公開 測資點#10 (10%): 1.0s , <1K
Hint :
  • 注意有些棋子的名稱,紅方黑方有微妙的不同。
  • 紅方的一路是黑方的 9 路,紅方的二路是黑方的 8 路,依此類推。
  • 進退、前後的方向是由該棋手所面對的方向而定。
  • 第一次出題,如測資有問題請盡速告知我。
  • 出題的目的是希望能向大家普及一點中國象棋文化知識,所以我盡量將象棋的基本知識寫地詳細一點,若還有哪裡不清楚或哪裡寫錯了也歡迎提出。
Tags:
中國 象棋
出處:
Rekkursion [管理者:
B0306125 (NIGERUNDAYO)
]


ID User Problem Subject Hit Post Date
19144
wj654cj86 (屠屠)
c422
解題心得
69 2019-09-06 14:37