はじめに
Ruby学習の一環として「競技プログラミング(競プロ)」に挑戦します。
そのための学習の中で学んだことをアウトプットしていきます。
今回は「AtCoder Beginners Contest168」の二問目(Triple Dots)より。
https://atcoder.jp/contests/abc168/tasks/abc168_b
今回の自分の解答と、解答に使ったメソッド・記法を紹介していきます。
問題
英小文字からなる文字列 S があります。
S の長さが K 以下であれば、Sをそのまま出力。
S の長さが K を上回るのであれば、先頭から K 文字だけを切り出し、末尾に"..."を加えて出力すること。
制約
・K は1以上100以下の整数
・S は英小文字からなる文字列
・S の長さは1以上100以下
入力は以下の形で与えられる。
K
S
入力例
7
nikoandsolstice
出力例
# 上記例の場合
=> nikoand...
解答
まずは僕が最初に書いたコードです。
k = gets.to_i
s = gets.chomp
print s.length > k ? "#{s[0...k]}..." : s
Atcoderへの挑戦を初めて、初期の頃に学んだ三項演算子を使っての解答です。
AtCoder Beginners SelectionでRuby学習【Product】様々な解法から学ぶ
文字列がの長さをlengthメソッドで出した上で K と比較し、
K より大きかった場合式展開を使って"..."を加えて出力、K 未満だった場合はそのまま出力という流れです。
では、今回使ったメソッド、記法について以下にまとめます。
lengthメソッド(Stringクラス)
文字列の長さを返します。
#例
print "test".length
=> 4
ちなみに、Arrayクラスのlengthメソッドは要素の数を返します。
文字列の一部を取得する方法①[first...end]
文字列の中から、開始位置(first)から終了位置(end)で挟まれた範囲を文字列として返します。
位置の指定は、1文字目の前を「0」として、1文字目と2文字目の間が「1」という形で指定出来ます。
a = "test"
#位置指定方法(イメージ)
0 t 1 e 2 s 3 t 4
#例
print a[0...3]
=> tes
#上記の位置指定方法での、0から3の間を文字列として返す
文字列の一部を取得する方法②[first, length]
ちなみに、[1, 3]という形で指定すると、「1」の位置から3文字を返します。
a = "test"
#例
print a[1, 3]
=> est
終了位置を位置指定ではなく、開始位置からの文字数という形で指定したい場合に使います。
最後に
以上、「AtCoder Beginners Contest168」の二問目(Triple Dots)から学んだメソッドをご紹介しました。
もし間違いなどございましたら、ご指摘いただけると嬉しいです。