このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1370255305/879
#  
#  問題
#  1	    ランチ (Lunch)
#  問題
#  
#  JOI パスタ店では,ランチのおすすめパスタと搾りたてジュースのセットメニューが好評である.このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.
#  
#  ある日のパスタとジュースの値段が与えられたとき,その日のセットメニューの代金の最小値を求めるプログラムを作成せよ.
#  
#  入力
#  
#  入力は 5 行からなり,1 行に 1 つずつ正の整数が書かれている.
#  1 行目の整数は 1 つ目のパスタの値段である.
#  2 行目の整数は 2 つ目のパスタの値段である.
#  3 行目の整数は 3 つ目のパスタの値段である.
#  4 行目の整数は 1 つ目のジュースの値段である.
#  5 行目の整数は 2 つ目のジュースの値段である.
#  ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.
#  
#  出力
#  
#  その日のセットメニューの代金の最小値を 1 行で出力せよ.
#  
#  入出力例
#  
#  入力例 1	入力例 2
#  800
#  700
#  900
#  198
#  330 
#    
#  1999
#  1999
#  100
#  189
#  100
#    
#  出力例 1	出力例 2
#  848
#     
#  150
#     
#  入出力例 1 では,2 つ目のパスタと 1 つ目のジュースを組み合わせた場合の 700 + 198 - 50 = 848 がその日のセットメニューの代金の最小値である.
#  
#  入出力例 2 では,3 つ目のパスタと 2 つ目のジュースを組み合わせた場合の 100 + 100 - 50 = 150 がその日のセットメニューの代金の最小値である.
#  
#  ※各入出力例のデータは,右クリック等によりファイルに保存して利用可能です.

'JOI パスタ店では,ランチのおすすめパスタと搾りたてジュースのセットメニューが好評である.このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.
ある日のパスタとジュースの値段が与えられたとき,その日のセットメニューの代金の最小値を求めるプログラムを作成せよ.

入力

入力は 5 行からなり,1 行に 1 つずつ正の整数が書かれている.
1 行目の整数は 1 つ目のパスタの値段である.
2 行目の整数は 2 つ目のパスタの値段である.
3 行目の整数は 3 つ目のパスタの値段である.
4 行目の整数は 1 つ目のジュースの値段である.
5 行目の整数は 2 つ目のジュースの値段である.
ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.

出力

その日のセットメニューの代金の最小値を 1 行で出力せよ.' :-
        '入力

入力は 5 行からなり,1 行に 1 つずつ正の整数が書かれている.
1 行目の整数は 1 つ目のパスタの値段である.
2 行目の整数は 2 つ目のパスタの値段である.
3 行目の整数は 3 つ目のパスタの値段である.
4 行目の整数は 1 つ目のジュースの値段である.
5 行目の整数は 2 つ目のジュースの値段である.
ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.'(_3種類のパスタの価格ならび,_2種類のジュースの価格ならび),
        'JOI パスタ店では,ランチのおすすめパスタと搾りたてジュースのセットメニューが好評である.このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.
ある日のパスタとジュースの値段が与えられたとき,その日のセットメニューの代金の最小値を求める.'(_3種類のパスタの価格ならび,_2種類のジュースの価格ならび,_セットメニューの代金の最小値),
        'その日のセットメニューの代金の最小値を 1 行で出力せよ.' (_セットメニューの代金の最小値).


'入力

入力は 5 行からなり,1 行に 1 つずつ正の整数が書かれている.
1 行目の整数は 1 つ目のパスタの値段である.
2 行目の整数は 2 つ目のパスタの値段である.
3 行目の整数は 3 つ目のパスタの値段である.
4 行目の整数は 1 つ目のジュースの値段である.
5 行目の整数は 2 つ目のジュースの値段である.
ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.'([_1つ目のパスタの値段,_2つ目のパスタの値段,_3つ目のパスタの値段],[_1つ目のジュースの値段,_2つ目のジュースの値段]) :-
        '「ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.」とあるから、整数範囲の検査は行わなくてよい。',
        '1 行目の整数は 1 つ目のパスタの値段である.'(_1つ目のパスタの値段),
        '2 行目の整数は 2 つ目のパスタの値段である.'(_2つ目のパスタの値段),
        '3 行目の整数は 3 つ目のパスタの値段である.'(_3つ目のパスタの値段),
        '4 行目の整数は 1 つ目のジュースの値段である.'(_1つ目のジュースの値段),
        '5 行目の整数は 2 つ目のジュースの値段である.'(_2つ目のジュースの値段).

'1 行目の整数は 1 つ目のパスタの値段である.'(_1つ目のパスタの値段) :-
        整数を得る(_1つ目のパスタの値段).

'2 行目の整数は 2 つ目のパスタの値段である.'(_2つ目のパスタの値段) :-
        整数を得る(_2つ目のパスタの値段).

'3 行目の整数は 3 つ目のパスタの値段である.'(_3つ目のパスタの値段) :-
        整数を得る(_2つ目のパスタの値段).

'4 行目の整数は 1 つ目のジュースの値段である.'(_1つ目のジュースの値段) :-
        整数を得る(_1つ目のジュースの値段).

'5 行目の整数は 2 つ目のジュースの値段である.'(_2つ目のジュースの値段) :-
        整数を得る(_2つ目のジュースの値段).

'JOI パスタ店では,ランチのおすすめパスタと搾りたてジュースのセットメニューが好評である.このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.
ある日のパスタとジュースの値段が与えられたとき,その日のセットメニューの代金の最小値を求める.'(_3種類のパスタの価格ならび,_2種類のジュースの価格ならび,_セットメニューの代金の最小値) :-
        findmin(_セットメニューの代金,(
                    'このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.'(_3種類のパスタの価格ならび,_2種類のジュースの価格ならび,_パスタの価格,_ジュースの価格),
                    'パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.'(_パスタの価格,_ジュースの価格,_セットメニューの代金)),
                _セットメニューの代金の最小値).


'このセットメニューを注文するときは,その日の 3 種類のパスタと 2 種類のジュースから 1 つずつ選ぶ.'(_3種類のパスタの価格ならび,_2種類のジュースの価格ならび,_パスタの価格,_ジュースの価格) :-
        member(_パスタの価格,_3種類のパスタの価格ならび),
        member(_ジュースの価格,_2種類のジュースの価格ならび).


'パスタとジュースの値段の合計から 50 円を引いた金額が代金となる.'(_パスタの価格,_ジュースの価格,_セットメニューの合計) :-
        _セットメニーの合計 is _パスタの価格 + _ジュースの価格 - 50.

'その日のセットメニューの代金の最小値を 1 行で出力せよ.' (_セットメニューの代金の最小値) :-
        writef('その日のメニューの最小値は %t\n',[_セットメニューの代金の最小値]).


'「ただし,与えられる入力データにおいては全てのパスタとジュースの値段は 100 円以上 2000 円以下であることが保証されている.」とあるから、整数範囲の検査は行わなくてよい。' :- true.


findmin(A,P,_min) :-
        findall(A,P,L),
        min_list(L,_min).


整数を得る(_整数) :-
        read_line_to_codes(Codes),
        number_codes(_整数,Codes),
        integer(_整数),!.
整数を得る(_整数) :-
        整数を得る(_整数).