トップ «前の日記(2007-02-15) 最新 次の日記(2007-02-19)» 月表示 編集

日々の流転


2007-02-17 [長年日記]

λ. anarchy golf

激しく今更だが、anarchy golf に少し手を出してみる。 与えられたお題のプログラムを如何に短く書くかを競うだけなのだが、これがなかなか楽しい。5行でテトリスを書いたりしている人の気持ちが少し分かった気がする。

しかし、みんなコード短すぎ。ちょっと頭がおかしいんじゃないかと思う(褒め言葉)。例えば、eを100桁表示する問題 だと、今のところ私は以下のような素朴なプログラムしか思いついてなくて、これで66バイトなのだが、Haskellでのトップが42バイトで、全体のトップはRubyの32バイト。 むー、手も足もでないかも。

import Ratio
main=print$round$sum$[10^100%x|x<-1:scanl1(*)[1..99]]

【追記】 1:scanl1(*)[1..99] よりも scanl(*)1[1..99] と書くべきだった。 その方が美しいし、2文字短い。

本日のツッコミ(全5件) [ツッコミを入れる]
ψ [1..100]>>=pen (2007-02-18 02:53)

ずるいですが(36は後出しのつじつまあわせ)<br>main=print$36+sum(scanl(div)(10^100)[1..99])<br>44バイト<br>Rubyはeを必要な桁数求める関数 BigFloat::E(n)があるらしい<br>けどBigFloatは標準ライブラリ?

ψ さかい (2007-02-18 15:51)

ああ、なるほど。これは酷い(笑<br>整数で計算したときの誤差はもっと大きいと思い込んでたけど、考えてみればこの程度だよなぁ……

ψ mao (2007-02-19 20:03)

整数で計算しても<br>main=print$foldr1(\x y->10^100+div y x)[1..90]<br>だと誤差でないです。まあ、これだと多分46Bより縮まないんでゴルフ的には負けですが

ψ [1..100]>>=pen (2007-02-22 03:19)

大変なことに気づきました。e表示問題の sample output は実は101桁です!(笑)

ψ さかい (2007-03-01 15:20)

反応が遅くなりました。<br><br>>maoさん<br>なるほどー。<br>そんな手もありましたか。<br><br>>[1..100]>>=penさん<br>ΩΩ Ω な、なんだってー!?<br>10^100の時点で101桁になってることに気付くべきでした……