Rubyでコードゴルフする過程で知った7つの書き方

Rubyでコードゴルフする過程で知った7つの書き方
LINEで送る
Pocket

久々に、CodeIQのコードゴルフをやりました。

数カ月ぶりに素のRubyを触ったので色々と忘れていました。
しかもRubyでコードゴルフは初めてだったので、
Google先生に聞きながら書いているうちに知った、7つのことをメモします。

注意

小ネタが多めです。
Ruby初心者なので、Rubyistにとっては当たり前のことを知りません。 Rubyistの方なら知ってる内容が多かも知れませんが、ご容赦下さい。

なお、手元のRubyのバージョンは、1.9.2です。

多重代入

1行ずつ代入するのと文字列長は変わらないけどやってみた。
今回は使わなかったけどtmpを使わないswapにも使えるそう。

a,b..と順番に宣言していけば、aの値が必要なbの初期化も出来るかと思いましたが、
それはエラーになりました。少し不便。

配列の宣言

[]を抜かしても、左辺の変数が1つなら、配列として入るようです。

これを応用して、右辺側に代入を混ぜてみました。

2次元配列の初期化

縦のサイズが決まっている場合に有効そうです。
これはコードゴルフじゃなくても使えそうなイディオムです。

横のサイズも決まっていて、
内側の配列も初期化したいなら、内側のArray.newのあとにmapを続けて書けば行けます。

文字列のフォーマット指定(幅)

文字列の%メソッドを使います。
C言語のsprintf()とかとほぼ同様のフォーマットが使えます。
扱えるフォーマットについては、こちらを参照。

その書式で出力するわけではなく、その書式の文字列が返ることに注意です。

数値の桁数を取得する

文字列化して、長さを取得。

桁数取得に悩んでたら思いつきました。
分かってみれば「知ってるよ」となりますが、盲点だった。

Rangeは降順にできない

Rangeは、N…Mの書き方でN>Mにすれば
逆順になるのかと思ってましたが、ならないようです。

降順の連番をループで使いたいときは、
Integerクラスにdownto()というメソッドがあるそうです。

配列のjoin()

なんだこの奇妙な挙動は・・・
配列の*メソッドに文字列を渡すと、joinと同じ結果になるようです。

LINEで送る
Pocket

Comments are closed.