Генератор случайных букв
Сам не разбираюсь в 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, время: 12:28. |