背景
書いた人:JavaScriptを全く知らない初心者
C#が微妙にわかるだけ(しかも独学だから偏ってる)のプログラミング入門者
解いた問題:paizaのレベルアップ問題集
標準入力サンプル問題セット「1つのデータの入力」
言語:JavaScript(C#でも比較してみました)
環境:paizaのサイト(ブラウザ)
問題文
入力される値
文字列Sが1行で入力されます。
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
期待する出力
1行での出力
条件
すべてのテストケースにおいて、以下の条件をみたします。
・Sは1文字以上100文字以下の文字列
・Sの各文字は英小文字または大文字または数字
解答例
自分なりの解説をつけてJavaScriptで回答してみました。
process.stdin.resume(); //processというオブジェクトのstdinプロパティ(標準入力)を使うよ!
process.stdin.setEncoding('utf8'); //入力される文字のコードははutf8だよ!
var lines = []; //入力されるデータを格納するための配列。
//javascriptの変数には型とか無いからとりあえずvarでOKっぽい。
//varは変数以外にも使えるらしい。
var reader = require('readline').createInterface //「readline」という機能を持つオブジェクト「reader」を用意する。
({ //createInterfaceでreadlineという機能の形式を指定するよ。
input: process.stdin, //readlineするときのinput(入力形式)は標準入力(stdin)だよ。
output: process.stdout //readlineするときのoutput(出力形式)は標準出力(stdout)だよ。
});
reader.on('line', (lineA)=> //さっき作ったreaderを発動!効果は'line'(一行の標準入力を読む)
{ //入力されたデータは新しい変数「lineA」に格納
lines.push(lineA); //lines(4行目で作った配列)にlineAをpush(挿入)するよ。
}); //入力されるlineがなくなるまで繰り返されるらしい(onで発動するとそうなるっぽい)
//2行目以降があったとしても配列linesに格納されているんだね。
reader.on('close', () => //再びreaderを発動!効果は'close'(なんか処理するやつ、出力とかする)
{
console.log(lines[0]); //標準出力はconsole.log!内容は配列linesの1個目(1行目の標準入力ってことだね)
});
1行目のresumeの意味は分かりませんでしたが、そのうちわかるようになるはず!
(C#でもusingの意味なんて最初は考えず使ってたし)
ちなみにC#で解くと
using System;
class Program
{
static void Main()
{
string line = Console.ReadLine();
Console.WriteLine(line);
}
}
簡単に書けました。
感想
JavaScript難しすぎる!!
今回のコードと解釈が本当に正解なのかすら全く自信がありません。
間違いもあると思うので、もしこのページを見ている経験者の方がいらっしゃったらアドバイスを頂けると幸いです。
JavaScriptって標準入出力むいてないのかなぁ…。早く慣れたいです。
もしかしてpaizaでJavaScriptを勉強するのは無謀…?
でもunityのjsonをしっかり理解して使いたいので頑張ります。
C#もほとんどpaizaのスキルチェックで勉強したし大丈夫なはず!
参考にさせていただいたサイト
↑ 今回解いた問題です
↑ 大変わかりやすい説明がありました。ありがとうございました。