■ アップル信者について
はてなブックマークのホットエントリーなどを見ていると、アップル信者が、「i-podをケースに入れるのはジョブズ様の意志に反する。真のユーザーはi-podをケースに入れたりしない」とか書いてて「キンモー☆ macとかもう一生つかわんとこー」と思う機会がよくある。アイホンがsoftbankから販売されるという例の件でも、「アップルに失策なし! われわれはただ信ずるのみ」みたいなことを書いている人がいて、「正気か?」と思うのだが、ああいう人は自分が逆宣伝になっていることに気づいているのか。まあ一般ユーザーに宣伝など求める方がおかしいが。
とにかく、macだけは絶対買うまいと思ったので、いましめになるようにここに書いておこう。
あとあまり関係ないが、poderosaを入れたら、コリナックス + デビアン環境が快適になってきたので、最近結構デビアンに触っている。うぶんとぅにすればよかったかと思わないでもないが、デスクトップはどうせ使わないし、まあどっちでもいいかもしれないとも思う。
■ 先日のパズルの答え
↓一応見えないようにしておく。
話をわかりやすくするため、アラビア人が100人であるとしておく。
背理法を用いる。友達の数が全員異なると仮定し、矛盾を導く。
自分とは友達になれないという仮定より、友達の数は0から99のいずれかである。
100人のアラビア人がいて、友達の数が0から99の100通りであるため、友達の数が99人というアラビア人が必ず存在する。これをAとしよう。
また、友達が0人というアラビア人も必ず存在する。これをZとしよう。
しかるに、Zは残りのアラビア人全員と友達である。つまりZはAの友達であるため、仮定より、AはZの友達である。
ゆえにZの友達の数は0人ではありえない。
従って、友達の数が全員異なるという当初の仮定が間違っていた。
友達の数が同じであるようなアラビア人が少なくとも2人いる。
(上記の議論はアラビア人の数をn人としても同様に証明できる)。
■ Prologとわたし
ここ数日なぜかPrologに触っていた。
「Project Eulerを解くのもよいが、そろそろ飽きてきたので別の言語で解きたいな。何か新しい言語で解いてみよう」と思ったのがきっかけ。
ハスケルかプロログにしようと思ったが、なんとなくプロログ。
1万以下ならできたが、100万以下まで拡張しようとすると「Out of global stack」でエラー。
なんか対策を考えねばならない。
#!/usr/bin/swipl -t main -s
digits(X,[X]) :- integer(X), X < 10,!.
digits(X,Y) :-
integer(X),
D is floor(log10(X)),
pow(10,D,C),
X1 is floor(X/C),
R1 is X - X1*C,
digits(X1,Y1),
digits(R1,Y2),
append(Y1,Y2,Y).
digits_to_int([X],X).
digits_to_int(L,X) :-
digits_to_int(L,X,0).
digits_to_int([X],R,K) :-
integer(X),
R is K + X,!.
digits_to_int(Ls,X,K) :-
Ls = [T|R],
length(Ls,L),
pow(10,L-1,D),
X1 is T * D,
K1 is K+X1,
digits_to_int(R,X,K1).
circular([X],[X]).
circular(L,[X|R]) :-
member(X,L), select(X,L,L2), circular(L2,R).
circulars(X,L) :-
circulars_sub(X,[],L).
circulars_sub(X,C,L) :-
circular(X,C1), not( member(C1,C)),!,
circulars_sub(X,[C1|C],L).
circulars_sub(_,L,L).
can_divided(X,Y) :- 0 is Y mod X.
cannot_divided(X,Y) :-
X1 is Y mod X,
X1 > 0.
between_l(U,U,[U]) :- !.
between_l(B,U,L) :-
between_l2(B,U,[],L).
between_l2(B,U,L,L1) :-
B < U,
U1 is U - 1,
between_l2(B,U1,[U|L],L1).
between_l2(B,B,L,[B|L]).
odd(B) :- 1 is B mod 2.
odd_list(B,U,L) :- odd_list(B,U,[],L).
odd_list(B,U,L,L0) :-
B < U,
(
not(odd(U)),
U1 is U-1,
odd_list(B,U1,L,L0)
;
U2 is U-2,
odd_list(B,U2,[U|L],L0)
),!.
odd_list(B,_,L,L0) :-
(
odd(B), L0 = [B|L];
L0 = L
),!.
primes_under(U,L) :-
odd_list(2,U,L0),
sublist(cannot_divided(2),L0,[H|R]),
sublist(cannot_divided(H),R,T1),
P = [2,H],
primes_under2(U,P,T1,L).
primes_under2(U,P,[C|R],L0) :-
sublist(cannot_divided(C),R,L),
last(L,Llst),
last(P,Plst),
PP is Plst*Plst,
PP < Llst,
append(P,[C],L2),
primes_under2(U,L2,L,L0),!.
primes_under2(_,P,M,L):-
append(P,M,L),!.
contain(L,X) :- member(X,L).
circular_prime(L,X) :-
digits(X,D),
circulars(D,C),
maplist(digits_to_int,C,C1),
checklist(contain(L),C1).
p35(M,X) :-
primes_under(M,Ps),
sublist(circular_prime(Ps),Ps,Cs),
write(Cs),
write('¥n'),
length(Cs,X).
main :-
p35(10000,X),
write('p35: '),
write(X).
コメント(2)
コメントする
トラックバック(0)
このブログ記事を参照しているブログ一覧: 雑記2008年6月5日(木)
このブログ記事に対するトラックバックURL: http://www.at-akada.org/mt/mt-tb.cgi/927
荒んだ気分になりたい時は信者の罵り合い見たさにゲハを良く見るよ。
』 (2008/06/ 6 1:20)なんでもないものの信者になるイベントがあったら面白いかも。
こういう感じで。
http://www.heiwaboke.com/2007/08/vs_1.html
ゲハのハード信者争いは、関心が無いせいか実に心温まるやりとりですね。
』 (2008/06/ 6 8:21)日常的にも、ことさらに、「12月生まれ涙目ww」「AB型は廃物」などと煽っていくといいかもしれない。そういうノリの占いとか流行らないかな。