0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderでRuby学習7【Contest168 Triple Dots】

Last updated at Posted at 2020-05-19

はじめに

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)から学んだメソッドをご紹介しました。

もし間違いなどございましたら、ご指摘いただけると嬉しいです。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?