回答を書きたくなったのでそっと書いてみることにしました。
実際に回答してもらう問題じゃないということなので、
こちらもゆるい感じに解いていきます。
動かなかったらゴメンナサイ。
あ、言語はJavaScriptでいきます。
問題で定義されていない部分については、
触れないように書きます。
演算
function(input) { return input + "が入力されました"; }
条件分岐
function(input) { if (input == "1") { return "ガケに落ちました"; } else if (input == "2") { return "ライオンに食われました"; } }
ループ
function(input) { for (var i = 0; i < input.length; ++i) { if (input.substr(i, 1) != "A") { return false; } } return true; }
状態管理(初版)
function(input) { if (input.length <= 1) { return false; } if (input.substr(0, 1) != "A") { return false; } var flag = false; for (var i = 1; i < input.length; ++i) { if (input.substr(i, 1) == "A") { if (flag) { return false; } } else { flag = true; } } return flag; }
状態管理(2版)
function(input) { var state = "1st"; for (var i = 0; i < input.length; ++i) { var target = input.substr(i, 1); switch (state) { case "1st": // "A"で始まる if (target != "A") { return false; } state = "2nd"; break; case "2nd": // "A"が続く if (target != "A") { state = "3rd"; } break; case "3rd": // "A"以外が続く if (target == "A") { return false; } break; } } return (state == "3rd"); }
スタック
function(input) { var state = "1st"; var nest = 0; for (var i = 0; i < input.length; ++i) { var target = input.substr(i, 1); switch (state) { case "1st": // "A"で始まる switch (target) { case "A": state = "2nd"; break; case "(": case ")": default: return false; } break; case "2nd": // "A"が続く、"("の検知 switch (target) { case "A": break; case "(": ++nest; state = "1st"; break; case ")": return false; default: state = "3rd"; break; } break; case "3rd": // "A"以外が続く、")"の検知 switch (target) { case "A": case "(": return false; case ")": if (nest == 0) { return false; } --nest; state = "4th"; break; default: break; } break; case "4th": // ")"の次は"A"、"("、")"、以外 switch (target) { case "A": case "(": case ")": return false; default: state = "3rd"; break; } break; } } return (state == "3rd" && nest == 0); }
状態管理に第2版があるのは、
回答の仕方が状態管理じゃなくてフラグ管理でしかなくて、
次のスタックの問題に繋がらなかったからです。
たいしたことは書いてないですし、
これ以上の解説はいらない…ですよね?
あ、ツッコミは歓迎します。
2014/06/19追記:ソースにコメントを追加
0 件のコメント:
コメントを投稿