|
Интересное задание codewars.com
codewars.com
уровень сложности 3Kyu (далеко не самая сложная по местным меркам.) нужно дописать функцию которая переворачивает массив подобно методу reverse(). reverse=a=>ваш код; 1) нельзя использовать метод reverse() 2) ваш код : не может превышать 19 символов для теста используйте различные массивы пример: console.log(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])); |
наверно тут что-то из ES7
в 19 символов очень трудно впихнуться... |
j0hnik,
не 19, но может кому пригодится reverse=a=>a.reduce((a,b)=>[b,...a]); console.log(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])); |
рони,
reverse=a=>a.map((e,i)=>a[a.length-1-i]); вот наподобие, тоже не вписывается |
Alexandroppolus,
в ES7 что нового для массивов появилось не подходит ничего. (ну или я слепой) |
рони,
мб там с sort что поколдовать? |
j0hnik,
проверял sort, не получилось ... может ловчее кто. |
Более находчивые люди придумали так https://stackoverflow.com/questions/...without-revers
|
destus,
неа, не катит, пробовал так. |
ага, в хроме уже на 11 элементах обломалось. Видно, метод сортировки на таком количестве меняется (как известно, для маленьких массивов быстрее всего работает одна из простых сортировок)
|
:write:
ещё вариант... reverse=a=>Array.from([...a],()=>a.pop()); console.log(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])); |
имхо задача не решаема в 19 байт.
|
reverse=a=>[...a].map(a.pop,a) console.log(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])) alert(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])) :dance: :thanks: |
Белый шум,
:victory: смотрел в эту сторону, но половину массива терял на выходе :) a.map(a.pop,a) |
;) и пост №11, никак не выходило a.pop добавить :) контекста не хватало ,a
reverse=a=>Array.from([...a],a.pop,a); console.log(reverse(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])); Белый шум, ещё раз поздравляю!!! |
Тоже вчера находил такой вариант
https://repl.it/@chiu_les1/array-methods-explained Была у меня идейка тут всего то 20 байт значит можно брутфорсом подобрать |
да, круто.
Я на кодоварсах год назад порешивал, потом забил. Очень приятное послевкусие оставила вот эта задачка (есть массив с произвольными числами, для каждого элемента определить, сколько элементов справа от него меньше чем он, т.е. вернуть новый массив, с количествами) |
|
О ВЕЛИКИЙ БЕЛЫЙ ШУМ! Красавчег!
|
Там почти у всех задач много решений, а у этой можно сказать одно.
либо небольшая рокировка reverse=a=>a.map(a.pop,[...a]) |
уровень сложности 6Kyu (новичок+)
нужно дописать функцию которая возводит каждую цифру в квадрат sd=x=>ваш код; 1) ваш код : не может превышать 30 символов вход/выход sd(0)=> 0 sd(64)=> 3616 sd(1111)=> 1111 sd(2222)=> 4444 sd(3333)=> 9999 sd(3212)=> 9414 sd(1234)=> 14916 sd(77455754)=> 4949162525492516 sd(99999999)=> 8181818181818181 решений множество на входе - выходе Number |
sd=x=>+[...x+""].map(n=>n*n).join("") //если убрать плюс в начале, то уложится в 30 символов, но результат будет строкой, а не Number //sd=x=>+[...x+""].reduce((s,n)=>s+n*n,"") //так длиннее получается function test(n, res){ var r = sd(n); console.log('sd('+n+')='+r+'; ', r===res); } test(64, 3616) test(1111, 1111) test(2222, 4444) test(3333, 9999) test(3212, 9414) test(1234, 14916) test(77455754, 4949162525492516) test(99999999, 8181818181818181) Цитата:
Цитата:
|
Белый шум,
решается даже в 28 |
Цитата:
sd=x=>+(x+"").replace(/./g,n=>n*n) function test(n, res){ var r = sd(n); console.log('sd('+n+')='+r+'; ', r===res); } test(64, 3616) test(1111, 1111) test(2222, 4444) test(3333, 9999) test(3212, 9414) test(1234, 14916) test(77455754, 4949162525492516) test(99999999, 8181818181818181) |
уровень сложности 2Kyu (Бородатый кодер)
Создайте регулярное выражение, способное оценивать двоичные строки (которые состоят только из 1 и 0) и определять, является ли данная строка числом, делящимся на 7. function regexp(bin){ const solution = /ваш код/; var dec = parseInt(bin,2); return solution.test(bin)+' => '+dec+'/7='+dec/7; } console.log(regexp('110001')); для тех кто шарит в регулярках и двоичном коде. Alexandroppolus если решали сразу не подсказывайте. ;) |
Цитата:
Здесь ещё КА придумать надо, или найти ) Кстати, 'Anti-cheat tests' здесь хреновые, пример того как не надо делать. Вот такой вариант нечестного решения прокатывает: const solution = new RegExp('.'); var str = solution.test.toString(); solution.test = function(x) { /* тут любое решение )) */ }; solution.test.toString = function() { return str; }; |
Alexandroppolus,
Не натыкались там на задачку где нужно взломать 32-х битный ключ, который меняется каждые 12 сек? как такие решаются? |
j0hnik,
дай ссылку, гляну там всякие бывают, некоторые хрен поймешь как делать |
Alexandroppolus,
https://www.codewars.com/kata/tap-in...ain/javascript |
Alexandroppolus,
Какой у вас там Kuy ? |
Цитата:
---- https://www.codewars.com/users/Alexandroppolus |
Цитата:
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'; } |
Белый шум,
:) действительно успевает один крякнуть. назовем ваш код "Вредоносный процесс" |
вот еще мне понравилась
Уровень сложности 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] тоесть выходной массив собирается по спирали по часовой стрелке. ![]() |
Цитата:
Змейка робот |
Интересная ката 6kyu (новичок+)
Напишите код который позволит стабильно выводить true в консоль. var guess = // ваш код // ваш код console.log(Math.floor(Math.random() * 100 + 1) == guess);// проверка |
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);// проверка |
рони,
Ок, работает, можно даже чуть проще Math.random = () => 0; var guess = 1 |
Цитата:
а тот вариант "без травматизма" :) недавно по работе пришлось таким же образом пропатчить некоторые встроенные функции. Так что это имеет практический смысл. |
Alexandroppolus,
Для ката это без разницы. |
Часовой пояс GMT +3, время: 02:04. |
|