Quando criança, meu amigo tinha uma bola mágica de 8 a qual poderíamos fazer perguntas e ver qual era o destino dessa pergunta.
Desafio
Seu desafio é escrever um programa (ou função) que, quando executado (ou chamado), gera (ou retorna) uma resposta aleatória das possíveis respostas abaixo. (Random sendo: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
As respostas possíveis da bola 8 mágica são (sem distinção entre maiúsculas e minúsculas):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
Entrada
Sem entrada.
Saída
Uma escolha aleatória de cima. Caso não importa.
Regras
As brechas padrão não são permitidas.
Isso é código-golfe , então o código mais curto em bytes para cada idioma vence!
code-golf
kolmogorov-complexity
random
DevelopingDeveloper
fonte
fonte
Signs point to yes
Respostas:
SOGL V0.12 , 166 bytes
Experimente aqui!
\ o / cada palavra estava no dicionário SOGLs!
fonte
> <> , 438 bytes
Experimente online!
Não é tão interessante, mas acho que é a primeira resposta em que a aleatoriedade não é uniforme. Coloquei todas as mensagens negativas como menos prováveis :)
Alguma explicação:
O ponteiro começa a ir direto para a primeira linha.
x
muda o ponteiro para uma direção cardinal aleatória. Se sobe ou desce, apenas encontra um diferentex
. Se der certo, ele ricocheteia|
e bate no mesmox
. Se for para a esquerda, ele se aproxima e empurra o texto dessa linha para a pilha. A maioria das linhas atinge a mesma faixa^
que altera a direção para cima. Isso faz um loopo
na primeira linha, que gera a pilha até ficar vazia. O caso especial é aYep
linha, que possui o loop horizontal|o<
.fonte
Python 2,
369368 bytesPython 3, 371 bytes
Eu estava usando anteriormente o
hash
builtin para index (hash(id)%20
), que retorna um valor aleatório por início do interpretador Python desde https://bugs.python.org/issue13703 . Embora não seja aleatório para a string vazia (sempre 0), é necessário usar outra coisa, aid
embutida!Em uma segunda olhada, eu poderia usar
id
diretamente, mas parece sempre produzir números pares. IIRC,id(object)
no CPython apenas retorna a localização da memória deobject
, então isso faz sentido. Talvez se eu usasse o Jython ou o IronPython, eu poderia pular a divisão por 7. De qualquer forma,hash(id)
vsid(0)//7
é igual no Python 3, mas pode usar o/
operador para truncar a divisão inteira no Python 2, salvando um byte.fonte
PowerShell , 354 bytes
Experimente online!
Ho-hum. Toma todos os resultados, concatenados com
0
s, depois-split
s on0
para criar uma matriz de seqüências de caracteres. Passa a matriz para aGet-Random
qual selecionará aleatoriamente uma delas. Isso é deixado no pipeline e a produção está implícita.fonte
Python 2 , 385 bytes
-1 byte graças a ovs.
Experimente online!
fonte
Applescript, 391
Eu amo como as listas do AppleScript têm um
some item
método:fonte
Utilitários Bash + GNU, 230
A saída binária do zopfli não está bem representada aqui; em vez disso, você pode reconstruir o script a partir dos dados codificados em base64:
Observe que, conforme permitido pela pergunta, os dados compactados são descompactados para todas as letras minúsculas. Isso torna a compactação zopfli um pouco mais eficiente e economiza 16 bytes.
fonte
tail +2
não funciona para mim, massed 1d $0
salva um byte de qualquer maneira. Além disso, como a saída para STDERR é permitida por padrão, não acho que você precise doexit
. Além disso, os últimos dez bytes do programa podem ser removidos.R , 360 bytes
Experimente online!
Não é exatamente a solução mais elegante. O R possui um recurso interessante, onde
stdin
será redirecionado para o arquivo de origem, para que você possa colocar (pequenos) conjuntos de dados no código-fonte, economizando bytes para a divisão de seqüências de caracteres ou pior, construindo o próprio vetor (todas essas aspas são adicionadas às pressas). Juntamente com os recursos internos para amostragem aleatória, isso fornece uma resposta curta.fonte
Carvão ,
203184 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 19 bytes em minúsculas. Explicação:
fonte
Retina ,
333331321 bytesExperimente online! Editar: salvei 1 byte ao compactar
doubt
e 1 byte ao colocar tudo em minúsculas para que eu pudesse comprimirreply
. Em seguida, salvei 10 bytes usando o jogador de golfe Retina Kolmogorov de Leo no texto em minúsculas (que coincidentemente é o número de bytes que ele salvou na minha resposta de 333 bytes).fonte
Coco , 380 bytes
Coconut porto de totallyhuman 's resposta
Experimente online!
fonte
T-SQL, 393 bytes
A função
STRING_SPLIT
está disponível apenas no SQL 2016 e posterior.O melhor que pude obter nas versões anteriores
VALUES('It is certain'),('It is decidedly so'),...
foi o de 464 caracteres.Formatado, apenas para ver a parte de trabalho:
NEWID()
gera um novo GUID pseudo-aleatório, portanto, é uma maneira de fazer uma classificação pseudo-aleatória.fonte
Geléia , 201 bytes
-2 bytes graças ao Sr. Xcoder. -1 byte graças a user202729.
Experimente online!
Porra , a compressão da SOGL é boa.
fonte
ỴX
ao final do código para que ele escolha aleatoriamente um deles) #05AB1E , 171 bytes
Experimente online!
Explicação
“ ... “
empurra uma sequência de todas as palavras necessárias.Algumas palavras são retiradas diretamente do dicionário 05ab1e.
Alguns são escritos em ASCII simples (como
haze
).Alguns são combinados dicionário e ascii (como
do
+n't
).Então o código de processamento é:
fonte
,
e'
adicionados.ye
,don
, eha
), e -2 de ordenar a lista por palavra e contagem usando compressão delta.Ruby,
362361 bytesExperimente online!
fonte
?.
vez de'.'
.?
literal de cadeia de caracteresPython 3, 386 bytes
fonte
Perl, 366
fonte
As I see it, yes
.split
.print
e salvar mais 1 byte. Basta colocar um sinal de adição unário antes da lista:print((0..9)[5])
se tornaráprint+(0..9)[5]
.05AB1E ,
208217 bytesExperimente online!
Solução bastante básica. As respostas possíveis são concatenadas com o caractere x (já que não está presente nas respostas) e depois compactadas (dentro de • ), 'x¡Ω divide em x e uma escolha aleatória.
Agradecemos a @Emigna por apontar que a compactação do alfabeto não gosta de 'ou, muito. Corrigido substituindo a sequência compactada com don ' e , sim .
fonte
,
e'
por espaços, portanto a saída para essas 2 linhas está incorreta.PHP ,
412385337384 bytesExperimente online!
Solução bastante direta. Divida a sequência por um delimitador (neste caso
1
) e escolha um elemento aleatório da matriz.fonte
php
para compilar seu código; 2, você pode substituir'|'
com1
e tudo|
com1
a -2 bytes; 3 deve considerar a alteração do seu link de Trying it Online para TIO.run, conforme preferir a comunidade.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Não tenho certeza se nas versões anteriores isso importa ou não. De qualquer maneira, editei a pergunta.<?=
e ecoar a explodir directamente utilizando[rand(0, 19)]
, em vez de primeiro somando-se a uma variável<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 bytes
-10 bytes graças a Shaggy
Experimente online!
fonte
OR
em vez deMath.floor()
salvar 7 bytes:Math.random()*20|0
.Befunge
1221870 bytes (o perímetro de todo o campo tem33x36 caracteres30 * 29) Obrigado a Jo King por me ajudar a remover os valores nulos à direita e por me pedir para alterar o randomizador.A linha superior coloca o caractere '<' e a posição x (28) onde deve ir na pilha. Então entramos no tipo de gerador de números aleatórios. Isso poderia ser melhorado, mas é isso que eu poderia entregar em pouco tempo ... O número "aleatório" é deslocado para que a linha "aleatória" real seja lida.
Depois que o número aleatório é gerado, colocamos o caractere '<' nessa linha e pressionamos as letras na pilha e na linha inferior as produzimos novamente.
Nota; se você usar o intérprete ao qual vinculei neste título, você deverá clicar novamente em "Mostrar" após cada execução, porque a adição do caractere '<' permanece após a execução.
fonte
>:#,_@
para evitar a impressão de bytes nulos. Ah, e adicione um link TIO.Java 8 ,
433,392,380, 379 bytesExperimente online!
fonte
String#split
. Além disso, você pode salvar 11 bytes adicionais usando em(int)(Math.random()*20)
vez denew java.util.Random().nextInt(20)
. E o ponto-e-vírgula não é contado na contagem de bytes das lambdas. Então, no total: 380 bytes .Don't
vez deDon' t
.Vermelho , 367 bytes
Experimente online!
Não parece realmente aleatório no TIO (embora funcione bem no Red Console), é por isso que adicionei um aleatório / semente ao cabeçalho.
fonte
Excel, 399 bytes
Como
CHOOSE(X.Y,<>)
é o mesmoCHOOSE(X,<>)
, não há necessidade deINT
Não há muito golfe que você pode fazer aqui ...
fonte
Aceto , 345 + 1 = 346 bytes (+1 para
-l
sinalizador)Experimente online!
Não é muito interessante, mas não consigo pensar em nada mais curto nessa linguagem, nenhuma string compactada ou qualquer coisa.
fonte
C - 426 bytes
Usa uma variável não inicializada mod 20 para indexar em uma matriz de cadeias contendo todas as saídas possíveis. Os compiladores reclamam que stdio.h não está incluído, mas funciona bem. Provavelmente porque acontece que a biblioteca padrão está vinculada de qualquer maneira. Sorte minha.
fonte
Go, 530 bytes
Observe que, no Go Playground, por causa de como a propagação funciona, sempre dá o mesmo resultado. Ao executar em um computador comum, tudo funciona como deveria.
Eu acho que é possível economizar um pouco mais, mas meu conhecimento em Go para por aí :)
Versão formatada e testável
fonte
Excel-VBA,
362341339 bytesOnde
A1:T1
contêm as diferentes opções. Lê a primeira linha inteira da planilha na matrizv
e indexa um ponto aleatório ao longo dos 19 primeiros valores.Surpreso ao descobrir que a indexação de uma matriz não requer valores inteiros
fonte
VBA, 358 bytes
Uma função de janela imediata anônima do VBE que não recebe nenhuma entrada e sai para STDOUT.
fonte
Java 8, 379 bytes
Experimente online
fonte