Para o propósito deste desafio, definiremos espaço em branco como apenas feeds de linha (0x0A) e espaços (0x20). Observe que a maioria dos idiomas e tipos de expressões regulares também consideram muitos outros caracteres como espaço em branco, dentro e fora do intervalo ASCII, portanto, talvez você não consiga usar os built-ins correspondentes.
O desafio da polícia
Você deve escrever um programa ou função em um idioma de sua escolha, que use uma sequência de caracteres ASCII (exceto NUL), como entrada e saída com todo o espaço em branco removido. Por exemplo, se você recebeu a seguinte entrada:
H e l l o,
W o r l d!
Você deve produzir
Hello,World!
Seu envio será o código-fonte com todo o espaço em branco removido (o mesmo processo que passar sua solução como entrada para si mesmo, embora sua solução também possa conter caracteres fora do intervalo ASCII). Seu objetivo é dificultar ao máximo descobrir onde os espaços em branco precisam ser inseridos para recuperar uma solução válida no idioma de sua escolha. Observe que os ladrões podem inserir menos espaço em branco do que você removeu, mas não mais. Lembre-se também de que os ladrões não precisam corresponder ao seu código exato, apenas precisam encontrar uma solução válida.
Sua resposta deve conter o seguinte:
- O idioma (e versão, se necessário) em que você escreveu sua solução.
- A contagem de bytes da sua solução antes de remover o espaço em branco.
- Sua solução com espaço em branco removido.
Sua solução pode ser um programa ou função, mas não um trecho e você não deve assumir um ambiente REPL. Você pode receber entradas via STDIN, argumento da linha de comando ou argumento da função e saída via STDOUT, valor de retorno da função ou parâmetro da função (saída).
No interesse da justiça, deve haver um intérprete ou compilador disponível gratuitamente para o idioma escolhido.
Você não deve usar built-ins para hash, criptografia ou geração de números aleatórios (mesmo que você propague o gerador de números aleatórios para um valor fixo). Sua solução deve ser capaz de processar qualquer sequência de 100 caracteres ou menos em menos de 10 segundos em uma máquina de desktop razoável.
Se sua resposta não tiver sido solucionada dentro de sete dias (168 horas), você poderá revelar sua própria solução, quando sua resposta será considerada segura . Contanto que você não revele sua solução, ela ainda poderá ser quebrada por ladrões, mesmo que os sete dias já tenham passado. A resposta mais curta e segura vence (medida antes de remover o espaço em branco).
Se sua resposta for quebrada, indique-a no cabeçalho da sua resposta, juntamente com um link para a resposta do ladrão correspondente.
Vá aqui para a parte dos ladrões.
Envios sem rachaduras
<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
fonte
Respostas:
Haskell, 100 bytes, quebrado por nimi
Este é um programa completo e um poema dadaísta.
Código com espaço (Experimente online!)
Ainda parecendo bastante poético, se você me perguntar.
De-ofuscado
Explicação
A
do
notação é apenas açúcar sintático, portantof
pode ser escrita de forma equivalente comoPara listas, o
>>=
operador-é definido comoconcatMap
, entãof
se tornaAssim, dada uma entrada
"a b\nc"
,lines
divide a entrada em novas linhas["a b","c"]
,words
divide cada linha no espaço em branco, produzindo[["a","b"],["c"]]
(como percebi agora, isso inclui novas linhas, portanto,lines
na verdade não é necessário). Concatenar uma vez concedida["a","b","c"]
,id
é a função de identidade e, como tal, não tem efeito, e a concatenação final produz a sequência"abc"
.fonte
C, 475 bytes, quebrado por Riley
Certas partes de C tornam realmente muito fácil ver para onde devem ir os espaços em branco. O pré-processador c, no entanto, não. Portanto, esse código é dividido em duas partes: até a linha 17 (236 caracteres com espaço em branco), o código fica praticamente oculto e, depois disso (239 caracteres com espaço em branco), boa sorte!
Não vou vencer esta competição por um longo tiro, mas eu queria ver o que poderia ser feito com o pré-processador c.
Compila (com avisos, se você os ativar) com
gcc -std=c89 -ansi
e funciona comocat file | ./a.out
Isso foi quebrado muito mais rápido do que eu pensava, parabéns! Minha estratégia era usar
#defines
para remover limites óbvios de tokens (como ';') e depois usar mais#defines
para torná-lo REALMENTE não intuitivo como eles eram embaralhados.A propósito, é assim que o código se parece depois que apenas o espaço em branco óbvio foi adicionado:
fonte
Oitava, 69 bytes, SEGURO!
Formato de entrada: as novas linhas não podem ser inseridas diretamente no prompt de comando. Crie a cadeia de caracteres por concatenação como esta:
Chame a função assim (adicione espaço em branco):
Código original:
Você só precisava de 66 bytes para que isso funcionasse, mas escrevi 69 no cabeçalho para não fornecer muita informação.
O código original é assim:
Explicação:
U
é um ponto de código85
na tabela ASCII, portanto parece que o primeiro espaço deve ser depois85
. Errado!Se inserirmos o espaço depois
853
, devemos obter o número do caractere853
, certo ..? Usandochar
para verificar se esse é um caractere reconhecível:No entanto, não usamos
char
no código, usamos a versão mais curta, onde concatenamos os números com uma string vazia[853 '']
. Em vez de dar um erro fora do intervalo, a versão mais curta simplesmente aceita o módulo de números 256.Por acaso é isso
85+3*256 = 853
. Enquantochar(853)
dá um aviso,[853,'']
retornaU
.A maneira óbvia de executar esta tarefa no Octave é:
Sabemos que deve haver parênteses de abertura (código 40) após o primeiro
U
.29
obviamente não se encaixa, então mudamos o espaço mais à direita e obtemos296
.mod(296,256) = 40
. Bingo!Continue assim e termine com a sequência:
Finalmente, usamos
eval
para transformar a string em código.fonte
U
entre esse monte de números :-)JavaScript ES6, 199 bytes, quebrado por SLuck49
Uma entrada bastante volumosa com 33 bytes de espaço em branco para adicionar.
fonte
[ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ]
sequência de gap e minha função de iteração para o array é(a)=>{for(var x=0;!a[x];x++);if(a.length-x>1){a[0]=a[x]-1;a[x]=(x==0?a[x]:0);a[x+1]++;}else{a[0]=a[x]+1;a[x]=0;i=0}}
. Eu comecei em[ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
.> <>, 40 bytes, Rachado pelo pelicano-verde-azulado
A propósito, usei o fishlanguage.com , para o caso de haver diferenças entre os intérpretes.
fonte
Befunge-93, 58 bytes, Cofre!
Experimente online!
Programa Original
Experimente online!
O truque para isso era que o caminho da execução era mais vertical do que horizontal, então vários espaços foram inseridos aleatoriamente no código para embaralhar ainda mais os caminhos verticais. Depois que as quebras de linha e os espaços em branco foram finalmente removidos, esperava-se que houvesse muito pouco para indicar como as operações se relacionavam.
Caso isso não fosse difícil o suficiente, eu também instalei um pouco de intercalação, de modo que várias operações acabaram sendo executadas por diferentes caminhos de código que fluem perpendicularmente um ao outro. A idéia é que, se você achava que havia encontrado a posição correta para um comando específico, não perceberia que talvez precise usá-lo novamente mais tarde no código.
Não tenho certeza se valeu a pena todo esse esforço tentando complicar as coisas, ou as pessoas nem se deram ao trabalho de resolvê-las. :)
Código Explicação
fonte
C # 6, 201 bytes, Rachado pelo Ng do Link
184 bytes recolhidos, deixando 17 bytes de espaço em branco.
Solução rachada usando o
Concat
Considerando que minha solução pretendida usou oJoin
, aqui está a solução pretendida:fonte
MATL , 22 bytes. Rachado e rachado .
Este é um programa que recebe entrada através do STDIN e produz a saída através do STDOUT.
Código sem espaços ou novas linhas:
O formato de entrada é um pouco estranho por causa de como o MATL recebe a entrada de string. Seqüências de caracteres com novas linhas não podem ser inseridas diretamente através do STDIN, porque cada entrada precisa ser uma única linha (a nova linha marca o final da entrada). Portanto, o formato é o seguinte:
Uma sequência é colocada entre aspas simples . Se o conteúdo da string incluir aspas simples, elas serão escapadas pela duplicação . Exemplo:
'I''m a string'
Para inserir uma string com novas linhas, é necessário dividir a string em novas linhas e concatenar tudo (por meio de colchetes), incluindo números como códigos ASCII . Por exemplo, considere a sequência formada por meu nome e sobrenome com uma nova linha no meio. Seria inserido como
['Luis' 10 'Mendo']
.Isso permite a inserção de outros códigos ASCII (possivelmente não imprimíveis). Portanto, a sequência no item 1 acima pode ser inserida como
['I' 39 'm ' 97 32 'string']
. Veja aqui .A única condição é que pelo menos uma das partes entre parênteses seja uma sequência. Isso força todos os números a serem interpretados como códigos ASCII ao concatenar.
Desculpe o constrangedorboa sorte usando este formato!Solução original
Cada
%
um é um símbolo de comentário e, portanto, o restante da linha é ignorado.Os espaços não fazem nada, mas servem como separadores. Por exemplo,
1e5
sem o espaço, seria interpretado como o número100000
.t
pega a entrada e a duplica.' @ *'
empurra essa string ed
calcula suas diferenças consecutivas, o que fornece[32 -32 10]
(o-32
é inútil).m
fornece uma matriz de linhas lógicas indicando quais caracteres são32
ou10
(ou-32
).1
Seguido pore
remodelar como uma linha. Isso não funciona aqui.5
seguido porM
pressiona1
novamente (última entrada para a função de entrada múltipla mais recente, que ée
).d
calcula diferentes consecutivos de1
e, portanto, dá[]
(matriz vazia).w
troca e, finalmente,(
atribui[]
a caracteres de espaço em branco, ou seja, os remove.fonte
RProgN , 15 bytes rachados!
Você pode brincar com o código aqui . Uma solução relativamente simples, espero que a natureza irritante de como o RProgN lida com seqüências de caracteres deixe isso sem falhas.
Programa Original
Explicação
Em primeiro lugar, a entrada é implicitamente enviada para a pilha. Pilha:
<INPUT>
Em seguida, usamos '' para empurrar um espaço para a pilha. Pilha:
<INPUT> " "
o `realmente tenta empurrar uma string representada por` (WORD), mas como existe um espaço em branco depois dela, ele apenas empurra uma string vazia. Pilha:
<INPUT> " " ""
OR aqui é açúcar para o comando Substituir. Pilha:
<INPUTWITHOUTSPACES>
Em seguida, o "NEWLINE" envia uma string contendo uma nova linha, o que é bom porque o RProgN não usa escapes, apenas permite que você envie uma string como essa. Pilha
<INPUTWOSPACES> "\n"
Então, usamos o truque `novamente, e Replace, que fornece nossa saída.
fonte
Ruby, 86 bytes + 1 sinalizador = 87 ( quebrado por Dom Hastings )
Requer sinalizador de linha de comando
-p
.O código é realmente válido neste formulário, é apenas um no-op.
fonte
Feixe , 72 bytes, Seguro!
Agora para uma linguagem 2D. Pode ser jogado com o TIO Nexus .
Um programa bastante simples, sem muito para tentar enganar as pessoas.
fonte
Labirinto , 127 bytes
Espero que tenha feito isso direito :) esta é minha primeira entrada de policiais e ladrões.
Código original
fonte
Java, 3241 + 28 bytes para uma grande importação de número inteiro
Esta entrada é apenas para provar a possibilidade de uma entrada puramente criptograficamente segura. Acredito que isso esteja dentro das regras, mas se for contra o espírito, entre em contato e eliminarei por justiça. Deixarei isso "inseguro" indefinidamente até o momento em que (e se) um crack for encontrado. Isso é uma monstruosidade e certamente poderia ser otimizado ainda mais, mas aqui está.
Por justiça aos ladrões, eis o espaço em branco "óbvio" adicionado.
Boa sorte, eu adoraria ver isso rachado. De fato, instituirei uma recompensa ilimitada sobre isso. Se a qualquer momento você quebrar isso, você será premiado com 500 repetições infinitas na troca de pilhas (além de provavelmente um maravilhoso artigo matemático).
fonte
C, 140 bytes, quebrado por Riley
Vamos começar com uma pergunta fácil.
(Espero estar fazendo isso direito.)
fonte
Antes de 98, 65 bytes, quebrado por Pietu1998
Programa original
fonte
V , 37 bytes Rachado por nmjcman101
Como isso não pode ser impresso, aqui está a versão legível:
Ou, se preferir, um hexdump:
fonte
Minkolang v0.15 , 88 bytes, Rachado!
Experimente online!
fonte
JavaScript ES6, 380 bytes, seguro
Esse é o tipo de entrada que eu estava planejando lançar inicialmente. É enorme e quase não tem chance de ganhar, mas acho que deve ser criptograficamente forte o suficiente para suportar 7 dias. Agora, posso provar que estou errado!
67 bytes de espaço em branco a serem adicionados.
Solução
Esta é uma implementação do algoritmo estendido de criptografia minúscula . A chave codificada em espaço em branco de 64 bits se expande para a seguinte chave de 128 bits:
Fonte: Wikipedia
Uma vez descriptografado e convertido em ASCII, o bloco de 64 bits é
[x, y]
lido comoc3BsaXQ=
, que é a representação codificada em Base64split
.Mostrar snippet de código
fonte
Vitsy , 73 bytes, seguro
Isso é absolutamente mau.
Boa sorte! 13 itens de espaço em branco a serem adicionados.
Código original:
Experimente online!
Isso simplifica aproximadamente:
fonte
C #, 159 bytes, Rachado por leite
153 foram recolhidos para que apenas 6 bytes de espaço em branco a serem encontrados não sejam muito difíceis ...
fonte
reticular, 43 bytes, quebrado
A versão no TIO está desatualizada, mas você pode obter uma cópia do github .
fonte
Wolfram, 132
Provavelmente tem mais de uma solução (dica: Mersenne)
Solução
fonte
Espaço em branco ,
8174 bytesVersão legível por humanos:
Sei que esse é um desafio antigo, mas espero que alguém esteja disposto a tentar resolver isso. Tentei otimizar para o número de bytes, mas talvez seja possível diminuir algo com o mesmo número de caracteres de tabulação.
fonte
tcc, 850 bytes
Para evitar colar uma linha muito longa, passei por tr -d '\ n' | dobre -b -w 60.
fonte
SILOS , 159 bytes Seguro!
Deve ser bastante trivial. É a minha primeira entrada de policiais e ladrões.
Ninguém o atacou, provavelmente devido à natureza esotérica da minha própria língua. Parece uma maneira desprezível de deslizar, mas isso realmente não importa, pois os mais curtos são seguros.
Sinta-se livre para experimentá-lo online
fonte