Lembre-se do jogo infantil, 'Duck, Duck, Goose' ? Não? Nem eu.
O desafio
- Imprima a palavra 'pato' em linhas individuais uma quantidade indeterminada de vezes.
- Imprima a palavra 'ganso'.
- Seu programa termina.
As regras
- Tente jogar o jogo no menor número de bytes.
- Deve haver pelo menos um pato.
- Deve haver exatamente um ganso, no final da lista.
- Deve haver exatamente um pássaro em cada linha. Sem linhas vazias.
- O caso das strings emitidas é irrelevante.
- O espaço em branco em uma linha é bom.
- Seu programa deve terminar.
- Seu programa não deve produzir consistentemente o mesmo número de patos.
Diverta-se!
Observe: Esta pergunta não é uma duplicata do código mais curto para produzir saída não determinística
Os motivos incluem:
- A associação a um jogo infantil
- Os requisitos de início e término definidos da sequência de resultados. Não há saída especificada no outro desafio.
- Respostas Para o outro, o desafio não duplicado está em um número de um dígito de bytes. A média para este é de cerca de 30, ou aproximadamente.
- Pela quantidade de sobreposição entre esse desafio e esse, qualquer pergunta sobre código-golfe, incluindo a tag 'aleatória', é uma duplicata. Devemos excluir todos eles?
- As respostas de código para esse desafio corresponderiam ao outro (de uma maneira ridiculamente inchada), mas as respostas para esse desafio não corresponderiam a este.
Respostas:
Gelatina , 13 bytes
Experimente online!
Explicação:
Versão mais legível: Experimente online!
Sempre retornará 1 ou 2 patos.
fonte
Linguagem de script da operação Flashpoint , 48 bytes
Sempre imprime um ou dois patos.
random 1
retorna um número (ponto flutuante) entre 0 e 1. Esse número é passado como argumento paraselect
junto com a matriz[s,""]
. O número aleatório é arredondado para o número inteiro mais próximo (0 ou 1) e o elemento da matriz nesse índice é selecionado na matriz.Ligue para:
Resultado:
Versão alternativa de 56 bytes:
fonte
World of Warcraft 81 bytes
Aqui está uma macro que você pode executar no World of Warcraft.
fonte
/run for x=1,random(1,9)do print("Duck")end print("Goose")
Minecraft <1.13,
7254 bytesDesculpe, eu tive que.
Instruções:
data/functions/minecraft/ddg.mcfunction
/function ddg
no console do jogoComo funciona:
Emite a palavra "pato" para todas as entidades do mundo e, em seguida, emite a palavra "ganso". Como as entidades estão constantemente desovando e desaparecendo, o número de "patos" não será consistente. Eu usei em
tellraw
vez do muito mais curto,say
porquesay
gera o nome da entidade, enquantotellraw
gera exatamente o que é dito.Captura de tela
Edit: Alterado {"text": "duck"} para apenas "duck" (e o mesmo com "ganso")
fonte
JavaScript,
4544423937 bytesTem o potencial de produzir um erro de estouro.
Teste-o
fonte
Oitava ,
3833 bytesEste não é o mais curto (são 36 bytes), mas é o meu favorito. A explicação está no fundo.
Experimente online!
Algumas variações mais curtas:
Isso funciona em princípio (33 bytes), mas os intérpretes online atingem o tempo limite:
A adição de alguns bytes para diminuir a saída torna-o em 35 ou 36 bytes:
Explicação:
Vou apenas explicar o último aleatório. Os outros são semelhantes, mas usam o número de dias desde 1º de janeiro de 0000 até hoje.
rand
retorna um número aleatório no intervalo (0, 1) . Assim,1/rand
retorna um número maior que 1 . Como um intervalo1:f
, em quef
um flutuador aleatório maior que 1 é idêntico a1:floor(f)
,1:1/rand
cria um intervalo 1 .. x , onde x> = 1 .Vou tentar explicar isso como se o Octave fosse uma linguagem baseada em pilha.
fonte
disp(['duck '+~pwd';'goose'])
? Não tenho certeza se isso é "indeterminado" o suficientePerl 5 , 20 bytes
Primeiro, um prático de 26 bytes:
Patos 1 a 9 vezes antes de serem ganso.
Experimente online!
Mas se você tiver muita memória e tempo, essa versão de 20 bytes (como sugerida por Chris ) também funcionará:
Isso também pressupõe que o problema do ano 2038 será resolvido para o Perl 5 , caso contrário, será inválido por 1 segundo em 20 anos.
fonte
1+$^T%9
para just$^T
, ele ainda funcionará e você salvará 4 bytes.Python 2 ,
3634 bytesExperimente Online!
A sugestão de Kevin Cruijssen nos leva a 34 bytes:
fonte
((id(id)%5)+1)
para-~(id(id)%5)
se livrar do parêntese. Dicas para jogar golfe em <todos os idiomas> e Dicas para jogar golfe em Python podem ser interessantes para ler. Aproveite sua estadia!id(id)
serid(0)
ou estou faltando alguma coisa?id(0)
alguns computadores diferentes sugere que é uma constante.id([])
. Isso deve inicializar uma lista distinta cada vez que o programa é executado, o que, em teoria, deve resultar consistentemente em diferentes endereços de memória.Z Shell (+ wget e Netpbm),
168160150148145135120 bytesNão é a solução mais curta, mas tive vontade de dar uma reviravolta para esse desafio (inspirado na solução da @ AlexG para esse outro problema ).
Este script gera uma imagem PPM contendo entre 1 a 8 fotos de patos e uma imagem de um ganso na parte inferior na saída padrão. Ele baixa as duas imagens de origem da Wikipedia, portanto, é necessário acesso à Internet para que funcione.
Saída de amostra convertida em JPEG por meio de pnmtojpeg :
fonte
R , 35 bytes
Experimente online!
rexp()
produz um número aleatório a partir de uma função de decaimento exponencial.+1
para garantir pelo menos um pato. Todas as linhas após a primeira incluem um espaço à esquerda (que é o separador padrãocat
), mas isso é permitido.fonte
exp(-1)
cerca de 36,8%.\n
um byte mais curto. Se você visitar o "Experimente online!" link, você pode ver que o efeito é o mesmo.Bash ,
393837 bytesExperimente online!
Imprime um número de patos igual ao número de dígitos em um número inteiro distribuído uniformemente em [0,32767] (portanto, mais frequentemente do que não, cinco patos (um bom número de patos)).
-1 byte cada, graças a @Chris e @sch apontando pares de aspas que não estavam aumentando seu peso.
fonte
\n
por\\n
.sed s/[0-9]/duck\\n/g<<<$RANDOM\goose
pode raspar um bytesed
não é totalmente portátil. Em algumas plataformas, você pode se safar com uma única barra invertida\n
. Em outros, você não receberá uma nova linha, não importa o que faça.Pure Bash (sem utilitários externos), 25
Com base na resposta da @ SophiaLechner , isso também imprime um bom número de patos .
A idéia de @ OlivierDulac de usar o PID do shell de script como armazenado no
$
parâmetro economiza 5 bytes.Experimente online .
fonte
RANDOM
para$
para barbear 5 bytes E também se poderia fazer uma seqüência muito longa de patos:yes duck|head -n $$;echo goose
$$
é aceitável - obrigado!yes duck | head -n $$;echo goose
) como uma alternativa (mais do que o seu, mas um recebe um lote de patos para 5 caracteres extras ^^)Ruby , 30 bytes
Experimente online!
Nota: realmente 31 bytes sem
\n
truques.fonte
Bash + Coreutils,
3627 bytesImprime muitos patos (entre 2 e
cat /proc/sys/kernel/pid_max
) e depois um ganso.Economizou nove bytes graças ao Digital Trauma e Olivier Dulac.
Experimente online! (mas lembre-se de que ele pode ser truncado ocasionalmente)
Mesmo comprimento, mas sem
echo
:Experimente online!
a
é o comando append insed
eq
sai. Ambos são executados apenas na linha$$
, o que corresponde ao PID.fonte
head -n $((1+(RANDOM % 5)))
$$
vez de$RANDOM
para a minha resposta . Eu acho que você poderia usar o mesmo para economizar 5 bytes. Ah, e tentesed
também:yes duck|sed 1$$q;echo goose
yes duck|sed $$q;echo goose
está tudo bem - eu não acho que seu script tenha um PID <1. #PowerShell ,
353028 bytesExperimente online! (versão modificada)
Gera uma matriz de
Get-Random
número de itens. Pode demorar um pouco. Isso adiciona um+1
para garantir que obtemos pelo menos umduck
. A versão modificada também inclui um-ma
sinalizador ximo5
para que você possa ver o programa funcionando conforme o esperado (a versão modificada imprimirá 1, 2, 3 ou 4duck
s antes dagoose
).A matriz e a
goose
cadeia solitária são deixadas no pipeline e o implícitoWrite-Output
nos fornece valores separados por nova linha gratuitamente.Você não sabe o quão difícil foi para mim não mudar a última linha para "pato cinza" ...
fonte
0..(random)|%{'duck'};'goose'
parece um 29 e também gerará algo em torno de [int] :: MaxValue (2,1 bilhões) de patos antes de um ganso. (E0..0
não imprimir um pato)Python 2 , 54 bytes
Experimente Online!
fonte
C # (compilador interativo do Visual C #) , 55 bytes
Experimente online!
fonte
Braquilog ,
2421 bytes-3 bytes graças a Erik, o Outgolfer
Experimente online!
Em comemoração ao idioma do mês , meu primeiro post no braquilog. O fluxo de controle nesse idioma é legal.
Como funciona:
fonte
Geometry Dash World 2.2 Editor - 4 objetos
Explicação:
O gatilho BG é o gatilho aleatório do 2.2 atual; portanto, alterna o ID do grupo 1 ou 2.
O primeiro "DUCK" tem um ID de grupo 1, o que faz com que 50% de chance de ser removido ou não (alternado).
Não há nenhum objeto com o ID do grupo 2 neste nível, portanto há 50% de chance de 2 "DUCK "s serem exibidos.
Como reproduzir isso:
O primeiro "DUCK" possui um ID de grupo 1.
Goose e 2nd duck não têm um ID de grupo
Dentro do gatilho aleatório.
fonte
05AB1E ,
1514 bytesExperimente online!
Irá imprimir 2, 5 ou 6 patos e depois ganso.
-1 byte graças a @Emigna usando 'para uma única palavra compactada (duck)
fonte
'М
pois duck é uma única palavra.['ÐœTΩ#].•zíΘ•»
'Ðœ₁Ω.D.•zíΘ•»
APL (Dyalog) , 22 bytes
1 byte salvo graças a @EriktheOutgolfer
Experimente online!
fonte
'Goose'⊣⎕←⍣(?9)⊢'Duck'
Retina , 17 bytes
Experimente online!
Experimente online!
Imprime 1 ou 2 patos, com igual probabilidade.
Explicação
Defina a sequência de trabalho como
duck
e imprima-a com um avanço de linha à direita (\
). Em seguida, isso é envolto em outro estágio de saída, mas este possui o sinalizador aleatório (?
) aplicado, portanto, ele imprime apenas com uma probabilidade de 50%.Substitua o
duck
porgoose
, que é impresso implicitamente no final do programa.Aqui está uma alternativa divertida que imprime 1 pato com 50% de probabilidade, 2 patos com 25%, 3 patos com 12,5% ...:
fonte
Vim (script) no Linux,
46.43 bytes (49.46 com:
no início da linha)Executado como
vim -S filename
ou colado na execuçãovim
com:
antes de cada linha.fonte
\d
novo[0-9]
. Além disso, parece que vim não requer o final de linha, de modo que este pode ser de 45 bytes :)> <> ,
3122 bytesExperimente online!
-9 bytes com base na revisão Não é uma árvore
fonte
l?!;
e sair com um erro.Befunge 98 ,
383025 bytesExperimente online!
Duck
cabe em uma única stringfonte
#
na segunda linhawhitespace within a line is fine
de modo que você pode cortar um par de aspas (mesmo que a saída parece estranho)T-SQL ,
70 4443 bytes (muitos patos)Obrigado @Zac Faragher!
Versão revisada,
54 4340 bytes (1 ou 2 patos)Obrigado @BradC!
Não consigo fazer isso funcionar corretamente no SQL Fiddle , mas funciona muito bem no LINQPad e no SSMS.
Não tenho certeza se essa é uma limitação conhecida do SQL Fiddle ou estou apenas fazendo algo errado
fonte
select
paraprint
e substituir a final'duck'select'goose'
com'duck(linebreak)goose'
(com uma quebra de linha literal, é claro)while rand()<.5print'duck'print'duck(linebreak)goose'
para 43.while
paraif
. Imprime (aleatoriamente) um ou dois patos, o que (acredito) ainda satisfaz o desafio.Powershell -
3130 bytesAviso : é provável que você acabe com muitos patos.
Random
inclui os valores de 0 aInt32.MaxValue
isso, dependendo de quão aleatório você é o número, isso pode ser muito grasnado.fonte
$
frente(Random)
. Experimente online!Fissão ,
2419 bytesExperimente online!
-5 bytes graças a Martin Ender
fonte
Braquilog , 21 bytes
Experimente online!
Ei, a língua do mês está inativa, vamos começar um pouco!
fonte
Befunge
5735 bytes (o perímetro de todo o campo é19x317x2 caracteres) Agradecemos a Karhell pela melhoria.A segunda linha coloca duck e uma nova linha na pilha (para trás) e a produz como uma string. Após essa chance de 75% de voltar ao início e imprimir o duck novamente, 25% (quando o ponto de interrogação decide diminuir) para imprimir o ganso e parar.
fonte
55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"<
iria cortar o seu código até 35 bytes