[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] número randomico sem repetição
From: |
Franklin Anderson de Oliveira Souza |
Subject: |
Re: [shell-script] número randomico sem repetição |
Date: |
Thu, 8 Jun 2006 19:23:26 -0400 |
Fiz o meu tambem ....
=================================
#!/bin/bash
#Gera 15 numeros nao repetidos para intervalo 0-25
# Para visualizar melhor faca ./programa | sort -g | cat -n
number=1
vetor[1]=1
while ((1))
do
var=$(echo $RANDOM | cut -c 2-3)
if [ $var -le 25 ]
then
count=${#vetor[*]}
for k in $(seq $count)
do
if [ $var -eq ${vetor[$k]} ]
then
foo=false
break
else
foo=true
continue
fi
done
if [ $foo = 'true' ]
then
number=$((count+1))
vetor[$number]=$var
fi
fi
if [ $number -eq 15 ]
then
break
fi
done
for j in $(seq $number)
do
echo ${vetor[$j]}
done
=================================
Em 07/06/06, Alain M. <address@hidden> escreveu:
>
> Pelo que eu me lembro da maemática esta solução é correta...
> a outra realmente pode ter distorções
>
> Grato,
> Alain
>
> Fernando Lemes da Silva escreveu:
>
> > Certa vez vi algo desse tipo aqui na lista e achei muito bonito.. e
> > aproveitei para postar uma solução mais economica. (Se não me engano o
> que eu
> > tinha visto era mais bonito ainda)
> >
> > seq 1 100 | while read N; do echo "${RANDOM} $N"; done | sort | head
> -n 30
> > | cut -d' ' -f 2
> >
> > Isto irá gerar a sequencia de 1 a 100 e irá adicionar um numero
> aleatório
> > na frente. Na sequencia ele ordena pelo numero aleatório, deixando a
> > sequencia de 1 a 100 aleatória. Depois basta pegar os 30 primeiros e
> tirar o
> > número aleatório.
> >
> > A propósito.. pegar os dois primeiros digitos do $RANDOM não é uma
> boa
> > ideia pois isto estaria viciando a randomicidade.
> >
> > []'s
> >
>
>
--
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GS d- s+:+ a- C++ UL++++ P! L++++ E--- W++ N++ o-- K--- w---
O-- M+ V- PS+ PE++ Y+ PGP--- t--- 5- X++ R--- tv+++ b++ DI- D++
G+++ e+++ h+ r+ y+++
------END GEEK CODE BLOCK------
[As partes desta mensagem que não continham texto foram removidas]