Diary?::2005-08-01

今日から日記をつけることにした。日記というのはあくまでもその日の出来事や感じたことを書く場所なのだから、無理してわかりやすく書こうとか理解してもらおうとしなくてもいいはず。とりあえずそういうことは一切放棄して、その瞬間に脳内で生成されたオブジェクトをひたすら直列化してみよう。


K-1ヘビー級は茶番になりつつあるという認識だったが、昨日みたいな試合が続けば文句は無い。特に決勝戦は素晴らしいファイトだった。あんなに見ていて燃えた試合はKID vs 魔裟斗以来かな。K-1史上でみても上位に入る試合だろう。

それよりいい加減曙を出すのをやめたらどうだ? 明らかに外しているというか、こっちはもううんざりしている。曙を出さないだけでも大分茶番の度合が低くなる。


見慣れないボットが来ている。ConveraCrawlerという奴なのだが、どうも昔は結構たちの悪いボットだったらしい。今のところそこまでの蛮行に及んでいる様子はないので、もしかしたら改善されているかもしれない。今後の展開次第では拒否するだろうけど。

一応robots.txtには従うらしいので、そこまで悪質という訳ではなさそうだ(ただ単に技術的に不完全なだけ?)。NaverとかはIPアドレスを見て弾くしかないからなあ。


ふと思い立ってPythonでどれだけ再帰関数で階乗を計算できるのか試してみたくなった。環境はPython2.4.1、メモリは256MB(ビデオメモリに32MBほど食われている)、CPUは1.2G程度。

def fact(n):
	if n == 1:
		return 1
	elif n > 1:
		return n*fact(n-1)
	else:
		raise

def fact2(n, buf=1):
	if n == 0:
		return buf
	else:
		return fact2(n-1, n*buf)

for i in range(1, 10000):
	try:
		fact(i)
	except:
		print i
		break

1000で例外発生。計算可能なのは999まで。fact2では末尾再帰というテクニック(らしい)を使っているが、結果は変わらず。

アッカーマン関数もやってみたが、ack(3, 6)は計算できたがその先はダメだった。第一引数が4以上になるとまず無理くさい(ack(4, 0)は計算できたが)。

以下はPythonで書いてみたアッカーマン関数。

import sys

def ack(m, n):
	if m == 0:
		return n+1
	elif n == 0:
		return ack(m-1, 1)
	else:
		return ack(m-1, ack(m, n-1))

print ack(int(sys.argv[1]), int(sys.argv[2]))

Haskellなんかはこういうのに強いらしいが、残念なことにHaskellは全然書けない。

Written by Kuwata Chikara
Creative Commons