このディレクトリの索引

# <<問題>> この問題は他の言語の宿題スレの問題ではありません。 # 「論理少女1」つじ要作 というマンガの中に出てくる問題です。 # できるだけ、問題文に忠実な表現になるようにこの問題を解いてください。 # <<問題は3問ありますが、手始めに第一問>> # # ちょうど一万円札・千円札・百円玉・十円玉があるわ。今からこのお金を・・・ # 髪の中、胸のポケット、スカートのポケット、靴の中に・・・それぞれ一つずつ隠します # # ヒントをもとにどこに何を隠したかを当てていくのよ では第一問 ヒントは、 # ・ 一万円札は髪の中 # ・ 千円札は十円玉より上の位置 # ・ スカートには胸の10倍のお金が入っている # それでは、全てのお金の位置は? :- op(800,xfx,は). :- op(650,xfx,の). :- op(250,xf,円). 隠した物([一万円札,千円札,百円玉,十円玉]). 隠した場所([髪の中,胸のポケット,スカートのポケット,靴の中]). 髪の中 は 胸のポケット の 直ぐ上にある. 胸のポケット は スカートのポケット の 直ぐ上にある. スカートのポケット は 靴の中 の 直ぐ上にある. A は B の 上にある :- A は B の 直ぐ上にある. A は B の 上にある :- A は C の 直ぐ上にある,C は B の 上にある. お金(一万円札,10000 円). お金(千円札,1000 円). お金(百円玉,100 円). お金(十円玉,10 円). ヒント(1,_解) :- member([髪の中,一万円札],_解). ヒント(2,_解) :- member([_千円札の場所,千円札],_解), member([_十円玉の場所,十円玉],_解), _千円札の場所 は _十円玉の場所 の 上にある. ヒント(3,_解) :- member([スカートのポケット,_物1],_解), member([胸のポケット,_物2],_解), お金(_物1,_円1 円), お金(_物2,_円2 円), _円1 is _円2 * 10. '全てのお金の位置は?'(_解) :- 解候補の生成(_解), ヒント(1,_解), ヒント(2,_解), ヒント(3,_解). 解候補の生成(_解) :- 隠した物(_隠した物リスト), 隠した場所(_隠した場所リスト), length(_隠した物リスト,_要素数), 順列(_隠した物リスト,_要素数,_物候補), 解候補の生成(_隠した場所リスト,_物候補,_解). 解候補の生成([],_,[]). 解候補の生成([A|R1],[B|R2],[[A,B]|R]) :- 解候補の生成(R1,R2,R). 順列(Y,0,[]). 順列(Y,N,[A|X]) :- select(A,Y,Z), M is N - 1, 順列(Z,M,X).