私はインタビューで次の問題を与えられました(過去に自分のやり方をだまそうとするのではなく、すでに解決できていません):ゲームは正の整数始まります。(たとえば、A 0 = 1234。)この数値はバイナリ表現に変換され、Nは1に設定されたビット数です。(たとえば、A 0 = b 100 1101 0010、N = 5。)
プレイヤー1は、A 0よりも小さい数字選択します。B 0は 1に1ビットのみが設定されていなければならない(例:B 0 = B 10 0000 0000 = 512ましょう。)A 1 = A 0 - B 0。(例A 1 = 1234 - 512 = 722 = B 10 1101 0010)の動きは、有効な場合はB 0前の制約を満たし、設定されたビット数がまだNに等しい場合。
プレーヤー2は有効なB 1を選択してから続行し、プレーヤー1はA 2から続行します。有効な手札が残っていない場合、プレーヤーは負けとなります。
両方のプレイヤーが最適にプレイすると仮定して、合理的に効率的な方法を使用して勝者を決定します。(私の問題の定義では、これに対する制約は、プログラムが符号付き32ビット整数に適合する数百万の入力数に対してソリューションを提供できなければならないことでした。)つまり、ソリューションはそうである必要はありません。完全に分析的。
ここでの私の個人的な関心は、与えられた120分間で正確性に関するフィードバックがまったくない状態で正しいソリューションを見つけて実装したという期待が妥当であったかどうかを判断することです。または、これが「以前にこのパズルを見たことがあるかどうかを確認しましょう」という質問の1つであった場合。
私が失敗したのは、合理的な戦略のように見えるものを実装することを選択したためです。時間がなくなったときの完全な出力。
振り返ってみると、ブルートフォース検索を実装し、少数の開始番号に対して部分的なソリューションを記憶する必要がありましたが、後知恵は常に20/20です。しかし、私がふざけているとは思えない別の一般的なアプローチがあるかどうか興味があります。