LoginSignup
2
1

More than 1 year has passed since last update.

[AtCoder 初心者] Rubyで競プロ!!! 標準入力

Last updated at Posted at 2022-02-24

はじめに

AtCoderを始めたので、自分用の整理、メモとして投稿します。
間違えている箇所があれば指摘して下さると幸いです!!!!!!!!!!!!

1つの要素を取得

test.rb
A = gets.chomp
p A

例: 1を入力

-標準入力-
1
-出力-
"1"

・chompメソッドは文字列末尾の改行文字 \n を削除するメソッド。
・getsメソッドで入力した値は、文字列(Stringクラス)で返される。数値(Integerクラス)として扱いたい場合は、to_iメソッドを使う。 to_iメソッドは 「整数と見なせない文字があればそこまでを変換対象とする」 ため、改行文字 \n は変換対象になる。ゆえに、chompメソッドは不要。

test.rb
A = gets.to_i
B = gets

p A
p B

例: Aに1、Bに2を入力

-標準入力-
1
2
-出力-
1
"2\n"

1行の複数の要素を取得

test.rb
A = gets.spilt(" ")
p A

例: 1 2 3 を入力

-標準入力-
1 2 3
-出力-
["1", "2", "3"]

・splitメソッドは引数に従って、文字列を分割し、分割された文字列を要素とする配列をつくる。今回は空白ごとに分割している。引数を指定しない場合は、デフォルトで空白で分割する。

・split(" ")のとき(引数を指定しないとき)、先頭と末尾の空白を除いたうえで、空白で分割する。また、入力した文字列末尾の改行文字 \n は空白と見なせるから、ここではchompメソッドは不要。

!!!配列の要素を数値(Integerクラス)にしたいとき!!!
配列(arrayクラス)に、to_iメソッドは使えない!!!この場合はmapメソッドを使う。
-mapメソッド-
ブロック内の処理を配列の要素それぞれに行い、その結果を返すメソッドのこと。

test.rb
A = gets.spilt.map{|n| n.to_i}
p A
-標準入力-
1 2 3
-出力-
[1, 2, 3]

ちなみに、下記のように省略できる。

test.rb
A = gets.spilt.map(&:to_i)
p A

二次元配列

H行、W列の行列を扱う問題で用いる。
例: 3行3列の行列

test.rb
H, W = gets.split.map(&:to_i)
A = Array.new(H) {gets.split.map(&:to_i)}
p A
-標準入力-
3 3
1 2 3
4 5 6
7 8 9
-出力-
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

・A = Array.new(size) で要素の数を指定して、新しい配列Aを作成している。また、{ }内の処理を配列の各要素に行っている。Array.new(size) { } という記法なため、mapメソッドは不要。

ちなみに、下記のようにすると

test.rb
H, W = gets.split.map(&:to_i)
A = Array.new(H) {gets.split.map(&:to_i)}
A.each{|row| puts row.join(" ")}
-標準入力-
3 3
1 2 3
4 5 6
7 8 9
-出力-
1 2 3
4 5 6
7 8 9

・joinメソッドは、配列の要素を引数で結合して、1つの文字列をつくるメソッド。今回は配列Aの要素である配列の要素(配列Aの要素[1,2,3]の要素)を空白で結合している。

!!!!個人的には3行目の puts がポイント!!!!
p、print、putsメソッドそれぞれの出力後の改行について

-pメソッド-
出力後に改行される

-printメソッド-
出力後に改行されない

-pメソッド-
出力後に改行される

test.rb
a = 1
p a
print a
puts a
-出力-
1
11

これらのことから、putsであるから綺麗な行列として出力されるといえる。

おわりに

実はQiita初投稿です~てへへ
少しでも誰かのお役に立てれば嬉しいです!!
今後もRubyや競プロについて投稿していこうと思います。

2
1
4

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