zsh: array shuffle function
Publicado por Sandro Marcell 13/06/2009 (última atualização em 31/03/2010)
[ Hits: 7.619 ]
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
}
Script para logar no diretorio em rede windows
Compilação automatica do GCC-4.7.1 no Debian 32 bits em Bash
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
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
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Necessário autenticar ao imprimir - Ubuntu X Windowns (1)
O que houve com slackware ??? (11)
O Free Download Manager não abre no Fedora 43 KDE Plasma (2)









