1984年、マイケルクリクトンはクリエイティブコンピューティング誌に掲載されたBASICのセキュリティプログラムを書きました。プログラムは、ユーザーに自分の選択した語句を入力するように要求し、キーストローク間の間隔を記録してから、語句を再入力するように要求します。タイミングの違いが大きすぎる場合、プログラムはユーザーを詐称者として識別します。
課題:選択した言語でバージョンのCrichtonのプログラムを作成します。
ルール:
ユーザーとのコミュニケーションのためのフレーズ(「キーフレーズを入力してください」、「キーフレーズをもう一度入力してください」など)は、実際の長さに関係なく、それぞれ1バイトとしてカウントされます。これはユーザー通信専用です。文字列内のプログラムコードを非表示にしないでください。
合格/不合格テストは、元の間隔からのパーセンテージ分散の平均絶対値に基づいている必要があります。文字列が一致しない場合、失敗を返すか、ユーザーの裁量でユーザーが再試行できるようにします。
キーフレーズはnull文字列を許可しないでください。キーフレーズが文字列データ型に対して長すぎる場合は、自由に切り捨てるか、許可せずにやり直してください。
テストの感度(合否テストのしきい値)は、ソースコードで調整可能である必要があります。
私はもともと、恐竜によく似たソースコードをフォーマットできる場合、合計バイト数の20%のボーナスを提供しました。これは非常に主観的であり、人気コンテストにおそらくより適切であると指摘されたので、このボーナスを削除しました。ただし、恐竜のフォーマットを心から推奨しています。恐竜のようにコードをフォーマットすると、純粋な表面的なコメント、改行、または空白文字をバイト合計から差し引くことができます。
文字列長と恐竜のフォーマット調整に応じて、最短のバイト数が優先されます。
上記の私の仕様は、リッチトンのコードの操作と完全には一致していないことに注意してください。そのコピーはオンラインで見つけることができます。仕様に従ってください。オリジナルのクローンを作成しないでください。
"Please type the key phrase"1バイトとしてカウントされますか、それともフレーズカウントと引用されたフレーズのみが3バイトとしてカウントされますか("、フレーズ、")?間隔を長くしたり、間隔を短くしたりすると、「キャンセル」されて再び同じになることが意図されていますか?プログラムは、2つのキーフレーズが一致することを確認する必要がありますか?