zsh: array shuffle function
Publicado por Sandro Marcell 13/06/2009 (última atualização em 31/03/2010)
[ Hits: 7.163 ]
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 }
Agendamento de compromissos com avisos baseados no horário
Atualizar o macOS no Mac - Opencore Legacy Patcher
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Instalando e usando o Dconf Editor, o "regedit" para Linux
Como instalar o navegador TOR no seu Linux
Instalando Zoom Client no Ubuntu 24.04 LTS
problemas com artefatos na instalação (30)
Manjaro Substituindo Ubuntu no Desktop (14)
Dificuldade em ler binário (18)
Encriptografa... as particoes com LUKS, o que poderia dar errado? (4)