zsh: array shuffle function
Publicado por Sandro Marcell 13/06/2009 (última atualização em 31/03/2010)
[ Hits: 7.614 ]
Homepage: http://sanmarcell.wordpress.com
Download zsh_knuth_shuffle (versão 2)
Já havia postado aqui no VOL um script com o mesmo propósito, mas resolvi reescrevê-lo e
implementá-lo por meio de uma função.
Na prática esta função (que só roda no zsh!) recebe como parâmetro um vetor qualquer e
embaralha aleatoriamente seus elementos. Ela pode ser considerada uma "quase equivalente" à
função shuffle de linguagens como Perl, PHP, etc...
Versão 2 - Enviado por Sandro Marcell em 25/03/2010
Changelog: Implementação via algoritmo Knuth-shuffle.
function shuffle
{
# Funcao que embaralha os elementos de um vetor.
# Implementado e testado sob o zsh-4.3.2
# Sandro Marcell <sandro_marcell@yahoo.com.br>
# Boa Vista, Roraima - 10/05/2009
# Executavel somente no zsh!
[ ! $ZSH_VERSION ] && return 1
RANDOM=$$
# Definindo variaveis locais e seus tipos:
local i array shuffled size index
integer i size index
typeset -a array shuffled
array=($*) # Limitado a 32767 elementos, devido a $RANDOM
# Determinando a quantidade de elementos no vetor.
size=${(w)#array}
((size > 32767)) && {
print "Ops! vetor excessivamente grande."
return 1
}
while ((i++ < size))
do
# Gera-se um valor com base no tamanho do vetor.
# Esse valor sera utilizado como indice, para
# referenciar elementos no proprio vetor.
index=$((1 + (${(w)#array} * RANDOM / 32767)))
# Utilizando-se o indice gerado, armazena-se
# o elemento por ele referenciado em 'shuffled'.
shuffled+=($array[$index])
# Para evitar que elemento armazenado seja reutilizado
# basta remove-lo de 'array'.
array[$index]=()
done
[ -n "$shuffled[*]" ] && print "$shuffled[*]" || return 1
}
Criar Script para apagar determinados arquivos
S-phoenix desliga/reinicia, quantos estão logado no PC, tempo ligado
Identificando configuração de rede das máquinas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Servidor vs Computador Convencional
Como administrar uma rede Linux através da ferramenta Webmin
Como escanear portas de um servidor através da ferramenta Nmap e como alterar a porta do SSH.
Marcando e desmarcando pacotes para atualização, instalação e remoção no Debian e agregados
Alguém aqui mexe com arduino? (1)
Audio Failure on Acer Aspire AS4738 – Intel 5 Series HD Audio (Linux M... (0)









