このディレクトリの索引

#  

Best Cow Line(POJ3617)

# # N文字の文字列Sが与えられ、N文字の文字列Tを作ります。 # はじめはTは長さ0の文字列で、次のいずれかの操作が行えます。 # ・Sの先頭を一文字削除し、Tの末尾に追加する # ・Sの末尾を一文字削除し、Tの末尾に追加する # 辞書順比較でできるだけ小さくなるようにTを作ってください。 # # 制約 # ・1 =< N =< 2000 # ・文字列Sに含まれるのはローマ字の大文字のみ # poj3617(S,T) :- 'stringは引数として渡されると文字コードのリストとして扱われる', '第二引数が[]から成長する、それが実はTである'(S,[],L), '最後に文字コードのリストをstringに戻す'(L,T). '第二引数が[]から成長する、それが実はTである'(S,T1,T) :- '引数として渡されたものはS,Tのままにするがこれは文字コードのリストだ', 'リストの比較がし易いように反転リストS2を作る'(S,S2), 'S,S2からTを生成'(S,S2,T1,T). 'リストの比較がし易いように反転リストS2を作る'(S,S2) :- reverse(S,S2). 'S,S2からTを生成'([],[],T,T) :- '第三引数に生成された物それがTである'. 'S,S2からTを生成'([A|R1],[B|R2],T1,T) :- [A|R1] @=< [B|R2], 先頭要素を採用されなかったリストは末尾要素を削除する([B|R2],R22), '選択された要素をT1(実はT)の末尾に付加してT2とする'(T1,A,T2), 'S,S2からTを生成'(R1,R22,T2,T). 'S,S2からTを生成'([A|R1],[B|R2],T1,T) :- [A|R1] @> [B|R2], 先頭要素を採用されなかったリストは末尾要素を削除する([A|R1],R11), '選択された要素をT1(実はT)の末尾に付加してT2とする'(T1,B,T2), 'S,S2からTを生成'(R11,R2,T2,T). 先頭要素を採用されなかったリストは末尾要素を削除する(L1,L2) :- append(L2,[_],L1). '選択された要素をT1(実はT)の末尾に付加してT2とする'(T1,_選択された要素,T2) :- append(T1,[_選択された要素],T2). '最後に文字コードのリストをstringに戻す'(L,T) :- string_to_list(T,L). % 以下はコメント的な述語 'stringは引数として渡されると文字コードのリストとして扱われる'. '引数として渡されたものはS,Tのままにするがこれは文字コードのリストだ'. '第三引数に生成された物それがTである'.