Para el puesto de ladrones, máquina Cheapo Enigma (ladrones)
El envío de un policía consistirá en un programa / función que acepta un solo byte de datos y devuelve un solo byte de datos. Cada entrada posible debe producir una salida única. (En otras palabras, su función debe ser biyectiva)
Los ladrones intentarán crear la función inversa de los suyos utilizando un código lo más corto posible. Por lo tanto, su objetivo es hacer que su función sea difícil de invertir.
No puede utilizar elementos integrados que tengan el único propósito de cifrar o cifrar.
Su recuento de bytes no puede exceder los 64 bytes. Las soluciones de 0 bytes no son elegibles para ganar.
Formato de entrada / salida
8 bits (0 o 1), o un entero de base 10 en el rango 1-256, 0-255 o -128 a 127. Puede usar E / S estándar o E / S de archivo. La función también puede devolver un valor como salida. La entrada y la salida deben pertenecer al mismo rango (binario, 1-256, 0-255 o -128 a 127). El ladrón también deberá usar este rango para entrada y salida.
Puntuación
Relación entre el número de bytes y el intento del mejor ladrón contra usted. La puntuación más baja gana.
Eres elegible para ganar (como policía) solo si un ladrón ha intentado vencerte. (Este ladrón puede ser usted)
Ejemplo
C ++, usa rango 0-255, 31 bytes
int x;
cin>>x;
cout<<(x+1)%256;
Posible envío de ladrones en C ++, 32 bytes
int f(int x)
{return x?x-1:255;}
Usar el mismo lenguaje o un algoritmo similar no es un requisito
Esto le da un puntaje de 31/32 = 0.97 tanto al policía como al ladrón.
fuente
Respuestas:
Javascript,
118 bytes, Puntuación: 8/5Implementación simple de código gris. La decodificación usualmente necesita un ciclo completo. ¡Veamos a quién se le ocurre el más pequeño o incluso sin bucle!
fuente
x^x/4
que será más difícil porque no debería haber incorporados para ello ...^
es bitor xor, no exponenciación. De todos modos, parece mágicoC, 64 bytes, puntaje 64/71 = 0.901
Toma entrada en el rango [0 255].
Pruébalo en línea! - en TIO (usando GCC), esto produce:
Tenga en cuenta que en otros sistemas, puede producir resultados diferentes (pero aún válidos), ya que C no exige una
rand
implementación específica . Mi presentación es específicamente la versión que se ejecuta en TIO (como vinculada).Estoy bastante decepcionado de que no haya podido obtener una versión como mi original (
f(x){return rand(srand(x*229))/229%256;}
) para trabajar en TIO, ya que creo que es mucho más elegante. Como eso solo funciona en Clang que se ejecuta en OS X, no es justo para la competencia. Esto todavía es bastante incómodo de revertir, así que eso es suficiente, supongo.fuente
srand()
, por lo que tendrá que decidir si es aceptable de esta forma.Gelatina , 2/5
Pruébelo en línea para ver toda la tabla.
fuente
JavaScript, 44 bytes 22/3
Utiliza ordenación lexicográfica (Javascript predeterminado) para reorganizar todos los números del 0-255
Pruébalo en línea!
fuente
C (gcc) ,
3227/30 bytesGracias a Christoph por jugar al golf 5 bytes.
Pruébalo en línea!
fuente
f(x){x=x?f(x*5+1&255)+1:0;}
una puntuación de27/30
.Javascript, 11/8 bytes
El dominio / rango es de 1 a 256.
fuente
x**3
yx**5
debería funcionarJavaScript, 13 bytes 13/12
La entrada y la salida están ambas en el rango 1-> 256
Pruébalo en línea!
fuente
Javascript, 27/29 bytes
Editar: Rango / Dominio es 1..256. Generado a través de la fuerza bruta, más o menos.
fuente
Octava , 16/6
Pruébalo en línea!
fuente
Java, 35 bytes
Dominio / Rango son 0-255
fuente
Ruby, 23 bytes
Rango y dominio es 0..255. Concatena 228 consigo mismo x veces, luego toma el módulo de resultado 257 (0 asigna a 0). 228 es el primer número mágico después del 9 que funciona para este rango (proporciona valores distintos que no incluyen 256).
fuente
Python 3, 55 bytes
El dominio / rango es 0-255.
fuente
Python 3, 32 bytes 32/23
El dominio / rango es 0-255.
Voltea los primeros cuatro bytes con los últimos cuatro y agrega un tres a los primeros bytes.
fuente
Mathematica, 13 bytes
Utiliza el rango [1..256], aunque es igualmente válido en el rango [0..255]. Para ver la tabla completa, copie / pegue una de las siguientes líneas de código en el sandbox de Wolfram :
fuente
brainfuck , 37/11
Pruébalo en línea!
No muy bueno pero rango de 0-255
fuente