#はじめに
誰もここまで初歩的なの求めてなさそうだが自分が困ったので書き起こし。- 超初歩的知識で理解できるように書きました。配列と関数さえ知ってればよい
- 読むのが面倒くさいヒトは下まですっ飛ばして構いません。どうせ大したことは書いてない
- どこか間違ってるかもしれないがとりあえず動いたから大丈夫……だよね?
- Node.js利用。
#そもそも標準入出力とは何ぞや
ここで説明してもよいのだが、以下の記事が詳しいので丸投げする。→@angel_p_57さんの記事
読むのが面倒くさいヒトは「デフォルトで指定してあるデータの入り口と出口」って覚えとけば大した問題はない。
#で、どう使えばいいのよ
とりあえずWelcome to AtCoderのサンプルコードを見るのが手っ取り早い。データの加工をする問題だが、内容は今は気にしないでおく。入出力だけ見る。
以下引用
入力
入力は以下の形式で与えられる。
a
b c
s
JavaScript(Node.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"));
引用終わり。
###つまりどういう処理してんの?
#####2行目
function Main(input)
~
15行目で読み込んであーだこーだするためにプログラム全体を関数Main
に突っ込んでいる。引数input
には実行時に標準入力から渡されたデータ全文が入る。もちろんそのままでは処理できないので、使えるように加工しなければならない。
#####4行目
input = input.split("\n");
標準入力から渡されたデータを改行(\nと表される)ごとに区切って配列に落とし込んでいる。
つまり、この状態では、input
の中身が
[ 'a', 'b c', 's' ]
となっている。
#####5行目
tmp = input[1].split(" ");
4行目の状態だとbとcがくっついているので別々にする。変数tmp
を定義し、split
メソッドでinput[1]
の中身を空白で区切っている。
この状態では、tmp
の中身が
[ 'b', 'c' ]
となっている。
#####7行目
var a = parseInt(input[0], 10);
変数a
を定義し、input[0]
の中身を10進数として入れている。(これが標準入力で与えられた「a」の中身)
たまたま計算しなければいけない問題だったからやってるだけなので、文字列のままでよければvar a = input[0]
で良いし、なんならinput[0]
のまま後のコードに入れてもいい(分かりにくいけど……)
#####8~10行目
7行目と同様。
#####12行目
console.log()
で解答を出力している。そんだけ。簡潔。実際に問題を解くときにはここまでに定義した関数を使った処理もここに書き込もう。
#####15行目
Main
関数内の処理を実行するところ。おまじないだと思って書いておこう。ぼくもよくわからない。
#まとめ
function Main(input) {
input = input.split("\n");//行ごとに分解して配列にする。一行の時は"\n"を" "にして三行目を消そう
適当な変数 = input[複数の要素がある行].split(" ");//複数の要素がある行が無いときはいらない
//省略。
var a = input[0];
//省略。使いやすいように他の変数を定義する
//本題の処理
console.log(解答);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));//おまじない
###さいごに
間違ってるところがあったり分からないことがあったらどうぞコメントください。