このディレクトリの索引

% 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1244449887/842 # [1] C言語 # [2]1〜5の数字の組み合わせをを2次元配列index[][]に格納し、表示しなさい。 t268(X) :- 組合せ([1,2,3,4,5],2,X). 組合せ(X,1,[A]) :- member(A,X). 組合せ([A|Y],N,[A|X]) :- N > 1,M is N - 1,組合せ(Y,M,X). 組合せ([_|Y],N,A) :- N > 1,組合せ(Y,N,A). % *** user: '重複組合せ' / 3 *** '重複組合せ'(X,1,[A]) :- member(A,X) . '重複組合せ'([A|Y],N,[A|X]) :- N > 1, M is N - 1, '重複組合せ'([A|Y],M,X) . '重複組合せ'([_|Y],N,A) :- N > 1, '重複組合せ'(Y,N,A) . % *** user: '順列' / 3 *** '順列'(Y,0,[]). '順列'(Y,N,[A|X]) :- del(Z = Y - A), M is N - 1, '順列'(Z,M,X) . % *** user: del / 3 *** del(A,[A|X],X). del(A,[B|X],[B|Y]) :- del(A,X,Y) . % *** user: del / 1 *** del(X = [A|X] - A). del([B|Y] = [B|X] - A) :- del(Y = X - A) . % *** user: '重複順列' / 3 *** '重複順列'(L,N,X) :- length(X,N), '重複順列'(L,X) . % *** user: '重複順列' / 2 *** '重複順列'(L,[]). '重複順列'(L,[A|R]) :- member(A,L), '重複順列'(L,R) . % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1250204272/420 # [1] 授業単元:プログラミング基礎 # [2] 問題文(含コード&リンク): # 車のナンバーや電車の切符の裏などにある4桁の数字。その数字を四則演算し10にするというクイズを解くプログラムをお願いします。 # 1 2 3 4 と言う4つの数字であれば、すべて足せば10になりますし # 2 3 5 7 は{(3+7)/2+5}で10になります。 # # 数字の順番は変えてもOK(上のように2357を3725と並び替えている) # 二つの数字をくっつけて1つにしてもOK(0 0 1 2を20-10) # # 数字を4つ入力し、全パターンを出力するプログラムをお願いします。 % 四則演算 と 置換([A,B|R],[C|R]) :- C is 10 * A + B t687(L,_式) :- 順列(L,4,L1), t687_1(L1,_式,10). t687_1([A],A,A). t687_1([A,B|R1],C,X) :- C is 10 * A + B, t687_1(R1,_式_2,Y). t687_1([A,B|R1],_式,X) :- \+(R1=[]), C is 10 * A + B, t687_1(R1,_式_2,Y), t687_2(C,_関数,Y,X), _式 =.. [_関数,C,_式_2]. t687_1([A|R1],_式,X) :- t687_1(R1,_式_2,Y), t687_2(A,_関数,Y,X), _式 =.. [_関数,A,_式_2]. t687_2(A,+,B,X) :- X is A + B. t687_2(A,-,B,X) :- X is A - B. t687_2(A,*,B,X) :- X is A * B. t687_2(A,//,B,X) :- 0 is A mod B, X is A // B. % *** user: 順列 / 4 *** 順列(Y,0,_,[]). 順列(Y,N,EL,[A|X]) :- \+(member(A,EL)), del(Z = Y - A), M is N - 1, 順列(Z,M,EL,X). 順列(Y,N,EL,[_|X]) :- member(A,EL), 順列(Z,M,EL,X). % *** user: 順列 / 3 *** 順列(Y,0,[]). 順列(Y,N,[A|X]) :- del(Z = Y - A), M is N - 1, 順列(Z,M,X). % *** user: del / 3 *** del(A,[A|X],X). del(A,[B|X],[B|Y]) :- del(A,X,Y). % *** user: del / 1 *** del(X = [A|X] - A). del([B|Y] = [B|X] - A) :- del(Y = X - A). % *** user: 重複順列 / 3 *** 重複順列(L,N,X) :- length(X,N),重複順列(L,X). 重複順列(L,[]). 重複順列(L,[A|R]) :- member(A,L),重複順列(L,R). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1258158172/212 # [1] 授業単元:プログラミング演習 # [2] 問題文: # 3行3列の実数行列A=[a_ij]とB[b_ij]の積ABを計算せよ。 # ただし、乗算結果の行列を[c_ij]として次の計算を行うものとする。 # 行列の要素への入力は、代入文あるいは初期化子をもちいること。 # c_ij=Σa_ik×b_kj (Σはk=0で、2までです) # 行列の掛け算(_行列a,_行列b,_行列c) :- findall(L1,(for(1,N,3),length(L1,3)),_行列c), findall(W,重複順列([1,2,3],2,W),_重複順列), 行列の掛け算(_重複順列,_行列a,_行列b,_行列c),!. 行列の掛け算([],_,_,_) :- !. 行列の掛け算([[I,J]|R1],_行列a,_行列b,_行列c) :- findsum(U,( for(1,K,3), 行列要素(_行列a,I,K,N1), 行列要素(_行列b,K,J,N2), U is N1 * N2),S), 行列要素(_行列c,I,J,S), 行列の掛け算(R1,_行列a,_行列b,_行列c). 行列要素(_行列,_行,_列,_値) :- list_nth(_行,_行列,_行の値ならび), list_nth(_列,_行の値ならび,_値). 重複順列(L,N,X) :- length(X,N),重複順列(L,X). 重複順列(L,[]). 重複順列(L,[A|R]) :- member(A,L),重複順列(L,R). % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1258158172/283 # [1] 授業単元: C言語演習 # [2] 問題文(含コード&リンク): 以下の掛け算の表示プログラムを作成しなさい。 #     1 2 3  4  5  6  7  8  9 10 #     2 4 6  8 10 12 14 16 18 20 #     3 6 9 12 15 18 21 24 27 30 #     ・ #     ・ #     ・ #    10・・・                    100 九九表示 :- 重複順列([1,2,3,4,5,6,7,8,9,10],2,[M,N]), S is M * N, write_formatted('%3d',[S]), N = 10, nl, fail. 九九表示. % 以下のサイトは http://pc12.2ch.net/test/read.cgi/tech/1222224721/610 # # 鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか # を表示する。(ヒント:頭の数と足の数を変数として,鶴の数と亀の数について # 連立方程式を作り,解を与える式の値を表示させればよい) # %%%%%%%%%%%%%%%%%%% 第一案 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか :- 催促付き整数入力('鶴と亀の頭の数合計 : ',_鶴と亀の頭の数の合計), 催促付き整数入力('鶴と亀の足の数の合計 : ',_鶴と亀の足の数の合計), findall(N,for(0,N,_鶴と亀の頭の数の合計),L), 重複順列(L,2,[A,B]), _鶴と亀の頭の数の合計 is A + B, _鶴と亀の足の数の合計 is 2 * A + 4 * B, writef('鶴が%t羽、亀が%t匹。\n',[A,B]). %%%%%%%%%%%%%%%%%%% 第二案 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 鶴と亀の頭の数の合計と足の数の合計を入力して, 鶴が何羽,亀が何匹いるか :- 催促付き整数入力('鶴と亀の頭の数合計 : ',_鶴と亀の頭の数の合計), 催促付き整数入力('鶴と亀の足の数の合計 : ',_鶴と亀の足の数の合計), 既約ガウス行列に変形([[1,1,_鶴と亀の頭の数の合計],[2,4,_鶴と亀の足の数の合計]],[[_,_,_鶴何羽],[_,_,_亀何匹]]), write_formatted('鶴が%t羽、亀が%t匹\n',[_鶴何羽,_亀何匹]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 鶴亀算(_鶴と亀の頭の数の合計,_鶴と亀の足の数の合計,_鶴が何羽,_亀が何匹) :- 既約ガウス行列に変形([[1,1,_鶴と亀の頭の数の合計],[2,4,_鶴と亀の足の数の合計]],[[_,_,_鶴が何羽],[_,_,_亀が何匹]]),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 本来の鶴亀算 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 一羽の鶴の足の数(2). 一匹の亀の足の数(4). 鶴亀算(_鶴と亀の頭の数の合計,_鶴と亀の足の数の合計,_鶴が何羽,_亀が何匹) :- 仮に全部鶴だったらどうなるか考えよう(_鶴と亀の頭の数の合計,_仮の鶴と亀の足の数の合計), 実際の鶴と亀の足の数の合計は仮の鶴と亀の足の数の合計より多いことを確認しよう(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計), 実際の鶴と亀の足の数の合計との差は(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計,_実際の鶴と亀の足の合計との差), この差が生じたのは亀が鶴に混じるとその分足の数も多くなるからであり, 亀の数の分だけ一匹の亀の足が一羽の鶴よりも多い分だけの差が生じている考えられる, ということは, 亀の数は(_実際の鶴と亀の足の合計との差,_亀が何匹), 鶴の数は頭の合計から亀の数を引けばよい(_鶴と亀の頭の数の合計,_亀が何匹,_鶴が何匹). 仮に全部鶴だったらどうなるか考えよう(_鶴と亀の頭の数の合計,_仮に全部鶴だとした場合の足の数の合計) :- 一羽の鶴の足の数(_一羽の鶴の足の数), _仮に全部鶴だとした場合の足の数の合計 is _一羽の鶴の足の数 * _鶴と亀の頭の数の合計. 実際の鶴と亀の足の数の合計は仮の鶴と亀の足の数の合計より多いことを確認しよう(_仮の鶴と亀の足の数の合計,_鶴と亀の足の数の合計) :- _鶴と亀の足の数の合計 > _仮の鶴と亀の足の数の合計. 実際の鶴と亀の足の数の合計との差は(_仮に全部鶴だとした場合の足の数の合計,_鶴と亀の足の数の合計,_実際の鶴と亀の足の合計との差) :- _実際の鶴と亀の足の合計との差 is _鶴と亀の足の数の合計 - _仮の鶴と亀の足の数の合計. 亀の数は(_実際の鶴と亀の足の合計との差,_亀が何匹) :- 一羽の鶴の足の数(_一羽の鶴の足の数), 一匹の亀の足の数(_一匹の亀の足の数), _亀が何匹 is _実際の鶴と亀の足の合計との差 // (_一匹の亀の足の数 - _一羽の鶴の足の数). 鶴の数は頭の合計から亀の数を引けばよい(_鶴と亀の頭の数の合計,_亀が何匹,_鶴が何匹) :- _鶴が何匹 is _鶴と亀の頭の数の合計 - _亀が何匹. この差が生じたのは亀が鶴に混じるとその分足の数も多くなるからであり. 亀の数の分だけ一匹の亀の足が一羽の鶴よりも多い分だけの差が生じている考えられる. ということは. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 鶴亀算でどうしても課題として残ることは、最初に鶴に着目して考え始めるか % そうではなくて亀なのか。ここら辺りの曖昧さ、恣意性をどう表現するかだろう。 % /* 最初に、鶴か亀に着眼する(鶴) :- 0 is random mod 2,!. 最初に、鶴か亀に着眼する(亀). 鶴と亀とどちらが足が多いか(亀) :- 一羽の鶴の足の数(_鶴の足の数), 一匹の亀の足の数(_亀の足の数), _亀の足の数 > _鶴の足の数,!. 鶴と亀とどちらが足が多いか(鶴). */ % 以下のサイトは http://hibari.2ch.net/test/read.cgi/tech/1320365280/226 # [1] 授業単元:アルゴリズム # [2] 問題文: # 重複順列についてです。 # A〜Gなどの7つ以上の要素から、6つ取り出して並べるときの、全ての組み合わせを出す。 # 例)AAAAAA, # AAAAAB, # AAAAAC,... # AAAABA,... # (実際に全て出さなくても、出すことができるコードが出来ていれば可) #                # 'A〜Gなどの7つ以上の要素から、6つ取り出して並べるときの、全ての組み合わせを出す。' :- 'A〜Gなどの7つ以上の要素の入力'(_7つ以上の要素ならび), 重複順列(_7つ以上の要素ならび,6,_重複順列), writef('%t%t%t%t%t%t\n',_重複順列), fail. 'A〜Gなどの7つ以上の要素から、6つ取り出して並べるときの、全ての組み合わせを出す。'. 'A〜Gなどの7つ以上の要素の入力'(_7つ以上の要素ならび) :- write('7つ以上の要素を空白区切りで一行で入力してください : '), readln(_7つ以上の要素ならび), length(_7つ以上の要素ならび,Len), len >= 7. 重複順列(L,0,[]). 重複順列(L,N,[A|R3]) :- N > 0, 重複せず要素を取り出す(L,A), N_1 is N - 1, 重複順列(L,N_1,R3). 重複せず要素を取り出す(L,E) :- append(L0,[E|_],L), \+(append(_,[E|_],L0)). % 以下のサイトは # @nishio # Prologで重複順列([t, f], 3, _重複順列)とかやったら_重複順列が[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語重複順列の作り方に悩んでいる # 'Prologで重複順列([t, f], 3, _重複順列)とかやったら_重複順列が[[t, t, t], [t, t, f], ..., [f, f, f]]になるような述語重複順列の作り方に悩んでいる'(_要素リスト,N,_重複順列) :- 重複順列(_要素リスト,N,_重複順列). 重複順列(_要素リスト,N,_重複順列) :- findall(L,重複順列_1(N,_要素リスト,L),_重複順列). 重複順列_1(0,_,[]). 重複順列_1(N,_要素リスト,[_要素|R]) :- N > 0, member(_要素,_要素リスト), N_1 is N - 1, 重複順列_1(N_1,_要素リスト,R). % 以下のサイトは http://toro.2ch.net/test/read.cgi/tech/1370255305/777 # [1] 授業単元:標準入力から N を入力し、N 個のサイコロの出目の和の確率の一覧を作成せよ。 # [2] 問題文:確率は小数三位を四捨五入すること。 # N = 2 # 1 : 0.00% # 2 : 2.78% # 3 : 5.56% # 4 : 8.33% # 5 : 11.11% # 6 : 13.89% # 7 : 16.17% # 8 : 13.89% # 9 : 11.11% # 10 : 8.33% # 11 : 5.56% # 12 : 2.78% # [3.3] 言語:C # [4] 期限:2013-08-04 22:00 # # '標準入力から N を入力し、N 個のサイコロの出目の和の確率の一覧を作成せよ。 確率は小数三位を四捨五入すること。' :- '標準入力から N を入力し、'(_N), 'N 個のサイコロの出目の和の確率の一覧を作成せよ。確率は小数三位を四捨五入すること。'(_N). '標準入力から N を入力し、'(_N) :- 整数を得る('サイコロの個数を入力してください',_N > 0,_N). 'N 個のサイコロの出目の和の確率の一覧を作成せよ。確率は小数三位を四捨五入すること。'(_N) :- 'N 個のサイコロの出目の和'(_N,_N_6,_出目の和ならび), between(1,_N_6,_M), 'サイコロの出目の和の確率を表示する。確率は小数三位を四捨五入すること。'(_出目の和ならび,_M,_N_6,_確率), '表示する。確率は小数三位を四捨五入すること。'(_M,_確率), _M = _N. 'N 個のサイコロの出目の和'(_N,_N_6,_出目の和ならび) :- _N_6 is 6 * _N, findall(Sum,( 重複順列([1,2,3,4,5,6],_N,L), sum(L,Sum)), _出目の和ならび). 'サイコロの出目の和の確率。確率は小数三位を四捨五入すること。'(_出目の和ならび,_出目の和,_N_6,_確率) :- count(member(_出目の和,_出目の和ならび),Count), _確率 is ((Count / _N_6) * 1000 + 5) / 1000. '表示する。確率は小数三位を四捨五入すること。'(_M,_確率) :- writef('%t : ',[_M]), format('~2f%\n',[_確率]). % 以下のサイトは # 出典 :: スレ立てるまでもない質問はここで135匹目 #794" # 100という整数があります # これを25から40の範囲の整数として3等分します # 例 # 30, 30, 40 # 35, 35, 30 # 25, 40, 35 '100という整数があります。これを25から40の範囲の整数として3分割します。'(N1,N2,N3) :- findall(N,between(25,40,N),L), 重複順列(L,3,[N1,N2,N3]), 100 is N1 + N2 + N3. 重複順列(L,0,[]). 重複順列(L,N,[A|R3]) :- N > 0, member(A,L), N_1 is N - 1, 重複順列(L,N_1,R3) .