プログラミング言語APLで謹賀新年Golf2012年の元旦ということで、プログラミング言語APLで謹賀新年Golfをやってみました。
APLとはA Programming Languageの略で、1957年のFORTRAN登場以降にケネス・アイバーソン博士によって発明された数式処理のための記法をIBMが対話型のプログラミング言語として修正し実装したものです。当時は⍳{iota}や⍴{rho}など特殊な記号を入力するためのAPLキーボードがあったそうです。
今では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 1124文字も短くなっています!
非常に簡潔なコードですね。
APLの処理系はたくさんあるのですが、
コメントを見る (0)
コメントを投稿