LoginSignup
3
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-07-07

奇数・偶数かを判定

n = 2

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

文字列を空白で分ける

str = "samurai engineer blog"

array = str.split

p array

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

1~nまでの和

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

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

input_line = gets
input_line.gsub!(/ /, '/')
puts input_line
string = "ruby ruby ruby"
string.gsub!(/ruby/, 'python')
puts string

=>python python python

改行を取り除く

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

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

階乗

#2の3乗の場合
2 ** 3 

大文字と小文字の変換

p "hello world".upcase
=> HELLO WORLD

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

文字をn回繰り返し表示

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

文字列の一部を表示

input_line = gets
newStr = input_line[0..2]
puts newStr
str = "Hello"
newStr = str[1, 2]
=> el

文字を逆順で出力する

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

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

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

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

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

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

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

複数の文字列を変換する

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

最大値と最小値を求める

[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

配列の各要素を変換

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

p new_numbers  #=> [10, 20, 30, 40, 50]

indexメソッド

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

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

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

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

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

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

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

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

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

改行

OSがmacの場合

puts "SAMPLE1\rSAMPLE2"

小数点n桁で四捨五入

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

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

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

小数点切りすて

1.4.floor # 1

下一桁を出力

puts n.to_s[-1]

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

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

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

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

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

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

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

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

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

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

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

配列が空かどうか

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

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

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

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

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

絶対値を求める

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

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
3
2