INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
■問題
●出典
AtCoder Beginner Contest 015のA問題
https://atcoder.jp/contests/abc015/tasks/abc015_1
●問題文
高橋くんは、ソフトウェア会社に勤めています。 その会社では、短い変数名はバグを生む原因だと信じられており、長い変数名を使う習慣があります。
いま高橋くんは 2 つの変数名を思いつきましたが、残念なことにその長さを見分けることが出来ません。
いろんな意味で可哀想な彼の代わりに、与えられた 2 つの小文字アルファベットのみからなる文字列のうち、文字数が長い方の文字列を求めてください。
●入力
入力は以下の形式で標準入力から与えられる。
A
B
1 行目には、文字列 A(1≦∣A∣≦50) が与えられる。
2 行目には、文字列 B(1≦∣B∣≦50) が与えられる。
文字列 A,B には、小文字アルファベットのみが含まれることが保証されている。
文字列 A,B の長さは異なることが保証されている。
●出力
文字数が長い方の文字列を 1 行で出力せよ。出力の末尾にも改行をいれること。
■回答
●愚直に書く
文字の長さを比べるのでsizeメソッドを使う。
a = gets.chomp
b = gets.chomp
puts a.size > b.size ? a : b
通った!
●リファクタリング/別アプローチ
思いつかないのでスキップ
●他の方の回答例
max_byメソッドというのを使っている方が多かった。比較するのは文字数なので、こちらでもsizeメソッドは使う。
a = gets.chomp
b = gets.chomp
puts [a, b].max_by {|s| s.size}
●出てきたメソッド等
公式リファレンスを見る訓練。
- size
https://docs.ruby-lang.org/ja/latest/method/Range/i/size.html- エイリアスメソッド:length
https://docs.ruby-lang.org/ja/latest/method/Array/i/length.html
- エイリアスメソッド:length
- max_by
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/max_by.html
■振り返りなど
ifを使った条件分岐を代替するようなメソッドというのが前にもあったような気がする。条件分岐はややこしくなりがちなので別の手段も知っておくのは良いと思う。