Counting adventure ― 2009/12/15
Counting adventure - anarchy golf
テキストの圧縮問題は苦手。
ActiveSupport を require させてくれれば秒殺な感じはするんだけど……。 (Lisp系の極端に短いのはそういうことだよね?)
zero lines ― 2009/12/15
22Bまでは簡単なんだけど、21Bは判らない……。
22Bの2パターンは見付けたけど、 yowaさんの0/7/13は謎。
(追記) 0/7/13 は投稿したのじゃない方の22Bの別表記だった。
Enumerable::Enumerator#each ― 2009/11/26
each {...} -> object 生成時のパラメータに従ってブロックを繰り返します。生成時に指定したイテレータの戻り値をそのまま返します。 Enumerable::Enumerator#each
戻り値が元のメソッドの戻り値というのが面白い。
str = "Hello World!" enum = str.gsub(/./) out = enum.each{|c| p c; c.downcase} #=> "H" # "e" # "l" # "l" # "o" # " " # "W" # "o" # "r" # "l" # "d" # "!" p out #=> "hello world!"
Enumerable::Enumerator#each に与えたブロックが yeild される際には Enumerator生成に使った元のメソッドの副作用もちゃんと適用されているようで、 このgsubの場合では、$&等の組み込み変数もちゃんと変更されている。
str = "Hello World!" enum = str.gsub(/./) out = enum.each{p $&} #=> "H" # "e" # "l" # "l" # "o" # " " # "W" # "o" # "r" # "l" # "d" # "!" p out #=> nil
問題は、Kernel#gsub に Enumerable::Enumerator を返却するインターフェイスが無いことか……。
$_ = "Hello World!" not_enum = gsub(/./) p not_enum #=> "Hello World!" p not_enum.class #=> String
今日のイディオム ― 2009/11/04
eval *$<
STDINから数字の入力を受けて、Numericに変換する。 STDINに複数行ある場合はまずいけど、理想状態では
gets.to_i eval gets
のいずれよりも1バイト短い。
Count diamonds level 1 こたえあわせ ― 2009/10/16
Count diamonds level 1 - anarchy golf
残り1Bは果てしなく遠かったでござるの巻。
$/=gets;p split.size/3while gets
までは行ったんだけどなあ……。
あと、これも格好いい '**'を数えるのは最初にやったけど、この発想はなかった。
ちなみに
$/=gets;p$_.sum/50%49while gets
は
$/=gets;p$_.count('*')/5while gets
と同じアイディア。 ' '(0x20)と'*'(0x2a)の差(10)が5つで50になります。
あと
$/=gets;loop{p$$%gets.sum%51}
とかも考えたけど、テストケース3回($$が2ずつ増加する)に耐えられなかった。
最近のコメント