したがって、値の範囲にある変数があり、正確な数値を決定する方法はなく、それに近い数値 (不明な数値の上下約 50) のみを決定する方法はありません。では、正しい数が 910 であるとしましょう (繰り返しになりますが、この数は、既に決定されている数よりも大きいか小さいかによって異なります)。900 を計算します。900、899、901、898、902、 897... というように、未知の変数と等しくなるまで続けますか?
1145 次
2 に答える
1
var guess = x;
var answer = 910;
var high = guess;
var low = guess;
while (high !== answer && low !== answer) {
high++;
low--;
}
if (high === answer) {
print high;
} else if (low === answer) {
print low;
} else {
print "how did you get here?";
}
于 2013-07-04T05:26:30.750 に答える
0
「不明な」番号のテストは実際にはサーバー呼び出しであるため、単純なループでこれを行うことはできません。代わりに、すべてを非同期で処理する必要があります。
次に例を示します。
// Starting with guess, test that value and nearby integers up through
// guess+maxDelta and down through guess-maxDelta.
// Each number is tested by calling testMagicNumber(). This function
// can make an Ajax call or other asynchronous action, and then it
// should call the callback passed to it with true or false.
// When a match is found, call the callback function with that value.
// If no match is found call the callback function with false.
function findMagicNumber( guess, maxDelta, callback ) {
var delta = 0, sign = +1;
nextNumber();
function nextNumber() {
var value = guess + sign*delta;
//console.log( 'Testing', value );
testMagicNumber( value, function( match ) {
if( match ) {
callback( value );
}
else {
if( sign > 0)
++delta;
sign = -sign;
if( delta <= maxDelta )
nextNumber();
else
callback( false );
}
});
}
}
// Test version of a magic number matcher, using a hard coded value
function testMagicNumber( value, callback ) {
callback( value == magic );
}
// Untested example of a function to test a magic number
// with a server request. isMagic(result) is whatever test
// you need to make on the result to get a boolean value
// for the callback.
function testMagicNumberAjax( value, callback ) {
$.ajax({
url: 'test',
data: { value: value },
error: function() {
callback( false );
},
success: function( result ) {
callback( isMagic(result) );
}
});
}
for( var magic = 45; magic <= 55; ++magic ) {
console.log( 'Magic number is', magic );
findMagicNumber( 50, 3, function( result ) {
console.log( 'Matched', result );
});
}
これは 50 の推測と 3 の最大デルタ アップとダウンを取り、45 から 55 までのマジック ナンバーをテストします。
ログに記録された結果は次のとおりです。
Magic number is 45
Matched false
Magic number is 46
Matched false
Magic number is 47
Matched 47
Magic number is 48
Matched 48
Magic number is 49
Matched 49
Magic number is 50
Matched 50
Magic number is 51
Matched 51
Magic number is 52
Matched 52
Magic number is 53
Matched 53
Magic number is 54
Matched false
Magic number is 55
Matched false
このtestMagicNumber()
関数は、Ajax 呼び出しを行ってサーバーにアクセスする場所です。呼び出しから応答が返ってきたら、testMagicNumber()
そのcallback
関数パラメーターをtrue
またはで呼び出してfalse
、番号が一致したかどうかを示す必要があります。上記の (テストされていない) Ajax バージョンの例がありtestMagicNumberAjax()
ます。
上記のコードを Chrome コンソールに貼り付けて、簡単なテストを行うことができます。の値を変更して、magic
別の数値を試してください。
于 2013-07-04T06:32:50.080 に答える