Escreva um programa que produz uma saída como:
- Aparecem pelo menos três caracteres distintos.
- O número de ocorrências de cada caractere é um múltiplo de 3.
Por exemplo, A TEA AT TEE
é uma saída válido desde que cada um dos 4 caracteres distintos, A
, E
, T
e (space)
, ocorre 3 vezes.
Obviamente, um desafio sobre o número 3 precisa ter um terceiro requisito. Assim:
- O próprio programa também deve seguir os dois primeiros requisitos. (Isso significa que seu programa terá pelo menos 9 bytes.)
Você deve escrever um programa completo, não uma função. Certifique-se de mostrar a saída do seu programa na sua resposta.
Além disso, para manter as coisas interessantes, você é altamente incentivado:
- não usar comentários para atender ao requisito 3, se você puder ajudá-lo
- para produzir uma saída que não seja apenas uma sequência repetida 3 vezes
- para tornar a saída diferente do próprio programa (para idiomas que podem gerar automaticamente o conteúdo de seu próprio programa, você pode contribuir com este wiki da comunidade ).
Isso é código-golfe . O menor código em bytes vence.
code-golf
restricted-source
darrylyeo
fonte
fonte
123123123
vai trabalhar, como atualmente escrito.)abcabcabc
uma nova linha à direita?Respostas:
Brain-Flak , Flakcats , Brain-Flueue , Brain-Flak Classic , Miniflak e Fλak 18 bytes
Ótimo comprovado!
Experimente online!
Explicação
Flak cerebral, Flueue cerebral, Miniflak e Fλak
Isso imprime:
(Existe uma nova linha à direita)
Brain-Flak Classic
O Brain-Flak Classic é a versão original do Brain-Flak e apresenta algumas diferenças importantes em relação ao Brain-Flak moderno. No BFC
[...]
imprime seu conteúdo em vez de negá-lo.No final da execução, o conteúdo da pilha (
3 3 3
) é impresso.Isso imprime:
(Existe uma nova linha à direita)
Flakcats
O Flakcats é bem diferente dos outros 4 flocos e estou surpreso que isso funcione no Flakcats. Os três operadores aqui são quase os mesmos que o Brain-Flak usa.
A principal diferença neste programa em particular entre o Flakcats é o
(...)
operador que no Flakcats é equivalente ao([{}]...)
Brain-Flak. Isso, no entanto, não faz diferença para nós, porque apanha zeros e, portanto, opera da mesma maneira que o Brain-Flak.Aqui está o programa compilado no Brian-Flak:
Isso imprime:
(Existe uma nova linha à direita)
Prova de Optimalidade em Brain-Flak e Miniflak
Esta não é uma prova formal, mas sim uma prova informal que precisaria ser expandida para se tornar mais rigorosa
Devido às restrições de que os programas Brain-Flak devem ser de seqüência equilibrada e o tamanho do programa deve ser um múltiplo de 3, qualquer envio válido deve ter um múltiplo de 6 de comprimento. Isso significa que qualquer solução menor que 18 deve ter o comprimento 12.
Devido às saídas que seguem a nova linha, a altura final da pilha deve ser um múltiplo de três ou quebraremos as restrições na saída.
Qualquer envio válido de tamanho 12 deve ter 2 tipos de chaves (se menos, violaria as restrições ao número de caracteres distintos e mais significaria mais de 12 caracteres). Como o programa produz saída, ele deve ser pressionado.
Isso nos deixa selecionar nosso outro conjunto de chaves. As opções são:
<...>/<>
Isso falha porque precisamos gerar "valor" para criar qualquer número diferente de zero. Devemos desistir de a
()
para criar um número que torne impossível pressionar mais de duas vezes.[...]/[]
Isso falha pelo mesmo motivo que o último falhou. As chaves quadradas são muito ruins em gerar valor. A
[]
mônada pode criar valor, mas precisamos pressionar os números primeiro e, então, não temos parênteses suficientes para pressionar três vezes.{...}/{}
Este é promissor, poderíamos criar um loop e usá-lo
()
para enviar várias vezes, mas, infelizmente, não é possível.Para que o loop termine, deve haver um zero na pilha em algum momento e, para que possamos ter a saída correta, devemos ter algo diferente de zero na pilha no final do programa. Como não temos
[]
nem<>
o zero no final do loop deve ser um zero implícito da parte inferior da pilha. Isso significa que o loop não pode adicionar novos números à pilha, tornando-a inútil.Como nenhuma das opções de chaves pode criar um programa de comprimento 12, nenhuma pode existir.
Como o Miniflak é um subconjunto do Brain-Flak, qualquer programa Miniflak mais curto também seria um programa Brain-Flak mais curto e, portanto, não existe.
Prova de Optimalidade na Conduta Cerebral
Brain-Flueue é uma linguagem de piada baseada no Brain-Flak. Os dois são tão parecidos que seus intérpretes são idênticos em qualquer lugar, exceto em duas linhas. A diferença entre os dois é, como o nome sugere, o Brain-Flueue armazena seus dados em filas, enquanto o Brain-Flak armazena seus dados em pilhas.
Para começar, temos as mesmas restrições no tamanho do programa criadas pelo Brain-Flak, portanto, estamos procurando um programa de tamanho 12. Além disso, precisaremos de um
(...)
para criar qualquer saída e outro par. os pares<>
e[]
não funcionam no Brain-Flueue exatamente pela mesma razão que não funcionam no Brain-Flak.Agora sabemos que nosso programa deve consistir nos caracteres
((())){{{}}}
.Através dos mesmos métodos usados na prova anterior, podemos demonstrar que deve haver um loop no programa final.
Agora, aqui é onde as provas diferem, porque o Brain-Flueue opera em filas, em vez de pilhas, o programa pode sair de um loop com valores na fila.
Para sair do loop, precisaremos de um zero na fila (ou uma fila vazia, mas se a fila estiver vazia, teremos o mesmo problema que o Brain-Flak), isso significa que teremos que abrir nosso programa
({})
para criar o zero. Vamos precisar de um push dentro do loop para enviar o número necessário de itens para a fila. Também precisaremos enviar um número diferente de zero antes do loop, para que possamos inseri-lo; isso nos custará no mínimo absoluto(())
. Agora usamos mais parênteses do que usamos.Portanto, não existe um programa Brain-Flueue para executar a tarefa com 12 bytes e, além disso, nosso programa é ideal.
Solução ideal em Flakcats e Brain-Flak Classic
A solução a seguir é ideal no Flakcats e no Brain-Flak Classic.
Explicação
Soluções alternativas de Brain-Flak de 24 bytes
Experimente online!
Experimente online!
Experimente online!
fonte
Geléia , 9 bytes
Um programa completo que imprime 700227072 , com 888 em cubos.
TryItOnline!
Quão?
fonte
888^3
é700227072
? Isso é muito inteligente, talvez outras línguas possam usar esse truque.Poliglota de respostas puramente literais, 9 bytes
Esta é uma postagem do wiki da comunidade para coletar respostas que são apenas literais que o idioma em questão imprime automaticamente. Por ser um wiki da comunidade, fique à vontade para editá-lo para adicionar mais idiomas onde ele funciona.
Este programa trabalha em:
3
imprime os dados, o restante do programa é uma manipulação inútil de pilha)2\n2\n2\n1\n1\n1\n3\n3\n3\n
)Ignorando a nova linha final, isso é válido em mais alguns idiomas:
A maioria dos links vai para Experimente Online!
fonte
2\n2\n2\n1\n1\n1\n3\n3\n3\n
na verdade, o que é perfeitamente válido. Isso deve ser adicionado à postagem?echo '333111222';
(em PHP), mas funciona.C #,
114111118102 bytesSe não nos importamos em usar palavras adequadas: (102 bytes)
Se nos preocupamos com palavras adequadas: (120 bytes)
Minha submissão original - não faz distinção entre maiúsculas e minúsculas: (113 bytes)
Eu sei que o comentário não está realmente no espírito do CG, mas é tudo o que posso fazer em um período limitado de tempo, vou ver se consigo melhorá-lo ao longo do dia. Certamente devo obter pelo menos alguns pontos de bônus para que o aceno seja aventureiro.
Edit: Obrigado a roberto06 por pegar as cartas que faltam!
fonte
V
do seu comentário e adicionarvyt
, já queV
está presente apenas enquantov
está presente duas vezes (erro de digitação, eu acho),y
também está presente duas vezes et
está presente 5 vezes. Veja aqui . No entanto, trabalho incrível!JavaScript,
3633 bytesAlertas
333111222
. Isso funciona porque|
converte os dois operandos em números inteiros de 32 bits e qualquer valor que não se pareça com um número inteiro (por exemplo, a funçãoalert
) é convertido em0
.0|0
é0
, então o||
operador retorna seu operando certo ou333111222
Mais algumas versões interessantes:
Saídas
(trelalert)\"(trelalert)\"(trelalert)\"
.Uma solução usando
.repeat
teria o mesmo comprimento, graças ao compartilhamentoaert
:quais saídas
(trpp.all)\"(trpp.all)\"(trpp.all)\"
.Aproveitando as barras invertidas extras para se livrar
l
ep
quase funciona:Este sai
(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"
.fonte
CJam , 9 bytes
Saídas
012345678901234567890123456789
Experimente online!
Explicação
fonte
99,99,99,
, porque por que não?brainfuck , 12 bytes
Ninguém disse que a produção tinha que ser curta. Isso produzirá 3 cópias de todos os caracteres ascii, exceto os 2 primeiros.
Você pode provar que isso é o mais curto possível. Você precisa produzir, portanto, precisa de 3 '.' é preciso haver saídas diferentes, portanto, você precisa de 3 [+ -] agora temos até 6. 9 caracteres devem ser impressos, o que significa adicionar mais 6 '.' ou adicionando um loop, que adicionará outros 6 caracteres.
Experimente online!
fonte
Python 2,
36 e30 bytesComo uma nova linha à direita não é permitida, provavelmente é o mais curto possível:
Experimente online
Saídas
\"
três vezes, seguidas por três novas linhas.Os programas abaixo não contam a nova linha à direita, portanto não são válidos.
27 bytes :
Imprime 54 de cada caractere em
print
.Experimente online
Mesmo comprimento, saída mais curta:
Saídas
printprint*3*3printprint*3*3printprint*3*3
24 bytes:
fonte
print"""printprint*3*3"""*3
para uma saída muito mais curtos ;-)print 123;print 123;print 123;
pela solução ingênua?print~9;print~9;print~9;
Perl 6 , 15 bytes
Imprime seis caracteres distintos, três vezes cada:
Experimente online!
Como funciona
$_
,.$_
começa como o objeto de tipo do tipoAny
, que ésay
impresso como(Any)
.fonte
C, 66 bytes
Resultado
Versão antiga 72 bytes
fonte
JavaScript (ES6), 30 bytes
Saídas
[object Object][object Object][object Object]
.Funciona criando três objetos:
os dois primeiros são do formato
{ "alert" : alert }
usando a notação ES6{alert}
o terceiro é um objeto vazio simples
Em seguida, ele é usado
+
para concatená-los juntos, e todos os três têm uma expressão idêntica à de uma string[object Object]
.O líder
+
é inútil, presente apenas para preencher o número de+
caracteres, mas é inofensivo para a saída do programa.fonte
(ES6)
ao título.PKod , 9 bytes
Saídas: 111222333
Explicação:
o possui o código ASCII "111" em decimal. Assim, s adiciona 111 à variável e depois imprime o número. O primeiro "filho" faz 111 e imprime 111. Em seguida, faz 222 e imprime 222, finalmente faz 333 e imprime 333
fonte
Ruby , 12 bytes
saídas
Experimente online!
Para cumprir o segundo critério "encorajado", preciso de 15 caracteres:
produz
Experimente online também!
fonte
Microscript II, 9 bytes
Explicação: Cria um bloco de código, mas não o invoca. Quando a execução termina, o conteúdo do registro principal (ou seja, esse bloco de código) é impresso implicitamente.
fonte
{}
seria tecnicamente uma solução, mas não acho que atenda à nossa definição de "solução adequada". O programa"q"q
(que submeti ao desafio do quine), no entanto.Hexagonia , 9 bytes
Experimente online!
Imprima
120120120
.x
pode ser substituído porf-m
(102-109)Explicação
O
xx@@
é apenas um preenchedor para cumprir as regras. O fluxo principal é salvox
na memória (com valor ASCII 120) e, em seguida, imprime-o como um número 3 vezes.fonte
C, 111 bytes
(Observe como a contagem de bytes também é os três mesmos números. Uau. Você não pode fazer mais meta do que isso.)
Impressões:
fonte
PHP , 33 bytes
Optou por algo mais interessante do que o programa de 9 bytes sem tag PHP.
Saídas
<?;<?=;'"<?;<?=;'"<?;<?=;'"
Experimente online!
fonte
99 , 15 bytes
Ou seja, nove noves, três espaços e três alimentações de linha, a saída é -1110-1110-1110 .
Experimente online!
Quão?
Os dois espaços são tratados como um; esse terceiro espaço também pode ser um espaço à direita em qualquer linha.
fonte
Bash + coreutils,
159 bytesExperimente online!
Saída de amostra:
(Se você tentar fazer isso, ele imprimirá seu uid, gid, etc., três vezes.)
Se você quiser evitar repetir a mesma string três vezes (e também tiver a mesma saída para todos, diferente da minha primeira resposta), o melhor que encontrei para os utilitários bash + Unix tem 15 bytes:
Experimente esta segunda versão online!
Resultado:
(Nenhuma nova linha no programa, 12 novas linhas na saída.)
Explicação do programa dc nesta resposta:
fonte
LOLCODE ,
273240 (360286) bytesObserve a nova linha à direita e tente online . A segunda linha era mais ou menos arbitrária e pode ser substituída por um comando mais curto, mas eu apenas aprendi LOLCODE para esse quebra-cabeça. Como o número da versão é necessário na primeira linha, usei os números para adicionar loops de comprimento 1, 2 e 0 mod 3 para garantir que o número correto de caracteres seja impresso. A partir disso, eu simplesmente contei cada caractere (com esta ferramenta ). Se aparecer 0 mod 3 vezes, nenhuma ação será necessária. Se ele apareceu 1 mod 3 vezes, foi adicionado ao loop 1 e 2 para aparecer três vezes na saída. Se ele apareceu 2 mod 3 vezes, o personagem foi adicionado ao loop de 12. EDIT: substituindo o primeiro
VISIBLE
com uma tarefa (ainda inútil, mas necessária para ter 12 em vez de 11 novas linhas), consegui cortar 33 bytes.Saída (60 bytes):
Observe a nova linha à direita.
O legal dessa solução, em comparação com as outras respostas, é que o Output pode ser facilmente manipulado para gerar um texto com algum significado. Exemplo (286 bytes com nova linha à direita):
Experimente online. Saída (222 bytes com nova linha à direita):
Infelizmente, não sou tão bom com anagramas quanto pensei: ')
fonte
CONCHA
para brincar :) ( 9 bytes )
ou mais a sério ( 24 bytes )
Resultado:
fonte
PHP, 24 bytes
fonte
<?
junto com aecho
instrução imediata<?=
para gerar 123 3 vezes.<= ?>
caracteres não aparecem várias vezes três.Lote,
3621 bytesSaídas
Editar: salvou 15 bytes graças a @ P.Ktinos.
fonte
Japonês, 9 bytes
Imprime
undefinedundefinedundefined
. Teste online!Explicação
Esse código é transpilado para o seguinte JavaScript:
O.o
é uma função que gera algo sem uma nova linha à direita. Quando não é apresentado nenhum argumento, ele imprimeundefined
, o que pode ser considerado um bug, mas é útil aqui. Também retornaundefined
, para que todas as três chamadas sejam impressasundefined
.Tenho certeza que existem muitas outras maneiras de fazer isso ...
fonte
05AB1E , 9 bytes (acho que você poderia dizer que isso era um pedaço de PI)
-0 bytes graças a Emigna / ETHProductions, tornou a solução mais correta.
Versões alternativas:
[g-Q]
- Pode colocar qualquer letra aQ aqui, desde que todas correspondam (veja abaixo).Experimente online!
Explicado:
PI,PI,PI,SORT,JOIN,SORT,JOIN,SORT,JOIN.
Resultado:
...111111222333333333444555555555666777888999999999
A razão é de apenas 9 bytes é porque você não precisa dos tipos, apenas os coloquei para ajudar a ilustrar.
Resultado sem o
{
código:3.1415926535897933.1415926535897933.141592653589793
Representações alternativas:
Os seguintes comandos podem ser usados no lugar do PI:
fonte
žv
,žw
oužx
são válidos embora como cada um deles tem apenas 2 dígitos distintas.at least 3
, era apenas PI no começo quando eu escrevi. O que você quer dizer com classes de personagens invertidas?JJJ
por um???
.Cubix , 12 bytes
Uma resposta um pouco chata, na verdade. Saídas três
10
s seguidas por novas linhasExperimente online! Mapeia para o cubo
N
Empurra 10 para a pilhaOo
x3 Saídas 10 e a nova linha@
interrompe o programaA inicial
N@N@
não foi atingida.fonte
N@N@NOoOoOo@
e não inclui espaços.Pepe , 24 bytes
Experimente online!
O programa contém 6 r, 6 e 12 E.
Explicação:
Resultado:
fonte
V , 9 bytes
Experimente online!
Saídas
12i
24 vezes:Vim, 12 bytes
Emite o mesmo que a resposta V
fonte
empilhados , 24 bytes
Experimente online! Produz
54
cada um dep
u
et
.fonte
Abaixo 93 , 9 bytes
TIO
Impressões
0 0 0
(espaço à direita, seguido por 3 bytes nulos)Como a pilha do Befunge é preenchida com
0
s, podemos imprimir o caractere ASCII com esse valor e o próprio número inteiro. Como o Befunge imprime automaticamente um espaço após um número inteiro, ficamos com três caracteres distintos..
imprime0
(espaço à direita),,
imprime um byte nulo e@
termina o programafonte