1
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.

競技プログラミングメモ帳① 〜stringはまるで配列のように扱える〜

Last updated at Posted at 2020-05-01

(ご指摘により5/2修正)
最近は競技プログラミングに、はまっていたためqiitaに書き込むことが少なかったです。(申し訳なく思っている)
今後はそれをネタに、その際に使ったコードをとりあげていきたいと思います。
かと言ってもすごく初歩的な物が多いこと、そしてこれはあくまでも私が個人的にコードを書いていることであるため、参考になるかはわかりません。(間違ってる可能性高いですが、それも勉強です)

私は、文字数分の繰り返し処理を行なう際にlengthなどを多用します。
ちなみにstringの型に[]で数字を間に挟むと、配列のように使用でき、前から順番に指定した数字に格納された文字が返ってきます。便利ですなぁ。
最後の文字を指定したい時は、str[-1]で指定すれば最後の文字取得できちゃうですよねー。
最初これは目から鱗でした。


str = 'test' # gets.chomp.to_sなどで取得する場合がほとんど
puts str.length # 4と返す
str.length.times {|i| puts str[i]} # "t" "e" "s" "t"と順番に返す
str.length.times {|i| puts str[-(i+1)]} # "t" "s" "e" "t" と逆に返す

文字数が4文字のときなども以下の通りで取り出せます。


str = 'test'
if str.length == 4 #四文字の時のみ以下の式を返す
  str.length.times {|i| puts str[i]} # "t" "e" "s" "t"と順番に返す
end

簡単なリファクタリングとして同じ条件式を多用するときは、変数に入れるようにしています。
これは好みですが、すごく短い文であれば特にきにしていませんが、競技プログラミングのレベルが上がるにつれて長文となり見辛くなるためと、何度も計算する必要もないためです。
可読性と速度のバランスを考えて二、三回以上使った場合、私は変数に入れるようにしています。


str = 'test'
num = str.length
if  num == 4 #四文字の時のみ以下の式を返す
  num.times {|i| puts str[i]} # "t" "e" "s" "t"と順番に返す
end

とりあえずは以上です。
コロナ自粛中ですが、趣味と実益を兼ねた素晴らしい教材に出会えたことはとても嬉しく思います。
またアップしますので、よろしくお願いします。

1
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
1
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?