22
19

More than 5 years have passed since last update.

Ruby Code Golf Technic

Last updated at Posted at 2014-09-16

Ruby Code Golf Technic

概要

Rubyのコードゴルフテクニックについて。
随時更新していこうかと思っています。

私自身ゴルファーではないので、基本的なテクニックが中心となります。

あくまでRubyの話題をメインにして、
言語に依存しないスペースの削除だとか、
数式の変換だとかについては割愛したいと思います。

標準出力

$><<

print よりも 1文字短く書ける

print"hoge" # => hoge
$><<"hoge" # => hoge

print

引数が可変長配列をとり、それぞれを to_s した結果を出力してくれるため
splat演算子と併用して短く書けるケースがある。

a = [*1..5]
print *a # => 12345

p

メソッド名が短いのだが、

  • inspect した値が出力される
  • 可変長の引数に配列を指定した場合に改行区切りで出力される

という機能のため、ゴルフでは出番が少なめかも。

a = [*1..5]
b = [*'a'..'e']
c = 123
p *a
# => output is ...
# 1
# 2
# 3
# 4
# 5
p b.join # => "abcde"
p c # => 123

putc

文字コードがわかっている状態での標準出力が必要な場合に有効

$><<65.chr # => A
putc 65 # => A

文字、文字列リテラル

?を利用

1文字の場合、 ?記法を利用することで短くかけます

puts ':' # => :
puts ?:  # => :

シンボル

最終的に暗黙の to_s を利用できることが想定されるなら
シンボルを利用することで文字列を短く記述できます。
標準出力時に print や puts が to_s を利用して変換してくれるため、
併せて利用しやすいテクニックです。

puts 'hoge' # => hoge
puts :hoge  # => hoge

文字列から任意の位置の文字を取得

String#[] メソッドで文字列中の任意の文字を取得出来ます

puts 'hoge'.split('')[1] # => o
puts 'hoge'.chars[1] # => o
puts 'hoge'[1] # => o
puts 'hoge'.chars[1..-1]*'' # => oge
puts 'hoge'[1..-1] # => oge

グローバル変数,クラス変数,インスタンス変数の文字列展開

#{各種変数名}#各種変数名 というように、 {} を省略できます

class Hoge
  def hoge
    @a=1 # => インスタンス変数
    @@b=2 # => クラス変数
    $c=3 # => グローバル変数
    d=4 # => 変数(通常の変数は省略できない)
    puts "#@a,#@@b,#$c,#d"
  end
end

Hoge.new.hoge
# => 1,2,3,#d

文字列配列の連結

普段のプログラミングでは Array#join を利用する場面ですが
join の alias である Array#* を利用することで短くかけます

puts [*1..5].join(':') # => 1:2:3:4:5
puts [*1..5]*':' # => 1:2:3:4:5

文字列の置換

sub! による置換を [regexp]= による置換で短くする

str = "0123456789"
str.sub! /[2-4]/,'@'
puts str # => 01@3456789
str = "0123456789"
str[/[2-4]/]='@'
puts str # => 01@3456789

補足

編集リクエストを歓迎致します。

Ruby 2.0 以上共通のテクニックなら特にバージョンに関する記載不要。
1.9,2.0,2.1 など、バージョン依存のテクニックの場合はバージョン情報を記載。
Ruby 1.8 以下については対象外。

以下のフォーマットが基本。

  • 見出しレベル2 大分類
  • 見出しレベル3 中分類
  • 簡単な説明
  • 短縮前後と出力内容が分かるサンプルコード

ある程度利用頻度の高そうなもので。
あまりに状況限定のものは挙げ出すときりがないかなと。

参考資料

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19