Então, na semana passada, eu postei um desafio para jogar Duck, Duck, Goose . Isso levou vários Minnesotanos a comentar sobre sua variação regional do 'pato cinza' .
Então, aqui estão as regras:
Usando esta lista de cores:
Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray
Escreva um programa para seguir estas regras:
- Selecione uma dessas cores, acrescente-a à palavra 'pato' e imprima o resultado em uma nova linha.
- Se a cor não for "Cinza", repita a etapa 1.
- Se a cor era "Cinza", encerre seu programa.
Regras que devem ser seguidas:
- O programa não deve imprimir consistentemente o mesmo número de linhas.
- Pode começar no 'pato cinzento', mas não deve ser consistente.
- Deve haver exatamente um pato em cada linha e nenhuma linha vazia é emitida.
- Deve haver pelo menos um espaço entre uma cor e um pato.
- O espaço em branco antes e depois da saída significativa não importa.
- O caso da saída não importa.
- As cores podem ser repetidas.
- A saída não precisa conter todas as cores todas as vezes, mas deve ser possível que seu código produza todas as cores.
- Nenhuma cor fora da matriz acima pode ser incluída.
- Cinza ou cinza são aceitáveis em sua resposta.
- As cores não devem estar consistentemente na mesma ordem.
- Apontar para o programa mais curto. O menor número de bytes vence.
Exemplo de saída:
Green duck
Orange duck
Yellow duck
Indigo duck
Yellow duck
Gray duck
Obrigado a Mike Hill por me alertar sobre essa variação.
Grey
uma vez (para que eu não precisasse escolher todas elas e verificar se selecioneiGrey
).Respostas:
05AB1E ,
4240 bytesEconomizou 2 bytes graças a Erik the Outgolfer
Experimente online!
fonte
ind
éëß
!LuaLaTeX,
220211 caracterescomando:
Não é o mais curto, mas o mais extravagante. Baseado na solução de @ skillmon
fonte
tikzducks
lá :):)
Código da máquina 6502 (C64), 124 bytes
Demonstração Online - Uso:
SYS49152
.Explicação (desmontagem comentada):
fonte
sys 49152
.Perl 5 , 79 bytes
Experimente online!
fonte
Táxi , 1995 bytes
Experimente online!
Eu acho que vale a pena notar que 47% desse código está apenas escolhendo um número inteiro aleatório de 1 a 8.
Além disso, o Taxi é tão detalhado que é muito mais curto codificar a
duck\n
cor após cada cor do que concatená-la mais tarde.Aqui está a versão sem golfe:
fonte
Java (OpenJDK 9) , 133 bytes
Experimente online!
Explicações
fonte
Ruby ,
93 91 90 89 87 8685 bytesObrigado a Dom Hastings por economizar 2 bytes, Kirill L. 1 byte e Asone Tuhid 1 byte!
Experimente online!
fonte
()
em torno do código e se você usar$.
, em vez des
armazenar o índice, você pode evitar a criaçãos
completamente (uma vez que$.
é pré-inicializado para o número da linha!) Você vai precisar se deslocarGrey
para o fim da lista e verifique se$.<7
, em vez Apesar. Espero que ajude!s=1
e$.
era perfeito!while s...
e o espaço era necessário. Não viu essa oportunidade depois de mudars
para$.
.Color+" duck"
salva 1 byteLinguagem de script da operação Flashpoint , 133 bytes
Ligue para:
Exemplo de saída:
No começo, de alguma maneira, interpretei mal o desafio, como se o objetivo fosse apenas produzir uma quantidade variável de linhas, não necessariamente terminando na linha "pato cinza". Após essa interpretação incorreta, produzimos um código um pouco mais interessante:
fonte
pdfTeX,
231220219209207 bytesLuaTeX,
216206204 bytesfonte
Braquilog , 68 bytes
Experimente online!
fonte
Ruby ,
8481 bytesAgradecimentos a Dom Hastings por -3 bytes.
Experimente online!
fonte
$_
, você pode apenas teruntil/y/
no final para -3!PHP, 89 bytes
Corra com
-nr
ou experimente online .fonte
> <> , 107 bytes
Experimente online!
fonte
Oitava ,
114112 bytesExperimente online!
Existem várias opções diferentes entre 112 e 118 bytes ... Algumas inicializam um índice no início e o decrementam por um número aleatório para cada loop e aguardam até que seja 0 . Outros usam em
printf
vez dedisp
evitar alguns suportes e assim por diante.fonte
cat
ehorzcat
Graças embora :).PHP ,
1331251111089792 bytesExperimente online!
-8 bytes graças a @Olivier Grégoire
-3 bytes graças a @manatwork
-11 bytes graças a @Dom Hastings
fonte
Grey
paraX
, pois não é usado. Você ganhará 6 bytes.for
condição de não precisar de parênteses:x!=$b=$a[array_rand($a)]
. BTW,?>
encerra uma declaração, não há necessidade;
na frente dela.x
e usando$b=$a..
como condição e usando emrand(0,7)
vez dearray_rand
. Você pode remover a nova linha entre?>
eGrey duck
também. Além disso, seu link TIO ainda possui tags completas. Você pode adicionar-d short_open_tag=on
sinalizadores para que isso funcione! :)Utilitários Bash + GNU, 72
Experimente online .
fonte
bash, 96 bytes
Graças a @DigitalTrauma.
fonte
>0
, no entanto, saí em${#a}
vez de8
.${#a}
vez de8
? Isso é código-golfe - não há necessidade de generalizar o seu código para ser modificado para um número diferente de cores. Tudo o que você precisa fazer é atender às especificações no menor número de bytes.JavaScript, 104 bytes
Experimente online
fonte
new Date
para o RNG aqui.AWK , 114 bytes
Experimente online!
Explicação
Observe que isso requer entrada "alguns". A entrada pode estar vazia. Para evitar a necessidade de entrada, acrescente a primeira linha com
BEGIN
fonte
PowerShell , 94 bytes
Experimente online!
Loops até que
$r
seja igual aGrey
. Dentro do loop,-split
a string literal nas novas linhas, escolhe umaRandom
delas e depois imprime a cor maisDuck
(tecnicamente, é deixada no pipeline e a limpeza do pipeline na próxima iteração do loop fazWrite-Output
com que isso aconteça). Observe que teoricamente é possívelGrey
nunca ser escolhido, e o loop continua infinitamente, mas isso quase nunca (no sentido de probabilidade) acontecerá.fonte
R , 101 bytes
Experimente online!
Fortemente inspirado pela resposta de @ user2390246 ao desafio relacionado. Precisamos de duas fontes de aleatoriedade: alterando a ordem das cores e amostrando as cores de pato não cinza. Ele
sample
coletará uma amostra aleatória de tamanho aleatório fornecida por uma distribuição exponencial com o parâmetro rate1
, truncado para um número inteiro. Infelizmente, o uso de uma distribuição exponencial significa que há uma probabilidade de que a amostra seja no mínimoexp(-8)
ou ao redor0.0003354
dela8
, então temos que fazer a amostrareplace=T
.fonte
\n
por uma nova linha real para 1colors()[c(26,254,498,552,640,652)]
no lugar doscan(..)
etc, devem descer para cerca de 83colors()
! Esses são alguns bons golfe, que eu acho que você deveria postar como sua própria resposta, já que essa é a maneira menos elegante de obter as cores.Python 2 ,
138133120117116 bytesExperimente online!
Muito melhor com algumas idéias de @EriktheOutgolfer. Obrigado!
-3 mais com agradecimentos a @ovs
-1 com agradecimentos a @Rod por um novo truque aprendido :-)
fonte
Retina ,
6968 bytesAgradecemos a Leo por economizar 1 byte.
Experimente online!
Explicação
.
suprime a saída implícita no final do programa (caso contrário, teríamos dois patos cinza)./y/^{
quebra o programa inteiro em um loop que continua enquanto a sequência de trabalho não contiver ay
. O restante dessa linha define a sequência de trabalho como uma lista separada por avanço de linha de todas as cores.Cumprimentamos uma linha aleatória da string de trabalho (e, portanto, uma cor aleatória). E imprimimos o resultado com avanço
duck
e avanço de linha.fonte
MATL ,
6864 bytesExperimente online!
Explicação
fonte
Python 3,
130,128,127,126, 125 bytes-1 por @ElPedro!
-1 por mim
-1 por @Bubbler!
Experimente online!
fonte
d!=c[0]
salvar um byte?print(d,'duck')
para salvar um byte. O delimitador padrão é um espaço.Java (JDK 10) , 287 bytes
Experimente online!
Meu primeiro codegolf! Obviamente não é competitivo, apenas feliz por ter aprendido Java o suficiente (atualmente no CS200) para poder participar.
fonte
Kotlin , 122 bytes
Experimente online!
fonte
MS-SQL, 158 bytes
Baseado amplamente na excelente resposta de Razvan , mas usando a
STRING_SPLIT
função específica do MS-SQL 2016 e posterior. Também usa um emGOTO
vez de umWHILE
loop.Formatado:
fonte
T-SQL ,
195185184 bytesfonte
BEGIN
.Python 2 , 98 bytes
Olhe ma não importa!
(Imprime espaços extras entre as cores e
duck
conforme permitido na pergunta)Experimente online!
Um gerador de números pseudo-aleatórios bastante pobre, semeado com o ID do objeto 0 (mas parece se encaixar na especificação) que gera repetidamente um número inteiro
x
, em [0,7], que é usado para dividir uma lista de caracteres desse índice em etapas de 8 para obter o nome da cor que é impressa junto comduck
a tupla, forçando um espaço intermediário. Quandox
torna-se zeroGrey
é impresso e a avaliação da próxima entrada para os erros do gerador de números aleatórios baseados em módulo tentando dividir por zero (v=1/x,v
tenta fazer uma nova tupla com o primeiro elemento1/x
=1/0
)Da mesma maneira é 100 no Python 3 com
fonte