インポートSYS DEF LOAD_DATA(): 戻りsys.stdin.read() DEF get_position_map(S): 結果= {} スタック= [] iについて、C列挙(S)で: "[" C ==場合: [結果私] = -1 stack.append(I) のelif C == "]": もしスタック: POS = stack.pop() 結果[POS] = iが 生じる戻り :DEF decode_str(S、開始、終了、pos_map) DEF IN_RANGEを(I、開始、終了): 復帰開始<= I <エンド DEF is_str(C): 戻りORD( 'A')<= ORD(C)<= ORD( 'Z')またはORD( 'A')< = ORD(C)<= ORD( 'Z') DEF IS_NUM(C):) リターンワード( '0')<=ワード(C)<=ワード( '9') 結果= "" I =開始 IN_RANGE(I、開始、終了)しつつ: 文字列= "" IN_RANGE(I、開始、終了)およびis_strは(S [I])中: 文字列+ =のS [i]は 、I + = 1 :IN_RANGEない場合(私は、終了、開始) 戻り列 "" =桁 :IS_NUM(S [i])とIN_RANGEは(iは、開始、終了)しながら 桁+ = S [i]は 、I + = 1 IN_RANGEない場合( I、開始、終了): リターン文字列を pos_map場合[I] == -1: 戻り列 d_str = decode_str(S、I + 1、pos_map [i]は、pos_map) 結果+ =文字列+ d_str * INT(桁) I = pos_map [i]は1 の戻り結果 DEFメイン(): encoded_str = LOAD_DATA()# "ABC3 [xyz4 [MN]" # "ABC3 [XYZ" # "ABC2 [xyz3 [MN]" # "aaabcbc" # "3 [A] 2 [BC]" pos_map = get_position_map(encoded_str) decoded_str = decode_str(encoded_str、0、LEN(encoded_str)、pos_map) プリント(decoded_str) __name__場合== "__main__": main()の