Inspirado por este comentario ...
¡Gracias a los usuarios Step Hen , Wheat-Wizard y Dennis por ayudarme a solidificar la especificación de este desafío antes de publicarlo!
Este es el hilo de los policías. Para el hilo de los ladrones, vaya aquí
En este desafío , tiene la tarea de ejecutar un código que haga que su lenguaje ya no satisfaga nuestros criterios de ser un lenguaje de programación. En ese desafío, eso significa hacer que el idioma ya no pueda ...
Tomar entrada y salida numérica
Suma dos números juntos
Prueba si cierto número es primo o no.
Esta es una de policías y ladrones desafío, donde hay dos retos diferentes con dos objetivos diferentes: los policías se trate de escribir un código que hace que el lenguaje sobre todo inservible, y los ladrones tratarán de encontrar la solución oculto que permite a la policía para recuperar su lenguaje.
Como policía, debes escribir dos fragmentos de código:
Uno que hace que su idioma sea prácticamente inutilizable, por ejemplo, eliminando las funciones integradas para tomar entradas / salidas y operaciones numéricas. Cuantas más funciones elimines, mejor. Este código no puede bloquearse o salir. Debería ser posible agregar código al final de este fragmento, y ese código será evaluado . Y...
... un fragmento de código que toma dos enteros no negativos como entrada, los agrega y genera su suma. Este fragmento debe funcionar correctamente incluso después de ejecutar el primer fragmento. Cuando los dos fragmentos se combinan, deben formar un programa completo que agregue dos números o definir una función que agregue dos números. Idealmente, este fragmento debe basarse en un comportamiento muy oscuro, para que sea más difícil de encontrar.
Puede elegir cualquier método estándar de entrada y salida . Sin embargo, debe revelar exactamente qué formato (entrada y salida) está utilizando. Un ladrón no puede descifrar su respuesta a menos que use el mismo formato que usted.
Después de escribir estos dos fragmentos, debe publicar el primero como respuesta, sin revelar el segundo. Su respuesta debe contener toda la siguiente información:
El primer fragmento (obviamente no el segundo).
Idioma (incluida la versión menor, ya que la mayoría de las presentaciones probablemente dependerán de casos extraños)
Formato IO, incluso si es una función o un programa completo. Los ladrones deben usar el mismo formato para que su crack sea válido.
Cualquier caso extraño requerido para que su respuesta funcione. Por ejemplo, solo se ejecuta en Linux , o requiere una conexión a Internet . Obviamente, esto es un poco subjetivo, pero si un policía tiene un caso extremo que evita que se agriete, y luego solo revela esto después de estar a salvo, considero esta mala deportividad. Un ladrón potencial debe tener toda la información necesaria para descifrar su respuesta antes de descifrarla.
No necesita revelar su recuento de bytes hasta que su respuesta esté segura.
Aquí hay un ejemplo. Para el primer fragmento, puede enviar el siguiente programa Python 3:
Python 3
print=None
Toma entrada de STDIN y salida a STDOUT
Y luego, como tu segundo fragmento, podrías escribir:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Esto es válido porque tomará dos números como entrada y generará su suma incluso si une los dos fragmentos, p. Ej.
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Sin embargo, esto será extremadamente fácil para un ladrón para encontrar una solución. Dado que esto sería muy fácil de descifrar, podría intentar parchear este enfoque particular de esta manera:
import sys
sys.stdout=None
print=None
Sin embargo, incluso esto tiene una solución muy fácil:
del print
a,b=int(input()),int(input())
print(a+b)
Como policía, su objetivo es hacer que la solución oculta sea lo más oscura posible, para evitar que los ladrones la encuentren.
Los ladrones mirarán una de sus respuestas e intentarán descifrarla. Pueden descifrarlo escribiendo cualquier fragmento válido que pueda funcionar como fragmento 2 (sumando dos números juntos después de que el idioma quede prácticamente inutilizable). Esto no tiene por qué ser el mismo fragmento que originalmente pretendía. Si un ladrón descifra su respuesta, dejará un comentario en su respuesta, y luego debe editarla para indicar que se ha descifrado. Si su publicación está descifrada, debe editar su respuesta para mostrar la solución (fragmento 2) que pretendía originalmente. Esta no es una regla per se , solo una sugerencia amigable para mantener el juego divertido. Usted no tiene que.
Si una respuesta permanece sin descifrar durante una semana completa, puede editar en su segundo fragmento e indicar que su respuesta ahora es segura . Si no lo edita después de que termine la semana, otros usuarios aún pueden descifrarlo hasta que lo haga. Si no revela su segundo fragmento, no puede reclamar puntos por su respuesta, o llamarlo seguro.
El ganador del hilo de la policía es la respuesta segura más corta que incluye ambos fragmentos , contados en bytes, y esta respuesta será aceptada después de que haya pasado el tiempo suficiente. Usted no tiene que revelar su cuenta de bytes hasta que su respuesta es seguro, ya que cuenta de bytes es irrelevante para su puntuación hasta que su respuesta es seguro. En el caso de que haya pasado suficiente tiempo y no haya respuestas sin descifrar, el ganador será la respuesta que permaneció sin descifrar durante el período de tiempo más largo.
¡Que te diviertas!
Aclaraciones de reglas
El primer fragmento debe ejecutarse correctamente sin tomar ninguna entrada . Puede generar lo que desee, y esta salida será ignorada, siempre y cuando el fragmento esté hecho, el segundo fragmento se ejecutará correctamente.
El segundo fragmento debe ejecutarse para que su respuesta sea válida. Esto significa una respuesta como
import sys sys.exit()
no es válido porque no rompe el idioma. Simplemente se cierra. Del mismo modo, ingresar un bucle infinito no es válido, ya que el segundo fragmento nunca se ejecutará.
Después de estar seguro, su puntaje es el recuento de bytes de ambos fragmentos .
Esto se remonta a Por favor, revele los casos extremos extraños necesarios para que su respuesta funcione ... Su envío debe contener suficiente información antes de ser revelado para ser reproducible después de ser revelado. Esto significa que si su respuesta se vuelve segura y luego edita en: Aquí está mi respuesta. Ah, por cierto, esto solo funciona si lo ejecutas en Solaris, ¡es una broma! su respuesta no es válida y se eliminará y no se considerará elegible para ganar.
Se permite que el segundo fragmento se bloquee después de generar la suma, siempre y cuando la salida siga siendo correcta (por ejemplo, si elige enviar a STDERR, y luego obtiene un montón de información de bloqueo, esto no es válido).
No puede editar su código después de enviar una respuesta.
No puede confiar en funciones criptográficas como cifrado, funciones hash, CSPRNG, etc.
Fragmento para encontrar envíos no descifrados:
fuente
int main(){ do_evil_stuff(); }
dónde debe ir el código de usuario? En una función? Después de todas las declaraciones enmain
?Respuestas:
Gforth 0.7.3 (TIO) , 231 bytes [SEGURO]
Este código redefine como inútiles algunos métodos de salida necesarios, así como la suma y algo crucial para declarar funciones. ¡Buena suerte!
La entrada será dos enteros con signo tomados de la parte superior de la pila como parámetros de función. Salida a STDOUT.
Por lo tanto, debe corregir el daño causado y definir una función que tome los dos valores superiores de la pila e imprima el resultado como un entero (no un flotante) en STDOUT sin salida adicional (sin espacio final).
Aquí hay una plantilla , si se nombra su función objetivo
f
.Solución:
fuente
Haskell, agrietado por Christian Sievers
Programa completo, lectura de dos enteros (incluidos los negativos) desde stdin y escritura en stdout.
Acabo de deshabilitar el Preludio para que casi nada esté dentro del alcance, y luego agregué una definición; otras importaciones son sintácticamente inválidas. Te di
getLine
yprint
sin embargo.Editado para agregar mi solución original. El crack de Christian fue diferente, pero explota las mismas características básicas (puede obtener una cantidad sorprendente de cómputo al acceder a funciones que tienen azúcar sintáctico, incluso cuando no puede llamar a nada directamente o incluso nombrar los tipos involucrados).
Lo que probablemente no sea súper golf de todos modos, pero aquí es más fácil de leer:
fuente
Python 2 , agrietado
Implementa la adición como una función con nombre
Pruébalo en línea!
¿Qué hace esto?
Con el fin de ayudarte un poco, explicaré lo que hace. Este código abre el archivo fuente y comprueba si el resto del código cumple los siguientes criterios:
import
&)(,.:[]a`cdfijmonrt~
Si falla cualquiera de los criterios, el límite de recursión se establece para
1
que cualquier código que escriba llegue al límite de recursión.Aquí no hay trucos, he escrito una solución que usa solo estos caracteres y no importa, no estoy haciendo nada subversivo, pero diré que creo que será bastante difícil de descifrar.
Para ahorrarle tiempo, aquí hay una breve lista de cosas útiles que no puede hacer con esta restricción
+
bueno duheval
/exec
No iba a dejarte escapar con esoNúmeros, pueden ser más útiles de lo que piensas
Literales de cadena
len
=
, Sin asignación de variables>
,<
,==
. . . Te he dejado sin comparaciones*
,-
,/
,%
,^
,|
,>>
,<<
Los únicos operadores disponibles son~
y&
__foo__
, Ninguno de esos elegantes métodos de doble subrayado están permitidos.fuente
This code is not allowed to crash or exit.
(vea el chat para discutirlo)Python 2 , agrietado
Esta es la cuarta iteración de esta respuesta. Cada una de las últimas respuestas se descifró al restablecer la profundidad de recursión.
Implementa la adición como una función con nombre
Pruébalo en línea!
¿Qué hace esto?
Con el fin de ayudarte un poco, explicaré lo que hace. Este código abre el archivo fuente y comprueba si el resto del código está compuesto únicamente por los caracteres.
&)(,.:[]a`cdfijmonrt~
Si falla, el límite de recursión se establece para
1
que cualquier código que escriba llegue al límite de recursión.También he desactivado todos los módulos, por lo que no puede importar nada.
Aquí no hay trucos, he escrito una solución que usa solo estos caracteres y no importa, no estoy haciendo nada subversivo, pero diré que creo que será bastante difícil de descifrar.
Para ahorrarle tiempo, aquí hay una breve lista de cosas útiles que no puede hacer con esta restricción
+
bueno duheval
/exec
No iba a dejarte escapar con esoNúmeros, pueden ser más útiles de lo que piensas
Literales de cadena
len
=
, Sin asignación de variables>
,<
,==
. . . Te he dejado sin comparaciones*
,-
,/
,%
,^
,|
,>>
,<<
Los únicos operadores disponibles son~
y&
__foo__
, Ninguno de esos elegantes métodos de doble subrayado están permitidos.Mi solución
Así que ahora que xnor lo ha resuelto de una manera con la que estoy suficientemente satisfecho, voy a revelar mi solución
Sorpresa, sorpresa, es una enorme pila de galimatías. En lugar de desglosar esto, voy a pasar por el proceso de cómo hice esto.
Empecé con un algoritmo de suma bastante estándar
Luego utiliza un truco bit a bit para representar
^
con|
,&
,~
.Usé otro truco bit a bit para deshacerme del
|
Ahora todo lo que queda es el
<<
, no debería ser demasiado difícil, ¿verdad? Bueno, prepárate para un viaje lleno de baches. Para reemplazar el desplazamiento de bits, utilicé cadenas para agregar un cero al final de su representación binariaEsto tiene algunos problemas, pero el principal está usando la suma , así que trabajé alrededor de esto usando un formato en su lugar
No se nos permite usar bin, así que usé el formato de cadena para convertir a binario.
Dado que los literales de cadena están prohibidos, tengo que construir la cadena a
{0:b}0
partir de partes hechas con ticks posteriores yjoin
juntas.La cadena vacía es bastante fácil, solo puedes hacer
Los ceros eran
y
{:}
todos fueron tomados de los diccionarios.b
parece bastante difícil de conseguir, no es en nuestro conjunto de caracteres, así que ¿cómo se supone que vamos a obtener un objeto que tiene unab
en surepr
? Bueno, aquí está cómo: cuando usarepr
una función incorporada, obtiene algo que se parece aY eso es de donde obtendremos nuestro
b
.Ahora todo lo que queda son números, solo necesito -1, 0, 1 y 2, así que así es como los representé:
2 en realidad podría ser un byte más corto como
basado en las sugerencias de @ Blender en los comentarios, pero no pensé en esto hasta después del hecho.
Entonces sustituimos estos números en
Y esa es la grieta.
fuente
C (gcc) ¡Agrietado!
Pruébalo en línea!
Entrada de STDIN y salida a STDOUT.
Esto se ejecuta sin error. Jajaja esto es bastante malvado. Solo lo probé en el gcc de TIO. Como de costumbre, debe agregar su código después de este fragmento para que funcione :) El comentario es malo, no lo escuche.
Probado en
gcc (GCC) 6.3.1 20161221 (Red Hat 6.3.1-1)
. Debería funcionar en cualquier sistema Linux.Solución original
fuente
__asm__
y tienes muchas funciones para elegir :) no pienses que C y C ++ son buenos enemigos aquí.C (GCC en Linux) (agrietado)
En lugar de utilizar técnicas tontas de sandboxing de lectura de archivos, lo hacemos de la manera correcta, ¡con la lista blanca SECCOMP!
Su tarea: implementar la suma con entrada de STDIN y salida a STDOUT.
Pruébalo en línea!
¿¡Que es esto!?
Para ayudarlo en su tarea insuperable, explicaré lo que hace este código.
__attribute__ ((constructor(0)))
asegura que las
función se ejecute primero. La función cierra todos los descriptores de archivos abiertos para STDIN, STDOUT y STDERR. Luego, el programa se limita a sí mismo con una estricta lista blanca SECCOMP, que limita las llamadas de su sistema a lo siguiente:Por lo tanto, no puede abrir ningún archivo nuevo (o básicamente hacer algo). Luego pasamos a main y llamamos a su código, bien envuelto en la
sandbox
función.Al
syscall(SYS_exit, EXIT_SUCCESS);
final es solo para garantizar que el programa salga limpiamente; de manera predeterminada, GCC saldrá con loexit_group(2)
que no está permitido por la lista blanca SECCOMP. Esta función existente se llama después de ejecutar su código.Por lo tanto, no tiene descriptores de archivo abiertos y no puede abrir nada nuevo. Imposible, ¿verdad? ;)
fuente
Haskell , agrietado por Ben
Pruébalo en línea! Este debería ser un programa completo que lea dos números de stdin y envíe la suma a stdout.
Cada programa completo comienza ejecutando la
main
función, pero aquí semain
llama a sí mismo y provoca un bucle infinito. Para empeorar las cosas, se inicia un comentario de línea--
directamente detrás de la llamada recursiva para evitar cambiarlo a, por ejemplo,main2
y luego definir eso para hacer la suma.Solución prevista:
Pruébalo en línea!
--
comienza un comentario de línea a menos que también se pueda analizar como parte de un operador. (El resaltado de sintaxis parece ignorar este hecho.)--$
Es un operador infijo válido que tomamain
como primer argumento y algún segundo argumento ficticio()
. Luego se define para ignorar ambos argumentos y realizar la tarea requerida.fuente
Montaje en modo real x86 de 16 bits ( agrietado )
Fácil si sabes el truco.
fuente
or [bp], 256
. No es válido es que supone que esor WORD PTR [bp], 256
?)hlt
instrucción (anillo 0) implica que este no es un modo protegido.Your submission must contain enough information before being revealed to be reproducible after being revealed
Javascript, agrietado
Este desafío se basa en el de Grant Davis , pero soluciona la solución que tenía en mente (que crea un iframe y usa el iframe
window
). La solución se ejecuta en la consola de JavaScript en Chromeabout:blank page
, y toma dosinput()
segundos, los agrega y daconsole.log
el resultado. Pon tu código después de:En primer lugar, nos daban un golpe
prompt
yconsole
y establecer el acceso directod
. Luego, creamos un observador de mutaciones con una devolución de llamada que elimina cada objetivo mutado. Configuramos ese observador de mutaciones para observar el documento y notificarlochildList
y realizarsubtree
modificaciones. En lugar del literaltrue
, usamos nuestro acceso directo al valor verdaderodocument
(la especificación no permite esto, pero Chrome sí).Después de publicar esto, me di cuenta de un golpeador mucho más elegante. Mi solución prevista todavía funciona, pero el crack publicado no:
fuente
Perl 5, agrietado por Ilmari Karonen
La entrada se recibe en líneas separadas
STDIN
y la salida se imprime enSTDOUT
.Todo el código va después del
__DATA__
marcador. Esto utiliza un método similar a la solución de @ WheatWizard en que el código se analiza y se eliminan los caracteres inutilizables.Esto se ha probado en las versiones 5.8, 5.10 y 5.16, y no requiere indicadores de línea de comandos.
Pruébalo en línea!
fuente
STDIN
con caracteres en líneas separadas ySTDOUT
. Agregaré esto al cuerpo principal.Python 3, agrietado por zbw
Se han eliminado todos los modlues, lo que significa que no hay builtins disponibles y no se puede hacer mucho más. Salida a STDOUT, entrada de STDIN. Esta es la segunda iteración de esta respuesta después de que la anterior se rompió por una grieta trivial al agregar una declaración de interrupción.
fuente
APL (ngn-apl) , agrietado por ngn
Hecho en cooperación con mi colega Marshall .
Entrada a través de argumentos izquierdo y derecho para
+
. Es decir, su objetivo es insertar código después de lo siguiente, para que su última línea lea⎕←3+2
y salga5
a STDOUT.Pruébalo en línea!
Funciona configurando todas las funciones útiles para las
{}
cuales toma uno o dos argumentos y devuelve una lista numérica vacía. También se configura⍣
para componer funciones.Grieta
⍺⍵1/0
replicar 0 por el argumento izquierdo y el argumento derecho y 1⍋
obtener los índices que ordenarían eso (dado que todos los elementos son cero, da 0 1 2 ... (a + b)⌈/
el valor máximo (a + b)fuente
+
usando solo APL puro y sin trucos sucios.Python 2 , agrietado
Esta es la segunda iteración de una respuesta que ha sido descifrada una vez por @HyperNuetrino usando un método que no esperaba. Ahora lo he parchado, así que espero que las únicas soluciones que quedan tengan que cumplir con las restricciones que pretendía.
Implementa la adición como una función con nombre
Pruébalo en línea!
fuente
u
, pero estoy atrapado sin él.u
?.count
. Puedo obtener una cadena tan larga como la salida deseada, pero no tengo forma de tomar su longitud.__import__('sys').setrecursionlimit(100)
... y nada fue reparado. Sin embargo, no tengo ganas de publicarlo en el hilo del ladrón, se siente como hacer trampa. Pruébelo en líneaJava 8, crackeado por @ OlivierGrégoire
Aquí está mi intento. Más o menos, la idea es sobrecargar todos los espacios de nombres que puede usar para generar (y reflexionar, espero). La salida está destinada a sdout (System.out).
Las listas negras suelen ser un enfoque peor que las listas blancas, por lo que estoy seguro de que es solo cuestión de tiempo antes de que alguien presente un enfoque que no consideré.
fuente
class String{}
después de probar sin darme cuenta de que noquearíamain(String[] ...)
. Debería funcionar ahoraint sum = 0; new Exception("" + sum) { public void printStackTrace() { ClassLoader cl = ClassLoader.getSystemClassLoader(); try { printStackTrace(new PrintStream((PrintStream)cl.loadClass("java.lang.System").getDeclaredField("out").get(null))); } catch (Exception e){} } }.printStackTrace();
cQuents, resquebrajados por Mayube
Esto debería ser bastante fácil, pero nunca se sabe.
El "problema" fue que sin
C
su código, recibió un error.La solución de Mayube:
Cada elemento de la secuencia es la primera entrada más la segunda por la tercera (también conocido como 1)
Mis soluciones:
La secuencia cambia entre la primera entrada más la segunda entrada y la tercera entrada (1). El primer elemento en el segundo es
A+B
.Similar a la solución de Mayube: en lugar de multiplicar
B*C
, solo sumaC
y luego resta.Pruébalo en línea!
Explicación
Actualmente, este programa genera
1
, ya que sin entrada del usuario, la primera entrada es la primera1
en la entrada predeterminada (#
).fuente
Default input is combined with user input to form the total input, which must align with the expected input (which is based on the highest input requested by the Sequence Definition)
A,B,C,D,E
en el código. Por ejemplo, si en algún momento tiene la variableD
en su programa, el analizador espera que haya 4 entradas, pero si también hay unaE
, el analizador espera que haya 5 entradas. No puede haber menos de la cantidad esperada. Sin embargo, siempre hay una última entrada opcionaln
, que se utiliza de diferentes maneras por diferentes modos.A
, por lo que busca una entrada. Dado que hay dos, ambas procedentes de las#
cuales especifica la entrada predeterminada, utiliza la primera comoA
valor y la segunda comon
.BC
, ¿A sería la primera entrada, B sería la segunda, C sería 1 y n sería la segunda 1?#1,1
(sin barra), sería: A como el primer 1, B como el segundo 1, C como la primera entrada yn como la segunda entrada. También puede hacerlo#1|1
, donde A es el primer 1, B es la primera entrada, C es la segunda entrada yn es el segundo 1.Node.JS versión 7.3.0 (descifrado por Dom Hastings)
Coloque el segundo bloque de código después del primero.
Descargo de responsabilidad: el segundo bloque de código no funcionará solo (sin colocarse después del primero). Sin embargo, si esto no está permitido, puedo modificar el segundo fragmento.
Este es un programa completo. La salida es
process.stdout
(STDOUT), la entrada esprocess.argv
(argumentos de línea de comando)Estos son mis primeros policías y ladrones, espero que este sea un buen desafío :)
Pruébalo en línea!
El desafío explicado
Genera una variable aleatoria
n
de 0 a 1e7. Si llama a escribir con el correcton
, no imprime nada pero se establecel
en 0, lo que "desbloquea" la función de escritura, lo que le permite imprimir cualquier cosa. Si intenta llamar a escribir con una no cadena, lo envía a un bucle infinito. Si intenta llamar a escribir con otra cosa que no sea la correctan
mientras la escritura está "bloqueada", lo envía a un bucle infinito para evitar que adivine.La solución prevista
Se escabulle más allá del tipo que aparentemente busca cadenas solo mediante el uso de un Símbolo, que también comienza con s. Esto arroja un error en la función resultante de la llamada eval porque no puede agregar la cadena "f" a un Símbolo. Detectamos el error y usamos regex para recuperar
n
el seguimiento de la pila, donde está en el nombre de la función. Luego intentamos escribirn
lo que no imprime nada, pero establece la variable "bloquear"l
en 0 para "desbloquear" la función de escritura. Ahora que la función de escritura está desbloqueada, solo imprimimos la suma.fuente
RProgN2 , agrietado por Arnold Palmer
Escribe sobre todos los operadores matemáticos, sin forma de restaurarlos. En particular, los reemplaza con una función que elimina los dos elementos superiores de la pila.
Pruébalo en línea!
Solución original
Pruébalo en línea!
fuente
²
símbolo. ¿Te importaría iluminarme?[[
en este caso, y los envuelve en una función @ArnoldPalmer«»
crea variables locales en lugar de estropear las globales habría sido de gran ayuda.Haskell,
161144 bytes, agrietado por BlackCapEntrada a STDIN, salida a STDERR. Añadir al final del programa.
Editar: destinado a ser compilado sin argumentos adicionales de GHC, solo lo normal
ghc --make prog.hs
.Editado nuevamente para reducir el recuento de bytes.
¡Que te diviertas!
fuente
main = do x <- readLn :: IO Integer; y <- readLn; print $ x + y
main
función esté en el móduloMain
cuando no-main-is
se proporciona ninguna marca .Mascarpone , agrietado por Ilmari Karonen
La entrada es números de iglesia en stdio, usando
i
para incremento yz
para cero. Por ejemplo, 2 + 3 sería:Con una nueva línea final, la
salida debe ser un número en stdout, en el mismo formato que en stdio. Por ejemplo, si la respuesta es cinco, debe generar:
(Mascarpone no tiene concepto de números)
Solución prevista:
No es inmediatamente aparente a partir de la documentación, pero como dijo @IlmariKaronen en su crack, los literales de cadena en Mascarpone son en realidad azúcar sintáctica para empujar una secuencia de caracteres.
Deliberadamente escribí comentarios como
[this]$
para hacer que parezca que estoy presionando una cuerda y haciendo estallar inmediatamente después. Un ingenuo cracker podría haber intentado algo como[:,>!]/*
empujar una cadena, intercambiarla con el intérprete e interpretarla.También pretendo mostrar el intérprete que dejé en la pila
$
, pero$
ya se ha redefinido a un NOP. Te queda este intérprete en la pila, y tienes que llevarlo contigo durante todo el programa; a través de cada carácter de cada cadena.fuente
C # (.NET Core) agrietado por Ilmari Karonen
También agrietado por Joshua .
Lee los dos valores de stdin y escribe el resultado en stdout. Probado en Windows con Framework Versión 3, 4.6 y en TIO .
Aquí está el programa completo que tenía la intención.
Pruébalo en línea!
fuente
GolfScript , descifrado por Dennis
Pruébalo en línea!
Este es un desafío de código de golf , después de todo, entonces, ¿por qué no probar GolfScript?
Una solución válida debe ser un fragmento que lea dos enteros de la pila, los sume y devuelva el resultado en la pila. El problema es que aún debería funcionar incluso después de que el código anterior haya redefinido casi todos los operadores de GolfScript integrados para no hacer absolutamente nada. Al menos lo dejé
;
intacto, por lo que aún puede extraer valores de la pila. ;-) Su código debería funcionar en el intérprete estándar de GolfScript, tal como se implementa, por ejemplo, en TIO (consulte el enlace anterior).La solución de Dennis , como la mía , se basa en la característica poco utilizada de GolfScript que permite el código Ruby interpolado en cadenas de comillas dobles. Usamos esta función para definir un nuevo operador de suma que funciona exactamente como el
+
operador incorporado y luego lo llamamos.(Una razón por la cual la característica de interpolación Ruby en GolfScript se usa tan raramente es que, incómodamente, el código Ruby interpolado se ejecuta durante el análisis y el intérprete GolfScript almacena en caché su salida. Por lo tanto, si tiene una cadena con código Ruby interpolado en un bucle, el código se ejecutará solo una vez antes de que comience el programa real y, a partir de entonces, siempre devolverá el mismo valor en cada iteración del bucle. Puede solucionarlo utilizando la evaluación de cadena para diferir el análisis, pero eso hace que la sintaxis ya sea aún más incómoda feo y detallado, y en cualquier caso, para este desafío también deshabilité el operador eval
~
. Sin embargo, resulta que definir nuevos operadores GolfScript incorporados es una cosa que esta característica realmente hace bastante bien y limpiamente).fuente
"#{var'_','gpush a+b'.cc2}";_
, que funciona exactamente como la suya, excepto por ser unos pocos bytes más cortos.Node.js v8.2.0, descifrado por Dom Hastings
Debes implementar la
logic
función. La entrada son los argumentos proporcionados (desde stdin), la salida es lo que devuelve su función (se imprime en stdout).Mi código de iglesia codifica los números de la entrada. El resto del código está ahí para intimidarte.
La función de desorden hace algunos trucos para implementar la notación sin puntos (
a . b == dot (a) (b)
), que uso principalmente para agregar. id .
a lugares aleatorios, que no hace nada, pero confundirá a cualquiera que no esté familiarizado con la programación funcional.La transformación aplicada a los números antes de pasarlos a la
logic
función esx+1
yy-1
, que suma hasta 0, por lo que es otro NOP para agregar a la oscuridad.La solución prevista fue:
fuente
Informar 7 , agrietado por ppperry
El jugador debe escribir la entrada como un comando interactivo, por ejemplo,
add 17 to 25
osum 17 25
. Usted es libre de elegir la forma exacta del comando que debe ingresarse, siempre que incluya dos números. La suma de los números (p42
. Ej. ) Debe imprimirse en respuesta al comando.El desafío, por supuesto, es hacerlo mientras toda la actividad de "leer un comando" se reemplaza por un no-op. Probablemente hay varias formas de resolver este problema, pero al menos debería requerir cierta familiaridad con el lenguaje. El que se me ocurrió es bastante simple, aunque un poco inesperado.
He probado mi solución en el GNOME Inform 7 IDE, versión 6L38 , en Ubuntu Linux. La solución prevista funciona tanto en el back-end de Glulx como en la máquina Z, y también debería funcionar en otras versiones recientes de Inform 7. Tenga en cuenta que (sin una solución alternativa adecuada) el código anterior hará que el intérprete trabaje en bucle cuando intente leer un comando; el intérprete de la máquina Z parece dejar de responder por completo cuando esto sucede, y no se puede detener desde el IDE, por lo que recomiendo usar Glulx para las pruebas.
fuente
CPython 3 (nuevamente), agrietado por Sísifo
Puede hacer lo que quiera, siempre y cuando no esté implementado en C. Esto significa que no
print
, noinput
, todos ellos llegarán a la_(1)
línea y terminarán. Entrada de STDIN con los números en dos líneas separadas, salida a STDOUT. Me pregunto cuánto tiempo va a durar esto ... Me llevó bastante tiempo encontrar el segundo fragmento de trabajo después de encontrar este truco de discapacidad. Especificar explícitamente Cpython para evitar ser descifrado basado en alguna implementación alternativa de sys.setprofile.fuente
functools
?Java 8 ( agrietado )
Segundo intento. Esta vez invertí dos minutos de prueba.
La mayoría de las cosas deberían estar cubiertas.
fuente
Python 2 agrietado
Pruébalo en línea!
Prefiero esto diciendo que esta respuesta es un movimiento brusco, pensado como una respuesta de límite inferior.
Inspirado por las respuestas de Wheat Wizard e HyperNeutrino .
El fragmento lee el archivo fuente y se niega a continuar si el último fragmento de código separado por espacios en blanco no aparece
e6400dd63733d10ec042e3c28033cfa85e1d25fbef80020810c354d7c942e843
.EDITAR : Editado ligeramente en respuesta a este comentario . El problema central no cambia, no se invalida ningún intento de crack.
fuente
This code is not allowed to crash or exit.
Java 8 Craqueado por @ OlivierGrégoire
Traté de hacerlo lo más difícil posible! :) Y, a diferencia de la otra respuesta de Java hasta ahora, tendrás que seguir las reglas exactas del desafío, colocándola después de todo este fragmento (así que no, no pones tu código en el
public static void main(String[] args)
método, lo pones después de toda la clase. :) ¡Buena suerte!He agregado comentarios para mostrar lo que se está restringiendo.
( Inspirado en esta publicación, que es menos restrictiva y tolerable con el mismo enfoque que podría usar para mi respuesta ) .
Pruébalo aquí. (ideone.com en lugar de TIO, ya que no parece funcionar allí. Se han realizado pruebas en el IDE de Eclipse, pero mi solución prevista funciona si usa ideone.com)
fuente
Gelatina: Agrietada
Esto será increíblemente fácil en comparación con la increíble respuesta de Python de Wheat Wizard, pero aquí vamos: P
El sha256 hexdigest de mi solución alternativa, incluido el primer fragmento, es
cfeb1e193ad77f66f039c0d6a792a3e4c311490f6412698e019ca1fae10c0e0a
.Nota
Es posible que no tenga ninguna línea nueva en el código, excepto las cadenas; de lo contrario, este código ni siquiera se ejecutará, lo que anula el propósito de este desafío.
Agrietado por DJMcMayhem
Para ser justos, esto usa una nueva línea, por lo que me gustaría ver una solución que no use una nueva línea.
También una solución de Jonathan Allan
Esto no usa una nueva línea, por lo que ha sido descifrado. :PAGS
Mi solución es esta:
El primer fragmento solo elimina átomos de un solo carácter, lo que significa que Python eval todavía funciona :)))
fuente
JavaScript, agrietado
Entrada:
prompt()
dos vecesSalida:
console.log()
Mi solución no funciona en jsfiddle. Funciona en la página acerca de: en blanco con la consola JS de Google Chrome.
Mi solución:
Explicación:
Eliminé prompt y console configurándolos igual a 0.
En mi solución, creo un iframe, que crea un sandbox, y una nueva instancia de ventana donde prompt y console funcionan correctamente.
fuente
Java, agrietado
Esto
debería sermuy fácil de descifrar.Solución prevista
Pruébalo en línea
fuente
java.io
... Pero de todos modos obtuviste la solución deseada ...