いろんな言語で宿題ス ..
41:デフォルトの名無しさん
09/05/30 06:56:23
# Prolog向きの見つけたw
スレリンク(tech板:1番)
1 :BASIC:2006/01/09(月) 15:35:00
N人分のデータ(氏名、体重、身長、年齢)がDATA文で入力されているプログラムが
ある。これを用いて次のプログラムをBASICで作成しなさい
身長が160CM以上で170cm未満の人の名前を表示する
42:デフォルトの名無しさん
09/05/30 08:41:13
# Prolog流の表示は普通はインタプリタによる論理変数の解決表示ですから
# 言語: Prolog
データ(山下,65,177,23).
データ(尾崎,64,168,60).
データ(飯島,72,173,29).
データ(吉田,69,166,44).
foo(_氏名) :- データ(_氏名,_,_身長,_),_身長>=160,_身長<170.
#どうしても強制表示したい場合は、
foo :- foo(_氏名),write(_氏名),nl,fail;true.
43:デフォルトの名無しさん
09/05/30 09:05:03
# こんなのも可能かな。op定義に汎用性はないけど。
# 言語: Prolog
:- op(800,xfx,は).
:- op(750,xfx,が).
:- op(700,xfx,の).
:- op(650,xfx,で).
:- op(600,xf,以上).
:- op(600,xf,未満).
:- op(500,xf,cm).
データ(山下,65,177,23).
データ(尾崎,64,168,60).
データ(飯島,72,173,29).
データ(吉田,69,166,44).
身長 が N_1 cm 以上 で N_2 cm 未満 の 人 の 名前 は _氏名 :-
データ(_氏名,_,_身長,_),
_身長 >= N_1,
_身長 < N_2.
# 「身長が160cm以上で170cm未満の人の名前は_氏名」を形態素解析して、
# Term = [身長,が,160,cm,以上,で,170,cm,未満,の,人,の,名前,は,_氏名]
# が得られるなら、結構おもしろい事がやれるでしょうけれど。
44:デフォルトの名無しさん
09/05/30 10:43:38
>>36
(%)は整数比からRatioを構築する演算
(/)はRatio同士の割り算
だから、たとえば1%3のことを1/3と書いても大丈夫
45:デフォルトの名無しさん
09/05/30 11:10:37
# python2.6 で >>41
columns = (u'氏名', u'体重', u'身長', u'年齢')
data =(
(u'山下',65,177,23),
(u'尾崎',64,168,60),
(u'飯島',72,173,29),
(u'吉田',69,166,44))
for dat in data:
dic = dict(zip(columns,dat))
if 160 <= dic[u'身長'] < 170:
print dic[u'氏名']
# 無理やりワンライナー
print ' '.join(map(lambda dic:dic[u'氏名'], filter(lambda dic:160 <= dic[u'身長'] < 170, map(lambda d:dict(zip(columns,d)), data))))
46:デフォルトの名無しさん
09/05/30 13:38:53
>>43
これは、
?- 身長 が 160 cm 以上 で 170 cm 未満 の 人 の 名前 は _誰.
というように使うのですか?
47:197
09/05/30 13:59:28
>>46
そうですね。「名前 は _誰.」 は少し不自然なので
?- 身長 が 160 cm 以上 で 170 cm 未満 の 人 の 名前 は X.
X = 尾崎;
X = 吉田;
no
で十分でしょう。
"が","で","の","は" が関数になっていますから、
名前 が _名前 の 人 の 体重 は _体重 :- データ(_名前,_体重,_,_).
のような定義が何も考えずにできます。
ここまで単純だと節の自動生成をする述語定義もすぐできます。
48:197
09/05/30 14:03:27
名前の197は「Prologでまったり Part4」スレに書き込んだ時の残り滓でした。
無視してください。
49:デフォルトの名無しさん
09/05/30 15:44:59
インタラクティブなプログラムのコーディングで勝負しようぜ
50:デフォルトの名無しさん
09/05/30 16:02:19
インタラクティブな環境だとわかりますが、
インタラクティブなプログラムだとイメージできません。
申し訳ないが、少し説明してください。
51:デフォルトの名無しさん
09/05/30 16:29:22
>>50
たとえば任意の文字列を一文字ずつ順番に0.5〜2秒のランダムな間隔でCUI表示するプログラム。
52:デフォルトの名無しさん
09/05/30 19:38:00
>>33
ぱっと見あってそうだが…
"〜加えた時点で加算を終了" のところが違うかも
でもこれってみんな違うよねw
-----
F# で>>28
let rec f n s =
if n < 0.00001
then s + n
else f (n / 3.) (s + n);;
f 1. 0. |> printfn "%f";;
53:デフォルトの名無しさん
09/05/30 19:45:41
>>52
>>35 の第二節が
f(P,_,P) :- P < 0.00001,!. であるか
f(P,_,0.0) :- P < 0.00001,!. であるかということかな。
54:デフォルトの名無しさん
09/05/30 20:03:07
>>53
ごめん…Prologは名前を知ってる程度でその違いまではわかんない
というか>>29は分かるけど>>35は理解できなかった
できれば解説キボン…
-----
F# で>>41
let data =
[("山下", 65, 177, 23);
("尾崎", 64, 168, 60);
("飯島", 72, 173, 29);
("吉田", 69, 166, 44)];;
List.iter (fun (n, _, t, _) -> if t >= 160 && t < 170 then printfn "%s" n) data;;
55:デフォルトの名無しさん
09/05/30 20:18:28
>>53
今わかったw
>f(P,_,P) :- P < 0.00001,!. であるか
>f(P,_,0.0) :- P < 0.00001,!. であるかということかな。
そうです
で、問題に合う(0.00001以下の項を加えた時点で加算終了)のは前者のほうですね
56:デフォルトの名無しさん
09/05/30 20:32:23
>>29もそこ合ってますね…何が違うんだろ
57:デフォルトの名無しさん
09/05/30 20:33:50
>>54
fは3引数でその第一引数に 1/1->1/3->1/9->1/27 ... 逆数分数の遷移が
第二引数に 1->3->9->27 と次の逆数計算の分母からきます。
第三引数はその逆数計算の累計が計算されるところですが、論理変数のままで、
実値がここに入って次の呼び出しに渡されるというようなことはありません。
再帰が終了して漸く計算が始まるように見えます。それが第三節の最後の
f(P2,M,S2), の後にある S is S2 + P です。
f(P,_,P) :- P < 0.00001,!. だと分数が0.00001より小さくなったときその最小分数を起点に
再帰的に逆数分数が加算されて解を求めるという宣言であり、
f(P,_,0.0) :- P < 0.0001,!. は0.00001より小さくなった時の逆数分数は加算せずに
再帰的に逆数分数が加算されて解が求まるという宣言です。
第三節で次の逆数分数を先読み的に計算してしまっている点に注意してください。
58:デフォルトの名無しさん
09/05/30 20:53:31
>>57
詳しい解説ありがとうございます
第三引数の扱いがイマイチ分からなかったので助かります
59:デフォルトの名無しさん
09/05/31 00:07:45
>>56
>29は終了条件の判定で分母しかみてないのでは?
60:デフォルトの名無しさん
09/05/31 01:54:55
>>59
普通
sigma = a + a(1/r) + a(1/r) + ... + a(1/r^n) (問題では 1/r^n < 0.00001 で、ここで加算終了)
なんだけど、
>>29は
sigma = (a + ar + ar^2 + ... + ar^n) / r^n
って解いてる。つまり、最後に足した項が普通のほうの初項
だから、
1/r^n < 0.00001 ⇔ r^n > 100000 が終了条件でおk
まぁ、そのへんが「悪い回答」なんだろうw
61:デフォルトの名無しさん
09/05/31 05:56:38
>>46
やっぱり膠着語の方が便利だねw
62:デフォルトの名無しさん
09/05/31 14:35:45
<<問題>> この問題は他の言語の宿題スレの問題ではありません。
「論理少女1」つじ要作 というマンガの中に出てくる問題です。
できるだけ、問題文に忠実な表現になるようにこの問題を解いてください。
<<問題は3問ありますが、手始めに第一問>>
ちょうど一万円札・千円札・百円玉・十円玉があるわ。今からこのお金を・・・
髪の中、胸のポケット、スカートのポケット、靴の中に・・・それぞれ一つずつ隠します
ヒントをもとにどこに何を隠したかを当てていくのよ では第一問 ヒントは、
・ 一万円札は髪の中
・ 千円札は十円玉より上の位置
・ スカートには胸の10倍のお金が入っている
それでは、全てのお金の位置は?
63:デフォルトの名無しさん
09/05/31 15:00:35
>>62
著作権の問題が心配だが・・・
64:Haskellで
09/05/31 16:20:18
import Data.List
import Control.Monad
data Position = Shoe | Skirt | Chest | Hair
deriving (Show, Eq, Ord)
solve :: [String]
solve = do
-- ちょうど一万円札・千円札・百円玉・十円玉があるわ。今からこのお金を・・・
let money = [10000, 1000, 100, 10]
-- 髪の中、胸のポケット、スカートのポケット、靴の中に・・・それぞれ一つずつ隠します
(position, content) <- mappings money [Hair, Chest, Skirt, Shoe]
-- 一万円札は髪の中
guard $ position 10000 == Hair
-- 千円札は十円玉より上の位置
guard $ position 1000 > position 10
-- スカートには胸の10倍のお金が入っている
guard $ content Skirt == 10 * content Chest
-- それでは、全てのお金の位置は?
let disp n = show (position n) ++ "(" ++ show n ++ ")"
return $ unwords $ map disp money
main = putStr $ unlines solve
mappings :: (Eq a, Eq b) => [a] -> [b] -> [(a -> b, b -> a)]
mappings xs ys = do
ys' <- permutations ys
return (make xs ys', make ys' xs)
where
make from to = \value -> case lookup value (zip from to) of
Just r -> r
Nothing -> error "lookup failed"
65:デフォルトの名無しさん
09/05/31 19:04:09
>62-64
スレ違い
> 他の宿題スレで出された問題を各々好きな言語で解答して言語の良さを競い合うスレです。
66:a36 ◆K0BqlCB3.k
09/05/31 20:09:23
>>65
まぁ、スレの目的と外れすぎているというわけでもないから、多少の柔軟性は考えるよ。
>>62から出題された宿題ということで。
67:デフォルトの名無しさん
09/05/31 22:30:17
# では、python2.6 で >62。 posは、indexが小さいほど体の上の方であるとします。
money = {u'一万円札':10000,u'千円札':1000,u'百円玉':100,u'十円玉':10}
pos = [u'髪の中',u'胸のポケット',u'スカートのポケット',u'靴の中']
m2p = dict(zip(money.keys(),pos))
def hint1(m2p):
u"""一万円札は髪の中"""
return m2p[u'一万円札'] == u'髪の中'
def hint2(m2p):
u"""千円札は十円玉より上の位置"""
return pos.index(m2p[u'千円札']) < pos.index(m2p[u'十円玉'])
def hint3(m2p):
u"""スカートには胸の10倍のお金が入っている"""
p2m = dict((v.split(u'の')[0],k) for k,v in m2p.items())
return money[p2m[u'スカート']] == money[p2m[u'胸']] * 10
def solve(m2p, m2p_keys):
solve_list = []
if len(m2p_keys) > 1:
k1 = m2p_keys[0]
for k2 in m2p_keys:
m2p[k1], m2p[k2] = m2p[k2], m2p[k1]
solve_list += solve(m2p, m2p_keys[1:])
m2p[k1], m2p[k2] = m2p[k2], m2p[k1]
elif hint1(m2p) and hint2(m2p) and hint3(m2p):
solve_list.append(m2p.copy())
return solve_list
if __name__ == '__main__':
lst = solve(m2p, m2p.keys())
if not lst: print u'解なし'; exit()
print u'解を%d個見つけました' % len(lst)
for d in lst:
print "\n"+"\n".join(u'%sに%s'%(p, m)for m,p in d.items())
68:デフォルトの名無しさん
09/06/01 00:25:16
# >67の solve 以下を書き直し。
# こっちだと、>67の 4行目 m2p = ... の部分は要らなくなります。
# 結果はどちらも同じです。
def solv():
def permutation(lst):
if not lst:
yield []
return
for i in range(0, len(lst)):
for x in permutation(lst[:i] + lst[i+1:]):
yield x + [lst[i]]
is_match = lambda m2p:hint1(m2p) and hint2(m2p) and hint3(m2p)
return filter(is_match, map(lambda m:dict(zip(m,pos)), permutation(money.keys())))
if __name__ == '__main__':
lst = solv()
if not lst: print u'解なし'; exit()
print u'解を%d個見つけました' % len(lst)
for d in lst:
print '\n'+'\n'.join(u'%sに%s'%(p, m)for m,p in d.items())
69:デフォルトの名無しさん
09/06/01 13:01:53
>>62
% Prolog (残り半分があります)
:- op(800,xfx,は).
:- op(650,xfx,の).
:- op(250,xf,円).
隠した物([一万円札,千円札,百円玉,十円玉]).
隠した場所([髪の中,胸のポケット,スカートのポケット,靴の中]).
髪の中 は 胸のポケット の 直ぐ上にある.
胸のポケット は スカートのポケット の 直ぐ上にある.
スカートのポケット は 靴の中 の 直ぐ上にある.
A は B の 上にある :- A は B の 直ぐ上にある.
A は B の 上にある :- A は C の 直ぐ上にある,C は B の 上にある.
お金(一万円札,10000 円).
お金(千円札,1000 円).
お金(百円玉,100 円).
お金(十円玉,10 円).
ヒント(1,髪の中,一万円札).
ヒント(2,_千円札の場所,千円札,_十円玉の場所,十円玉) :- _千円札の場所 は _十円玉の場所 の 上にある.
ヒント(3,スカートのポケット,_物1,胸のポケット,_物2) :- お金(_物1,_円1 円),お金(_物2,_円2 円),_円_1 is _円2 * 10.
70:デフォルトの名無しさん
09/06/01 13:07:03
% 続きです。この他に順列/3の定義が必要ですが。
全てのお金の位置は?(_解) :-
解候補の作成(_解),
member([_場所1,_物1],_解),
ヒント(1,_場所1,_物1),
member([_場所2,_物2],_解),
member([_場所3,_物3],_解),
ヒント(2,_場所2,_物2,_場所3,_物3),
member([_場所4,_物4],_解),
member([_場所5,_物5],_解),
ヒント(3,_場所4,_物4,_場所5,_物5).
解候補の生成(_解) :-
隠した物(_隠した物リスト),
隠した場所(_隠した場所リスト),
length(_隠した物リスト,_要素数),
順列(_隠した物リスト,_要素数,_物候補),
解候補の生成(_隠した場所リスト,_物候補,_解).
解候補の生成([],_,[]).
解候補の生成([A|R1],[B|R2],[[A,B]|R]) :-
解候補の生成(R1,R2,R).
71:デフォルトの名無しさん
09/06/01 18:13:36
>>69 誤りがあった。
... :- お金(_物1,_円1 円),お金(_物2,_円2 円),_円_1 is _円2 * 10.
_円_1 という所は _円1 ですね。
72:デフォルトの名無しさん
09/06/01 18:23:59
% こういうのもある。マンガの表現から遠い気がして採用しなかったが、
% こちらの方が引数がすっきりして分かり易いかもしれない。
ヒント(1,_解).
member([髪の中,一万円札],_解).
ヒント(2,_解) :-
member([_千円札の場所,千円札],_解),
member([_十円玉場所,十円玉],_解),
_千円札の場所 は _十円玉の場所 の 上にある.
ヒント(3,_解) :-
member([スカートのポケット,_物1],_解),
member([胸のポケット,_物2],_解),
お金(_物1,_円1 円),
お金(_物2,_円2 円),
_円1 is _円2 * 10.
全てのお金の位置は?(_解) :-
解候補の作成(_解),
ヒント(1,_解),
ヒント(2,_解),
ヒント(3,_解).
73:デフォルトの名無しさん
09/06/01 18:30:09
% *** user: '順列' / 3 ***
'順列'(Y,0,[]).
'順列'(Y,N,[A|X]) :-
del(Z = Y - A),
M is N - 1,
'順列'(Z,M,X) .
% *** user: del / 1 ***
del(X = [A|X] - A).
del([B|Y] = [B|X] - A) :-
del(Y = X - A) .
74:デフォルトの名無しさん
09/06/02 19:23:00
<<問題2>>「論理少女1」つじ要作 というマンガの中に出てくる問題です。
4箇所の隠し場所と4つのアイテム(お金)は>>62と同じですが、
隠す場所は一度ご破算にします。以下のヒントを読んで、
できるだけ問題文に忠実な表現になるようにプログラミングしてください。
1) 髪の中かスカートのポケットのどちらか一万円札が入っている
2) 胸のポケットに入っているお金はスカートに入ってるお金の10倍
3) 百円玉は千円札より上の位置にある
4) 靴の中のお金は髪の中のお金の100倍
そして、1)..4)のうちどれかが嘘。
それでは、
靴の中のお金は?
75:python2.6で>74
09/06/02 23:20:11
money = {u'一万円札':10000,u'千円札':1000,u'百円玉':100,u'十円玉':10}
pos = [u'髪の中',u'胸のポケット',u'スカートのポケット',u'靴の中']
class assumption:
def __init__(self, m2p):
self.m2p, self.p2m = m2p, dict((v,k) for k,v in m2p.items())
class condition:
hint = {
(1):lambda a:a.m2p[u'一万円札'] in (u'髪の中', u'スカートのポケット'),
(2):lambda a:money[a.p2m[u'胸のポケット']] == money[a.p2m[u'スカートのポケット']] * 10,
(3):lambda a:pos.index(a.m2p[u'百円玉']) < pos.index(a.m2p[u'千円札']),
(4):lambda a:money[a.p2m[u'靴の中']] == money[a.p2m[u'髪の中']] * 100,
}
@classmethod
def match(cls, a):
return 3 == len(filter(lambda h:h(a), cls.hint.itervalues()))
def solv():
def permutation(lst):
if not lst:
yield []
return
for i in range(0, len(lst)):
for x in permutation(lst[:i] + lst[i+1:]):
yield x + [lst[i]]
return filter(condition.match, map(lambda m:assumption(dict(zip(m, pos))),
permutation(money.keys())))
if __name__ == '__main__':
lst = solv()
if not lst: print u'解なし'; exit()
print u'条件を満たす組み合わせは%d通りありました。' % len(lst)
print u'靴の中には%sが入っています。' % u'か'.join(set(map(lambda a:a.p2m[u'靴の中'], lst)))
76:75
09/06/02 23:22:51
もはや「問題文に忠実な表現」とかよく分からなくなっているw
そして1レスに詰め込むのも限界にきている。
77:デフォルトの名無しさん
09/06/03 00:53:48
>>64のsolveを差し替えで
solve :: [String]
solve = nub $ do
-- ちょうど一万円札・千円札・百円玉・十円玉があるわ。今からこのお金を・・・
let money = [10000, 1000, 100, 10]
-- 髪の中、胸のポケット、スカートのポケット、靴の中に・・・それぞれ一つずつ隠します
(position, content) <- mappings money [Hair, Chest, Skirt, Shoe]
-- 1) 髪の中かスカートのポケットのどちらか一万円札が入っている
let h1 = content Hair == 10000 || content Skirt == 10000
-- 2) 胸のポケットに入っているお金はスカートに入ってるお金の10倍
let h2 = content Chest == 10 * content Skirt
-- 3) 百円玉は千円札より上の位置にある
let h3 = position 100 > position 1000
-- 4) 靴の中のお金は髪の中のお金の100倍
let h4 = content Shoe == 100 * content Hair
-- そして、1)..4)のうちどれかが嘘。
guard $ length (filter not [h1, h2, h3, h4]) == 1
-- それでは、靴の中のお金は?
return $ show $ content Shoe
78:デフォルトの名無しさん
09/06/03 07:34:14
スレリンク(tech板:645番)
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):1方向線上リストを使って、スタックを実現せよ。ただ
し、各記憶要素xは整数値をとるもの
とする。 要素xをプッシュするpush(int x)、ポップしてその値を返すpop()、スタック
が
空かどうかを判断し真偽値を返すempty()、ならびに現在のスタック内容全体を表示するs
how()を用意する。
79:デフォルトの名無しさん
09/06/03 07:35:44
>>78
% Prolog
push(X,L,[X|L]).
pop(X,[X|L],L).
empty([]).
show(L) :- write(L).
80:デフォルトの名無しさん
09/06/03 07:46:51
>>79 実行例
?- push(3,[],L1),push(4,L1,L2),not(empty(L2)),pop(X,L2,L3),write(L3),nl.
[4]
L1 = [3],
L2 = [3,4],
X = 3,
L3 = [4]
yes
?-
81:デフォルトの名無しさん
09/06/03 07:50:01
>>80 失礼、まちがえました。実行していなかったので・・・
?- push(3,[],L1),push(4,L1,L2),not(empty(L2)),pop(X,L2,L3),write(L3),nl.
[3]
L1 = [3],
L2 = [3,4],
X = 4,
L3 = [3]
yes
?-
82:デフォルトの名無しさん
09/06/03 07:51:47
>>81 まだ間違えがあった!!
?- push(3,[],L1),push(4,L1,L2),not(empty(L2)),pop(X,L2,L3),write(L3),nl.
[3]
L1 = [3],
L2 = [4,3],
X = 4,
L3 = [3]
yes
?-
83:デフォルトの名無しさん
09/06/03 23:17:05
// javascript(JScript) + WSH で >>78。WSHは、Echoだけですが。
function puts(x){WScript.Echo(x);}
function Stack(){}
Stack.prototype = {
node: undefined,
push: function(x){
this.node = {'next': this.node, 'value':x};
return this;
},
pop: function(x){
var value = undefined;
if(this.node){
value = this.node.value;
this.node = this.node.next;
}
return value;
},
empty: function(){return !this.node},
show: function(){
var a = [];
for (var node=this.node; node; node=node.next){a.push(node.value);}
puts('[' + a.join(',') + ']');
}
}
function main(){
var stack = new Stack();
stack.push(3).push(1).push(4).push(1).push(5).push(9).push(2);
stack.show();
while(!stack.empty()){puts('POP :' + stack.pop()); stack.show();}
}
main();// 動作テスト
84:デフォルトの名無しさん
09/06/04 06:57:11
スレリンク(tech板:588番)
【 課題 】車、新幹線、飛行機の3つの交通手段を考える。
距離と、所要時間の最大限度(許容最長時間)を指定したとき、許容最長時間内に
目的地に到着可能で、かつ、費用が一番安い交通手段を調べて表示しなさい。
ただし、距離(km)と許容最長時間(h) は浮動小数点数としてキーボードから与える。
許容最長時間内に到着できる手段がない場合は、「不可能です」と表示する。
それぞれの時速、料金、利用規定は
車 : 60km/h、20 円/km、
新幹線 : 200km/h、50 円/km、距離が50km以上のときに利用可能
飛行機 : 1000km/h、35 円/km、距離が400km以上のときに利用可能 待機・乗降を合わせ
て1 時間にかかる
とする。
85:デフォルトの名無しさん
09/06/04 08:00:20
>>84
% Prolog (1/2)
:- op(250,xf,km).
:- op(250,xf,h).
:- op(250,xf,円).
交通手段(車).
交通手段(新幹線).
交通手段(飛行機).
時速(車,60 km / h).
時速(新幹線,200 km / h).
時速(飛行機,1000 km / h).
料金(車,20 円 / km).
料金(新幹線,50 円 / km).
料金(飛行機,35 円 / km).
利用規定(新幹線,_距離 km) :- _距離 >= 50.
利用規定(飛行機,_距離 km) :- _距離 >= 400.
利用規定(車,_距離 km) :- _距離 >= 0.
付加的な所要時間(飛行機,待機・乗降の合計,1 h).
付加的な所要時間(車,なし,0 h).
付加的な所要時間(新幹線,なし,0 h).
86:デフォルトの名無しさん
09/06/04 08:02:22
% Prolog (2/2)
許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段(_距離 km,_許容
最長時間 h,_交通手段) :-
findall([_費用,_交通手段],(交通手段(_交通手段),目的地に到達時間(_交通手段,_
距離 km,_許容最長時間 h,_費用)),_候補リスト),
min(_候補リスト,[_費用,_交通手段]),!.
許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段(_,_,'不可能です
').
目的地に到達時間(_交通手段,_距離 km,_許容最長時間 h,_費用) :-
利用規定(_交通手段,_距離 km),
時速(_交通手段,_時速 km / h),
料金(_交通手段,_料金 円 / km),
付加的な所要時間(_交通手段,_,_付加的な所要時間 h),
_到達時間 is (_距離 / _時速) + _付加的な所要時間,
_到達時間 =< _許容最長時間,
_費用 is _料金 * _距離.
87:デフォルトの名無しさん
09/06/04 18:33:54
>>86 全面的に書き換え % Prolog (2/2)
許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段(_距離 km,_許容
最長時間 h,_交通手段) :-
findall([_費用,_交通手段],
( 交通手段(_交通手段),
許容時間内に到達可能(_交通手段,_距離 km,_許容最長時間 h),
料金(_交通手段,_料金 円 / km),
_費用 is _料金 * _距離),_候補リスト),
min(_候補リスト,[_費用,_交通手段]),!.
許容最長時間内に目的地に到着可能で、かつ、費用が一番安い交通手段(_,_,'不可能です
').
許容時間内に到達可能(_交通手段,_距離 km,_許容最長時間 h) :-
利用規定(_交通手段,_距離 km),
時速(_交通手段,_時速 km / h),
付加的な所要時間(_交通手段,_,_付加的な所要時間 h),
_到達時間 is (_距離 / _時速) + _付加的な所要時間,
_到達時間 =< _許容最長時間.
88:デフォルトの名無しさん
09/06/05 05:57:59
スレリンク(tech板:792番)
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 1~100の任意のN個の整数値を一次元配列に読み込み、そ
の合計値と平均値を求め、
80~100,70~79,60~69,59以下の個数をそれぞれ出力する
プログラムを作りなさい。
(1)入力データ数(Nは10以上とする)
(2)入力データ値(配列より読み出し、同じ値は使わな
い)
(3)入力データの合計値、平均値
(4)入力データについて各ランクの個数
(1)~(3)まではできたのですが、(4)がわかりません。。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
joyful/img/9352.txt
↑これの続きにお願いします!
89:デフォルトの名無しさん
09/06/05 06:03:21
>>88
% Prolog (1/3)
問題C792 :-
問題C792(_合計,_平均,_ランクリスト),
集計項目の表示(_合計,_平均,_ランクリスト).
問題C792(_合計,_平均,_ランクリスト) :-
入力データ数の設定(_入力データ数),
整数を読み込む(_入力データ数,[],_入力データ値リスト),
入力データの集計(_入力データ値リスト,_入力データ数,[0,0,0,0],_ランクリ
スト,0,_合計,_平均).
集計項目の表示(_合計,_平均,_ランクリスト) :-
write_formatted('合計: %t\n平均: %t\n',[_合計,_平均]),
list_length(_ランクリスト,_ランクの数),
for(1,N,_ランクの数),
ランク(_,N,_ランク表示),
list_nth(N,_ランクリスト,_ランク集計値),
write_formatted('%t: %t\n',[_ランク表示,_ランク集計値]),
N=_ランクの数.
ランク(N,1,'80~100') :- N>=80,N=<100.
ランク(N,2,'70~79') :- N>=70,N=<79.
ランク(N,3,'60~69') :- N>=60,N=<69.
ランク(N,4,'59以下') :- N<=59.
90:デフォルトの名無しさん
09/06/05 06:07:53
>>88
% Prolog (2/3)
入力データの集計([],_入力データ数,_ランクL,_ランクL,_合計,_合計,_平均) :-
_平均 is _合計 / _入力データ数,!.
入力データの集計([N|R],_入力データ数,_ランクL1,_ランクL,_合計_1,_合計,_平均) :-
データランク(N,_位置,_),
位置要素に加算(_位置,1,_ランクL1,_ランクL2),
入力データの集計(R,_入力データ数,_ランクL2,_ランクL,_合計2,_合計,_平均) :-
位置要素に加算(1,N,[A|R],[B|R]) :- B is A+N,!.
位置要素に加算(P,N,[A|R1],[A|R2]) :- P2 is P-1,位置要素に加算(P2,N,R1,R2).
入力データ数を読み込む(_入力データ数) :-
write('入力データ数を設定してください(ピリオドを付加): '),
read(_入力データ数),
integer(_入力データ数),
_入力データ数>=10,!.
入力データ数の読み込み(_入力データ数) :-
write('正しい入力データ数が得られませんでした!\n10以上の整数を指定してくださ
い\n'),
入力データ数の読み込み(_入力データ数).
91:デフォルトの名無しさん
09/06/05 06:14:19
>>88
% Prolog (1/4) 読みにくかったので書き直します。 >>89,>>90 はキャンセル
問題C792 :-
問題C792(_合計,_平均,_データランクリスト),
集計項目の表示(_合計,_平均,_データランクリスト).
問題C792(_合計,_平均,_データランクリスト) :-
入力データ数の設定(_入力データ数),
整数を読み込む(_入力データ数,[],_入力データ値リスト),
入力データの集計(_入力データ値リスト,_入力データ数,[0,0,0,0],_データランクリ
スト,0,_合計,_平均).
集計項目の表示(_合計,_平均,_データランクリスト) :-
write_formatted('合計: %t\n平均: %t\n',[_合計,_平均]),
list_length(_データランクリスト,_ランクの数),
for(1,N,_ランク数),
データランク(_,N,_ランク表示),
list_nth(N,_データランクリスト,_ランク集計値),
write_formatted('%t: %t\n',[_ランク表示,_ランク集計値]),
N=_ランクの数.
データランク(N,1,'80~100') :- N>=80,N=<100.
データランク(N,2,'70~79') :- N>=70,N=<79.
データランク(N,3,'60~69') :- N>=60,N=<69.
データランク(N,4,'59以下') :- N<=59.
92:デフォルトの名無しさん
09/06/05 06:15:43
>>88
% Prolog (2/4)
入力データの集計([],_入力データ数,_ランクL,_ランクL,_合計,_合計,_平均) :-
_平均 is _合計 / _入力データ数,!.
入力データの集計([N|R],_入力データ数,_ランクL1,_ランクL,_合計_1,_合計,_平均) :-
データランク(N,_位置,_),
位置要素に加算(_位置,1,_ランクL1,_ランクL2),
入力データの集計(R,_入力データ数,_ランクL2,_ランクL,_合計2,_合計,_平均) :-
位置要素に加算(1,N,[A|R],[B|R]) :- B is A+N,!.
位置要素に加算(P,N,[A|R1],[A|R2]) :- P2 is P-1,位置要素に加算(P2,N,R1,R2).
入力データ数を読み込む(_入力データ数) :-
write('入力データ数を設定してください(ピリオドを付加): '),
read(_入力データ数),
integer(_入力データ数),
_入力データ数>=10,!.
入力データ数の読み込み(_入力データ数) :-
write('正しい入力データ数が得られませんでした!\n10以上の整数を指定してくださ
い\n'),
入力データ数の読み込み(_入力データ数).
93:デフォルトの名無しさん
09/06/05 06:22:50
>>92
そのまま続けると入力規制に引っ掛かりますよ!
94:デフォルトの名無しさん
09/06/05 06:41:20
% Prolog (3/4)
整数を読み込む(0,L,[]) :- !.
整数を読み込む(P,L,[N|R]) :-
write('整数を入れてください(ピリオドを付加): '),
read(N),
整数入力検査(N,L),
P2 is P-1,
整数を読み込む(P2,[N|L],R).
整数を読み込む(P,L,X) :- 整数を読み込む(P,L,X).
95:デフォルトの名無しさん
09/06/05 07:03:43
スレリンク(tech板:741番)
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):1〜256文字の文字列Sと単語Wを入力し、文字列Sの最初の単語がWであるときは文字列Sの先頭に*を付けたものを出力し、そうでないときはSをそのまま出力するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:6月10日 8:00
[5] その他の制限:2つの単語が等しいときは1を、等しくないときは0を返す関数int compare(char *, char *)を作成して用いること。
入力する文字列に2つ以上の連続したスペースはないとする。
入力する文字列の最初と最後はスペースでないとする。
96:デフォルトの名無しさん
09/06/05 07:16:37
スレリンク(tech板:725番)
苗字・名前・年齢・身長・体重を入力し、
その個人データを氏名・年齢・身長・体重・BMIの値とコメントを出力する。
# BMI計算式とコメント
式:BMI=体重(kg)/身長(cm)/身長(cm)*10000
BMI=18.5 以下、やせてます
BMI=18.5 超え 25.0 未満、普通です
BMI=25.0 以上、レッツエクササイズ!
97:デフォルトの名無しさん
09/06/05 07:17:06
>>88
% Prolog (4/4)
整数入力検査(N,L) :-
integer(N),
N >= 0,
N =< 100,
not(member(N,L)),!.
整数入力検査(N,L) :-
not(integer(N)),
write('整数ではありません! 再入力が必要です。\n'),
!,fail.
整数入力検査(N,L) :-
integer(N),
not((N >= 0,N =< 100)),
write('整数範囲が正しくありません! 再入力が必要です。\n'),
!,fail.
整数入力検査(N,L) :-
integer(N),
N >= 0,N =< 100,
member(N,L),
write('既出の整数です! 再入力が必要です。\n'),
!,fail.
98:デフォルトの名無しさん
09/06/05 09:22:23
>>96
URLリンク(nojiriko.asia)
99:デフォルトの名無しさん
09/06/05 16:11:59
スレリンク(tech板:809番)
<問題>>
URLリンク(kansai2channeler.hp.infoseek.co.jp)
突然骨のある問題が。
100:デフォルトの名無しさん
09/06/05 17:56:46
>>99
% Prolog (1/2)
可能経路数(_桝,_開始点_X,_開始点_Y,_経路の数) :-
findall(1,駒の動き(_開始点_X,_開始点_Y,_),L),
length(L,_経路の数).
駒の動き(_桝,_開始点_X,_開始点_Y,_経路) :-
駒の動き(_桝,_開始点_X,_開始点_Y,[[_開始点_X,_開始点_Y]],_経路).
駒の動き(_桝,X,Y,L,_経路) :-
移動可能点(_桝,X,Y,X2,Y2),
not(member([X2,Y2],L)),
駒の動き(_桝,X2,Y2,[[X2,Y2]|L],_経路).
駒の動き(_桝,X,Y,L,_経路) :-
_桝2 is _桝 * _桝,
list_length(L,_桝2),
reverse(L,_経路).
101:デフォルトの名無しさん
09/06/05 17:57:51
>>99
% Prolog (2/2)
変位(2,1).
変位(1,2).
変位(-1,2).
変位(-2,1).
変位(-2,-1).
変位(-1,-2).
変位(1,-2).
変位(2,-1).
移動可能点(_桝,I,J,X,Y) :-
変位(U,W),
X is I+U,
Y is J+W,
X > 0,
X =< _桝,
Y > 0,
Y =< _桝.
102:デフォルトの名無しさん
09/06/05 23:38:49
#-*- coding: utf-8 -*-
# python2.6で>99。といいつつ出題を無視してジェネレータで遊んでみた。schemeなら継続を使うところなんだろうね。
class solver:
delta = ((1,2),(1,-2),(-1,2),(-1,-2),(2,1),(-2,1),(2,-1),(-2,-1))
def __init__(self, n):
self.n, self.field = n, [[0] * n for i in range(n)]
def generator(self, x=0, y=0, m=1):
if 0 <= x < self.n and 0 <= y < self.n and self.field[y][x] == 0:
self.field[y][x] = m
if m == self.n * self.n: yield tuple(self.field)
else:
for dx,dy in self.delta:
for field in self.generator(x+dx, y+dy, m+1):
yield field
self.field[y][x] = 0
if __name__ == '__main__':
import re, sys
# 解を表示
g = solver(5).generator();
def display(f): print'\n'.join(' '.join(map(lambda x:'%2d'%x ,L)) for L in f)+'\n'
while True:
print u'数字入力で次のN件表示 / qで終了'
line = sys.stdin.readline()
if len(line) > 0 and line[0].lower() == 'q': break
if re.match(r'^\d+$', line):
try: map(lambda x: display(g.next()), range(int(line)))
except: break
103:100
09/06/06 05:32:54
すみません。一箇所間違っていた。
可能経路数(_桝,_開始点_X,_開始点_Y,_経路の数) :-
findall(1,駒の動き(_桝,_開始点_X,_開始点_Y,_),L),
length(L,_経路の数).
findall/3の中の 駒の動き/4 の第一引数 _桝 が>>100では落ちていて、
駒の動き/3 になってしまっていた。
104:デフォルトの名無しさん
09/06/07 11:32:48
スレリンク(tech板:547番)
[1] 授業単元: プログラミング初歩
[2] 問題文(含コード&リンク):(文字列を与えられた時、アルファベットを大文字小文字区別せずに出現頻度順
に小文字で並べた文字列を返すプログラムを作りなさい。)
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] バージョン: (Ruby 1.8.6 )
[3.3] 言語: (Ruby
[4] 期限: ([2009年06月01日21:00まで]
[5] その他の制限: 配列などの初歩的な概念まで
105:デフォルトの名無しさん
09/06/07 15:16:32
import Data.Char (toLower)
import Data.List (sortBy)
import Data.Function (on)
import Data.Map (fromListWith, toList)
t104 :: String -> String
t104 = map fst . sortBy ((flip compare) `on` snd) . toList . fromListWith (+) . (flip zip (repeat 1)) . map toLower
106:デフォルトの名無しさん
09/06/07 16:43:57
% Prolog >>105とは対照的なプログラム
t104(Atom,AtomX) :-
findall([0,N],for(97,N,122),L),
to_lower(Atom,Atom2),
atom_codes(Atom2,L1),
t104_2(L1,L,L2),
sort(L2,L3),
t104_3(L3,[],L4),
atom_codes(AtomX,L4),!.
t104_2([],X,X).
t104_2([A|R1],L,X) :-
t104_3(A,L,L1),
t104_2(R1,L1,X).
t104_3(97,[[S,N]|R],[[S1,N]|R]) :-
S1 is S+1.
t104_3(N,[U|R1],[U|R2]) :-
N > 97,
M is N-1,
t104_3(M,R1,R2).
t104_4([],X,X).
t104_4([[0,_]|R1],Y,X) :-
t104_4(R1,Y,X).
t104_4([[C,N]|R1],Y,X) :-
C > 0,
t104_4(R1,[N|Y],X).
107:デフォルトの名無しさん
09/06/07 17:35:27
>>106
せっかく t104_2 から t104_3 が同一プログラムパターンできているのだから、
t104_4 も同一パターンに徹するべき。
t104_4([],[]).
t104_4([[0,_]|R1],X) :-
t104_4(R1,X).
t104_4([[C,N]|R1],[N|R2]) :-
C > 0,
t104_4(R1,R2).
その代わり、
t104(Atom,AtomX) :-
findall([0,N],for(97,N,122),L),
to_lower(Atom,Atom2),
atom_codes(Atom2,L1),
t104_2(L1,L,L2),
sort(L2,L3),
reverse(L3,L4),
t104_3(L4,L5),
atom_codes(AtomX,L5),!.
とする。多分、reverse/2 を使いたくなかったのだろうけれど。
108:デフォルトの名無しさん
09/06/08 04:59:14
スレリンク(tech板:590番)
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):ポインタ配列
char *month[ ] = { "None", "January", "February", "March", "April", "May", "June
", "July",
"August", "September", "October", "November", "December" };
を用いて1〜12の数値を入力してJanuary〜Decemberを返す関数GetMonthを作成せよ.
109:デフォルトの名無しさん
09/06/08 05:07:09
% Prolog (問題やさし過ぎた! Prologチュートリアルと思ってください)
month(['None','January','February','March','April','May','June','July',
'August','September','October','November','December']).
'GetMonth'(_数値,_月名) :-
month(_月名ならび),
M is _数値 + 1, /* どうしても'None'から始まるのだとすると */
list_nth(_数値,_月名ならび,_月名).
% 組込みになっていると思いますが list_nth/3 の定義は、
list_nth(1,[X|_],X).
list_nth(N,[_|R],X) :- integer(N),N > 1,M is N-1,list_nth(M,R,X).
110:109
09/06/08 05:41:15
% 間違い。
'GetMonth'(_数値,_月名) :-
month(_月名ならび),
M is _数値 + 1, /* どうしても'None'から始まるのだとすると */
list_nth(_数値,_月名ならび,_月名).
は
'GetMonth'(_数値,_月名) :-
month(_月名ならび),
M is _数値 + 1, /* どうしても'None'から始まるのだとすると */
list_nth(M,_月名ならび,_月名).
が正しい。お粗末!
111:デフォルトの名無しさん
09/06/08 05:52:17
スレリンク(tech板:640番)
【 課題 】
指定したフォルダの中身をフォルダの構成などを含めて完全にバックアップするソフトを作成すること。
尚、バックアップファイルには以下の機能を持つようにすること。
・ 対象ファイルや除外ファイルを指定できるような
仕組みを持つこと。
・ バックアップ経過のログを作成すること。
ログにはバックアップ処理の実行時間を出力すること。
また、既にあるフォルダが指定された場合の対処についてもそれぞれ考慮して
機能の実装を行うこと。
作業に余裕のある人は以下の機能を追加すること。
・バックアップしたファイルを圧縮する仕組みの追加。
・プログラムが常駐する仕組みの追加。
112:デフォルトの名無しさん
09/06/08 06:06:01
スレリンク(tech板:385番)
問題文:
1、10個の文字を1つずつ入力し、それらを入力した順に
並べて表示
2、10個の文字を1つずつ入力し、それらを入力した順と逆順に
並べて表示
3、5文字以上の長さの文字列を入力し、4番目の文字と5番目の文字を入れ替えて表示
4、10個の1桁の整数を入力し、それらを大きい順に並べて表示
5、10個の1桁の整数を入力し、その中から最も大きい3個を入力した順に表示
6、1桁の整数の入力を、同じ数が3回入力されるまで繰り返す
7、1桁の整数の入力を、0から9までの全ての数が入力されるまで繰り返す
113:デフォルトの名無しさん
09/06/08 20:23:27
>>112 (5、この問題だけしか通用しないアルゴリズム?)
t112_5(L,X) :-
t112_5(L,[0,0,0],X).
t112_5([],L,L).
t112_5([A|R],L1,L) :-
top3(A,L1,L2),
t112_5(R,L2,L).
top3(N,[A,B,C],[A,B,N]) :-
A >= B,A >= C,B >= C,N > C.
top3(N,[A,B,C],[A,C,N]) :-
A >= B,A >= C,C >= B,N > B.
top3(N,[A,B,C],[B,C,N]) :-
B >= A,B >= C,C >= A,N > A.
top3(N,[A,B,C],[A,B,N]) :-
B >= A,B >= C,A >= C,N > C.
top3(N,[A,B,C],[B,C,N]) :-
C >= A,C >= B,B >= A,N > A.
top3(N,[A,B,C],[A,C,N]) :-
C >= A,C >= B,A >= B,N > B.
top3(_,L,L).
114:113
09/06/08 21:03:51
>>112 ちょっと読み難いので書き直し。私は力技でタイプしてしまいましたが
top3/3 をどれだけ素早く質問から(?- ...)生成できるかということのようです。
t112_5(L,X) :-
t112_5(L,[0,0,0],X).
t112_5([],L,L).
t112_5([A|R],L1,L) :-
top3(A,L1,L2),
t112_5(R,L2,L).
top3(N,[A,B,C],[A,B,N]) :-
A >= B,A >= C,B >= C,N > C.
top3(N,[A,B,C],[A,C,N]) :-
A >= B,A >= C,C >= B,N > B.
top3(N,[A,B,C],[B,C,N]) :-
B >= A,B >= C,C >= A,N > A.
top3(N,[A,B,C],[A,B,N]) :-
B >= A,B >= C,A >= C,N > C.
top3(N,[A,B,C],[B,C,N]) :-
C >= A,C >= B,B >= A,N > A.
top3(N,[A,B,C],[A,C,N]) :-
C >= A,C >= B,A >= B,N > B.
top3(_,L,L).
115:デフォルトの名無しさん
09/06/08 21:21:24
スレリンク(tech板:9番)
マッチロジックを用い、次に示すようなプログラムを作りなさい
1)顧客情報が入った旧マスタファイル(M)とトランザクションファイル(T)から新マスタファイル
(N)を作成する
2)各ファイルのレコードは以下
社員コード 社員名 電話番号
数値4桁 文字18桁 文字12桁
3)Tには同一の社員レコードが複数ある
4)いずれのファイルも社員コードの昇順になっている
5)Mに存在する社員レコードがTにない場合は、MのレコードをNに追加し、Mに存在する社員レコードが
Tにある場合はTのレコードをNに追加する
(Tに同一の社員コードが複数存在する場合は1番下のレコードを追加)
Mに存在しない社員コードがTにある場合はTのレコードをNに追加
116:デフォルトの名無しさん
09/06/08 21:22:42
つづき、
処理手順
1)M、Tともにデータがある、MとTを比較
@M<Tのとき
→Mを出力
AM=Tのとき
→Tを出力B
BT同士で比較
同じコードのデータが複数ある→1番下のデータを出力
CMを読み込む
DM>Tのとき
→Tを出力B
2)Mにのみデータがある
Mを出力
3)Tにのみデータがある
Tを出力B
4)両方のファイルがなくなれば終了
117:デフォルトの名無しさん
09/06/09 12:12:08
>>115 COBOL向き問題
% Prolog(1/2) オンメモリ版
t115(M,T) :-
g115(M,L1),
g115(T,L2),
b(L1,L2,L3),
p115(M,L3).
b([],[],[]) :- !.
b([A|R1],[],[A|R3]) :- !,b(R1,[],R3).
b([],[B|R2],[B|R3]) :- !,b([],R2,R3).
b([[A|B]|R1],[[C|D]|R2],[[A|B]|R3]):-A@<C,!,b(R1,[[C|D]|R2],R3).
b([[A|B]|R1],[[C|D]|R2],[[D|D]|R3]):-A@>C,!,b([[A|B]|R1],R2,R3).
b(L1,L2,[[B|D]|R3]) :- b_2(L2,[[B|D]|R2]),b(L1,R2,R3).
b_2([A],[A]) :- !.
b_2([[A|B],[C|D]|R],[[A|B],[C|D]|R]]) :- A @< C.
b_2([[A|B],[C|D]|R],X) :- A = C,b_2([[C|D]|R],X).
118:デフォルトの名無しさん
09/06/09 12:13:21
% Prolog(2/2)
g115(File,X) :-
open(File,read,Input),
findall(W,(repeat,get_line(Input,U),(U=end_of_file,!,fail;cut115(U,W)),X),
close(Input).
p115(File,L) :-
open(File,write,Output),
( member(U,L),
concat_atom(U,X),
write_formatted(Output,'%t\n',[X]),
fail;
close(Output)
).
cut115(A,[A1,A2]) :- sub_atom(A,0,4,R,A1),subatom(A,4,R,_,A2).
% Library Utility
get_line(Stream,X) :-
findall(C,(repeat,get_char(C),(X='\n',!,fail;true)),X).
concat_atom(L,X).
concat_atom([A],A).
concat_atom([A|R],X) :- concat_atom(R,Y),atom_concat(A,Y,X).
119:117
09/06/09 12:20:20
>>118 間違いがありました。訂正します。
get_line(Stream,X) :-
findall(C,(repeat,get_char(C),(X='\n',!,fail;true)),X).
concat_atom(L,X).
は
get_line(Stream,X) :-
findall(C,(repeat,get_char(Stream,C),(C='\n',!,fail;true)),X).
concat_atom(L,X).
が正しい。
findall/3の中に2箇所誤りがありました。
120:デフォルトの名無しさん
09/06/09 13:32:07
>>112 6、
% Prolog
t112_6(X) :- get_integer(N),t112_6(N,[N],X).
t112_6(N,L,N) :- count(N,L,3).
t112_6(N,L,X) :- get_integer(M),t112_6(M,[M|L],X).
count(A,[],0).
count(A,[A|R],X) :- count(A,R,Y),X is Y+1.
count(A,[_|R],X) :- count(A,R,X).
get_integer(N) :- repeat,write('整数(0-9).改行 ? '),read(N),N>=0,N=<9,!.
121:デフォルトの名無しさん
09/06/09 13:52:34
>>112 7、
% Prolog
t112_7 :- get_integer(N),t112_7(N,[N]).
t112_7(N,L) :- length(L,10).
t112_7(N,L) :- member(N,L),get_integer(M),t112_6(M,L).
t112_7(N,L) :- not(member(N,L)),get_integer(M),t112_7(M,[N|L]).
get_integer(N) :- repeat,write('整数(0-9).改行 ? '),read(N),N>=0,N=<9,!.
122:デフォルトの名無しさん
09/06/09 16:09:43
>>74
% Prolog
URLリンク(nojiriko.asia)
123:デフォルトの名無しさん
09/06/09 20:40:10
<<問題>>
スレリンク(tech板:64番)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
124:デフォルトの名無しさん
09/06/09 20:45:27
>>123
% Prolog
URLリンク(nojiriko.asia)
125:デフォルトの名無しさん
09/06/10 05:01:30
スレリンク(tech板:355番)
課題:三つの整数を入力し、三辺がそれらの長さであるような三角形が
作れる時に「OK」、作れないときに「NG」を出力する。
126:デフォルトの名無しさん
09/06/10 05:06:37
>>125
URLリンク(nojiriko.asia)
127:124
09/06/10 05:45:42
URLリンク(nojiriko.asia)
<BODY><PRE>
が落ちていたため改行して表示されませんでした。
訂正しました。
128:デフォルトの名無しさん
09/06/10 06:58:11
<<課題>> これもC/C++の宿題から
スレリンク(tech板:122番)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
129:デフォルトの名無しさん
09/06/10 07:19:16
>>128
% Prolog
% t128_1 はパス
t128_2(L,X) :- append([_|L1],[T],L),append(L1,[T,T],X).
t128_3(L,[A,A|L1]) :- append([A|L1],[_],L).
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4630日前に更新/314 KB
担当:undef