JavaScript(すべてのテストケースで動作するように更新)
あまり知られていない真実は、実際には4がありますが6
、そのうちの1つは他のものを裏切り、コード形式に変形して、数字の世界桁からそれらを根絶することです。その裏切り者は次のとおりです。
x=prompt(''+
'Enter number');
alert( ( (~x[
'ind'+
'exOf']('666')))?(x
.replace(/666(.*)$/,
function (mat,g){
return '667'+g
['re'+ 'place'
](/./g,0)})):((+x+
1+'').replace(
666,667)));
ここに説明があります。まず、コードを美化など役に立たないものを削除''+'string'
して((code))
:
x = prompt('Enter number');
alert(
~x['indexOf']('666')
?
x.replace(/666(.*)$/, function(mat,g) {
return '667' + g['replace'](/./g,0)
})
:
(+x+1+'').replace(666, 667)
);
奇妙な表記(~indexOf
やなど['replace']
)をより一般的な表記に変換します。
x = prompt('Enter number');
alert(
x.indexOf('666') > -1
?
x.replace(/666(.*)$/, function(mat, g) {
return '667' + g.replace(/./g, 0)
})
:
((parseInt(x) + 1) + '').replace(666, 667)
);
そして、アルゴリズムが次のようになることを理解してください。
入力にすでに666がある場合、
- 667に置き換えます。
- その後のすべての数字を0に置き換えます。
そうでなければ、
- 番号に1を追加します。
- 注:666がないか、文字列の末尾に666があるか、または末尾にゼロが既にある666があることが保証されています(「手動」加算を行うときは「持ち運び」を考えてください)。
- 666がある場合は、667に置き換えます。
古いバージョン(では機能しません666666666
):
s='Enter number';x
=prompt( ''+
s);x=+x+
(-~![]);
x=(''+x).replace('666',
666+([][ +[]]+[])
[+[]]['l ength'[
'repla'+ 'ce'](
/ /g,'')]);alert(x)
これを理解するために、まずそれを美しくしましょう:
s = 'Enter number';
x = prompt('' + s);
x = +x + (-~![]);
x = ('' + x).replace('666',666+([][+[]]+[])[+[]]['l ength'['repla'+'ce'](/ /g,'')]);
alert(x);
では、'' + string
やなどの役に立たないものを'str' + 'ing'
削除し、不必要なs
変数を削除し、次のよう-~![]
に奇妙さを変更し1
ます。
x = prompt('Enter number');
x = +x + 1;
x = ('' + x).replace('666', 666+"undefined"[0]['l ength'['replace'](/ /g,'')]);
alert(x);
'l ength'['replace'](/ /g,'')
単純に"length"
:
x = prompt('Enter number');
x = +x + 1;
x = ('' + x).replace('666', 666+"undefined"[0].length);
alert(x);
そして"undefined"[0]
ある"u"
、と"u".length
あります1
。
x = prompt('Enter number');
x = +x + 1;
x = ('' + x).replace('666', 666 + 1);
alert(x);
これで完了です!今ではかなり簡単に理解できるはずです。