Para el propósito de este desafío, definiremos los espacios en blanco como solo saltos de línea (0x0A) y espacios (0x20). Tenga en cuenta que la mayoría de los idiomas y los sabores de expresiones regulares también consideran muchos otros caracteres como espacios en blanco, tanto dentro como fuera del rango ASCII, por lo que es posible que no pueda utilizar los elementos integrados correspondientes.
El desafío de los policías
Debe escribir un programa o función en el idioma que elija, que toma una cadena, que consta de caracteres ASCII (excepto NUL), como entrada y salida con todo el espacio en blanco eliminado. Por ejemplo, si recibió la siguiente entrada:
H e l l o,
W o r l d!
Usted debe salir
Hello,World!
Su envío será entonces su código fuente con todo el espacio en blanco eliminado (el mismo proceso que pasar su solución como entrada para sí mismo, aunque su solución también puede contener caracteres fuera del rango ASCII). Su objetivo es hacer que sea lo más difícil posible averiguar dónde se debe insertar un espacio en blanco para recuperar una solución válida en el idioma que elija. Tenga en cuenta que los ladrones pueden insertar menos espacios en blanco de los que eliminó, pero no más. Recuerde también que los ladrones no tienen que coincidir con su código exacto, solo tienen que encontrar una solución válida.
Su respuesta debe contener lo siguiente:
- El idioma (y la versión si es necesario) en el que escribió su solución.
- El recuento de bytes de su solución antes de eliminar espacios en blanco.
- Su solución con espacios en blanco eliminados.
Su solución puede ser un programa o una función, pero no un fragmento y no debe asumir un entorno REPL. Puede tomar la entrada a través de STDIN, argumento de línea de comando o argumento de función y salida a través de STDOUT, valor de retorno de función o parámetro de función (out).
En aras de la equidad, debe haber un intérprete o compilador disponible gratuitamente para el idioma elegido.
No debe utilizar las funciones integradas para el hash, el cifrado o la generación de números aleatorios (incluso si coloca el generador de números aleatorios en un valor fijo). Su solución debe poder procesar cualquier cadena de 100 caracteres o menos en menos de 10 segundos en una máquina de escritorio razonable.
Si su respuesta no ha sido descifrada dentro de los 7 días (168 horas), puede revelar su propia solución, momento en el cual su respuesta se considera segura . Siempre y cuando no reveles tu solución, los ladrones todavía pueden descifrarla, incluso si ya han pasado los 7 días. La respuesta segura más corta gana (medida antes de eliminar espacios en blanco).
Si su respuesta se agrieta, indíquelo en el encabezado de su respuesta, junto con un enlace a la respuesta del ladrón correspondiente.
Ve aquí por la parte de los ladrones.
Envíos sin descifrar
<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>
fuente
Respuestas:
Haskell, 100 bytes, descifrado por nimi
Este es un programa completo y un poema dadaísta.
Código con withspace (¡Pruébelo en línea!)
Sigue pareciendo bastante poético, si me preguntas.
Desfuscado
Explicación
La
do
notación es solo azúcar sintáctico, por lo quef
se puede escribirPara las listas, el
>>=
operador se define comoconcatMap
, por lo que sef
convierte enEntonces, dada una entrada
"a b\nc"
,lines
divide la entrada en nuevas líneas["a b","c"]
,words
divide cada línea en el espacio en blanco cediendo[["a","b"],["c"]]
(como me di cuenta solo ahora que esto incluye nuevas líneas, por lo que enlines
realidad no es necesario). Concatenar una vez da["a","b","c"]
,id
es la función de identidad y, como tal, no tiene ningún efecto y la concatenación final produce la cadena"abc"
.fuente
C, 475 bytes, descifrado por Riley
Ciertas partes de C hacen que sea realmente fácil ver hacia dónde debe ir el espacio en blanco. El preprocesador c, sin embargo, no. Entonces, este código se divide en dos mitades: hasta la línea 17 (236 caracteres con espacios en blanco), el código está prácticamente sin ofuscar, y después de eso (239 caracteres con espacios en blanco), ¡buena suerte!
No voy a ganar esta competencia ni mucho menos, pero quería ver qué se podía hacer con el preprocesador c.
Compila (con advertencias, si las habilita) con
gcc -std=c89 -ansi
y funciona comocat file | ./a.out
Esto fue resuelto mucho más rápido de lo que pensaba, ¡felicidades! Mi estrategia consistía en utilizar
#defines
para eliminar límites de token obvios (como ';') y luego usar más#defines
para que REALMENTE no fuera intuitivo cómo se barajaban.Esto, por cierto, es el aspecto del código después de que solo se haya agregado el espacio en blanco obvio:
fuente
Octava, 69 bytes, ¡SEGURO!
Formato de entrada: no se pueden ingresar líneas nuevas directamente en el símbolo del sistema. Cree la cadena por concatenación de esta manera:
Llame a la función de esta manera (agregue espacios en blanco):
Código original:
Solo necesitabas 66 bytes para que esto funcionara, pero escribí 69 en el encabezado para no dar demasiada información.
El código original se ve así:
Explicación:
U
es el punto de código85
en la tabla ASCII, por lo que parecería que el primer espacio debería estar después85
. ¡Incorrecto!Si en su lugar insertamos el espacio después
853
, deberíamos obtener el número de carácter853
, ¿verdad ...? Utilizandochar
para verificar si ese es un personaje reconocible:Sin embargo, no usamos
char
en el código, usamos la versión más corta donde concatenamos los números con una cadena vacía[853 '']
. En lugar de dar un error fuera de rango, la versión más corta simplemente toma el módulo de números 256.Da la casualidad de que es eso
85+3*256 = 853
. Mientraschar(853)
da una advertencia,[853,'']
vuelveU
.La forma obvia de hacer esta tarea en Octave es:
Sabemos que debe haber un paréntesis de apertura (punto de código 40) después del primero
U
.29
obviamente no encaja, así que desplazamos el espacio uno más a la derecha y obtenemos296
.mod(296,256) = 40
. ¡Bingo!Continúa así y termina con la secuencia:
Finalmente, usamos
eval
para convertir la cadena en código.fuente
U
entre ese grupo de números :-)JavaScript ES6, 199 bytes, descifrado por SLuck49
Una entrada bastante voluminosa con 33 bytes de espacio en blanco para agregar.
fuente
[ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ]
la secuencia gap y mi función de iteración para la matriz es(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}}
. Empecé a[ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
.> <>, 40 bytes, Agrietado por Teal pelican
Por cierto, utilicé fishlanguage.com , en caso de que haya diferencias entre los intérpretes.
fuente
Befunge-93, 58 bytes, ¡seguro!
Pruébalo en línea!
Programa original
Pruébalo en línea!
El truco para esto fue que la ruta de ejecución era más vertical que horizontal, luego se insertaron varios espacios al azar en el código para barajar aún más las rutas verticales. Una vez que los saltos de línea y los espacios en blanco finalmente se eliminaron, es de esperar que haya muy poco para indicar cómo se relacionan las operaciones entre sí.
En caso de que no fuera lo suficientemente difícil, también agregué un poco de intercalación, por lo que varias operaciones terminaron siendo ejecutadas por diferentes rutas de código que fluyen perpendiculares entre sí. La idea es que si crees que has encontrado la posición correcta para un comando en particular, no te darás cuenta de que es posible que tengas que volver a usarlo más adelante en el código.
No estoy seguro de si valió la pena todo ese esfuerzo tratando de complicar las cosas, o si la gente ni siquiera se molestó en tratar de resolverlo. :)
Explicación del código
fuente
C # 6, 201 bytes, Agrietado por enlace Ng
184 bytes colapsados, dejándote 17 bytes de espacio en blanco.
Solución agrietada usando el
Concat
mientras que mi solución prevista usabaJoin
, aquí está la solución prevista:fuente
MATL , 22 bytes. Agrietado y agrietado .
Este es un programa que toma entrada a través de STDIN y produce la salida a través de STDOUT.
Código sin espacios ni líneas nuevas:
El formato de entrada es un poco incómodo debido a cómo MATL toma la entrada de cadena. Las cadenas con líneas nuevas no se pueden ingresar directamente a través de STDIN, porque cada entrada debe ser una sola línea (la línea nueva marca el final de la entrada). Entonces el formato es el siguiente:
Una cadena está entre comillas simples . Si el contenido de la cadena incluye comillas simples, se escapan duplicando . Ejemplo:
'I''m a string'
Para ingresar una cadena con líneas nuevas, se necesita dividir la cadena en líneas nuevas y concatenar todo (por medio de corchetes), incluidos los números como códigos ASCII . Por ejemplo, considere la cadena formada por mi nombre y apellido con una nueva línea en el medio. Sería ingresado como
['Luis' 10 'Mendo']
.Esto permite ingresar cualquier otro código ASCII (posiblemente no imprimible). Entonces, la cadena en el elemento 1 anterior podría ingresarse alternativamente como
['I' 39 'm ' 97 32 'string']
. Compruébalo aquí .La única condición es que al menos una de las partes dentro de los corchetes es una cadena. Eso obliga a que cualquier número se interprete como código ASCII cuando se concatena.
Perdón por lo incómodo ¡Buena suerte con este formato!Solución original
Cada uno
%
es un símbolo de comentario, por lo que se ignora el resto de la línea.Los espacios no hacen nada, pero sirven como separadores. Por ejemplo,
1e5
sin el espacio, se interpretaría como el número100000
.t
toma la entrada y la duplica.' @ *'
empuja esa cadena yd
calcula sus diferencias consecutivas, lo que da[32 -32 10]
(el-32
es inútil).m
proporciona una matriz de filas lógica que indica qué caracteres son32
o10
(o-32
).1
seguido dee
remodelar como una fila. Esto es no-op aquí.5
seguido deM
empujes1
nuevamente (última entrada a la función de entrada múltiple más reciente, que ese
).d
calcula diferentes consecutivos de1
, y así da[]
(matriz vacía).w
intercambia y finalmente(
asigna[]
caracteres de espacio en blanco, es decir, los elimina.fuente
RProgN , 15 bytes agrietados!
Puedes jugar con el código aquí . Una solución relativamente simple, con suerte la naturaleza molesta de cómo RProgN maneja las cadenas dejará esto sin descifrar.
Programa original
Explicacion
En primer lugar, la entrada se empuja implícitamente a la pila. Apilar:
<INPUT>
Luego, usamos '' para empujar un espacio a la pila. Apilar:
<INPUT> " "
el `realmente intenta empujar una cadena representada por` (WORD) pero debido a que hay un espacio en blanco después, simplemente empuja una cadena vacía. Apilar:
<INPUT> " " ""
La R aquí es azúcar para el comando Reemplazar. Apilar:
<INPUTWITHOUTSPACES>
Luego, el "NEWLINE" empuja una cadena que contiene una nueva línea, lo cual es bueno porque RProgN no usa escapes, simplemente te permite empujar una cadena así. Apilar
<INPUTWOSPACES> "\n"
Luego, usamos el `truco nuevamente, y Reemplazar, que da nuestra salida.
fuente
Ruby, 86 bytes + 1 bandera = 87 ( descifrado por Dom Hastings )
Requiere bandera de línea de comando
-p
.El código es realmente válido en este formulario, es solo un no-op.
fuente
Haz , 72 bytes, ¡seguro!
Ahora para un lenguaje 2D. Se puede jugar con TIO Nexus .
Un programa bastante sencillo sin mucho para tratar de engañar a la gente.
fuente
Laberinto , 127 bytes
Espero haberlo hecho bien :) esta es mi primera entrada de policías y ladrones.
Código original
fuente
Java, 3241 + 28 bytes para una gran importación de enteros
Esta entrada es únicamente para demostrar la posibilidad de una entrada puramente criptográfica segura. Creo que esto está dentro de las reglas, pero si está en contra del espíritu, hágamelo saber y lo eliminaré por justicia. Dejaré esto "inseguro" indefinidamente hasta el momento en que (y si) se encuentre una grieta. Esto es una monstruosidad y seguramente podría optimizarse aún más, pero aquí está.
Para ser justos con los ladrones, aquí está todo con el espacio en blanco "obvio" agregado.
Buena suerte, me encantaría ver esto roto. De hecho, incluso instituiré una recompensa ilimitada por esto. Si en algún momento resuelves esto, se te otorgará un reconocimiento infinito de 500 repeticiones en el intercambio de fichas (así como probablemente un maravilloso papel matemático).
fuente
C, 140 bytes, descifrado por Riley
Comencemos con una fácil.
(Espero estar haciendo esto bien).
fuente
Befunge 98, 65 bytes, descifrado por Pietu1998
Programa original
fuente
V , 37 bytes Agrietado por nmjcman101
Como esto no se puede imprimir, aquí está la versión legible:
O si lo prefiere, un hexdump:
fuente
Minkolang v0.15 , 88 bytes, ¡Agrietado!
Pruébalo en línea!
fuente
JavaScript ES6, 380 bytes, seguro
Este es el tipo de entrada que inicialmente estaba planeando lanzar. Es enorme y casi no tiene posibilidades de ganar, pero creo que debería ser criptográficamente lo suficientemente fuerte como para soportar 7 días. ¡Ahora, puedo estar equivocado!
67 bytes de espacio en blanco para agregar.
Solución
Esta es una implementación del algoritmo extendido de cifrado minúsculo . La clave codificada en espacios en blanco de 64 bits se expande a la siguiente clave de 128 bits:
Fuente: Wikipedia
Una vez descifrado y convertido a ASCII, el bloque de 64 bits se
[x, y]
lee comoc3BsaXQ=
, que es la representación codificada de Base64split
.Mostrar fragmento de código
fuente
Vitsy , 73 bytes, seguro
Esto es francamente malvado.
¡Buena suerte! 13 elementos de espacio en blanco para agregar.
Código original:
Pruébalo en línea!
Esto se simplifica aproximadamente a:
fuente
C #, 159 bytes, agrietado por la leche
153 colapsó, por lo que solo 6 bytes de espacio en blanco para encontrar no deberían ser demasiado difíciles ...
fuente
reticular, 43 bytes, agrietado
La versión en TIO está desactualizada, pero puede obtener una copia del github .
fuente
Wolfram, 132
Probablemente tiene más de una solución (pista: Mersenne)
Solución
fuente
Espacio en blanco ,
8174 bytesVersión legible para humanos:
Sé que este es un viejo desafío, pero espero que alguien esté dispuesto a intentar resolverlo. Intenté optimizar para bytecount pero es posible hacer algo más corto con la misma cantidad de caracteres de tabulación.
fuente
tcc, 850 bytes
Para evitar pegar una línea muy larga, pasé esto a través de tr -d '\ n' | doblar -b -w 60.
fuente
SILOS , 159 bytes ¡Seguro!
Debería ser bastante trivial. Es mi primera entrada de policías y ladrones.
Nadie lo atacó, probablemente debido a la naturaleza esotérica de mi propio idioma. Parece una forma sórdida de deslizarse, pero en realidad no importa, ya que las más cortas son seguras.
Siéntase libre de probarlo en línea
fuente