14.05.2011, 10:00
|
Новичок на форуме
|
|
Регистрация: 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>
|
|
14.05.2011, 10:58
|
Новичок на форуме
|
|
Регистрация: 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, а иначе бред получается и опять я в тупике
|
|
14.05.2011, 11:20
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
ваш код говнокод.
для начала научитесь нормально форматировать код, чтобы его можно было читать без чувства от вращение.
прогоните код, через какой-нибудь js beautifier, и посмотрите как можно красиво оформлять код.
во-вторых, изучите базовые операторы JS
например % - оператор остатка от деления
|
|
14.05.2011, 11:41
|
Профессор
|
|
Регистрация: 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) )
|
|
14.05.2011, 16:54
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,129
|
|
Сообщение от 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>
|
|
14.05.2011, 19:17
|
Новичок на форуме
|
|
Регистрация: 14.05.2011
Сообщений: 3
|
|
Спасибо, хотелось самому состряпать
Сообщение от 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>
|
Спасибо, вопрос видимо решен Завтра протестирую седня на юбилей ездил, теперь не до этого
|
|
|
|