Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.12.2015, 03:26
Аспирант
Отправить личное сообщение для Untropee Посмотреть профиль Найти все сообщения от Untropee
 
Регистрация: 04.08.2015
Сообщений: 59

Задачка по генерации чисел
Приветствую! Помогите решить задачку на генерацию чисел.

Примерно понимаю, нужно в цикле пустить Math.random

Нужно сгенерировать набор из 20ти цифр (без пробелов), пример (для наглядности с пробелами):

2 10 19 15 8 0 3 5 11 17 2 1 2 0 1 0 2 1 0 2

Структура: первые 10 цифр от 0 до 19 (повторяться запрещено), следующие 10 цифр от 0 до 2

Последний раз редактировалось Untropee, 25.12.2015 в 04:23.
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2015, 04:01
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

var data = new Array(20),
	i = 0, n;

function getRandomInt(n) {
	return Math.floor(Math.random() * ++n);
}

while(i < 10) {
	n = getRandomInt(19);
	if(data.indexOf(n) < 0) {
		data[i] = n;
		data[i + 10] = getRandomInt(2);
		i++;
	}
}

alert( data );
alert( data.join('') );
Ответить с цитированием
  #3 (permalink)  
Старый 25.12.2015, 04:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function indexRandom(lng){
     var a = {},i,out=[],n=0; 
     while (n!=lng){
       i = Math.floor(lng*Math.random());
       if(typeof(a[i])=='undefined'){
         a[i]=i; out.push(i);
         n++;
       }
     }
    return out;
  }
 
  var arr = [],ind = indexRandom(20),k;
  for(i=0;i<20;i++) arr[i]=ind[i]%(k=i<10?20:3);

  alert(arr)
  alert(arr.join(''))

Последний раз редактировалось Deff, 25.12.2015 в 14:34.
Ответить с цитированием
  #4 (permalink)  
Старый 25.12.2015, 04:07
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Deff, 3 цикла?
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2015, 04:12
Аспирант
Отправить личное сообщение для Untropee Посмотреть профиль Найти все сообщения от Untropee
 
Регистрация: 04.08.2015
Сообщений: 59

Спасибо, сейчас попробую) Я тоже начал, уже практически закончил, но косячнул видимо на проверке повторяющихся числе в первой десятке (повторяющиеся числа остаются).

//Функция генерации
function randomInteger(min, max) {
    var rand = min - 0.5 + Math.random() * (max - min + 1)
    rand = Math.round(rand);
    return rand;
}
//Создаём массив
var numb = [];

//Начинаем заполнять массив

for (i=0;i<=19;i++) {
	
	//Пошла первая десятка
	
	if (i < 10) {
		
		var my_numb = randomInteger(0, 19);
		numb[i] = my_numb;
		
		if (i > 0) {
			
			//Функция проверки повторов
		
			check_numb()
			function check_numb() {
		
				for (l=0;l<=i-1;l++) {
					
					if (numb[l] == my_numb) {
						
						alert(my_numb)
						numb[l] = randomInteger(0, 19);
						check_numb()
						
					}
					
				}
			
			}
		
		}
		
	}
	
	//Пошла вторая десятка
	
	if (i > 9) {
		
		numb[i] = randomInteger(0, 2)
		
	}
	
}

alert(numb.join(''));

Последний раз редактировалось Untropee, 25.12.2015 в 04:20.
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2015, 04:16
Аспирант
Отправить личное сообщение для Untropee Посмотреть профиль Найти все сообщения от Untropee
 
Регистрация: 04.08.2015
Сообщений: 59

Спасибо, всё работает у вас.

Я побыдлокодил конечно, но действовал исходя из логики и недостатка знаний)

Последний раз редактировалось Untropee, 25.12.2015 в 04:18.
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2015, 09:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

random только 20 раз и никаких повторов
<script>
Array.prototype.shuffle = function() {
    for (var a = this.length; 0 <= a; a--) {
        var b = Math.floor(Math.random() * (10 > a ? 3 : a + 1)),
            c = 10 > a || void 0 === this[b] ? b : this[b];
        10 < a && (this[b] = void 0 === this[a] ? a : this[a]);
        this[a] = c
    }
    return this.reverse()
};
var arr = new Array(20).shuffle();
document.write(arr+"<br>"+arr.join(''))
</script>

Последний раз редактировалось рони, 25.12.2015 в 09:59.
Ответить с цитированием
  #8 (permalink)  
Старый 25.12.2015, 17:31
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони, ++
Да, скоростью я был удивлён еще в табличке
================
Вариант рандомного массива без повторений с вызовом Math.random() единожды на каждый элемент:
function indRand(lng){
     var a = [],i,out=[],n=lng;
     for(i=0;i<lng;i++)a[i]=i;
     while (n--)out.push(a.splice(Math.floor((n+1)*Math.random()),1)[0]);
     return out;
  }

 var arr = [],ind = indRand(20),k;
 for(i=0;i<20;i++) arr[i]=ind[i]%(k=i<10?20:3);

 alert(arr)
 alert(arr.join(''))

Последний раз редактировалось Deff, 26.12.2015 в 16:26.
Ответить с цитированием
  #9 (permalink)  
Старый 26.12.2015, 13:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Deff,
на всякий случай, надобы поправить indRand, когда-то я сам прокололся на таком использовании splice
Ответить с цитированием
  #10 (permalink)  
Старый 26.12.2015, 13:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

рони,
Если массив создаешь внутри функции, вроде как фичи нет,...
А вообще интересно, как оно обходит созданные прототипы и выходит на начальный родитель(ксать можно использовать(Это если массив передаём в функцию)

Или ты не об этом ? Тады ап чём ?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генератор случайных чисел (помогите с задачкой) GentleGoose Общие вопросы Javascript 2 28.07.2014 12:53
НОД более чем 2-х чисел Demath Общие вопросы Javascript 4 06.01.2013 05:27
Проблема с отбором чисел из массива mindkilla Общие вопросы Javascript 10 05.11.2012 12:03
Генератор случайных чисел с возможностью ввода диапазона. Как сделать? Sovereign Общие вопросы Javascript 3 10.06.2011 08:34
Работа с последовательностью натуральных чисел Stillife Общие вопросы Javascript 1 18.05.2011 20:03