プログラミング言語APLで謹賀新年Golf

2012年の元旦ということで、プログラミング言語APLで謹賀新年Golfをやってみました。

[APL2012golf-73byte]

APLとはA Programming Languageの略で、1957年のFORTRAN登場以降にケネス・アイバーソン博士によって発明された数式処理のための記法をIBMが対話型のプログラミング言語として修正し実装したものです。当時は⍳{iota}や⍴{rho}など特殊な記号を入力するためのAPLキーボードがあったそうです。

[APL-keyboard]

今ではAPLフォントの記号はすべてUnicodeの中で定義されています。
先月開催したサイボウズ・ラボユース冬の合宿では、林拓人さんが筑波大学の図書館から借りてきたAPLの教科書があったので少し斜め読みしてみました。それで、APLの記号の使い方が大体わかったので、今回の謹賀新年Golfをしてみることにしました。

まずは91文字のAPLプログラム。

11×((3⊖5 o↑1⌽(1 o⍴⍳o)∊3 o)+1⊖5 o↑1⌽(2 o⍴⍳o)∊3 7 o)+1-((5 o⍴0,⍳27)∊o(o+10))∨(5 o⍴⍳o)∊2×⍳o←13

11 11 11 0 11 11 11 0 11 0 11 11 11 0 0 11 0 11 0 11 0 11 0 0 0 11 11 11 11 0 11 0 11 0 11 0 11 11 11 11 0 0 0 11 0 11 0 11 0 11 0 0 11 11 11 0 11 11 11 0 11 0 11 11 11

こんな感じで上のAPLの1行プログラムを実行すると、5×13のマトリクスで表現された 2 0 1 2 という 0 1 の数列が出力されます。バイナリアンになった気持ちで、0は空白、11はドットで塗り潰す、という心の眼で実行結果を見てください。今年の西暦2012に見えますよね?

■■■□■■■□■□■■■ □□■□■□■□■□□□■ ■■■□■□■□■□■■■ ■□□□■□■□■□■□□ ■■■□■■■□■□■■■

もうちょっと数列の作り方を工夫すればコードが短くなるかな、と思ってGolfしたのがこちら。67文字。

11×1+(8⌽1⊖5 o↑2 1⍴1)-(⍵+3⌽⍵←4⊖5 o↑3 3⍴7⌽5<⍳9)+5 o⍴¯2⌽(o⍴⍳o←13)∊2×⍳4

11 11 11 0 11 11 11 0 11 0 11 11 11 0 0 11 0 11 0 11 0 11 0 0 0 11 11 11 11 0 11 0 11 0 11 0 11 11 11 11 0 0 0 11 0 11 0 11 0 11 0 0 11 11 11 0 11 11 11 0 11 0 11 11 11

24文字も短くなっています!

非常に簡潔なコードですね。

APLの処理系はたくさんあるのですが、

Golf
2012/01/01 20:45



コメント

コメントを見る (0)

コメントを投稿

* コメントは記事の投稿者が承認するまで表示されません。