GrassのHello World
id:nishiohirokazuさんが割と直球で書いていたので、小細工しつつ2時間ほどがんばって草植えてみたwww Helloworldに2時間とかwwwwwww
改行除くと751→738文字。
wvwWwwwwWwwwwwwWWWWWwWWWWWwwwwvwwwwWWWwwWwwWWWWWWwwwwWwwvwWWwWwwvwwWWwvwWWWwwWW WWWwwwWwwWWWWWWwWWWWWWWwWWWWwWWWWWwWWWWWWwWWWWWWWWWWWWWWwwwwwwwwWwWwWWWwwWWWWww wwwwwWWWWWwwwwwwwWWWWWWwwwwwwwWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwWwwwwww wwwwwwwwwwwwwwWwwwwwwwwwwwwwWwwwwwwWWwwwwwwWWWwwwwwwWWWWWWwwwwwwwwwwwwwwwwwwwwW wwwwwwwwwwWWwwwwWWWwwwwWWWWwWWWWWwwwwwwwwwwwwwwwwwwWWWWWWWWWWWwWwwwWWwWWWwWWWWw WWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwwww wwwwwwWWwwwwwwwwwwwWWWwwwwwwwWWWWwWWWWWwwwwwwwwWWWWWWwwwwwwwwwwwwwwwwwwwwwWWWWW WWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww wWWwwwwwwwwwwwwwWWWwwwwwwwwwwwwwWWWWwwwwwwwwWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwWWWW WWwwwwwwwwwwwwwwwwwwwwwwwww
wv (λx . x) 重要。スタックの底の方から繰り返し使いたい値や関数を引き上げることができます。
公式のサンプル「はいはいわろすわろす」でも効果的に使われています。
あと2番目の関数、最初は
(lambda (n) (OUT (n SUCC w)))
という感じだったのを、9割5分書けてから l が3つ出てくる事に気付いて
(lambda (n) (progn (OUT (n SUCC w)) n))
に書き直したんだけど、結果1文字しか縮まらなかったorz
同じ文字が何度も出てくる文字列を出力する場合にはこうしておいた方が楽になると思います。
あとは数字の作り方の工夫やwvの使い所次第で縮めて行けるんじゃないかなと。ちなみに今回SUCCは最大1周しかさせてません。
↓作業用のコメント付きソース
wv id wWwwwwWwwwwwwWWWWWwWWWWWwwwwv print wwwwWWWwwWwwWWWWWWwwwwWwwv + wWWwWwwv dbl wwWWwv 1 ;main wWWWww :dbl 1 = 2 WWWWWwww :+ 1 = 1+ Www :1+ 2 = 3 WWWWWWw :dbl _ = 6 WWWWWWWw :dbl _ = 12 WWWWw : 1+ 12 = 13 WWWWWw : 1+ 13 = 14 WWWWWWw : 1+ 14 = 15 WWWWWWWWWWWWWWwwwwwwww :id 2 Ww : 2^2 = 4 Ww : 4^4 = 256 WWWww : 4^2 = 16 WWWWwwwwwww : 13^2 = 169 spc WWWWWwwwwwww : 14^2 = 196 WWWWWWwwwwwww : 15^2 = 225 WWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwww :id id Wwwwwwwwwwwwwwwwwwwww :id + Wwwwwwwwwwwwww :+ 12 = 12+ Wwwwwww :12+ 169 = 181 , WWwwwwww :12+ 196 = 208 WWWwwwwww :12+ 225 = 237 d WWWWWWwwwwwwwwwwwwwwwwwwww :id 1+ Wwwwwwwwwww :1+ 169 = 170 ! WWwwww :1+ 208 = 209 H WWWwwww :1+ 237 = 238 e WWWWw :1+ 238 = 239 WWWWWwwwwwwwwwwwwwwwwww :1+ 2 = 3 WWWWWWWWWWWw :plus 3 : 3+ Wwww :3+ 239 = 242 WWw :3+ 242 = 245 l WWWw :3+ 245 = 248 o WWWWw :3+ 248 = 251 r WWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwww : id id Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww :id print H Wwwwwwwwwwww e WWwwwwwwwwwww l WWWwwwwwww l WWWWw o WWWWWwwwwwwww , WWWWWWwwwwwwwwwwwwwwwwwwwww WWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwww WWWWWWWWWwwwwwwww :id print W wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww o WWwwwwwwwwwwwww r WWWwwwwwwwwwwwww l WWWWwwwwwwww d WWWWWwwwwwwwwwwwwwwwwwwwwwwwwww ! WWWWWWwwwwwwwwwwwwwwwwwwwwwwwww
疲れた…割り算はまた明日。
ぬ
無駄っぽい所をちょっと削って13文字減。
やったことは数字の作る順番とidの位置を変えただけ。