【Ruby】標準入力から値を受け取る

# 数値
```terminal:入力値
7
```
```rb
i = gets.to_i
p i * 10
```
```terminal:結果
70
```

# 文字列
```terminal:入力値
AAA
```
```rb
s = gets.chomp
p s
```
```terminal:結果
"AAA"
```


# 1行に複数の入力（半角スペース区切り）
```terminal:入力値
50 100 200
```

### 配列で返す場合
```rb
arr = gets.split.map(&:to_i)
p arr
```
```terminal:結果
[50, 100, 200]
```

### 変数に格納する場合
```rb
n1, n2, n3 = gets.split.map(&:to_i)
p n1
p n2
p n3
```
```terminal:結果
50
100
200
```

:::note
文字列の場合、`.map(&:to_i)`が不要
:::


# 複数行の入力

## 数値

```terminal:入力値
5000
3
```

### 配列で返す場合
```rb
lines = 2.times.map { gets.to_i }
p lines
```
```rb
lines = readlines.map(&:to_i)
p lines
```
```terminal:結果
[5000, 3]
```


### 変数に格納する場合
```rb
n1, n2 = 2.times.map { gets.to_i }
p n1
p n2
```
```rb
n1, n2 = readlines.map(&:to_i)
p n1
p n2
```
```terminal:結果
5000
3
```


## 文字列

```terminal:入力値
Ruby
Python
Java
```

### 配列で返す場合
```rb
lines = 3.times.map { gets.chomp }
p lines
```
```rb
lines = readlines.map(&:chomp)
p lines
```
```terminal:結果
["Ruby", "Python", "Java"]
```

### 変数に格納する場合
```rb
s1, s2, s3 = 3.times.map { gets.chomp }
p s1
p s2
p s3
```
```rb
s1, s2, s3 = readlines.map(&:chomp)
p s1
p s2
p s3
```
```terminal:結果
"Ruby"
"Python"
"Java"
```


# 1行に複数（半角スペース区切り） & 複数行

## 数値

```terminal:入力値
1 2 3
4 5 6
```

```rb
m_arr = readlines.map { |i| i.split.map(&:to_i) }
p m_arr
```

```terminal:結果
[[1, 2, 3], [4, 5, 6]]
```

### 多次元配列を一次元配列にする場合
```rb
arr = m_arr.flatten
p arr
```
```terminal:結果
[1, 2, 3, 4, 5, 6]
```

### 変数に格納する場合

```rb
n1, n2, n3, n4, n5, n6 = readlines.map(&:split).flatten
p n1
p n2
p n3
p n4
p n5
p n6
```
```terminal:結果
1
2
3
4
5
6
```


## 文字列

```terminal:入力値
a b c
d e f
```
```rb
m_arr = 2.times.map { gets.split }
p m_arr
```
```rb
m_arr = readlines.map(&:split)
p m_arr
```

```terminal:結果
[["a", "b", "c"], ["d", "e", "f"]]
```

### 多次元配列を一次元配列にする場合
```rb
arr = m_arr.flatten
p arr
```
```terminal:結果
["a", "b", "c", "d", "e", "f"]
```

### 変数に格納する場合

```rb
s1, s2, s3, s4, s5, s6 = readlines.map(&:split).flatten
puts s1
puts s2
puts s3
puts s4
puts s5
puts s6
```
```terminal:結果
a
b
c
d
e
f
```

# おまけ

```terminal:入力値
a b
c d
e f
```

```rb
m_arr = readlines.map(&:split)

puts 'arr[0]'
puts '------'
m_arr.each { |arr| p arr[0] }
puts ''

puts 'arr[1]'
puts '------'
m_arr.each { |arr| p arr[1] }
```

```terminal:結果
arr[0]
------
"a"
"c"
"e"

arr[1]
------
"b"
"d"
"f"
```


# その他（知っておくと役立つメソッド）
※ 競プロ系の学習をしているので、ついでに役立ちそうなメソッドをメモ書きしています

- 文字列系
  - [【sub, gsub】文字列置換メソッド](https://hataworakuni.net/substitute-in-ruby)
  - [【reverse】文字列を文字単位で左右逆転した文字列を返す](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/min_by.html)
  - [【include?】文字列中に部分文字列が含まれているかどうか](https://docs.ruby-lang.org/ja/latest/method/String/i/include=3f.html)
  - [【count】特定の文字の出現回数をカウント](https://docs.ruby-lang.org/ja/latest/method/String/i/count.html)
  - [【slice, slice!】指定した範囲の文字列を抽出・削除](https://uxmilk.jp/24040)
  - [【eql?, equal?, ==, ===】文字列を比較する方法](https://uxmilk.jp/22568)
  - [【chomp、chop、strip、gsub】改行の削除](https://www.sejuku.net/blog/19466)
  - [【size（length）】文字列の文字数を返す](https://docs.ruby-lang.org/ja/latest/method/String/i/length.html)
  - [【ljust】長さ width の文字列に self を左詰めした文字列を返す](https://docs.ruby-lang.org/ja/latest/method/String/i/ljust.html)
  - [【rjust】長さ width の文字列に self を右詰めした文字列を返す](https://docs.ruby-lang.org/ja/latest/method/String/i/rjust.html)
  - [【center】長さ width の文字列に self を中央寄せした文字列を返す](https://docs.ruby-lang.org/ja/latest/method/String/i/center.html)
- 数値系
  - [【next】self の次の整数を返す](https://docs.ruby-lang.org/ja/latest/method/Integer/i/next.html)
  - [【pred】self から -1 した値を返す](https://docs.ruby-lang.org/ja/latest/method/Integer/i/pred.html)
  - [【abs】絶対値を取得](https://www.javadrive.jp/ruby/numeric_class/index7.html)
  - [【div, quo, modulo, remainder, divmod】除算による商と剰余を取得](https://www.javadrive.jp/ruby/numeric_class/index6.html)
  - [【=~ /^[0-9]+$/】数字かどうかを判定する方法](https://programming-dojo.com/%E3%80%90ruby%E5%85%A5%E9%96%80%E3%80%91%E6%95%B0%E5%AD%97%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)
  - [【format("%06d", 123)】数値をゼロ埋め](https://remoter.hatenablog.com/entry/2020/02/20/ruby%E3%81%A7%E6%95%B0%E5%80%A4%E3%82%92%E3%82%BC%E3%83%AD%E5%9F%8B%E3%82%81%E3%81%97%E3%81%9F)
  - [【fdiv】平均を浮動小数点で返す](https://docs.ruby-lang.org/ja/latest/method/Numeric/i/fdiv.html)
  - [【round】小数点以下の指定](https://docs.ruby-lang.org/ja/latest/method/Float/i/round.html)
  - [【floor, ceil, round】数値の切り捨て・切り上げ・四捨五入](https://uxmilk.jp/43388)
  - [【to_i(n), to_s(n)】文字列と数値を相互変換する(2進、8進、10進、16進数)](https://www.xmisao.com/2014/08/25/ruby-convert-string-and-integer.html)
  - [【sort, sort.reverse】配列の内容をソート](https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html)
- 配列系
  - [【join】配列を結合させる](https://mi-chan-nel.com/join-method-introduction/)
  - [【index】配列内の指定した要素の位置を取得](https://mi-chan-nel.com/ruby-index-method/)
  - [【size（length）】配列の長さを返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/length.html)
  - [【count】ブロックを指定した場合は、ブロックを評価して真になった要素の個数をカウントして返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/count.html)
  - [【chars】文字列を1文字ずつ分割する](https://simanman.hatenablog.com/entry/2013/09/05/022617)
  - [【max】最大の要素、もしくは最大の n 要素が降順に入った配列を返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/max.html)
  - [【min】最小の要素、もしくは最小の n 要素が昇順で入った配列を返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/min.html)
  - [【shift】配列の先頭の要素を返す/削除（破壊的）](https://docs.ruby-lang.org/ja/latest/method/Array/i/shift.html)
  - [【pop】配列の末尾の要素を返す/削除（破壊的）](https://docs.ruby-lang.org/ja/latest/method/Array/i/pop.html) 
  - [【unshift】配列の先頭に要素を挿入（破壊的）](https://docs.ruby-lang.org/ja/latest/method/Array/i/unshift.html)
  - [【transpose】自身を行列と見立てて、行列の転置(行と列の入れ換え)を行う](https://docs.ruby-lang.org/ja/latest/method/Array/i/transpose.html)
  - [【sample】配列の要素をランダムに選んで返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/sample.html)
  - [【&, |, +, -】集合演算](https://www.buildinsider.net/language/rubytips/0025)
  - [【uniq】配列から重複した要素を取り除いた新しい配列を返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/uniq.html)
  - [【compact】配列から要素が「nil」のものを取り除く](https://www.javadrive.jp/ruby/array_class/index9.html#:~:text=Array%20%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7%E7%94%A8%E6%84%8F%E3%81%95%E3%82%8C,%E3%82%82%E3%81%AE%E3%82%92%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82&text=compact%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%AF%E9%85%8D%E5%88%97%E3%81%AB,%E6%96%B0%E3%81%97%E3%81%84%E9%85%8D%E5%88%97%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)
  - [【dup】配列をcloneする](https://docs.ruby-lang.org/ja/latest/method/Array/i/clone.html)
  - [【zip】自身と引数に渡した配列の各要素からなる配列の配列を生成して返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/zip.html)
  - [【find】条件に一致した最初の要素を取り出す](https://www.sejuku.net/blog/66124)
  - [【select】条件に一致した要素全てを配列で返す](https://www.sejuku.net/blog/19226)
  - [【any?】すべての要素が偽である場合に false を返す。真である要素があれば、ただちに true を返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html)
  - [【each_slice】n要素ずつ繰り返す](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_slice.html)
  - [【each_cons】n個の連続した要素を1つずつずらしながら繰り返す](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/each_cons.html)
  - [【combination】サイズ n の組み合わせをすべて生成し、それを引数としてブロックを実行する](https://docs.ruby-lang.org/ja/latest/method/Array/i/combination.html)
  - [【inject】リストのたたみこみ演算を行う](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/inject.html)
  - [【reverse】自身の要素を逆順に並べた新しい配列を生成して返す](https://docs.ruby-lang.org/ja/latest/method/Array/i/reverse.html)
  - [【sort】配列の内容をソート](https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html)
  - [【sort_by】instance method Enumerable#sort_by](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html)
  - [【max_by】instance method Enumerable#max_by](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/max_by.html)
  - [【min_by】instance method Enumerable#min_by](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/min_by.html)
  - [【group_by】instance method Enumerable#group_by](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/group_by.html)
- ハッシュ系
  - [【each, each_key, each_value】ハッシュに対する繰り返し処理](https://www.javadrive.jp/ruby/hash/index7.html)
  - [【sort】Hashの中身を並び替える方法](https://pikawaka.com/ruby/sort)
  - [【transform_keys】すべてのキーに対してブロックを呼び出した結果で置き換えたハッシュを返す](https://docs.ruby-lang.org/ja/latest/method/Hash/i/transform_keys.html)
  - [【transform_values】すべての値に対してブロックを呼び出した結果で置き換えたハッシュを返す](https://docs.ruby-lang.org/ja/latest/method/Hash/i/transform_values.html)
  - [【tally】self に含まれる要素を数え上げた結果を Hash で返す](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/tally.html)
- 時刻系
  - [【strftime】時刻 format](https://docs.ruby-lang.org/ja/latest/method/Time/i/strftime.html)
  - [【Time】Time使い方まとめ](https://www.sejuku.net/blog/16204)
- 範囲系
  - [【between?, clamp】数値や文字列が指定の範囲内であるかどうかを判定](https://magazine.techacademy.jp/magazine/30896)