Talvez alguns de vocês já conheçam esse jogo: você tem uma coleção de jujubas de cores diferentes. Para cada cor, o feijão pode ter gostos diferentes, alguns são bons e outros ruins, e você não pode diferenciá-los. Você precisa escolher um feijão de uma determinada cor e rezar para escolher uma boa.
Portanto, escreva o programa mais curto que receba uma cor de sua escolha (de uma determinada lista) e retorne aleatoriamente o sabor selecionado. O sabor deve ser escolhido em uma lista interna. A lista possível de entradas e saídas é:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Regras:
- Você pode supor que a entrada sempre será uma cor das opções de entrada.
- Espaços de maiúsculas e minúsculas e / ou novas linhas não importam.
- A saída deve ser uniformemente aleatória: execuções sucessivas de programas devem produzir resultados diferentes, e as chances de obter um determinado sabor devem ser as mesmas para todos os gostos de uma lista.
Isso é código-golfe , então o programa mais curto pode ganhar!
code-golf
random
game
compression
Charlie
fonte
fonte
blueberry
nãoblue berry
.Respostas:
C #,
418313305271 bytesMuito tempo, mesmo para C #, mas não vejo como reduzi-lo.
Versão completa / formatada:
fonte
05AB1E , 126 bytes
Explicação:
Se alguém está se perguntando, aqui está a string descompactada:
Provavelmente posso comprimir mais usando alguns truques inteligentes e o dicionário.
Experimente online!
fonte
"eougwt"
para.•4Õ!Õ•
para -1.eougwt
e.•4Õ!Õ•
, em vez de"eougwt"
e.•4Õ!Õ•
. OpaJavaScript (ES6), 235 bytes
Eu preciso descobrir como comprimir seqüências de caracteres em JS!
Se isso não for "aleatório o suficiente" para o seu gosto, adicione 7 bytes substituindo
new Date
porMath.random()
.Tente
fonte
eluaoi
, pensei sozinha e pensei: "Oooh, olhe como estou sendo esperta", depois vi você me derrotar!new Date%a.length
não é "uniformemente aleatório".eluaoi
Math.random
.Geléia ,
101100 bytesExperimente online!
fonte
Japt ,
148146 bytesExperimente online!
Economizou 6 bytes graças a Shaggy e ETHproductions
fonte
R
vez de0
salvar um byte. Além disso, você pode comprimireluaoi
brincando com o pedido.qR
qual é o mesmo comprimento?®
também.eaiou
como string, poderá compactá-lo para três bytes (pode haver outras combinações de três bytes).Python 2 ,
301258 bytesExperimente online!
Salvei muitos bytes encurtando as teclas para usar o segundo índice da entrada, conforme sugerido por @TheLethalCoder, e dividindo em vírgulas em vez de usar uma lista direta.
fonte
eluaoi
como as chaves do dicionário e acesse-o com o índice 2 da string para economizar bytes.Geléia ,
9594 bytesUm link monádico que aceita uma lista de caracteres (minúsculos) e retorna uma lista de caracteres.
Experimente online! ou coma um pacote de 48 .
Quão?
Oitenta e nove dos noventa e quatro bytes são uma lista compactada de oito seqüências de caracteres. Dois deles são cadeias vazias e os outros seis são sabores separados por nova linha para uma das cores:
O restante do programa analisa a entrada para decidir qual lista usar, divide a lista escolhida por novas linhas e escolhe um elemento aleatório:
fonte
Java, 288 bytes
Teste você mesmo!
Pode ser jogado golfe usando um
char[]
.No entanto, a parte aleatória não pode ser "uniformemente distribuída" sem o uso explícito de
Random.nextInt(int)
. Mesmo(int)(Math.random()*a.length)
não é distribuído uniformemente.fonte
new java.util.Random().nextInt(a.length)
em vez de(int)(Math.random()*a.length)
..Math.random()
fornece um número que tem algumas especificidades (uma potência0
e um sinal de0
e 52 bits aleatórios). Então você realmente usa uma entropia de 52 sem qualquer verificação adicional. Se comprimento é3
, por exemplo,2^52
não é divisível por 3. Portanto, não é distribuído aleatoriamente. É por isso queRandom.nextInt(int)
(o arquivo java real, não o javadoc, na linha 394) possui um mecanismo de loop para garantir que o número esteja entre os números justos. A menos que eu diga "é bom o suficiente", apenasRandom.nextInt(n)
é justo.Math.random()
não pode ser usado quando2^53
não pode ser dividido igualmente pelo número com o qual você o multiplica? Portanto, se você deseja um número aleatório de 0 a 3,(int)(Math.random()*4)
é aceitável dividi-lo uniformemente (quatro vezes2251799813685248
), mas quando você o usa,*3
não é (o que é três vezes3002399751580330.666...
), porque convertê-lo para int pavimenta, fazendo algumas partes 1 menor que os outros. E como o comprimento é variável no seu caso, também não é distribuído uniformemente (com a possibilidade de ser o comprimento 3).Math.random()
, se alguém disser algo como "uniformemente" ou "razoavelmente" aleatoriamente, usejava.util.Random
. Foi também por isso que reclamei da resposta de Shaggy.> <> , 311 bytes
Experimente online ou assista no playground de peixes
Com malhas confortáveis da SK e Doof God Dennac!
Explicação: A primeira tarefa do peixe é descobrir qual é a palavra de entrada zig-zagging no lado esquerdo. O peixe pode ler apenas uma letra de cada vez e são necessários menos bytes para fazer isso de forma destrutiva. Primeiro, o peixe lê a primeira letra e pergunta se é
"y"
- se é, a palavra é "amarela", caso contrário, segue em frente. Em seguida, ele lê a segunda letra - se for"l"
, a palavra é "azul"; caso contrário, segue em frente; e assim por diante. Se ele lê cinco letras e eles não coincidem"y"
( Y ellow),"l"
(b L ue),"o"
(br S WN),"n"
(ora N GE) ou"n"
(Gree N ), respectivamente, em seguida, a cor deve ter sido "branco".Em seguida, vem o bit aleatório. Para as cores com duas saídas possíveis, isso é bastante direto - para amarelo, por exemplo, o peixe insere o seguinte código no
x
:Ele
x
define a direção aleatoriamente: se estiver para cima ou para a esquerda, o peixe gira em torno dos espelhos de volta para ox
, mas se estiver certo ou para baixo, ele lê "ovos podres" ou "pipoca amanteigada" (ao contrário).As divisões de quatro direções (para branco e verde) são mais confusas, mas seguem o mesmo princípio geral - a primeira é:
Observe que, se o peixe nada desde o primeiro
x
, ele passa por oito"
segundos, que ativam e desativam o modo de seqüência de caracteres quatro vezes, depois atingem um espelho e nadam de volta para baixo.Para chegar à última divisão de quatro vias, o peixe precisa nadar através de
e
er
de "lima" e "pêra", que são adicionadose = 14
à pilha (e revertida), portanto, primeiro precisamos excluí-la com~
. Um dos quatro ramos também envolve nadar através de uma cadeia de lixo eletrônico"> "
, com a qual excluímos~~
.Finalmente, depois de adicionar um dos sabores de feijão à pilha, o peixe atinge o fluxo de
v
s na coluna mais à esquerda, que o envia paraque imprime caracteres (usando um dos
o
s em "coco") até não sobrar nenhum.fonte
T-SQL,
432 423 375 367 336295 bytesFinalmente, uma operação baseada em conjunto !!
(As quebras de linha são para exibição e não são contadas no total.)
A entrada é via coluna c na tabela nomeada t , de acordo com nossas diretrizes .
Estou simplesmente juntando nossa tabela de entrada a uma tabela cheia de combinações válidas de cores / sabores e selecionando uma linha aleatória.
ORDER BY NEWID()
é uma maneira comum de randomizar a ordem de classificação no SQL . Dependendo de sua rigidez, você pode não considerá-lo perfeitamente uniforme e aleatório, mas deve ser suficientemente aleatório para a seleção de jujubas.EDIÇÃO 1: salvou 9 bytes usando apenas o terceiro caractere da cor, inspirado em outras respostas.
EDIÇÃO 2: salvou 48 bytes colocando o sinalizador e o sabor da cor em uma única coluna. Muitos caracteres salvos no INSERT.
EDIÇÃO 3: salvou 8 bytes substituindo
INSERT INTO b(o)
porINSERT b
EDIT 4: Economizou mais 31 bytes ingressando diretamente na tabela virtual
VALUES
e, portanto, eliminando oCREATE TABLE
eINSERT
.EDIÇÃO 5: economize 41 bytes atualizando para a
STRING_SPLIT
função somente SQL 2016 , o que me permite eliminar a execução SQL dinâmica e variável.fonte
PHP , 242 bytes
Experimente online!
fonte
Mathematica, 247 bytes
input forma
fonte
eluaoi
truque? Eu não sei mathematica, apenas uma ideia.Clojure, 231 bytes
Mesma idéia que as outras, posso economizar um pouco de espaço em comparação com outros idiomas. A compactação de strings parece uma causa perdida.
fonte