某サイトのプログラミング問題を解く時に使うRubyのメソッド集

###奇数・偶数かを判定

```rb
n = 2

if n.zero?
 puts '0でした'
elsif n.even?
 puts '偶数'
elsif n.odd?
 puts '奇数'
else
 puts 'わかりません'
end
```

###文字列を空白で分ける

```rb
str = "samurai engineer blog"
 
array = str.split
 
p array

=>["samurai", "engineer", "blog"]
```

###1~nまでの和

```rb
input_line = gets
n = 1
s = 0
while n <= input_line.to_i
  s += n
  n += 1
end
puts s
```

###空白をスラッシュに置き換える

```rb
input_line = gets
input_line.gsub!(/ /, '/')
puts input_line
```

```rb
string = "ruby ruby ruby"
string.gsub!(/ruby/, 'python')
puts string

=>python python python
```

###改行を取り除く

```rb
input_line = gets
a = input_line.chomp!
input_line2 = gets
b = input_line2.chomp!
puts "#{b}#{a}#{b}"
```

chomp!メソッドは呼び出し元の文字を変えてしまう。
変えたくなければchompメソッドを使う。


###階乗

```rb
#2の3乗の場合
2 ** 3 
```
###大文字と小文字の変換

```rb
p "hello world".upcase
=> HELLO WORLD

p "WHAT IS THIS".downcase
=>what is this
```

###文字をn回繰り返し表示

```rb
src = "Good!"
str = src * 10
puts str
```

###文字列の一部を表示

```rb
input_line = gets
newStr = input_line[0..2]
puts newStr
```

```rb
str = "Hello"
newStr = str[1, 2]
=> el
```

###文字を逆順で出力する

```rb
p "foobar".reverse   # => "raboof"
```

###文字列を1文字ずつに分割する

```rb
p "hello".chars
=> ["h", "e", "l", "l", "o"]
```

###指定の文字列が含まれているか確認する

```rb
str = "123abc"
str.include?("123")
=> true
```

###特定の文字の出現回数を数える

```rb
p "foo bar buz".count('b') #=> 2
```

###複数の文字列を変換する

```rb
"hogeはrubyです".gsub(/hoge|ruby/, "hoge" => "私", "ruby" => "男")
=> "私は男です"
```

###最大値と最小値を求める

```rb
[5, 6, 2, 9, 8, 3].max
=> 9

[5, 6, 2, 9, 8, 3].max(3)
=> [9, 8, 6]

[5, 6, 2, 9, 8, 3].min
=> 2
```

###配列の各要素を変換

```rb
numbers = [1, 2, 3, 4, 5]
new_numbers = []
numbers.map { |n| new_numbers << n * 10 }

p new_numbers  #=> [10, 20, 30, 40, 50]
```
###indexメソッド

配列のように１つ目は0となる。ここに注意。

```rb
s = "ROMACECARVSEMSEEXEGSE"
p s.index("CE")
=> 4

a = ["VSE", "MSE", "GSE", "EXE"]
p a.index("GSE")
=> 2
```

###文字列から数値だけを抽出

```rb
num = "abc12345def67890".gsub(/[^\d]/, "").to_i # num => 1234567890
```

###配列の要素を連結して文字列化する

```rb
p ['foo', 'bar', 'buz'].join #=> "foobarbuz"
```

###2進数から10進数に変換する

```rb
p "11111111".to_i(2) #=> 255
```

###改行

OSがmacの場合

```rb
puts "SAMPLE1\rSAMPLE2"
```

###小数点n桁で四捨五入

```rb
100.3333.round
# 出力結果 ==> 100

100.3333.round(1)
# 出力結果 ==> 100.3

100.3383.round(2)
# 出力結果 ==> 100.34
```

###小数点切りすて

```rb
1.4.floor # 1
```

###下一桁を出力

```rb
puts n.to_s[-1]
```

###特定の文字が含まれるかどうか(複数)

anyメソッドはどれか１つでも条件を満たせばtrueを返す。

```rb
input_line = gets
text = ["I", "l", "i"]
if text.any? { |t| input_line.include?(t) }
  puts 'caution'
else
  puts input_line
end
```

###数字を小さい順に並べ替える

```rb
ary = [4, 2, 5, 1, 3]
newary = ary.sort
=> [1,2,3,4,5]
```

###繰り返し処理を簡単に書く

```rb
i = 1
while i <= num do
  # 云々
  i += 1
end
```

上記のようなコードはもっと簡単に書き換えることができる

```rb
(1..num).each do |i|
  # 云々
end

1.upto(num) do |i|
  # 云々
end
```

こんな感じに書き換えることができるので覚えておこう。


###配列が空かどうか

```rb
p [].empty?         #=> true
p [1, 2, 3].empty?  #=> false
```

###文字列を1文字ずつ分割する


```rb
s = "1234567890"
s.split(//)
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
```

###文字列をn文字ずつ分割する

```rb
s = "1234567890"
n = 3
s.scan(/.{1,#{n}}/)
=> ["123", "456", "789", "0"]
```

###絶対値を求める

```rb
(2 - 5).abs #=> 3
```