yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY85>Rubyのメソッドについて(文字列を分割)

\ Follow me!! /

f:id:yujiro0320:20190512223713p:plain

学習状況

●学習日数 85日 

●学習時間(本日) 11時間

●累計学習時間 315.0時間

●一日あたりの平均学習時間 3.70時間 

今日の学習について

今日は、指示書に基づき、デザインの構築。
苦手な分野であり、時間がかかる。指示書のデザインも今まで以上に細かく、初心者にはちょっと厳しい。
また、hamlとscssでの実装との事もあり、余計に時間がかかっている。
そんなデザイン続きの1日だったが、毎朝のドリル問題で新たな気づきがあったので、復習の為、忘備録として記述する。

rubyの問題

対話型のインターフェイスで二桁の整数を入力すると、十の位と一の位の数字に対して、足す、掛けるを行う。
最後にそれぞれの結果を足し合わせて出力するプログラムをrubyで作成する。(15分で)

最初の答え

整数を2桁受け取り、分割する解決策を時間内に決めれず、とりあえず動くコードを書いた。

puts "10の位を入力して下さい"
place10 = gets.to_i
puts "1の位を入力して下さい"
place1 = gets.to_i

multiplication = (place10) * (place1)
addition = (place10) + (place1)

puts "足し算結果と掛け算結果の合計値は#{multiplication + addition}です"

ただ、これだと、二桁の整数を入力する要件を満たしておらず、指示通りの実装にはならない。

模範解答を確認

def addition(a, b)
  a + b
end

def multiplication(a,b)
  a * b
end

def slice_num(num)
  # 10の位
  tens_place = (num / 10) % 10
  # 1の位
  ones_place = (num / 1) % 10
  return tens_place, ones_place
end

puts "二桁の整数を入力してください"
input = gets.to_i
X, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)
puts "足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です"

いや、これはあまりにも冗長すぎるし、これが模範はないなと思い、他を調べた。
整数として受け取らず、文字列として受け取って、分割したのち、整数に返せばいけると判断。

しっくりきた答え

puts "2桁の整数を入力して下さい。"
number = gets.chomp
number = number.split(//).map(&:to_i)
multiplication = number[0] * number[1]
addition = number[0] + number[1]
puts "足し算結果と掛け算結果の合計値は#{multiplication + addition}です"

迷ったら、rubyのメソッドを調べてみる。

参考文献
miyamae.github.io

splitメソッド

日本語が難しいですが、例文を見てみる。

num = "1111111"
num = num.split (//)
p num

=>["1", "1", "1", "1", "1", "1", "1"]

mapメソッド

次に文字列を整数に返すメソッドについて調べる。
Enumerableモジュールに組み込まれたインスタンスメソッド。各要素に対してブロックを評価した結果を全て含む配列を返す。

最後に

rubyのメソッドは色々あって、勉強になる。
明日もデザインしないと。苦手だから、勉強になるか。