問題
サインアップフォームは年齢を文字列として受け取ります。入力は、両端の空白を取り除いた後で、数字のみ(符号なし)からなり、その値が 0 以上 150 以下であるとき valid です。
最初の不正な入力を見つけて、フォームがユーザーにその箇所を示せるようにします。
first_invalid_age(values) を実装してください。
入力
values: 入力された年齢の一覧で、フォームの順序です。
出力
最初の不正な入力のインデックスを返します。すべて有効なら -1 を返します。
制約
0 ≤ 項目の数 ≤ 10,000
各項目は 20 文字以下
例
例 1
入力:
values = ["25", " 40 ", "abc", "200"]
期待される出力:
expected = 2
入力:
std::vector<std::string> values = {"25", " 40 ", "abc", "200"};
期待される出力:
long long expected = 2;
入力:
string[] values = new string[] {"25", " 40 ", "abc", "200"};
期待される出力:
long expected = 2;
解説
"25" と " 40 " (空白を除去すると)は有効です。index 2 の "abc" が最初の不正な入力です。
例 2
入力:
values = ["0", "150", "007"]
期待される出力:
expected = -1
入力:
std::vector<std::string> values = {"0", "150", "007"};
期待される出力:
long long expected = -1;
入力:
string[] values = new string[] {"0", "150", "007"};
期待される出力:
long expected = -1;
解説
3 つすべてが 0 から 150 の範囲の数字です(007 は 7 です)ので、答えは -1 です。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
空白を取り除いてから、空でなく数字だけでできているかを調べます。
ヒント 2
そのあとで初めて値を 150 と比べます。
ヒント 3
マイナス記号があれば不正で、007 は正しい 7 です。
目安の計算量
時間 O(合計の長さ)、追加メモリ O(1)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。