Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2011, 10:00
Новичок на форуме
Отправить личное сообщение для hellpilot Посмотреть профиль Найти все сообщения от hellpilot
 
Регистрация: 14.05.2011
Сообщений: 3

Поиск дубликатов чисел в массиве
Решил побаловаться с утра мозги размять и написать скрипт для генерации чисел в лото "6 из 40"
Задачка по идее тривиальная, но видать дома мозги не работают.
Что хотелось: есть 12 полей по 40 цифр, естественно нужно зачеркнуть только 6 в каждом, следовательно генерим 72 числа, МОЁ условие ради чего и затеял "числа не должны повторяться больше двух раз" (вот тут и споткнулся ).
Подтолкните пожалуйста мыслю, чтото я в тупике, уже все утро просидел на одном месте
Аккуратнее с этой версией, браузер может зависнуть)))
<html>
<input type="button" onClick="Schet()" value="Считаем">
<div id="tableloto"></div>
<script>
function Schet()
{var headTable = '<table>';
var str='<table><tr>', j, m=0;
var k=new Array(), dub=new Array();
var tr='<tr>';
var tr2='</tr>';
	for (var i=0;i<72;i++)
	{
	j=Random(1,40);
	k[i]=j;
	m=0;
		for(var n=0; n<k.length; n++)//вот тут заковыка
		{
			if (j==k[n])
			{m=m+1;
				if (m==2){i--;
				}
			}
		}
	if (i==6||i==12||i==18||i==24||i==30||i==36||i==42||i==48||i==54||i==60||i==66||i==72)
	{str+='</tr><tr>'}
	str+='<td>  '+k[i]+'  </td>';
	}
document.getElementById('tableloto').innerHTML+=str+'</table>';
}

function Random(min, max)
{
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

</script>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2011, 10:58
Новичок на форуме
Отправить личное сообщение для hellpilot Посмотреть профиль Найти все сообщения от hellpilot
 
Регистрация: 14.05.2011
Сообщений: 3

Как обычно спросишь и сразу находишь ответ
function Schet()
{var headTable = '<table>';
var str='<table><tr>', j, m=0, n=0;
var k=new Array(), dub=new Array();
var tr='<tr>';
var tr2='</tr>';
	for (var i=0;i<72;i++)
	{
	j=Random(1,40);
	k[i]=j;
	m=0;
		for(n; n<k.length; n++)
		{
			if (j==k[n])
			{m=m+1;
				if (m==3){i--;j='';
				}
			}
		}
		if (i==6||i==12||i==18||i==24||i==30||i==36||i==42||i==48||i==54||i==60||i==66||i==72)
		{	if(m!=3){if (i==72){str+='</tr>';}
					str+='</tr><tr>';
			}
		}
		(j=='')?j='':str+='<td>  '+j+'  </td>';
	}
document.getElementById('tableloto').innerHTML+=str+'</table>';
}

Но теперь такой вопрос: нужно обеспечить уникальность в строках по 6, а иначе бред получается и опять я в тупике
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2011, 11:13
Аспирант
Отправить личное сообщение для ASerputko Посмотреть профиль Найти все сообщения от ASerputko
 
Регистрация: 20.10.2010
Сообщений: 73

Вот отличная библиотека для работы с массивами и объектами
http://documentcloud.github.com/underscore/#uniq
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2011, 11:20
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

ваш код говнокод.

для начала научитесь нормально форматировать код, чтобы его можно было читать без чувства от вращение.
прогоните код, через какой-нибудь js beautifier, и посмотрите как можно красиво оформлять код.

во-вторых, изучите базовые операторы JS
например % - оператор остатка от деления
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2011, 11:41
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от hellpilot
мозги размять и написать скрипт
Вот без комментариев...
Сообщение от hellpilot
if (i==6||i==12||i==18||i==24||i==30||i==36||i==42||i ==48||i==54||i==60||i==66||i==72)
Не смущает такая кошмарная конструкция??? Как насчет сделать так:
if( !(i%6) )
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2011, 16:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от hellpilot
"числа не должны повторяться больше двух раз"
Вариант ...
<script type="text/javascript">
var m = [],arr = [],a;
function s(c, d) {return c - d};
function random(c, d, f) {
    var g = [],
        e = 0;
    if (m.length < f) for (var b = 0; b <= d - c; b++) m[b] = b + c;
    for (b = 0; b < f; b++) e = Math.floor(Math.random() * m.length), g[b] = m[e], m.splice(e, 1);
    return g
};
for (var i = 0; i < 12; i++) a = random(1, 40, 6),
document.write(a.sort(s) + "<br />"),
arr = arr.concat(a); // для проверки
document.write(arr.sort(s) + "<br />");
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2011, 19:17
Новичок на форуме
Отправить личное сообщение для hellpilot Посмотреть профиль Найти все сообщения от hellpilot
 
Регистрация: 14.05.2011
Сообщений: 3

Сообщение от ASerputko Посмотреть сообщение
Вот отличная библиотека для работы с массивами и объектами
http://documentcloud.github.com/underscore/#uniq
Спасибо, хотелось самому состряпать

Сообщение от Gvozd Посмотреть сообщение
ваш код говнокод.
Все может быть, но слушать человека с таким аватаркой .
Про % я знаю, во вторник соревновались с коллегой, кто быстрее найдет все простые числа в любом заданном интервале
Здесь добавил такой ужас просто потому, что вопрос уже задал, а форматирование согласно задаче не сделал, пришлось на лету добавлять и редактировать, самый простой вариант и сделал.

Сообщение от рони Посмотреть сообщение
Вариант ...
<script type="text/javascript">
var m = [],arr = [],a;
function s(c, d) {return c - d};
function random(c, d, f) {
    var g = [],
        e = 0;
    if (m.length < f) for (var b = 0; b <= d - c; b++) m[b] = b + c;
    for (b = 0; b < f; b++) e = Math.floor(Math.random() * m.length), g[b] = m[e], m.splice(e, 1);
    return g
};
for (var i = 0; i < 12; i++) a = random(1, 40, 6),
document.write(a.sort(s) + "<br />"),
arr = arr.concat(a); // для проверки
document.write(arr.sort(s) + "<br />");
</script>
Спасибо, вопрос видимо решен Завтра протестирую седня на юбилей ездил, теперь не до этого
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в тексте javascript jQuery 3 31.05.2011 11:40
Поиск вхождения подстроки в массиве строк. FINoM Общие вопросы Javascript 8 27.02.2011 11:53
PagingToolbar и поиск DenQ ExtJS 5 02.11.2010 00:16
Поиск в двумерном массиве Vamp Общие вопросы Javascript 2 16.07.2009 13:05
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31