Sua tarefa é imprimir o texto Good morning, Green orb!
, com todos os caracteres repetidos no lugar quantas vezes o byte mais frequente em sua fonte (o modo). Uma nova linha à direita é permitida e não precisa ser repetida.
Por exemplo, se sua fonte foi
print p
Como p
aparece duas vezes e todos os outros bytes aparecem uma vez que você precisa imprimir
GGoooodd mmoorrnniinngg,, GGrreeeenn oorrbb!!
As respostas serão pontuadas pelo produto de sua contagem de bytes e o número de vezes que a saída é repetida. Por exemplo, o código acima (se funcionou) teria 7 * 2 = 14 . O objetivo deve ser minimizar a pontuação de alguém.
Seu código deve conter pelo menos 1 byte.
Use este programa para verificar se seu código e saída correspondem
code-challenge
kolmogorov-complexity
hello-world
self-referential
Assistente de Trigo
fonte
fonte
Respostas:
Explosão cerebral ,
384 * 106366 * 100 = 36.600Experimente online!
Explicação
A primeira coisa que faço é empurrar a corda
para a pilha usando táticas bastante comuns de complexidade de Kolmogorov.
Em seguida, empurramos um contador para a pilha off para nos dizer quantas vezes duplicar cada caractere. No entanto, eu não seria capaz de determinar o que era esse contador até terminar de escrever o programa.
Em seguida, invertemos a string simultaneamente e duplicamos cada caractere no lugar, o número correto de vezes. Especificamente, o contador + 1.
Essas duas partes do programa têm um modo de 99 parênteses abertos. No entanto, como certamente precisaremos de pelo menos 1 parêntese. Aqui é onde notei que o último caractere que pressionamos
!
convenientemente tem o código de caractere 33, o que significa que podemos usá-lo para criar 99, o número exato que queremos usando apenas um parêntese adicional. É uma coincidência, mas funciona.fonte
Haskell , 37 bytes × 3 = 111
-20 graças a H.PWiz. -25 graças a nimi.
Experimente online!
Operadores da Haskell FTW.
Lembrete automático para nunca jogar golfe no celular. Eu continuo cometendo erros idiotas. Eu posso colocar pelo menos metade da culpa no celular. : P
fonte
<*
para salvar bytes (note que eu não tenho verificado sua validade)brainfuck , 235 x 77 = 18.095 pontos
Edit: -2 bytes graças a @Dennis
Experimente online!
Teste TIO
Espere, isso não é boliche de código? \ s
Com apenas 8 caracteres utilizáveis, o brainfuck é um dos piores idiomas para fazer essa pergunta. Eu tive que começar minimizando qual personagem apareceria inevitavelmente mais, normalmente um
+
ou outro-
. Depois de escrever a primeira iteração do código, achei-o terrivelmente desequilibrado em favor de+
s. Reorganizei partes do código, como a geração de números maiores, para usar mais-
. Finalmente, acabei comuma quantidade igual de dois caracteres, com 77um a menos-
que+
. Certamente é possível reduzir ainda mais isso, o que terei amanhã.Mas ei, pelo menos eu venci a resposta Brainflak
fonte
;#
idioma (͡ ° ͜ʖ ͡ °) #Gelatina , 13 bytes * 1 = 13
Experimente online!
fonte
Alice , 49 bytes * 2 = 98
144Experimente online!
Explicação
Essa é a estrutura usual para programas lineares que operam inteiramente no modo Ordinal. Desdobrando o fluxo de controle em zigue-zague, obtemos:
A idéia básica é evitar caracteres que se repitam mais de duas vezes com a ajuda de uma transliteração. A transliteração que vamos fazer é a seguinte:
A maneira como a transliteração funciona em Alice é que as strings
from
eto
são repetidas primeiro para o LCM de seus comprimentos, embora, neste caso, toda a questão seja o comprimento dafrom
string, então obtemos:Desta forma, temos quatro personagens diferentes para representar as
o
s, e três para cadan
,r
e o espaço. Podemos gerar afrom
string usando a expansão de intervalo da seguinte maneira:O único problema agora é que precisaríamos de quatro
"
parainput
ato
string e a . Para evitar isso, colocamos os dois em uma única string e dividimos em um=
usado como separador.O resto é apenas:
fonte
Python 2 , 62 × 3 = 186
Experimente online!
fonte
C (gcc) ,
74 × 6 = 444riscado 444 ainda é regular 44477 × 5 = 38581 × 4 = 324Experimente online!
fonte
C (gcc) , 68 × 3 = 204
Agradecemos ao @MDXF por economizar 9 pontos e abrir caminho para mais 6!
Experimente online!
Versão alternativa, ASCII imprimível, 69 × 3 = 207
Experimente online!
fonte
APL (Dyalog Unicode) , 46 bytes × 2 = 92
(Contém não imprimíveis)
Experimente online!
+ Muitos bytes, graças à página de código de Dyalog, e @ Adám, por apontar isso.
fonte
~⎕AV∊⍨⎕UCS 18
.Vim,
4241 pressionamentos de tecla × 3 = 123Explicação:
iGod morning, Green orb!<Esc>
Escreva a string
God morning, Green orb!
(umao
faltando).2|
Salte para o primeiro
o
.qsyl2pl@sq
Crie uma macro recursiva
s
. Como efeito colateral, triplique a correnteo
.X0
Remova um
o
e pule para o começo.@s
Execute a macro
s
, que repete cada caractere duas vezes.fonte
C, 78 × 4 = 312
Experimente online!
356332fonte
Japt , 24 bytes * 2 = 48
Contém um não imprimível. Teste online!
A maioria do programa é apenas uma sequência compactada, que descompacta para
e
m²
entãom
aps cada personagem repetindo-o²
duas vezes bem, isso foi um pouco exagerado . Espaço é o único caractere que aparece 3 vezes na cadeia compactada; Para salvar uma instância, substituí-la por uma nova linha e usar·¸
para dividir em novas linhas e ingressar imediatamente em espaços. Embora mais 2 bytes, reduz substancialmente a pontuação (de 66 para 48).Agora, se houvesse uma maneira curta de fazê-lo usando nenhum caractere duas vezes ...
fonte
*salute*
E agora que olho para a sua resposta, vejo que tem ², enquanto o link tinha ³ :) #SNOBOL4 (CSNOBOL4) , 97 bytes * 10 = 970
Experimente online!
Sim ........ O SNOBOL exige que os operadores sejam separados por espaços em branco, e há requisitos de espaços em branco bastante estranhos. Existem 9
'\t'
e 10' '
no código, portanto, quaisquer melhorias exigirão uma mudança bastante significativa na abordagem.fonte
R ,
65 bytes * 5 = 32559 bytes * 5 = 29562 bytes * 4 = 248Experimente online!
Existem 4
(or,')
caracteres.fonte
strrep
antes, isso deve ser útil.Ruby , 52 bytes × 3 = 156
Experimente online!
fonte
Perl 5 , 59 × 2 = 118 pontos
Experimente online!
Perl 5 , 51 × 3 = 153
156pontosExperimente online!
Perl 5 , 43 × 4 = 172 pontos
Experimente online!
Economizou 2 bytes em cada solução graças ao @Xcali (algumas alterações atrás). Para todas as otimizações, observe as edições.
fonte
-M5.010
, o que também conta #V , 35 bytes * 2 = 70
Experimente online!
Hexdump:
fonte
SOGL V0.12 , 16 bytes * 1 = 16
Experimente aqui!
Compressão!
No entanto, se
Green
não estiver em maiúsculas, pode ser 3 bytes mais curto: /fonte
Python 2 , 62 * 4 = 248
Graças a @ovs e @ Giuseppe!
Experimente online!
Python 2 , 51 * 6 = 306
Experimente online!
Python 2 , 70 * 5 = 350
Experimente online!
Graças a @Mr. Xcoder para salvar um byte de ambas as versões!
fonte
6
efor
.\x6f
s, o que ainda é bom para 244Ohm v2 , 20 bytes * 1 = 20
Experimente online!
É preciso amar a compressão, embora, infelizmente, não seja tão bom quanto o SOGL.
fonte
Limpo , 77 bytes * 3 = 231
Experimente online!
fonte
CJam , 32 bytes × 2 = 64
Experimente online!
Empurra uma string e, em seguida, XORs o primeiro 20 caracteres com
[0, 1, …, 19]
, e duplica cada caractere.fonte
05AB1E , Pontuação: 22 (22 bytes * 1)
Experimente online.
Explicação:
NOTA 1: A pilha de quebra automática na lista interna
)
é usada em vez do par incorporado‚
, porque ela‚
já faz parte da palavra do dicionáriogood
.NOTA 2: As duas vírgulas no código
‚
e,
podem ter a mesma aparência, mas são caracteres unicode diferentes . O primeiro normalmente é usado para o par incorporado e o segundo para a impressão incorporada em STDOUT com nova linha à direita . Nesse caso, eles são usados para a palavra do dicionáriogood
e a vírgula esperada na saída.Veja esta dica 05AB1E (seção Como usar o dicionário? ) Para entender por que
…‚¿•´,
é"good morning,"
e„ˆ¨èã
é"green orbit"
.fonte
PowerShell , 46 bytes * 4 = 184 pontos
Experimente online!
fonte
$0
PowerShell ,
49 * 558 bytes * 4 = 232 pts-13 pts graças apenas ao ASCII
Experimente online!
Usa a formatação para passar de 5
o
sa 4 para eliminar alguns númerosfonte
Gelatina , 31 bytes × 2 = 62 pontos
Experimente online!
Explicação
fonte
JavaScript (ES6), 61 bytes * 3 = 183
Mostrar snippet de código
JavaScript (ES6), 51 bytes * 4 = 204
Resposta sugerida por @ETHproductions .
Mostrar snippet de código
JavaScript (ES6), 73 bytes * 4 = 292
Mostrar snippet de código
JavaScript (ES6), 58 bytes * 6 = 348
Mostrar snippet de código
fonte
_=>_
para'$&'
'$&$&$&$&$&$&'
a substituição, o que, então, permite remover duas instâncias e passar a ter vários caracteres empatados em 4, reduzindo drasticamente a pontuação ...Retina , 36 × 4 = 144
Experimente online! Existem três novas linhas e quatro
o
s, então não há mais nada a ser feito.fonte
Ruby, 55x4 = 220 pontos
Estou bastante irritado que o uso de each_char faça a contagem de 5 de r.
fonte
Pushy , 36 * 2 = 72
Experimente online!
O princípio principal desta resposta é que cada caractere
n
é armazenadon + index - 29
para evitar a repetição na string original. Esse mapeamento criou a string nos backticks. O restante do programa simplesmente decodifica isso e imprime cada caractere duas vezes:Bytes usados duas vezes:
`'W
Changelog
fonte