Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 20.04.2018, 18:03
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от j0hnik Посмотреть сообщение
Alexandroppolus,
https://www.codewars.com/kata/tap-in...ain/javascript
что-то я не раскурил задачу

----
https://www.codewars.com/users/Alexandroppolus
Ответить с цитированием
  #32 (permalink)  
Старый 21.04.2018, 02:52
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Сообщение от j0hnik Посмотреть сообщение
Alexandroppolus,
https://www.codewars.com/kata/tap-in...ain/javascript
Накостылил путём замера времени выполнения ф-ии - иногда срабатывает на одиночном пароле, но чаще либо ошибается либо в лимит времени не укладывается. Возможно надо искать не самый долгий цикл, а присваивать им рейтинги (и потом сложить). Нет времени возиться.

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';
}
Ответить с цитированием
  #33 (permalink)  
Старый 21.04.2018, 03:19
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Белый шум,
действительно успевает один крякнуть.
назовем ваш код "Вредоносный процесс"
Ответить с цитированием
  #34 (permalink)  
Старый 21.04.2018, 03:34
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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]

тоесть выходной массив собирается по спирали по часовой стрелке.

Ответить с цитированием
  #35 (permalink)  
Старый 21.04.2018, 08:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от j0hnik
тоесть выходной массив собирается по спирали по часовой стрелке.
в примере против часовой
Змейка робот
Ответить с цитированием
  #36 (permalink)  
Старый 05.05.2018, 20:44
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Интересная ката 6kyu (новичок+)

Напишите код который позволит стабильно выводить true в консоль.

var guess = // ваш код
// ваш код

console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка
Ответить с цитированием
  #37 (permalink)  
Старый 05.05.2018, 21:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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);// проверка
Ответить с цитированием
  #38 (permalink)  
Старый 05.05.2018, 21:24
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
Ок, работает, можно даже чуть проще

Math.random = () => 0;
var guess = 1
Ответить с цитированием
  #39 (permalink)  
Старый 06.05.2018, 14:38
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от j0hnik
Ок, работает, можно даже чуть проще

Math.random = () => 0;
var guess = 1
проще, но убивает Math.random
а тот вариант "без травматизма"

недавно по работе пришлось таким же образом пропатчить некоторые встроенные функции. Так что это имеет практический смысл.

Последний раз редактировалось Alexandroppolus, 06.05.2018 в 14:41.
Ответить с цитированием
  #40 (permalink)  
Старый 06.05.2018, 14:45
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Alexandroppolus,
Для ката это без разницы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестовое задание Yandex xShift Общие вопросы Javascript 22 17.02.2018 21:53
Задание с SIP heeel Firefox/Mozilla 0 12.06.2017 01:12
Интересное задание "Поединок" помогите решить Anton27 Общие вопросы Javascript 2 23.05.2017 22:24
Тестовое задание. Дайте идею. FINoM Оффтопик 14 28.03.2011 10:09
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26