いろんな言語で宿題スレ 第三編at TECH
いろんな言語で宿題スレ 第三編 - 暇つぶし2ch16:デフォルトの名無しさん
09/12/23 03:34:55
>>15
% Prolog
入力したデータセットを一枚交換して合計が一致する組をすべて示す(AL,BL,A,B) :-
  データセットの入力(N,M,AL,BL),
  一枚ずつ全てを交換してみる(N,M,AL,BL,A,B).

データセットの入力(N,M,AL,BL) :- get_split_line([' '],[N,M]),\+((N=0,M=0)),'Aの入力'(N,AL),'Bの入力'(M,BL),!.

'Aの入力'(N,AL) :- findall(A,(for(1,_,N),get_integer(A)),AL).
'Bの入力'(M,AL) :- findall(B,(for(1,_,M),get_integer(B)),BL).

一枚ずつ全てを交換してみる(0,M,AL,BL,_,_) :- !,fail.
一枚ずつ全てを交換してみる(N,M,AL,BL,A,B) :-
  ならびの回転(左方向,1,AL,[A|R1]),
  交換して合計が一致する(M,BL,A,B).
一枚ずつ全てを交換してみる(N,M,AL,BL,A,B) :-
  ならびの回転(左方向,1,AL,AL2),
  N1 is N - 1,
  一枚ずつ全てを交換してみる(N1,M,AL2,BL,A,B).

交換して合計が一致する(0,[A|R1],[B|R2],A,B) :- !,fail.
交換して合計が一致する(M,[A|R1],[B|R2],A,B) :- sum([B|R1],Sum), sum([A|R2],Sum).
交換して合計が一致する(M,[A|R1],[B|R2],A,B) :-
  ならびの回転(左方向,1,BL,BL2),
  M1 is M - 1,
  交換して合計が一致する(M1,[A|R1],BL2,A,B).


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch