Emita esta sequência binária de comprimento 1160:
-++-+--++-++-+--+--++-+--+--++-+--++-++-+-++--++-+---+-++-+--+--++++--+--++-+--++-++----++-++-+-++--++-+-+---++-+--++-++-+--++-+--+---+-++-+--++-++-+--+--++-++-+--++-+--+++-+-+----+++-+--+--+++---++-++-+--+--+++--+-+-+--+-+++-++-+--+--++-+--++-++-+--+--++--+++---+++-+---++-+--++--+-+--+-+++-+--++-++-+--++-+--+--++-+--++--+-++-+-+--+-+-++-+--++-+--+--++-+-+-++-+-+-++---+-+--++++--+---++-+-++-+--++-+--+--++-+--++++--+---+-++++--+--++-++-+--++-+--+--++-+--++-++-+--++-+--+--++-++-+----+++-+--++--+++---+-++-+--+-++---+-++-++-+--+--++--++++-+--+--+--++++--+--+++---++-++-+--++--+-+--+--++-++-+--+--+-+++-++-+--+--++--+-++-++-+--+--+--++-++-+--+++---++-+--++-++---+++---++-++----+++--+-++-+--+--++-+--++-++-+-++--++--++----+++-++--++----++-+++--++---+++----+-+-++-++-++-+-+----+++--++-+--++-++-+--+--+--++-+--++-++-+--++--+-+--+-+-+-++++---+-+-++--+--+-+-+-++-+-+++--+-+--+--+-+++--+-+++---++-+--+--++-++--++---++-+-++--++-+---+-++-+--+-++--++-+--++-+--+-+++-+--++--+-+-+++--+-+--++-++-+--+--+-++---+-++-+-++--++-+--+++-+----++--+-++-+-++--++-+--++-+-++--++-+---+-++-+--+++----+-+-++--++-+--++-++-++-+--+--+--++++---++---+-+-++-+-+++--+-++--+-+--+-+-++---+++-++
A sequência
Essa sequência finita é fortemente estruturada de uma maneira que, espero, leve a métodos únicos de compactação. Surge do problema da discrepância de Erdős, que foi apresentado em um desafio anterior .
Tratando os termos como +1 e -1, esta é uma sequência de discrepância de tamanho máximo 2, o que significa que:
Para cada tamanho de etapa positivo
d
, se você usar todosd
os termos (começando com od
termo), a soma da sequência resultante permanecerá entre -2 e 2, inclusive.
Se você pensa que cada +
um significa um passo à direita e -
um passo à esquerda, isso significa que a caminhada de cada d
quinta instrução nunca se afasta mais de 2 passos da posição inicial.
Por exemplo, para d=3
, pegar cada terceiro termo fornece a sequência +-++--+--+-...
, cujas somas de execução são [1,0,1,2,1,0,1,0,-1,0,1,...]
, que nunca atingem -3 ou 3.
-++-+--++-++-+--+--++-+--+--++-+--+...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
+ - + + - - + - - + -
1 0 1 2 1 0 1 0 -1 0 -1 ...
Essa sequência foi encontrada em 2014 por meio de uma pesquisa no computador. Veja este artigo , onde a sequência é reproduzida no Apêndice B. A pesquisa prova que 1160 é o comprimento máximo de uma sequência de discrepância-2, embora exista mais de uma sequência desse comprimento. O problema da discrepância de Erdős, comprovado em 2015 , diz que qualquer sequência deve ter um comprimento finito para qualquer discrepância máxima c
no lugar de 2.
Exigência de tempo
Seu código deve terminar em 5 segundos . Isso é para limitar a força bruta.
Formato de saída
Você pode usar dois caracteres ou valores distintos fixos para +
e -
em qualquer formato de lista ou de seqüência de caracteres. O formato deve ser aquele em que os valores de 1160 bits possam ser lidos diretamente, não por exemplo codificados como um número por meio de sua representação binária ou como uma string por valores de caracteres. Para saída de string, uma nova linha à direita é permitida.
Entre os melhores
Respostas:
Geléia , 149 bytes
Existe algum padrão, por exemplo, apenas 81 das 256 seqüências binárias de 8 comprimentos estão presentes se alguém dividir a sequência em oito, mas eu (pelo menos ainda não notei) alguma maneira de utilizar alguma para reduzir a contagem de bytes dessa base direta Compressão 250 convertida em uma lista binária.
Experimente online! (o rodapé formata a lista binária em uma sequência para facilitar a comparação direta).
fonte
Python 2 ,
269259256247245243 bytesExperimente online!
fonte
JavaScript (ES6),
263253252 bytesTentei usar o menor número possível de dados de carga útil. Infelizmente - mas não surpreendentemente - isso requer bastante código de descompressão.
Demolir:
163153152 bytesAbaixo está uma versão formatada sem os dados. O código bruto está no snippet de demonstração.
Quão?
Nós controlamos as somas em execução um [i] de cada i- ésimo termo. Cada vez que essas somas atingem o limite inferior -2 , sabemos que o próximo termo deve ser um + . A mesma lógica se aplica ao limite superior. Isso é útil até i = 264 e não salva nenhum byte extra além disso.
Isso nos deixa 599 termos que não podem ser adivinhados. Nós os armazenamos como 99599 / 8⌉ = 75 bytes, codificados em uma string Base64 de 100 caracteres.
Demo
Mostrar snippet de código
fonte
Geléia ,
110109107 bytesIsso demora muito no TIO, mas termina em menos de 3 segundos no meu computador desktop.
Experimente online!
fonte
Gelatina ,
135133130129105104 bytesCom base nos elementos anteriores da sequência, o algoritmo adivinhar qual seria o próximo elemento. Isso funciona para todos, exceto 99 elementos, cujos índices são codificados permanentemente para que os elementos correspondentes possam ser trocados.
Experimente online!
fonte
MATL , 224 bytes
A saída é da forma
1 0 0 1 0 ...
, onde1
corresponde a'-'
e0
corresponde a'+'
.Experimente online!
Explicação
A sequência foi codificada em toda a execução. Todas as 720 corridas têm comprimentos 1, 2, 3 ou 4, sendo 3 ou 4 menos comuns. Portanto, cada 3 foi substituído por 2, 0, 1 (uma execução de 2, depois uma execução de 0 do outro símbolo, depois uma execução de 1 novamente) e da mesma forma cada 4 foi substituído por 2, 0, 2. Isso fornece uma matriz ternária de comprimento 862.
Essa matriz é convertida na codificação base-94 e é a sequência longa mostrada no código (
'$Te...kG'
). A codificação base 94 usa todos os 95 caracteres ASCII imprimíveis, exceto a aspas simples (que precisariam ser ignoradas).O código converte essa cadeia de caracteres da base 94 para a base 3 e usa o resultado para decodificar em comprimento de execução os símbolos
[1 0 1 0 ... 0]
(matriz de comprimento 862).fonte
Geléia , 95 bytes
Um ponto intermediário entre minhas duas abordagens anteriores.
O código tenta adivinhar 842 elementos da sequência e codifica os 318 restantes. 19 dos palpites estão incorretos e precisam ser revertidos por meio de uma lista de índices codificados.
Experimente online!
Como funciona
©
B
Ḥ
C
⁽¡ɠ
Ḋ
fonte
Carvão vegetal , 150 bytes
Experimente online!
Faz uso da compactação de cadeia incorporada do Charcoal. Usa
.
para-
e!
para+
.fonte
CJam, 153 bytes
Usa
1
para-
e0
para+
.Contém imprimíveis. Experimente online!
Isso é bem simples. Converte uma sequência longa da base 256 para a base 2.
fonte
Python 3 ,
236322bytesAgradecimentos ao Mego por salvar 4 bytes
Experimente online!
Usa a codificação CP-437. Agradecemos a Dennis por apontar um erro.
fonte
437
é um apelido paracp437
, para que você possa economizar 4 bytes se livrando doscp
bits nas duas vezes em que ocorrem.Python 2 ,
364250 bytesObrigado a Jonathan Allan por salvar 114 bytes.
Experimente online!
fonte
C # , 385 bytes
Dados
String
O resultado pretendido.Golfe
Ungolfed
Código completo
Lançamentos
385 bytes
- Solução inicial.Notas
fonte
05AB1E , 149 bytes
Super chato. Apenas um número compactado. Usa
1
para-
e0
para+
.Experimente online!
fonte
PHP, 276 bytes
Experimente online!
fonte
Ruby , 245 bytes
Saída 0 para + e 1 para -.
Experimente online!
fonte
Perl, 164 bytes
Hexdump:
A solução óbvia e chata: basta colocar todos os bits em uma string binária, 8 bits por byte. Usa 0 para - e 1 para +. Vou tentar jogar isso um pouco mais.
fonte
Retina , 333 bytes
Experimente online!
fonte