Просмотр полной версии : random numbers или про массивы
проблема, нужно чтото типа жеребъевщика, задаеш число, он генерирует числа от 1 до этого числа
проблема в том чтобы эти чистла не повторялись
не знаю че делать, помогите
вот что получилось, пока сделал толлько чтбы в паре чисел не было повторов, кароче смотрите сами, исходник там же ъ
вот она (http://mich.dax.ru/shaxmat/shaxmat.swf)
или с массивами,думаю это дело нужно делать с ними)) (http://mich.dax.ru/shaxmat/shaxmat2.swf)
[subway]design
10.02.2002, 16:51
RANDOMIZE :D
(qBasic рулит!)
[subway]design
10.02.2002, 19:02
это шутка была...
а что бы не повторялись - делай цикл-проверку. У меня сейчас времени нет, пример не смогу дать.
a1 = random(b)+1;
c1 = random(b)+1;
if (a1 == c1) {
a1 = random(b);
}
если так, то можно сделать чтобы в паре не повторялиь, а мне нада чтобы все числа были разные, думаю больно большой код получится) если чисел 20 или 30они все равно повторяются)
//init part(add to the first frame!)
max = 26;//number
used = [];
//main part
number = random(max)+1;
for(var some in used){
if(used[some] == number) {
it_used = 1;
break;
}
}
if(it_used != 1){
trace(number);
used.push(number);
}
it_used = null;
должно работать, но не проверял....
Мой вариант:
max=30;
function order (a, b) {
var name1 = random(max)+1;
var name2 = random(max)+1;
if (name1 < name2) {
return -1;
} else if (name1 > name2) {
return 1;
} else {
return 0;
}
}
r=new Array();
for (n=0; n<max; n++){ r[n]=n+1 };
r.sort(order);
r.sort(order);
r.sort(order);
r.sort(order);
r.sort(order);
вобще говоря, мне часто приходилось сталкиваться с подобными задачами, поэтому я давно для себя написал универсальный класс.
Object.prototype.RND=function(obj) {
this._rnd=new Array();
this._obj=obj;
this.randomize=function() {
if(this._obj!=undefined&&this._obj.__proto__==Array.prototype) {
delete this._rnd;
this._rnd=new Array();
var len=this._obj.length;
this.length=len;
for(var i=0;i<len;i++) {
this._rnd[i]=this._obj[i];
}
}
}
this.random=function() {
var len=this._rnd.length;
this.length=len;
if(len!=0) {
var n=random(len);
var temp=this._rnd[len-1];
this._rnd[len-1]=this._rnd[n];
this._rnd[n]=temp;
return this._rnd.pop();
} else {
return null;
}
}
ASSetPropFlags(this,null,7);
this.randomize();
}
все что нужно вставить в первый кадр ролика.
значит как работать, все просто:
есть массив со значениями, которые необходимо случайно выбирать с условием уникальности выбора. притом что значения массива могут быть любого типа :)
ну например:
values=["string",2,3,6,7,"c",8];
далее создаем обьект:
myRandom=RND(values);
для случайного и уникального выбора значения:
myVar=myRandom.random();
когда выбор будет исчерпан, функция будет возвращать null
для восстановления набора значений:
myRandom.randomize();
узнать сколько осталось "нетронутых" значений:
myRandom.length
пример:
values=[1,2,3,4,5,6,7,8,9];
trace("-== 1-st set ==-");
myRandom=new RND(values);
while(myRandom.length) {
trace(myRandom.random());
}
trace("-== 2-st set ==-");
myRandom.randomize();
while(myRandom.length) {
trace(myRandom.random());
}
:)
звиняйте, в сорс вкралась ошибка :)
тут правильно
Object.prototype.RNDGenerator=function(obj) {
this._rnd=new Array();
this._obj=obj;
this.randomize=function() {
if(this._obj!=undefined&&this._obj.__proto__==Array.prototype) {
delete this._rnd;
this._rnd=new Array();
var len=this._obj.length;
this.length=len;
for(var i=0;i<len;i++) {
this._rnd[i]=this._obj[i];
}
}
}
this.random=function() {
var len=this._rnd.length;
if(len!=0) {
var n=random(len);
var temp=this._rnd[len-1];
this._rnd[len-1]=this._rnd[n];
this._rnd[n]=temp;
var out=this._rnd.pop();
this.length=this._rnd.length;
return out;
} else {
return null;
}
}
ASSetPropFlags(this,null,7);
this.randomize();
}
myRandom=new RNDGenerator([1,2,3,4,5,6,7,8,9]);
trace("-== 1-st set ==-");
while(myRandom.length) {
trace(myRandom.random());
}
myRandom.randomize();
trace("-== 2-nd set ==-");
while(myRandom.length) {
trace(myRandom.random());
Хочу тоже поучаствовать :) Класов правда не сподобил, но два кусочка положу :p
Просто случайное число с проверкой чтоб подряд не шли.
do {
new=random (n);
} while (new==old);
old=new;
А вот это интересный кусосочек - просто от сердца отрываю :D Создает псевдослучайный массив.
ar=[];
for (i=0; i<20; ++i) {
ar.splice(random (10),0,i);
}
trace (ar);
пасибо исх
я гдето исходничек нашел, там чтото похожее было)
счас засяду тварить, хороший кстати подход, ябы не додумался)
фишр, тоже пасиб
а как сделать вместо
trace("-== 1-st set ==-");
while(myRandom.length) {
trace(myRandom.random());
}
ъ
я\чтобы он мне в переменные значения записывал?Ж)
myVar=myRandom.random() например
Barmaglot
13.02.2002, 14:52
По моему проще не генерировать массив состоящий из уникальных случайных чисел, а просто перемешивать массив случайным образом.
N=30; //Длина массива
Z=10; //Определяет величину перемешивания
A = new Array(N);
for(i=0; i<N; i++) A[i]=i;
for(i=1; i<N*Z; i++) {
n1=random(N);
do { n2=random(N);} while (n2==n1);
t=A[n1];
A[n1]=A[n2];
A[n2]=t;
};
trace(A);
по моему исховский скрипт науболее удобен
ведь реч идет не только о числовых значениях, хоть это и менее удобо, зато уневерсальнее))
as=new Array("A","S","D","F","G","H","J","K","L","Q");
ar = [];
for (i=0; i<10; ++i) {
ar.splice(random(i+1), 0, as[i]);
}
trace (ar);
No coment! :cool:
Barmaglot
13.02.2002, 16:49
N=30; //Длина массива
Z=10; //Определяет величину перемешивания
A = new Array(N);
for(i=0; i<N; i++) A[i]="String"+i;
for(i=1; i<N*Z; i++) {
n1=random(N);
do { n2=random(N);} while (n2==n1);
t=A[n1];
A[n1]=A[n2];
A[n2]=t;
};
trace(A);
ЭХ, и я похвастаюсь,
Дивитесь :)
Array.prototype.random = function()
{
for (var random_i=this.length;random_i>0;random_i--)
{
this.push(this.splice(Math.floor(Math.random()*random_i),1)[0]);
}
return this;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.