このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 145代目 #185 # [1] 授業単元: プログラミング言語 # [2] 問題文(含コード&リンク): ランレングス圧縮をするプログラムを作成せよ。 #                5MBあるテキストファイルを圧縮してください。アルファベット小・大文字しかない。改行はない。 #                このプログラムをできるだけ簡単に作成せよ。 #                例:もしAAABBBCCCでしたらA3B3C3というふうに作成。 # ランレングス圧縮をする(_ファイル,_ランレングス圧縮された文字列) :- ファイルから文字列を得る(_ファイル,_文字列), findall(X,連長の文字と文字数を順に得る(_文字列,X),L), atomic_list_concat(L,_ランレングス圧縮された文字列). ファイルから文字列を得る(_ファイル,_文字列) :- read_file_to_codes(_ファイル,_文字コードならび,[]), atom_codes(_文字列,_文字コードならび). 連長の文字と文字数を順に得る(_文字列,X) :- 連長(_文字列,_文字,_文字数), member(X,[_文字,_文字数]). 連長(_文字列,_同一文字,N) :- '同一文字からなる副文字列とその前文字列、後文字列を得る'(_文字列,_前文字列,_副文字列,_後文字列,_同一文字), atom_length(_副文字列,N). '同一文字からなる副文字列とその前文字列、後文字列を得る'(_文字列,_前文字列,_副文字列,_後文字列,_同一文字) :- 副文字列(_文字列,_前文字列,_副文字列,_後文字列), 同一文字文字列(_副文字列,_同一文字), '前文字列の最後の文字は同一文字ではないし、後文字列の最初の文字も同一文字ではない'(_同一文字,_前文字列,_後文字列). 副文字列(_文字列,_前文字列,_副文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_文字列), atom_concat(_副文字列,_後文字列,_残り文字列). 同一文字文字列(_文字列,_同一文字) :- sub_atom(_文字列,0,1,_,_同一文字), forall(sub_atom(_文字列,_,1,_,_文字),_文字 = _同一文字). '前文字列の最後の文字は同一文字ではないし、後文字列の最初の文字も同一文字ではない'(_同一文字,_前文字列,_後文字列) :- '前文字列の最後の文字は同一文字ではないし、'(_同一文字,_前文字列), '後文字列の最初の文字も同一文字ではない'(_同一文字,_後文字列). '前文字列の最後の文字は同一文字ではないし、'(_同一文字,_前文字列) :- \+(sub_atom(_前文字列,_,1,0,_同一文字)). '後文字列の最初の文字も同一文字ではない'(_同一文字,_後文字列) :- \+(sub_atom(_後文字列,0,1,_,_同一文字)).