このディレクトリの索引

# 出典 :: Rubyの宿題教えてください。2限目 # シーザー暗号を解くプログラムを作り,以下の暗号文を解きな # さい. # Hwduytlwfumd nx ymj uwfhynhj fsi xyzid tk mninsl # nsktwrfynts. Ns rtijws ynrjx, hwduytlwfumd nx htsxnijwji f # gwfshm tk gtym rfymjrfynhx fsi htruzyjw xhnjshj, fsi nx # fkknqnfyji hqtxjqd bnym nsktwrfynts ymjtwd, htruzyjw # xjhzwnyd, fsi jslnsjjwnsl. # Hwduytlwfumd nx zxji ns fuuqnhfyntsx uwjxjsy ns # yjhmstqtlnhfqqd fiafshji xthnjynjx; jcfruqjx nshqzij ymj # xjhzwnyd tk FYR hfwix, htruzyjw ufxxbtwix, fsijqjhywtsnh # htrrjwhj, bmnhm fqq ijujsi ts hwduytlwfumd. # # # 暗号を解く関数は problem2 とし,関数 problem2 の引数を暗 # 号の文字列とする.(例: def problem2(str)) # カエサル暗号のずらし(5). 与えられた暗号文('Hwduytlwfumd nx ymj uwfhynhj fsi xyzid tk mninsl \nnsktwrfynts. Ns rtijws ynrjx, hwduytlwfumd nx htsxnijwji f \ngwfshm tk gtym rfymjrfynhx fsi htruzyjw xhnjshj, fsi nx \nfkknqnfyji hqtxjqd bnym nsktwrfynts ymjtwd, htruzyjw \nxjhzwnyd, fsi jslnsjjwnsl. \nHwduytlwfumd nx zxji ns fuuqnhfyntsx uwjxjsy ns \nyjhmstqtlnhfqqd fiafshji xthnjynjx; jcfruqjx nshqzij ymj \nxjhzwnyd tk FYR hfwix, htruzyjw ufxxbtwix, fsijqjhywtsnh \nhtrrjwhj, bmnhm fqq ijujsi ts hwduytlwfumd. \n'). c2_713 :- 与えられた暗号文(_暗号文), カエサル暗号の復号(_暗号文,_平文), write_formatted('元の平文は\n%t\n',[_平文]),!. カエサル暗号の復号(_暗号文,_平文) :- カエサル暗号のずらし(_ずらし), カエサル暗号(_ずらし,_平文,_暗号文). アルファベット(大文字,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']). アルファベット(小文字,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]). カエサル暗号(_ずらし,_平文,_暗号文) :- atomic(_平文), アルファベット(大文字,_アルファベット大文字), アルファベット(小文字,_アルファベット小文字), ならびの回転(左方向,_ずらし,_アルファベット大文字,_アルファベットの二), ならびの回転(左方向,_ずらし,_アルファベット小文字,_アルファベットの三), append(_アルファベット大文字,_アルファベット小文字,_アルファベット), append(_アルファベットの二,_アルファベットの三,_アルファベットの四), atom_chars(_平文,Chars), findall(C2,カエサル暗号解読(Chars,_アルファベット,_アルファベットの四,C2),Chars2), atom_chars(_暗号文,Chars2). カエサル暗号(_ずらし,_平文,_暗号文) :- var(_平文), atomic(_暗号文), アルファベット(大文字,_アルファベット大文字), アルファベット(小文字,_アルファベット小文字), ならびの回転(右方向,_ずらし,_アルファベット大文字,_アルファベットの二), ならびの回転(右方向,_ずらし,_アルファベット小文字,_アルファベットの三), append(_アルファベット大文字,_アルファベット小文字,_アルファベット), append(_アルファベットの二,_アルファベットの三,_アルファベットの四), atom_chars(_暗号文,Chars), findall(C2,カエサル暗号解読(Chars,_アルファベット,_アルファベットの四,C2),Chars2), atom_chars(_平文,Chars2). カエサル暗号解読(Chars,_アルファベット,_アルファベットの二,C2) :- member(C1,Chars), カエサル暗号一文字解読(C1,_アルファベット,_アルファベットの二,C2). カエサル暗号一文字解読(C1,_アルファベット,_アルファベットの二,C2) :- list_nth(N,_アルファベット,C1), list_nth(N,_アルファベットの二,C2),!. カエサル暗号一文字解読(C1,_,_,C1). ならびの回転(左方向,1,[A|R],L) :- append(R,[A],L). ならびの回転(左方向,N,[A|R],L) :- N > 1, append(R,[A],L1), N1 is N - 1, ならびの回転(左方向,N1,L1,L). ならびの回転(右方向,1,L1,L2) :- append(L0,[A],L1), append([A],L0,L2). ならびの回転(右方向,N,L1,L2) :- N > 1, append(L0,[A],L1), append([A],L0,L3), N1 is N - 1, ならびの回転(右方向,N1,L3,L2).