|
Интересное задание 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, время: 22:54. |
|