20.04.2018, 18:03
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
|
|
21.04.2018, 02:52
|
|
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
Накостылил путём замера времени выполнения ф-ии - иногда срабатывает на одиночном пароле, но чаще либо ошибается либо в лимит времени не укладывается. Возможно надо искать не самый долгий цикл, а присваивать им рейтинги (и потом сложить). Нет времени возиться.
function crack(login) {
console.log('login:', login);
var n=0;
var pass = ''
for( var len=0; len<28; len++ ) {
var probes = []
var list = [0,1,2,3,4,5,6,7,8,9] //список цифр для подстановки
var probe=0
do {
probe+=2
var a = []
for( n in list ) {
var nn = pass+n
var hr1, hr = process.hrtime()
for( var i=0; i<12000+(len*100*probe); i++ ) {//<--подобрать кол-во расшифровок
login(nn)
}
hr1 = process.hrtime()
hr1 = String(hr1[0]).slice(-1) + String(hr1[1]).padStart(9, '0')
hr = String(hr[0]).slice(-1) + String(hr[1]).padStart(9, '0')
var t = Number(hr1) - Number(hr)
a[n] = t
}
var max = Math.max.apply(null, a.filter(n=> n!=undefined))
var pass_probe = pass + a.indexOf(max)
var next = true
probes[pass_probe] = Number(probes[pass_probe] || 0) + 1
//надо чтоб число несколько раз оказалось самым долгим:
if( probes[pass_probe] > 2 ) {
next = false
pass = pass_probe
}
//console.log( 'PASS:', pass_probe )
//удалить индекс с самым маленьким временем выполнения:
var del_list = []
var min = Math.min.apply(null, a.filter(n=>n != undefined));
del_list.push(min)
if( probes[pass + a.indexOf(min)] == undefined ) delete( list[ a.indexOf(min) ] );
//ещё раз
var min = Math.min.apply(null, a.filter(n=>n != undefined && del_list.indexOf(n) == -1));
del_list.push(min)
if( probes[pass + a.indexOf(min)] == undefined ) delete( list[ a.indexOf(min) ] );
//третий раз
var min = Math.min.apply(null, a.filter(n=>n != undefined && del_list.indexOf(n) == -1));
del_list.push(min)
if( probes[pass + a.indexOf(min)] == undefined ) delete( list[ a.indexOf(min) ] );
//4-ый
//var min = Math.min.apply(null, a.filter(n=>n != undefined && del_list.indexOf(n) == -1));
//del_list.push(min)
//if( probes[pass + a.indexOf(min)] == undefined ) delete( list[ a.indexOf(min) ] );
} while( next )
}
//последние четыре цифры быстрее подобрать влоб:
for( i=0; i<=9999; i++ ) {
if( login(pass + String(i).padStart(4, '0')) ) break
}
return pass + String(i).padStart(4, '0')
//return '12345678901234567890123456789012';
}
|
|
21.04.2018, 03:19
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Белый шум,
действительно успевает один крякнуть.
назовем ваш код "Вредоносный процесс"
|
|
21.04.2018, 03:34
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
вот еще мне понравилась
Уровень сложности 4Kyu (Мидл)
На входе многомерные массивы вида
array = [[1,2,3],
[4,5,6],
[7,8,9]]
array = [[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
Содержимое может быть произвольное, не обязательно цифры.
на выходе надо получить массивы вида
1) [1,2,3,6,9,8,7,4,5];
2) [1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
тоесть выходной массив собирается по спирали по часовой стрелке.
|
|
21.04.2018, 08:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от j0hnik
|
тоесть выходной массив собирается по спирали по часовой стрелке.
|
в примере против часовой
Змейка робот
|
|
05.05.2018, 20:44
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Интересная ката 6kyu (новичок+)
Напишите код который позволит стабильно выводить true в консоль.
var guess = // ваш код
// ваш код
console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка
|
|
05.05.2018, 21:19
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
j0hnik,
var guess = function() {
var b = Math.random,
a;
Math.random = function() {
a = b();
guess = Math.floor(100 * a + 1);
return a
}
}();
console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка
console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка
console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка
|
|
05.05.2018, 21:24
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
рони,
Ок, работает, можно даже чуть проще
Math.random = () => 0;
var guess = 1
|
|
06.05.2018, 14:38
|
|
Профессор
|
|
Регистрация: 25.10.2016
Сообщений: 1,012
|
|
Сообщение от j0hnik
|
Ок, работает, можно даже чуть проще
Math.random = () => 0;
var guess = 1
|
проще, но убивает Math.random
а тот вариант "без травматизма"
недавно по работе пришлось таким же образом пропатчить некоторые встроенные функции. Так что это имеет практический смысл.
Последний раз редактировалось Alexandroppolus, 06.05.2018 в 14:41.
|
|
06.05.2018, 14:45
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Alexandroppolus,
Для ката это без разницы.
|
|
|
|