JavaScript (оновлено для роботи зі всіма тестовими кейсами)
Маловідома правда полягає в тому, що насправді є чотири 6
s, але один зрадив інших і поліморфував у формі коду, щоб викорінити їх із світових цифр чисел. Ось та зрадлива шість:
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.
інше,
- додати один до числа.
- ПРИМІТКА. Нам зараз гарантується, що немає або 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);
Тепер ми закінчили! Зараз це має бути досить легко зрозуміти.