バージョン
nim: 1.0.6
要約
"".split()
は@[""]
を返すので、""
にparseInt
をしてエラーになってしまう。
"".splitWhiteSpace()
は@[]
を返すので長さが0になりうる時はsplitWhiteSpace
を使う。
説明
(toTuple
は自作マクロです。気にしないでください。)
例題: https://atcoder.jp/contests/abc289/tasks/abc289_b
split
をつかう
# 入力の処理部分だけ抜粋
let
(N, M) = stdin.readLine.split.map(parseInt).toTuple(2)
A = stdin.readLine.split.map(parseInt)
結果: RE
サンプルにもある長さが0の時にエラーになってしまう。
splitWhiteSpace
をつかう
# 入力の処理部分だけ抜粋
let
(N, M) = stdin.readLine.split.map(parseInt).toTuple(2)
A = stdin.readLine.splitWhitespace.map(parseInt)
結果: AC
結論
配列タイプの入力の長さが0になりそうな時はsplitWhiteSpace
を使うといい。
ちなみに
なぜこんな仕様なのか調べると、split
の結果をjoin
し直した時に元に戻るからという理由がでてきた。確かに。
自分はpythonで育ったので、一つの関数でできたら嬉しいなと思ってsplitWhiteSpace
を紹介したがsplit
してfilterIt(it != "")
してもいい。
また、本題以外の説明を省いているのでわからなかったら聞いてください。または調べてください。