zsh: Gerando uma sequência de números pseudo-aleatórios sem repetição

Publicado por Sandro Marcell 24/02/2009

[ Hits: 10.653 ]

Homepage: http://sanmarcell.wordpress.com

Download rand_wr.sh




Simples Z shell script que atráves do uso de vetores, gera uma sequência de números pseudo-aleatórios sem repetição de valores.

  



Esconder código-fonte

#!/bin/zsh -f
#
# Simples (bem simples mesmo!) gerador de numeros pseudo-aleatorios
# sem repeticao de valores.
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 17/02/2009
#
# Obs.:
# - O script gera valores na faixa de 1~VALOR_MAXIMO;
# - Com uma simples alteracao, e possivel fazer com que este script 
# embaralhe os elementos de um vetor ;)
# - O formatador de saida 'printf' esta operando com valores na casa
# das centenas (%-4s), para utiliza-lo na casa dos milhares,va 
# adicionando 1 ao valor de formatacao;
# - Script passivel de melhorias!
zmodload -i zsh/mathfunc
seed=$$

# Vetor contendo a faixa de valores utilizados para geracao da sequencia
typeset -a array
array=({1..100})

# Quantidade de interacoes a realizar:
loop=10

for ((i = 0 ; i < loop ; i++))
do
   # Gera-se um valor com base na quantidade de elementos do vetor.
   # Esse valor sera o indice a ser utilizado para referenciar
   # elementos no vetor:
   index=$((1 + int(${(w)#array} * rand48(seed))))
   
   # Com o valor em maos, basta utiliza-lo como indice para buscar
   # o elemento referenciado por ele no vetor e imprimir esse elemento
   # na tela:
   # print -n "$array[$index] "
   printf "%-4s" $array[$index]
   
   # E para evitar que o valor impresso seja reutilizado, basta
   # remove-lo do vetor!
   array[$index]=()
done
print ""
# Fim

Scripts recomendados

Atualizando pacotes no Ubuntu

Gerenciamento do Usuario no SAMBA /

Rotina de Vacuum para banco de Dados Postgres

Adicionando Usuários

Script para manutenção de um servidor asterisk


  

Comentários
[1] Comentário enviado por SMarcell em 26/02/2009 - 09:34h

Implementei esse mesmo script, só que utilizando o gawk (GNU AWK), se quiser, pegue-o aqui:

http://www.slackbr.org/forum/viewtopic.php?f=45&p=78852#p78852

Falou!!! =)

[2] Comentário enviado por elgio em 28/02/2009 - 23:09h

Pra que tudo isto?

Quer 100 números randômicos?

for i in `seq 1 100`; do echo $RANDOM;done

O linux já tem uma variável de ambiente com um número randômico. Ela é gerada a partir de /dev/random o gerador de número randômicos do kernel.

[3] Comentário enviado por SMarcell em 01/03/2009 - 02:10h

"Quer 100 números randômicos?"

Sim! Mas sem que haja repetição de valores nesse intervalo.

Por isso:

Script que através do uso de vetores, gera a partir de um range uma sequência de números pseudo-aleatórios sem repetição de valores.

Entendeu?

Flw!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts