atcorderの標準出力がわからん！のでメモ。（JavaScriptの場合）

#atcorderのチュートリアルを紐解く

問題はatcorderのサイトから。会員登録が必要です。無料なので登録してみましょう！
[AtCoderの練習用ページ](https://practice.contest.atcoder.jp/)

チュートリアルの解答がこちら。

```js:js
// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  input = input.split("\n");
  tmp = input[1].split(" ");
  //文字列から10進数に変換するときはparseIntを使います
  var a = parseInt(input[0], 10);
  var b = parseInt(tmp[0], 10);
  var c = parseInt(tmp[1], 10);
  var s = input[2];
  //出力
  console.log('%d %s',a+b+c,s);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

ひとつずつ紐解いて行きましょう。
関数Mainと、最後の関数呼び出しはこういうものだとして放置します。
<br>

####1. 出力結果を確認する

出力結果を確認するには、nodeがインストールされていることが前提です。

nodeのインストール方法はこちら。
[Macにnode.jsをインストールする手順。](https://qiita.com/akakuro43/items/600e7e4695588ab2958d)

nodeがインストールできれば、次はターミナルで以下のように入力します。


```
node atcorder.js
```

node <対象ファイル>　と書きます。そうすると、標準出力が可能になります。

次に、関数Mainを以下のようにします。

```js:js
// inputに入力データ全体が入る
function Main(input) {
  console.log('inputの中身は' + input + 'ですよ');
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

では、node <対象ファイル>で標準出力が可能な状態にしてから１０と入力しましょう。

```
node atcorder.js
10
```

そのあと、「ctr + D」を入力してください。
場合によっては2回入力が必要かもしれません。
そうすれば、結果が出力されます。


```
node atcorder.js
10inputの中身は10ですよ
```

となります。つまり１０を入力できたわけです。

```
node atcorder.js
1
10
100
```
とします。最後にEnterを押して改行を含めると

```
node atcorder.js
1
10
100inputの中身は1
10
100
ですよ
```
となります。
`1
10
100
\n
`が一つの入力になるわけです。
ただし、このままだと入力が一つしかできません。


#### 2. 入力できる数を増やしたい
最初のチュートリアルを見てみましょう。


```js:js
// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  input = input.split("\n");
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

split()メソッドで、inputの文字列を改行で分割しています。つまり１行目に１つ目の入力を、2行目に2つ目の入力を、というように入力を分ける事ができるわけです。またsplitメソッドで分割し配列に変換したものをinput自身に返しているので、`input = [入力１, 入力２, 入力3, ...]`となります。


以下のコードで確認してみましょう。

```js:js
// inputに入力データ全体が入る
function Main(input) {
  // 1行目がinput[0], 2行目がinput[1], …に入る
  input = input.split("\n");
  console.log('\n' + input[0] + 'と' + input[1]);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

見やすくするために最初に改行を入れています。
結果は以下のようになります。

```
node atcorder.js
10
20
10と20
```

入力がわかれて、文字列連結ができていますね。
間違えてはいけないのが、"文字列"で入力されていること。
数値として扱う場合は変換しなければいけません。


####3. 文字列を数値に変換
そこでもう一度、チュートリアル。

```js:js
function Main(input) {
  input = input.split("\n");  

  //文字列から10進数に変換するときはparseIntを使います
  var a = parseInt(input[0], 10);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

parseIntメソッドを使い、inputの値を10進数の数字に変換していますね。さらに、inputはsplitメソッドによって配列になっています。１行目がinput[0]、2行目がinput[1]ですね。
<br>


####4. 同じ行で、入力できる数を増やす。

チュートリアルでさらに、2行目の入力をさらに分割しています。

```js:js
function Main(input) {
  input = input.split("\n");
  tmp = input[1].split(" ");
  //文字列から10進数に変換するときはparseIntを使います
  var a = parseInt(input[0], 10);
  var b = parseInt(tmp[0], 10);
  var c = parseInt(tmp[1], 10);
 
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

2行目の入力をinput[1]をsplitで空白文字で分割し、tmpに代入しています。こうすることで、2行目に２つ以上の値を入力することが可能になります。


これで入力形式を揃えることができました。

あとはconsoleで出力するだけです。
ただ`%d %s`の意味がわかりません。誰か教えてください、、、


これで終了です。一通り理解できたでしょうか？
間違いはどんどん指摘ください、よろしくお願いします。