Como uma pequena piada no escritório, alguém queria um roteiro que escolhesse um nome aleatoriamente, e essa pessoa fará uma rodada de bebidas.
Vamos chamar as pessoas de John, Jeff, Emma, Steve e Julie.
Eu pensei que seria engraçado fazer um script que parecesse aleatório rapidamente, mas na verdade sempre dá a mesma pessoa que a saída (depende de você escolher).
A resposta mais votada vence depois de uma semana
E o vencedor é....
Paul R com (atualmente) 158 votos.
As respostas aqui são ótimas e, se alguém tiver outras idéias que ainda não foram publicadas, adicione-as, adoro ler.
Respostas:
C
É importante decidir quem está comprando o mais rápido possível, para não perder um tempo precioso de bebida - portanto, C é a escolha óbvia para obter o máximo desempenho:
Explicação:
fonte
PHP
Não foi possível deixar isso para trás, então aqui está outro:
fonte
Haskell
É muito transparente se sempre retornar o mesmo nome, então tente o seguinte
Sempre que você quiser que seja aleatório:
E para o seu infeliz alvo:
fonte
Bash - simplicidade máxima
Um exemplo muito simples - vamos evitar problemas ao fazer o livro. Não se esqueça de semear o gerador do relógio do sistema para obter um bom resultado!
Bônus:
fonte
$SECONDS
ftw! \ o /source
isso, em vez de apenas executá-lo? O shebang ainda acionará uma nova concha ou algo assim?source
lo, é exatamente o mesmo que se você tivesse digitado os comandos na linha de comando; #! / bin / bash é um comentário, por isso é ignorado. Isso vale para qualquer script.C #
fonte
rng.Next()
é chamado apenas uma vez, a matriz seria classificada por uma constante, resultando em nenhuma alteração (ou uma alteração que depende apenas do algoritmo de classificação).names = names.OrderBy(name => rng.Next());
=>
indica que esta é uma expressão lambda C # (encerramento).PowerShell
Isso sempre será exibido
John
.fonte
Q
fonte
-S 1234
opção ou fazer\S 1234
a partir do intérpretePerl
fonte
@
prefixo), no "contexto da lista", é interpretada como todos os seus elementos, mas no "contexto escalar", é um escalar igual ao número total de elementos na lista. Portanto, dentro da string, a variável list tem contexto de lista e é interpolada, e nós obtemosPerson X is buying
. Mas, como um índice da matriz, fica contexto escalar, e é interpretado como 1.my @index = ...
, ele imediatamente se pergunta "WTF ?!".my @letters = 'a' .. 'z';
my @squares = map $_**2, 1..20;
my @sorted = sort { lc $a cmp lc $b } @words;
etcECMAScript
Ele sempre pega Julie.
fonte
(a,b)=>(a=b[0],b)
). Eu esclareci minha resposta.C #
fonte
var random = new Random(5); var id = random.NextInt(5);
C #
Dica:
Responda:
fonte
AddRange
confusoConcat
ao adicionar nomes a umList<string>
. Ocorreu-me ter um Hashset com um IEqualityComparer sorrateiro, mas seria muito incomum. No meu crédito, não havia muitas (se houver) respostas baseadas em sementes quando eu postei isso.bash / coreutils
Isso é tirado quase literalmente de um script que escrevi para uma finalidade semelhante.
fonte
-r
especifica a classificação reversa (lexicográfica), para que Steve sempre seja escolhido. Pode ser visto como um erro de digitação inocente-R
de tipo aleatórioRubi
fonte
Rubi
fonte
Perl
três
srand
s o tornarão três vezes mais aleatório!explicação
editar:
depois de passar pelo código, um dos cinco caras decidiu corrigir o erro óbvio, produzindo o seguinte programa:
você pode dizer quem fez isso apenas olhando o código?
explicação:
fonte
$RANDOM
é um recurso real no bash, ksh e zsh (mas não no perl).Pitão
Todo mundo sabe que você não pode confiar na aleatoriedade em um espaço de amostra tão pequeno; para torná-lo verdadeiramente aleatório, abandonei o método desatualizado de escolher um nome em uma lista e, em vez disso, meu programa soletrará um nome completamente aleatório. Como a maioria dos nomes no escritório tinha quatro letras, nós aceitaremos isso.
fonte
C
Desculpe Jeff!
fonte
C ++ x11
fonte
Scala
Sei que meus usuários serão céticos, por isso incluí uma prova de que minha aleatoriedade é realmente justa!
Um exemplo de execução:
A menos que alguém tenha muita sorte, John sempre comprará as bebidas.
fonte
Javascript (com Underscore.js )
Como o javascript não possui um shuffle incorporado, usaremos Underscore.js
fonte
Javascript
Segunda tentativa, essa é um pouco mais complicada:
fonte
N
função arbitrária -ary em JavaScript conhece aarguments
variável.C ++
Para ser justo, devemos executar muitas, muitas tentativas e escolher quem é escolhido com mais frequência.
fonte
1<<31 == 0x80000000
não importa o que, pela própria definição de<<
, e no complemento de 32 bits 2, seja issoINT_MIN
. Você está pensando sobre o1<<32
que pode ou não== 0
? (Porque em x86,1<<32
geralmente avalia a 1 ...)T-SQL (2008+)
Explicação:
Melhoria sugerida:
fonte
Lua
fonte
math.random()
sem argumentos também retorna um número no intervalo[0,1)
. -1 por não entender isso.Idiomatic C ++ 11
Quando as bebidas estão envolvidas, é especialmente importante estar atualizado com os mais recentes padrões e estilos de codificação; este é um ótimo exemplo de um seletor de nomes C ++ 11 altamente eficiente e compatível com o idioma.
Ele é propagado a partir do relógio do sistema e gera a semente junto com o nome para verificação a cada vez.
Experimente ao vivo: http://ideone.com/KOet5H
fonte
Javascript
fonte
Pitão
fonte
random.seed()
deve ser2
(o padrão). Se você passarversion=1
, ohash()
da string será usado como uma semente em vez de toda a string, e como o Python aleatoriamente distribui os valores de hash das strings a partir de 3.2, você obterá um nome realmente aleatório.Perl
Emma era melhor não esquecer sua bolsa! Funciona sob
strict
ewarnings
.fonte
Javascript
fonte
parseInt(Math.random(0, 4))
e talvez adicionar comentários como -Math.random
retorna uma dupla, então convertê-lo para um inteiro primeiroMath.random
não se importa com nossos poucos parâmetros. Ele escolhe os números à sua maneira. o|0
está arredondando corretamente o resultado inesperado e, portanto, não é fonte de truques.|0
é muito óbvio para alguns (provavelmente todos nós), mas aposto que há muitos que não têm ideia do que faz. Esse era o grupo em que eu estava confiando.|0
, se você sabe o que faz, parece que está arredondando para baixo, e está arredondando para baixo, então não é um engano. (E se alguém não tem ideia do que|0
faz, então não há utilidade para códigos enganosos; você pode apenas dizer a eles o que quiser que eles acreditem.) Em vez disso, o comportamento inesperado na sua resposta é baseado no fato de queMath.random(0,4)
é funcionalmente idêntico aMath.random()
, porqueMath.random
não usa parâmetros.J
Pobre Julie ... Curiosidades: esse pode ter sido o J mais limpo que eu já escrevi ...
fonte