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

Publicado por Sandro Marcell 24/02/2009

[ Hits: 10.781 ]

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

script para trabalhar com disquetes no linux

Renomear todos os arquivos com uma determinada caracteristica

buscar textos que contenham várias strings

Script para manutenção de um servidor asterisk

Script Admin PDC


  

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