A lista de policiais pode ser encontrada aqui: The Mystery String Printer (Cops)
Seu desafio
- Escolha um envio no tópico da polícia e imprima a sequência a partir de uma resposta nesse tópico.
- O envio que você escolher não deve ser seguro (deve ser mais recente que sete dias).
Seu programa, função ou script REPL precisa seguir as mesmas regras que o thread da polícia. Apenas para recapitular:
- Seu programa deve ter ≤128 caracteres (se o envio de um policial estiver em um intervalo menor de tamanhos de programa, seu programa também deverá estar nesse intervalo de comprimento. Por exemplo, se o programa de um policial tiver ≤32 bytes, seu programa deverá ter ≤32 bytes )
- O programa deve produzir a mesma saída toda vez que é executado.
- Sem funções criptográficas.
- O programa não deve receber entrada.
- Sem brechas padrão.
- Todos os novos envios devem usar o mesmo idioma. Os envios de antes desta regra ser feita são bons, mesmo que não sejam.
Pontuação
A pontuação funciona de maneira semelhante para ladrões, mas é um pouco diferente:
- Quebrar qualquer programa de ≤8 bytes dá 1 ponto.
- Quebrar um programa de ≤16 bytes dá 2 pontos. ≤ 32 bytes fornece 4 pontos, e assim por diante.
- Cada envio adicional, independentemente do tamanho, ganha +5 pontos
- O envio de cada policial só pode ser quebrado uma vez - apenas a primeira pessoa a quebrar cada envio recebe os pontos.
Submissões
Cada resposta deve incluir
- Um link para o envio do policial.
- Seu programa e linguagem de programação.
- Também tenha o comprimento do programa do policial (como potência 2) como o último número no seu cabeçalho.
Além disso, comente o envio do policial com um link para sua resposta.
Aqui está um snippet de pilha para gerar tabelas de classificação. Deixe um comentário se houver algum problema com o snippet. Se você gostaria de ver todos os envios abertos de policiais, consulte o trecho no desafio dos policiais.
Este concurso está encerrado.
Vencedor geral: kennytm
Mais envios: Sp3000
(Observe que a quantidade de envios não se traduz exatamente nos pontos, pois a duração do programa com falha é contada no cálculo da pontuação).
fonte
Respostas:
Pyth, Dennis, ≤ 8
Porra, isso foi divertido - a parte mais difícil foi descobrir como fazê-lo curto o suficiente em Pyth.
Análise
O
1234
no início sugere que provavelmente estamos lidando com uma lista de números impressos sem separador. Vamos tentar dividir os números de uma maneira que faça sentido:Há algumas dicas de que estamos no caminho certo:
No entanto, existem algumas peculiaridades. O número no índice 23 é 24 e é o único caso em que o número no índice é maior que o próprio índice. No entanto, a pista maior é que alguns números são claramente menores que seus vizinhos, principalmente os 7 no índice 15, os 8 no índice 22 e os 9 no índice 30.
Observando que isso forma um padrão 7-8-9, também podemos ver que o último número é um 10 no índice 42. Dada a recente pergunta de @Dennis sobre grupos abelianos , uma rápida verificação no OEIS revela que
15, 22, 30, 42
é uma subsequência da partição números . Pyth tem um builtin para partições, o que nos dá dois dos oito caracteres:./
Mas observe que o último número é 10, o que é suspeito, porque 10 é uma variável pré-inicializada em Pyth, como
T
../T
fornece uma lista completa das 42 partições do número 10, que parecem úteis.Agora a impressão é feita sem um separador, portanto, isso sugere um uso de
p
. Talvez passemos por cada partição, façamos algo e depois imprimimos comp
? Isso nos dá o seguinte modelo:em que
V
é um loop que circula ao longo de um iteráveis, armazenando cada elemento na variávelN
.Uma rápida olhada na segunda última partição
(5, 5)
deve deixar óbvio que queremos usar um produto. A maneira ingênua de reduzir uma lista por multiplicação éOnde
d
está a lista em questão. No entanto, isso é muito longo.Infelizmente, foi aqui que tive que retirar um forçador bruto. Não acompanho Pyth há um tempo, então não conhecia muitos dos recursos mais recentes. Restavam apenas dois caracteres, que pareciam totalmente factíveis.
O forçador bruto então retornou:
onde
*F
é dobrado por*
(multiplicação). Não é à toa que não o encontrei na minha pesquisa - estava pesquisando a palavra-chave "reduzir" em vez de "dobrar"!fonte
jk*M./T
<= 7
eu estaria condenado. Com certeza já faz um tempo desde que eu verifiquei o idioma.Mathematica, alfafa, ≤ 32
Detesto dizer isso, mas acabei de reconhecer o número no local.
fonte
31!10!27079205916672
> <>, VTCAKAVSMoACE, ≤ 64
Ironicamente, não só isso é muito mais baixo o limite de alcance, como também é portátil e funciona com o intérprete on - line .
Análise
Vamos começar com a string de destino:
> <> envia caracteres para a pilha com
'
ou"
no modo de sequência, mas com 63 caracteres para imprimir e apenas 64 bytes para trabalhar, a presença de letras maiúsculas (instruções inválidas em> <>, para o truque de loop padrão) faz a impressão direta impossível. Portanto, devemos estar fazendo algo com os pontos de código.Convertendo em pontos de código dá (eu estou usando Python aqui):
Observe que os três últimos números são iguais aos três primeiros. Isso sugere um possível loop de módulo acontecendo.
Vamos dar uma olhada em quantos elementos diferentes temos:
Temos 63 elementos
L
, os três primeiros coincidentes com os três últimos. Isso significa que, além dessa colisão, todos os outros elementos são únicos. Agora, isso sugere algo como tomar poderes módulo um número primo. De fato,60 + 1 = 61
é primo, o que é um bom sinal.Vamos tentar encontrar o menor elemento
e use isso para reduzir todos os elementos para que o elemento min seja 1:
Observe como o elemento depois
1
é51
. Se houver algum tipo de coisa de multiplicação / potência, esse é um bom palpite para o nosso multiplicador.Vamos tentar:
Bingo! Agora podemos voltar atrás, fornecendo o seguinte código:
que foi traduzido para> <>
fonte
Pyth, Maltysen, ≤4
A força bruta demorou tanto que eu fiz isso mais rápido manualmente.
Análise
C
(converter string para base 256 int) é a maneira mais fácil de gerar um número grande em Pyth, portanto é provavelmente o primeiro caractere. Se convertermos da base 256, obtemos:Hmm ... não muito iluminador.
Agora
G
é a string do alfabeto"abc...z"
, que parece ser uma fonte para uma string longa ser inseridaC
. Analisando os documentos, localizo:Se estamos lidando com compressão aqui, não seria surpreendente obter todos os tipos de caracteres ASCII estendidos. Tentando,
C.ZG
então, deu a resposta.fonte
Fourier, Decaimento beta, ≤ 32
Ou, alternativamente, no CJam:
Análise
No início, podemos ver muitos poderes de 2:
Se tomarmos a base de log 2 desses números, obteremos:
que é a série Fibonacci, começando em
1, 0
.fonte
Caracóis, feersum, ≤2 bytes
Na verdade, são 2 bytes; o personagem
z
seguido por uma nova linha\n
.Não faço ideia de como ele funciona ou o que está fazendo, mas depois de testar todas as entradas possíveis, além de
~+
e~,
, este foi o único programa de 2 bytes que produziu8
como saída.E levou séculos para obter esse resultado. Não é à toa que se chama "Caracóis" :-D
Nota para si mesmo: na próxima vez em que testar um software desconhecido, faça-o dentro de uma VM.
fonte
Ferrugem, Liam Noronha, ≤128 bytes
Simplesmente imprimir a string literalmente é de 120 bytes ...
fonte
Macarrão 0.0.2, maçaneta da porta, ≤64
fonte
Python 2, pergunta clara com exemplos, <= 64
Uma solução possível:
(
9**2139
,27**1426
e729**713
também fornecer o mesmo resultado)fonte
CoffeeScript, usuário2428118, ≤64
(funciona apenas no Chrome 46.0.2490.71, conforme descrito pela Cop.)
A saída é obviamente uma concatenação de seqüências curtas codificadas em base64 devido a todo o "=". Após decodificá-los, encontramos uma lista de cadeias de caracteres de 2 caracteres, como
o que não parece fazer sentido. Mas acho alguns itens estranhos, como
nX
etY
. Depois de filtrá-los, obtemosEsses X e Y parecem indicar o código fonte original usado como propriedades de posição
offsetX/Y
. UmnZ
item particularmente interessante é o item. Para verificar minha suposição, procurei por todas as propriedades que terminam com "Z":que mostra toneladas de
CSSStyleDeclaration, "webkitTransformOriginZ"
. A partir disso, temos uma forte indicação de que a lista é construída pelos últimos 2 caracteres de todas as chaves de umstyle
objeto, que o teste acima mostra de fato está correto.fonte
Lua <= 4, Egor Skriptunoff
Muitos usuários estavam ficando agitados com essa resposta no chat, então devo aliviá-los de sua miséria. Não conheço Lua e não pude testá-lo, mas ficaria muito surpreso se isso não funcionar.
Isso seria bastante óbvio, mas provavelmente ninguém entendeu porque os operadores bit a bit foram adicionados apenas na versão 5.3; O ideone.com possui apenas a versão 5.2.
fonte
Python 2, histocrata, ≤16
A maior dica é a promessa de que não funcionará no Python 3. O que mudou no Python 3 ? O maior suspeito é que o operador de divisão retorne um
float
no Python 3.Então, eu suponho que a solução seja da forma ⌊α β / n⌋ = c = 22111101102001, pois a exponenciação é a única maneira curta de criar grandes números.
Se {α, β, n} de fato formar uma solução, então (cn) 1 / β ≈ α deve estar muito próximo de um número inteiro. Portanto, eu uso o seguinte para tentar forçar o {α, β} para cada n:
O resultado real sai rapidamente quando n = 6.
fonte
MATLAB, StewieGriffin, ≤ 16
Impressões:
fonte
5*'$W'.'*' |'
..73
vez de 5, faça+5
ou torne uma3x3
matriz, mas achei que isso era mais divertido. Poderia ter feito muito com os três bytes restantes..'
antes, mas faz todo sentido - estava pensando em como transpor uma string sem recorrer a colchetes.Luis Matlab Mendo, ≤16
Eu encontrei, yay!
Eu não sabia que o Octave também pode fazer isso.
fonte
peaks()
?peaks
.Mathematica, LegionMammal978, ≤64
fonte
Python, spacemanjosh, ≤ 64
Calculadora simbólica inversa gloriosa. Não é bem jogado, mas ei, ele se encaixa.
Edit: Eu jogava golfe.
fonte
JavaScript ES6, Cᴏɴᴏʀ O'Bʀɪᴇɴ, ≤128 bytes
Duvido que esteja exatamente correto, pois não precisava de nada perto de 128 bytes, mas encontrar uma sequência repetida foi um desafio divertido.
fonte
Ter, ppperry, <= 64
Decompõe 2016 em seus principais fatores, essencialmente. 62 caracteres, então acho que isso é semelhante ao que você estava procurando.
fonte
Python, DLosc, ≤32
(Esta solução usa Python 2)
fonte
> <>, Sp3000, <= 8
O ponteiro da instrução é contornado e as seguintes etapas ocorrem:
'l(?; o>'
empurra os valores ASCII del(?; o>
para a pilhal
empurra o tamanho da pilha na pilha(
compare os dois principais elementos da pilha:size of stack
eord('>')
?;
interrompe o programa se o tamanho da pilha for maioro
gera o elemento superior da pilha como caractere (isso sempre seráo
)>
define a direção do IP, aqui está no-opSaída é
oooooooooooo
.Podemos obter muitas saídas diferentes mudando
[space]
para algo que empurra ou aparece na pilha e usando outro caractere válido em vez de>
, que também pode empurrar ou estourar.fonte
'l=?;o*
JavaScript, ev3commander, ≤ 32
OK, isso foi fácil.
fonte
CJam, Reto Koradi, ≤ 4
Empurra 17 e 19 20 = 37589973457545958193355601 .
Experimente online.
Existem tantas coisas que você pode fazer em quatro bytes. Um número inteiro desse tamanho precisava envolver poderes ou fatoriais de alguma forma, e um fatorial teria zeros à direita.
fonte
Pitão <= 4, Dennis
Esse é o comprimento da junção nas novas linhas de todos os subconjuntos do alfabeto.
Execução de teste:
Eu descobri que o número era o
2^27 * 7 - 1
que é uma forte dica sobre a qual ele se baseiayG
, que tem2^26
elementos longos. Eu então imaginei que tinha que ser convertido em uma string e seu comprimento impresso. No entanto, a única maneira de fazer isso em que pude pensar por um tempo foi ``, repr. Então penseij
, o que se encaixa perfeitamente.fonte
C, tucuxi, ≤64
Os resultados são todos 0 e 1, mas C não pode imprimir binário diretamente, portanto, é muito provável que sejam resultados booleanos.
Há mais de 1s, então eu gravei as posições de 0s (
3, 9, 13, 19, …
), que são OEIS A075318 . Porém, isso não é útil, não existe uma fórmula simples para determinar onde está um número nessa sequência.Mas observamos que existem todos os números ímpares, portanto, talvez
(x-1)/2 = {1, 4, 6, 9, 12, …}
tenha informações mais úteis. E este é A003622 .A003622 pode ser definido como "posições de 1 em A003849 ", que é exatamente o que precisamos decifrar aqui. E A003849 é definido como " A003714 mod 2", onde A003714 são simplesmente todos os números inteiros
x & (2*x) == 0
. Assim, temos a solução.OEIS rox.
fonte
Dyalog APL, Dennis, ≤4
Calcula ln (8) ^ ln (8). O StackExchange para de converter minhas respostas? Vou digitar várias coisas aqui para que não se transformem em comentários.
fonte
8*⍟⍟8
mas não sabia⍨
. Bom trabalho :)Preso, @quartata, ≤8
O seguinte programa Pyth :
produz a saída desejada
Método de quebra: Pesquisou no Google o número.
fonte
Pitão, xnor, ≤ 4
CG
(converter a string"abc...z"
do alfabeto da base 256) é a maneira típica de Pyth de gerar um número realmente grande. Depois disso, basta restringir e converter da base novamente.fonte
Python 3, Mego, ≤128
(Using Python 3.5.0, not tested on previous versions.
10598 bytes.)fonte
Ruby, Doorknob, ≤64
fonte
Matlab/Octave, Wauzl, ≤16
Using the same idea as Tom Carpenter's answer
(If it did not work, try this:)
fonte
(1*'234')'*'567'
in mind, because your first answer does not work in Matlab.