Генератор случайных букв
Сам не разбираюсь в JavaScript, а в сети ответа не нашел, так что решил спросить тут. Что нужно:
Генератор случайных букв (7 за раз), причём, если не нажал кнопку "новая", букв должно быть столько: ![]() На очки внимание обращать не надо, я сам сделаю. |
<!DOCTYPE html> <html lang="en"> <head> </head> <body> <button>клик</button> <script> document.querySelector('button').onclick = function(){ for(var i = 7; i; i--) alert(String.fromCharCode(Math.floor(Math.random()*(1040-1071))+1071)); }; </script> </body> </html> Вот генератор |
j0hnik,
там типа 20 раундов, по 7, и буква А не должна повторится более 10 раз за эти 20 и остальные соотвественно. |
Рони, откуда такая информация?
Если вам что-то известно распишите подробней. |
j0hnik,
Эрудит |
<!DOCTYPE html> <html lang="en"> <head> </head> <body> <button>клик</button> <script> var arr =[]; document.querySelector('button').onclick = function(){ while(arr.length<140) arr.push(String.fromCharCode(Math.floor(Math.random()*(1040-1071))+1071)); arr=arr.filter((el, i)=> { var s = 0; while (i--) if (el == arr[i]) s++; return (s<10); }); console.log(arr); }; </script> </body> </html> рони, всего 140 повторятся больше 10 не должны верно? |
j0hnik,
:blink: всего массив карточек длиной 225, из них буква А занимает 10 ячеек(или карт), а буква Ю одну ячейку, смотри таблицу, нужна случайная выборка из этого массива, пока он не закончится. |
j0hnik,
225 всё поле, букв меньше оказывается 131 (128 букв + 3 звёздочки) |
Я думал это таблица результат =((
|
function shuffle(array) { var currentIndex = array.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; } var letters = 'аааааааааабббвввввгггдддддееееееееежжззииииииииййййккккккллллмммммннннннннооооооооооппппппррррррсссссстттттуууфххцччшщъыыььэюяяя***'.split(''); var result = shuffle(letters); function getLetters(len){ var arr = result.slice(result.length - len); result.length -= len; return arr; } console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); // по правилам не более 4-х игроков // получаем далее буквы console.log(getLetters(1)); console.log(getLetters(1)); Вариант |
Poznakomlus,
:-? function getLetters(len){ return result.splice(0,len); } |
все верно, по сути чтоб не перестраивать индексы всех элементов лучше делать это с конца
так как передние элементы не будут затронуты. думаю, что при больших массивах мой код будет производительнее но в данной задаче рони, красиво укоротил функцию до чистой |
Poznakomlus,
зачем усложнять? когда одной строкой можно заменить три? |
Poznakomlus,
:yes: Цитата:
Цитата:
|
Поправил :dance:
function shuffle(array) { var currentIndex = array.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; } var letters = 'аааааааааабббвввввгггдддддееееееееежжззииииииииййййккккккллллмммммннннннннооооооооооппппппррррррсссссстттттуууфххцччшщъыыььэюяяя***'.split(''); var result = shuffle(letters); function getLetters(len){ return result.splice(result.length - len); } console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); console.log(getLetters(7)); // по правилам не более 4-х игроков // получаем далее буквы console.log(getLetters(1)); console.log(getLetters(1)); |
Poznakomlus,
:) |
тесты
var arrA = [...Array(1000000).keys()]; var arrB = [...Array(1000000).keys()]; var arrC = [...Array(1000000).keys()]; var resA = []; var resB = []; var resC = []; function testSplice(){ return arrA.splice(0, 1); } function testSpliceEnd(){ return arrB.splice(arrB.length - 1); } function testSpliceX(){ var arr = arrC.slice(arrC.length - 1); arrC.length -= 1; return arr; } console.time('splice'); for (var i=0; i < 50000; i++){ resA.push(testSplice()); } console.timeEnd('splice'); console.time('spliceEnd'); for (var i=0; i < 50000; i++){ resB.push(testSpliceEnd()); } console.timeEnd('spliceEnd'); console.time('spliceX'); for (var i=0; i < 50000; i++){ resC.push(testSpliceX()); } console.timeEnd('spliceX'); console.log(arrA.length, arrB.length, arrC.length); |
Poznakomlus,
твой вариант всех быстрее :victory: спасибо за тесты |
тесты не совсем актуальные
var arr = Array(100000).fill(1); var resA = []; var resB = []; var resC = []; function testSplice(){ return arr.splice(0, 1); } function testSpliceEnd(){ return arr.splice(arr.length - 1); } function testSpliceX(){ var tmp = arr.slice(arr.length - 1); arr.length -= 1; return tmp; } console.time('spliceX'); for (var i=0; i < 50000; i++){ resC.push(testSpliceX()); } console.timeEnd('spliceX'); arr = Array(100000).fill(1); console.time('splice'); for (var i=0; i < 50000; i++){ resA.push(testSplice()); } console.timeEnd('splice'); arr = Array(100000).fill(1); console.time('spliceEnd'); for (var i=0; i < 50000; i++){ resB.push(testSpliceEnd()); } console.timeEnd('spliceEnd'); console.log(resA.length, resB.length, resC.length); но они четко показывают, что лучше с конца массив срезать :victory: |
Часовой пояс GMT +3, время: 01:28. |