読者です 読者をやめる 読者になる 読者になる

Emacsで素数を最小の手数で列挙する

emacs

Vim で素数を最小の手数で列挙する - TIM Labs
VimGolf - real Vim ninjas count every keystroke!


を真似てできるだけ短く Emacs Lisp素数を小さい方から 100個
求めてみました。

コード

(load"cl")(load"calc-comb")(subseq math-primes-table 0 100)

60文字です。Vimgolfの方は終了までする必要があるようなので、
60 + 2(load) + 1(C-j[実行]) + 2(C-xC-c[終了]) = 65文字相当でしょうか.


普通に素数を求める関数を定義しようとすると, 100文字は余裕で
超えてしまうだろうので、なんとかならないだろうかと思って、
Emacslispディレクトリを探索していると, math-primes-tableと
いう素数が定義されたベクタを発見しました。calcで使われている
ものでおそらく高速化のために利用されるものだと思います。
670個の素数が定義されているようです。

解説

(load"cl")

subseq関数のためにロード. requireより短く済むように loadにしました.
空白なんて当然入れません。

(load"calc-comb")

math-primes-tableを読み込むためのロード.

(subseq math-primes-table 0 100)

math-primes-tableの 0個目の要素から 100個分取得。


以上です。

おわりに

改善の余地があるか不明です. 短い名前の関数を呼んで、autoloadで
うまく目的のライブラリを読み込む等模索してみましたが、無理そう
でした。


これより短くできるという方はぜひブログ等に書いていただければと
思います。