Una cadena se puede cambiar por un número n
obteniendo el valor c
de byte de cada carácter en la cadena, calculando (c + n) mod 256
y convirtiendo el resultado nuevamente en un carácter.
Como ejemplo, el desplazamiento "ABC123"
por 1 da como resultado "BCD234"
, el desplazamiento por 10 "KLM;<="
y el desplazamiento por 255 pulg "@AB012"
.
La tarea
Recoger la mayor cantidad de números n
con 0 < n < 256
que se atreve y escribir un programa o función que toma una cadena como entrada y
- devuelve la cadena sin cambios cuando el código fuente no cambia, pero
- devuelve la cadena desplazada por
n
cuando el código fuente se desplaza porn
.
Reglas
- El puntaje de su envío es el número de apoyados
n
, con un puntaje más alto mejor. La puntuación máxima es, por lo tanto, 255. - Su envío debe ser compatible con al menos un turno, por lo que la puntuación mínima es 1.
- En caso de empate, el programa más corto gana.
- Todos los programas modificados deben estar en el mismo idioma.
string
code-challenge
source-layout
Laikoni
fuente
fuente
\r
?Respuestas:
Brainfuck, puntuación: 31 (2208 bytes)
Programa codificado en Base64:
Funciona para turnos 0, 4, 8, 12, 32, 36, 40, 44, 64, 68, 72, 76, 96, 100, 104, 108, 128, 132, 136, 140, 160, 164, 168, 172 , 192, 196, 200, 204, 224, 228, 232 y 236.
Para cada valor entre 0 y 255, hay exactamente uno de esos cambios que envía a ese personaje a una instrucción válida de ataque mental.
El programa se basa en celdas de 8 bits con envoltura en desbordamientos. Probablemente esto se pueda jugar bastante, ya que el cambio solo consiste en una repetición
+
o-
(lo que sea más corto).Código de Python utilizado para generar esto:
fuente
+[>,.<]
?),[+.,]
donde+
es la cantidad de+
s o-
sl Haskell, puntuación 255 (27.026 bytes)
El programa funciona, pero ponerlo en mi portapapeles parece destruirlo, así que aquí hay un código que genera mi programa.
Verificación
Entonces, si copiar cosas en un portapapeles se rompe, ¿cómo verifico que funciona?
Puedes usar esto aquí . Puede ajustar
N
y la cadena (actualmenteBig ol' egg
) para ver que funciona usted mismo.Esto probará todo el N en una sola entrada en sucesión, pero tiende a agotar el tiempo.
Explicación
Esto abusa de la notación literaria de Haskell. En Haskell alfabetizado, cualquier línea que no comience
>
es un comentario. Entonces, para que nuestro código funcione, hacemos 255 copias del programa, cada una de las cuales cambian
y luego cambiamos cada copia individual-n
.fuente
C, puntaje: 1 (73 bytes)
Pruébalo en línea!
Desplazado por 1:
Pruébalo en línea!
fuente
05AB1E , Puntuación: 3 (24 bytes)
Pruébalo en línea!
Explicación
Cambiado una vez:
Pruébalo en línea!
Explicación
Desplazado dos veces:
Pruébalo en línea!
Explicación
Desplazado tres veces:
Pruébalo en línea!
Explicación
fuente
Javascript, puntuación:
14 (94346 bytes)Muy sencillo, tiene diferentes secciones comentadas cuando se rota, lo difícil fue encontrar nombres de variables utilizables y secciones de comentarios que no rompan la sintaxis de Javascript.
Sin rotar:
Rotado por 5:
Rotado por 10:
Rotado por 14: las cosas finalmente se pusieron interesantes aquí, tuve que abusar del sistema de tipos Javascript.
Rotado por 199:
Para encontrar las soluciones, construí una pequeña herramienta para mostrarme diferentes fragmentos cuando giraba una cantidad variable, luego encontré ciertos patrones que podría usar como bloques de construcción útiles.
La esencia principal de esto es que
a/**/=>a
todavía es una definición de función válida, lo que le permite incrustar una función rotada inversa en la sección de comentarios. A partir de ahí, se puede repetir varias veces, si se hace correctamente.Dado que la mayoría de las secciones de comentarios están anidadas, puede ser posible encontrar otro resultado, pero hacer que funcione cada vez es más difícil con cada respuesta agregada debido a colisiones y caracteres de control.
Reemplazar todos los usos de
charCodeAt(0)
withcharCodeAt``
eliminaría 4 bytes de toda la solución, pero es demasiado trabajo desde cero.fuente
charCodeAt()
para guardar 2 bytes?PHP con
-d output_buffering=on -d short_open_tag=on
, puntaje: 255 (25,731 bytes)Similar a la solución de Haskell, copiar y pegar estos saltos, por lo que generé esto usando este script de Perl .
Verificación para desplazado 1, 16, 32 y 255 veces.
Explicación
El uso de PHP
<?
delimitador hizo esta bastante fácil, pero tenía que evitar cualquier cadena que podría terminar como<?
en otra parte del código, esto significa básicamente03
,14
,25
,36
,47
,58
y69
. Trabajar alrededor de eso fue bastante fácil usando aritmética. También podría ser posible reducir el recuento de bytes en el programa original.fuente
Crane-Flak , Puntuación 3 (252 bytes)
Pruébalo en línea!
(No funciona en Brain-Hack porque solo mods Crane-Flak por 256)
Desplazado por 1
Pruébalo en línea!
Desplazado por 2
Pruébalo en línea!
Desplazado por 3
Pruébalo en línea!
Explicación
El código principal en el trabajo aquí es
donde
n
es un número arbitrario Esto mueve todo a la pila que se agregan
a cada elemento (el módulo 256 está implícito en la salida) y luego los mueve a todos de regreso.Sin embargo, para el primer programa (es decir, desplazado por 0) no necesitamos hacer nada de esto porque el desplazamiento por cero es el programa cat. Entonces comenzamos con este código:
y bajarlo por 1
Esto no está equilibrado, por lo que debemos solucionarlo. Hay varias maneras en que podríamos hacer esto mediante mi método de elección (por razones que se harán evidentes) es la siguiente:
Cambiando esto por 2 obtenemos
Dado que
()
es más fácil de tratar que{}
usaremos los}
s para completar el programa que deseamos. Eso significa que)
se puede equilibrar con medios bastante obvios. Con un poco de violín podemos convertir eso en:Cambiando eso hacia abajo, obtenemos
El paso al 3 es tan complejo que ya no lo entiendo. Utilicé la misma técnica y solo jugueteé con ella hasta que finalmente conseguí que los 4 funcionaran a la vez. La técnica es más o menos la misma, solo que hay mucho más violín.
fuente
Python 3, Puntuación 1, 76 bytes
Shift 0: sin cambios
Turno 1:
Comenzó a trabajar en el turno 2, pero "" se convierte en $$ y no puede comenzar una línea con eso.
Cuando lo guarde en un archivo, asegúrese de que no termine con una nueva línea. (vim -b file.py + set noeol)
fuente
Gelatina , puntaje
12815 bytesShift 0:
Pruébalo en línea!
Turno 2:
¡Prueba 2 en línea!
Turno 3:
¡Prueba 3 en línea!
fuente