このディレクトリの索引
#  出典 :: 「受験全解算数」日能研発行 p460 灘中入試問題より
#  
#  ある工場では3種類の機械A,B,Cを使って、品物Pを生産しています。
#  1時間あたりの生産高はA,B,Cの順に、77個、56個、14個で、1日に
#  8時間ずつ運転します。また、一日の生産高は、Cを使わないときは19544個、
#  Bを使わないときは、13832個、Aを使わないときは14896個です。このとき、
#  次の問に答えなさい。
#  (1)  3種類の機械はそれぞれ何台ありますか。
#  (2)  全部の機械を使ったときの品物Pの総生産高を今の2倍にするために
#    は、Aを25台買い足して、さらにBとCをそれぞれ何台買いたせばよいで
#    すか。ただし、B,Cどちらも13台より多く買い入れるものとします。

'ある工場では3種類の機械A,B,Cを使って、品物Pを生産しています。
1時間あたりの生産高はA,B,Cの順に、77個、56個、14個で、1日に
8時間ずつ運転します。また、一日の生産高は、Cを使わないときは19544個、
Bを使わないときは、13832個、Aを使わないときは14896個です。このとき、
次の問に答えなさい。
(1)  3種類の機械はそれぞれ何台ありますか。'(Aの台数,Bの台数,Cの台数) :-
        '一日の生産高は、Cを使わないときは19544個、
Bを使わないときは、13832個、
Aを使わないときは14896個であるとして、
一日のABCの合計の生産高は'(_一日のABCの合計の生産高),
        Aの台数 is (_一日のABCの合計の生産高-14896) / (77 * 8),
        Bの台数 is (_一日のABCの合計の生産高-13832) / (56 * 8),
        Cの台数 is (_一日のABCの合計の生産高-19544) / (14 * 8).

'一日の生産高は、Cを使わないときは19544個、
Bを使わないときは、13832個、
Aを使わないときは14896個であるとして、
一日のABCの合計の生産高は'(_一日のABCの合計の生産高) :-
        'A,B,Cの合計はA,B,A,C,B,Cの合計の二分の一である',
        ABACBCの合計 is 19544 + 13832 + 14896,
        '一日のA,B,Cの合計の生産高A,B,CはA,B,A,C,B,Cの合計の二分の一となる'(ABACBCの合計,_一日のABCの合計の生産高).

'A,B,Cの合計はA,B,A,C,B,Cの合計の二分の一である' :-
        このならびから同一の要素の対を分解して2つの同一のならびを構成できる(['A','B','A','C','B','C'],L,L),
        順列(L,3,['A','B','C']),!.

'一日のA,B,Cの合計の生産高はA,B,CはA,B,A,C,B,Cの合計の二分の一となる'(ABACBCの合計,_一日のABCの合計の生産高) :-
        _一日のABCの合計の生産高 is ABACBCの合計 / 2.



このならびから同一の要素の対を分解して2つの同一のならびを構成できる([],[],[]) :- !.
このならびから同一の要素の対を分解して2つの同一のならびを構成できる([A|R1],[A|R2],[A|R2]) :-
        共通の2つ組がある(A,R1,R1_2),
        このならびから同一の要素の対を分解して2つの同一のならびを構成できる(R1_2,R2,R2).

共通の2つ組がある(A,[B|R],R) :-
        A == B,!.
共通の2つ組がある(A,[B|R1],[B|R2]) :-
        共通の2つ組がある(A,R1,R2).

順列(Y,0,[]).
順列(Y,N,[A|X]) :-
        select(A,Y,Z),
        M is N - 1,
        順列(Z,M,X).