En este desafío de policías y ladrones , los policías pensarán en un número entero positivo. Luego escribirán un programa o función que genere un valor cuando se les proporcione el número como entrada y otro valor para todas las demás entradas enteras positivas. Los policías revelarán el programa en una respuesta manteniendo el número en secreto. Los ladrones pueden descifrar una respuesta al encontrar el número.
Aquí está el truco: este no es un código de golf , sino que su puntaje será el número secreto con un puntaje más bajo mejor. Obviamente, no puede revelar su puntaje mientras los ladrones todavía están tratando de encontrarlo. Una respuesta que no se haya descifrado una semana después de su publicación puede tener su puntaje revelado y marcado como seguro. Las respuestas seguras no se pueden descifrar.
Probablemente no sea necesario decirlo, pero debería poder calificar su respuesta. Es decir, debe saber exactamente qué valor acepta su máquina de decisión. Simplemente saber que hay uno no es suficiente.
Uso de funciones criptográficas.
A diferencia de la mayoría de los desafíos de policías y ladrones que le piden que no use funciones criptográficas, este desafío no solo los permite por completo, sino que los alienta. Usted es libre de crear respuestas de cualquier manera, siempre que intente ganar. Dicho esto, las respuestas que utilizan otros métodos también son bienvenidas aquí. El objetivo del desafío es ganar, y mientras no hagas trampa, no hay nada fuera de la mesa.
fuente
A(9,9)
dondeA
es la función de Ackerman.Respuestas:
Tampio , agrietado
Corre con:
Las instrucciones para instalar el intérprete se incluyen en la página de Github. Indique si tiene alguna dificultad para ejecutar esto.
fuente
Perl 6 - ¡Agrietado!
En un sentido estricto, esta no es una presentación aceptable porque no se esfuerza mucho por ganar. En cambio, espera ofrecer un rompecabezas agradable.
Es un programa de "matemática pura" que está destinado a ser descifrado por la contemplación. Estoy seguro de que podría aplicar la solución a la fuerza bruta (después de limpiar una programación descuidada que he cometido a propósito), pero para "crédito completo" (: -)), debería ser capaz de explicar lo que hace en términos matemáticos .
Se supone que debes descifrar la función f (). (Esa es la función que toma un número natural y devuelve uno de los dos resultados). Advertencia: como lo muestra @Nitrodon, el programa en realidad se comporta incorrectamente y "acepta" un número infinito de entradas. Como no tengo idea de cómo solucionarlo, solo comento para los solucionadores futuros que el número que tenía en mente es menor que 70000 .
Si intenta ejecutar esto en TIO, que será el tiempo de espera. Esto es intencional (¡Ya que no se supone que se ejecute en absoluto!)
Finalmente, intenté escribir un código razonablemente claro. Deberías poder leerlo con fluidez, incluso si no estás familiarizado con el idioma. Solo dos comentarios: los corchetes [ op ] significan reducir ("plegar", en la jerga de Haskell) una lista con el operador op ; y el sub llamado
postfix:<!>
realmente define un operador postfix llamado! (es decir, se usa como5!
: hace exactamente lo que cabría esperar). Del mismo modo para elprefix:<∫>
uno.Espero que alguien disfrute de este, pero no estoy seguro de haber entendido bien la dificultad. No dudes en criticarme en los comentarios :—).
Pruébalo en línea!
fuente
JavaScript, agrietado
He ofuscado esto tanto como puedo, hasta el punto de que no cabe dentro de esta respuesta.
Pruébalo aquí! Haga clic en Ejecutar, luego escriba la consola
guess(n)
Devuelve indefinido si obtiene la respuesta incorrecta, de lo contrario devuelve verdadero.
Editar: De alguna manera, pasé por alto la parte de que mi puntaje era el número. Oh bueno, mi número es muy muy grande. Buena suerte resolviéndolo de todos modos.
fuente
Gelatina , puntaje: ... 1 ( agrietado )
Pruébalo en línea!
1 ¿ Realmente esperaba que lo revelara? ¡Venga! Bueno, tiene un puntaje de 134. ¡Ahí lo dije!
fuente
Ç€G
y el rango1...1000
como entrada: P5ȷ2_
parte ¿verdad?1
está, luego pegué la cadena desde el principio hasta que estaba1
en un script de Python y conté el número de ceros antes ...Python 2 (agrietado)
No sugeriría fuerza bruta. Espero que les gusten los generadores!
Pruébalo en línea!
Salidas
1
para el número correcto, de lo0
contrario.fuente
a
debería serloi+a
. Lo arreglé, pero de todos modos está agrietado encogiéndose de hombrosHaskell , agrietado
Esto se basa únicamente en la aritmética. Tenga en cuenta que esa
myfun
es la función real, mientras queh
es solo una función auxiliar.Pruébalo en línea!
fuente
Java, agrietado por Nitrodon
Quería probar algo diferente a las funciones hash y aleatorias habituales. Puede pasar el número como argumento de línea de comando. Salidas
1
si se da el número correcto y de lo0
contrario. Para números pequeños, también puede probarlo en línea .Insinuación:
Explicación:
fuente
Pyth, agrietado por Erik el Outgolfer *
Traté de ofuscar esto tanto como sea posible.
Pruébalo aquí!
fuente
Octava, puntuación: ???
Está prácticamente garantizado que ningún otro número tendrá exactamente los mismos 20 números aleatorios al final de la lista de
1e8
de números.Salidas
1
para el número secreto, de lo0
contrario.Ejecuté esto en Octave 4.2.0.
"Los sueños y otras ralentizaciones se pueden eliminar cuando se hace fuerza bruta".
Buena suerte con eso :)
fuente
Ly , puntaje 239, agrietado
Pruébalo en línea!
No cuento con que nadie conozca a Ly aquí, aunque sé con qué facilidad eso podría cambiar ... sudores
Explicación:
fuente
Brain-Flak , puntuación 1574 ( agrietada )
Pruébalo en línea!
fuente
corriente continua
Pruébalo en línea!
Nota: Este envío se ha modificado desde que se envió. La presentación original (a continuación) fue inválida y descifrada por Sleafar en los comentarios a continuación. (Una entrada de
1
da lugar a la salidayes
, pero hay otro número que da el mismo resultado).Pruébalo en línea!
fuente
Rubí , seguro, puntaje:
Pruébalo en línea!
Explicación:
fuente
PHP, seguro, puntuación:
Salidas 1 si es correcto, 0 de lo contrario.
Editar: No creo que nadie haya intentado descifrar esto porque:
Explicación:
fuente
Swift 3 (53 bytes) - Agrietado
¿Cómo ejecutar esto? -
f(n:1)
.Prueba aquí.
fuente
Python 3, puntuación: ???
Esperemos que esto, si acaso, demuestre cuán roto es un problema que realmente es:
Esencialmente, lo que hace este código es generar perezosamente todas las cadenas posibles hasta que una de las cadenas tenga un hash que coincida exactamente
hash_code
anterior. El código sin mostrar toma la forma básica de:Excepto
<insert number here>
se reemplaza con un número y hay comentarios en el código con el propósito de hacer que el código sea casi indiscutible.He tomado todas las precauciones para asegurarme de no beneficiarme de esta publicación. Para empezar, es wiki comunitario, por lo que no obtendré reputación por ello. Además, mi puntaje es bastante grande, así que espero que aparezca una respuesta mucho más creativa y gane.
Espero que no estén demasiado furiosos con mi respuesta, solo quería mostrar por qué las publicaciones de policías y ladrones generalmente prohíben los algoritmos de hash.
fuente
256 ^ 100
o2 ^ 800
cadenas. Mientras tanto, solo hay2 ^ 512
posibles hashes de 512 bits. Eso significa que las cadenas que iteras superan en número a los posibles hashes al menos2 ^ 288
a uno, un número 10,000 veces mayor que el número de átomos en el universo. La probabilidad de que ese hash en particular no se use es increíblemente pequeña .Python 3 , 49 bytes, descifrado por sonar235
Pruébalo en línea!
fuente
Java, puntuación: 3141592 ( Agrietado )
fuente
Python 3, puntaje 1 (seguro)
No es una solución muy interesante, pero es mejor un policía seguro que un policía muerto.
Salidas
1
para el número objetivo, de lo0
contrario. La entrada se toma de stdin. La última parte (and int(original.decode())<1000
) existe solo para garantizar una sola respuesta, de lo contrario obviamente habría infinitas respuestas.fuente
100000000
.C (gcc) , puntuación ???
Dado que se recomiendan soluciones criptográficas, aquí. Exactamente un número entero positivo imprimirá algo , todos los demás no imprimirán nada. Esto lleva mucho tiempo, por lo que no se puede probar en línea.
fuente
Java, 164517378918, seguro
fuente
TI-BASIC,
puntaje: 196164532no competidorDevuelve 1 para el número secreto, 0 de lo contrario.
Consulte la nota en esta página sobre el
rand
comando para obtener más información.fuente
Python 3 , puntuación :?
Pruébalo en línea!
Simple, pero puede tomar algo de tiempo para la fuerza bruta ;-) Esperando un crack rápido ;-)
Nota al pie: las dos primeras y las últimas condiciones hacen que la respuesta sea única.
Por cierto, ¿cómo se calcula la puntuación?
Pista 1
fuente
Aceto , seguro
Emite TrueFalse si es correcto, FalseFalse de lo contrario
El numero era
Pruébalo en línea!
fuente
C #, Mono, Linux, Alpha, puntaje 1 (seguro)
Cuidadoso. Lo digo en serio. Hay muchos simuladores alfa por ahí. Use uno con nerviosismo o esto no terminará.
Esto depende del hecho de que Alpha es big-endian, lo que hace que System.BitConverter haga lo incorrecto si alguien intenta esto en x86 o x64. Escribí esta respuesta para demostrar la maldad del desafío más que cualquier otra cosa.
fuente