単に解決するには:
パフォーマンスの点では、次のことを意味します:
基準 1 の場合:
最適に解決するには:
これはうまくいくと思います。それを確認する方法は 1 つだけです。
基準 2 (1、2、または 3 の違い) を識別するためのコードは次のとおりです。
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
基準 1 (すべての差異が増加または減少) を識別するためのコードは次のとおりです。
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
安全なレポートを取得する最終条件は次のとおりです:
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
全体として、私のアルゴリズムは入力例に対する正しい答えを生成します。
パズル入力でも同じことが起こりますか??
はい、そうです!!
素敵です!
これは確かに状況を少し複雑にします。
レポートの可能なすべての順列をチェックするアルゴリズムは避けたいと考えています。それには何百万ものレポートを作成する必要があります。
最初の良いニュースは次のとおりです:
私のパズル入力の場合、順列をチェックする必要のないものは約 200 です。
それでも、800/1000 は、順列を完全に調べるにはまだ たくさんのリストです。
正直なところ、安全でないレポートの順列ごとにアルゴリズムの実行を回避する方法がわかりません。
残念です。
安全でないレポートの各数値 (削除する数値) を反復処理するループを追加し、変更されたリストで合格点を確認します。
結局、while ループを複製して、後続の各テスト レポートから 1 つの数値を複製して削除する行を追加しました。
コードはさらに多くなります。
しかし、それはうまくいきます!パズル入力の正解を生成します!
質問は次のとおりです:
実行して見てみましょう...
うーん、実行できますが、パート 1 の回答よりわずかに大きいだけであるという回答が得られます。それは間違っているようです。
提出しても問題ありませんね????
それはです正しいです!
喫煙は最高です!
それはすごいですね!
そして解くのは本当に楽しいです!
3 日目には 4 つのゴールドスターが登場します。
もっと素晴らしいパズルを生み出してください!
以上が赤鼻のレポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。