Un programa endurecido por radiación es un programa en el que, si se elimina cualquier carácter del código, el programa seguirá funcionando igual. Para esta pregunta, escribiremos un programa que detecte cuándo se irradia.
Escriba un programa o función que, cuando se elimine cualquier byte, el programa resultante generará ese byte y solo ese byte. ( Puede generar ese byte varias veces, siempre que no genere ningún otro byte )
Reglas:
- El programa tiene que contener al menos 2 bytes distintos. (No hay soluciones de solo 0s;)
- No importa lo que haga el programa original.
- No leer su propio código fuente.
- El código se puntuará en el número de bytes distintos, donde gana la cantidad más alta. Por ejemplo,
abc
= 3 puntos,ababba
= 2 puntos,abc
gana.- El desempate es el recuento de bytes más pequeño, seguido del tiempo de envío anterior.
¡Buena suerte!
code-challenge
radiation-hardening
Jo King
fuente
fuente
Respuestas:
05AB1E ,
97 bytes (Puntuación de 3)Pruébalo en línea!
Eliminar un
'
Con cualquier
'
eliminación,22''rr
resultará en 22 siendo lo primero en la pila y'
siendo lo último en la pila, que cuando se invierte dos veces resulta en'
.Eliminar un
r
Con cualquier
r
eliminación,22'''r
resulta que 22 es lo primero en la pila, un'
ser lo segundo en la pila y unr
ser lo último en la pila. Estor
, sin embargo, fue precedido por un'
que lo convierte en la cadena literal"r"
(a diferencia del comandoreverse stack
), que se imprime implícitamente.Eliminar un
2
Con cualquier
2
eliminación, el ser2'''rr
será lo2
primero en la pila,'
será lo segundo en la pila y finalmenter
será lo último en la pila, que cuando se invierte una vez da como resultado2
.Por lo tanto, esta respuesta es válida. Sin nada eliminado
'
, resulta irrelevante. Esto funciona para cualquier número que no sea 2 también.Creado un verificador de validez, puede usarlo para competir en 05AB1E *.
* No estoy 100% seguro de cuántas soluciones son posibles en 05AB1E ...
Soluciones más válidas que son peores o iguales
'
más de 2 funcionará ...'''''''VV
,'''''''XX
o'''''''<any command that pops a without pushing>x2
'
más de 3 seguido de cualquier número par des
más de 1 (EG'''''''''ssss
).'''..
con cualquier número de períodos por encima de 1 y cualquier número impar de'
más de 2.'\\'''rr
- la misma idea que22'''rr
pero\
es "eliminar el último elemento de la pila".fuente
'
es irrelevante para las reglas, como usted dice. Pero invalida el objetivo nominal de detectar anomalías, lo cual es un poco divertido.Brainfuck, Puntuación 3
Puede no ser competitivo ya que la salida solo se ve a través de un volcado de memoria.
Suponiendo que la entrada está vacía y EOF deja la celda sin cambios. Utiliza un intérprete que volca la memoria en una salida, como esta .
Elimine un signo más y la memoria es el valor unicode para "+"; de lo contrario, es el valor unicode para ",". Sin embargo, es más un doblador de reglas que una respuesta. Más o menos lo mismo con "-". Abusa del hecho de que estos tres caracteres están uno detrás del otro en el conjunto de caracteres unicode.
fuente
Un peral, 256 bytes distintos, 975 bytes
Desafortunadamente, la pregunta requiere una solución óptima para contener un byte NUL en algún lugar (ya que debe contener los 256 bytes en algún lugar). Esto significa que a) no puedo darle un enlace TIO (porque a TIO no le gusta NUL en los programas, o al menos, no he encontrado una forma de escribirlo que mi navegador pueda manejar), y b) I no puede pegar el programa en Stack Exchange literalmente. En cambio, he colocado un
xxd
hexdump reversible oculto detrás del enlace "fragmento de código" debajo.Mostrar fragmento de código
Explicación
Este programa consta de tres partes idénticas. (Concatenar múltiples porciones idénticas de un programa es algo así como un tema para mí en los programas de resistencia a la radiación .) Cada A Pear Tree requiere una suma de verificación en algún lugar para que el intérprete sepa qué partes del programa ejecutar; rota cualquier parte del programa para el cual la suma de comprobación se inicia correctamente antes de ejecutarla (o imprime
a partridge
si no coincide la suma de verificación). En este caso, tenemos una suma de comprobación en cada una de las tres partes y, por lo tanto, una parte no irradiada se moverá al inicio. Por lo tanto, podemos suponer que el programa consta de una parte no modificada, seguida de otras dos partes (una de las cuales puede haber sido modificada).Cada parte comienza con una nueva línea, luego continúa con el siguiente código (he agregado espacios en blanco y comentarios a continuación):
Después de eso viene una copia de cada octeto que no se ha utilizado en el programa hasta ahora (solo para subir la puntuación) y, finalmente, la suma de comprobación. (No hay una nueva línea final; las partes comienzan con una nueva línea pero no terminan con una).
Aquí hay tres casos distintos:
%z
un número impar de veces, y finalmente terminará en la tabla hash. De hecho, será la única clave en la tabla hash (ya que la cadena se ejecuta desde después de la nueva línea de la segunda parte hasta el final de la tercera parte, y la tabla hash comenzó con una sola nueva línea), así que ' Se imprimirá solo.<DATA>
contiene todos los caracteres un número par de veces, por lo que la tabla hash tendrá su contenido original, una nueva línea y se imprimirá.<DATA>
solo comienza a leer desde la línea de abajo__DATA__
, por lo que solo verá la tercera parte. Esto tiene más de cinco caracteres que aparecen un número impar de veces, por lo que activará el caso especial para imprimir una nueva línea.Verificación
Una última cosa que debe verificarse para detectar prácticamente cualquier programa de A Pear Tree endurecido por radiación es si una eliminación ocasiona aleatoriamente una sección no deseada del código a la suma de comprobación correctamente y gira el código en el lugar incorrecto; Dado que estamos usando sumas de verificación de 32 bits, esto es poco probable pero no imposible. Utilicé el siguiente script de fuerza bruta para asegurar que esto no suceda para ninguna eliminación:
El script de verificación confirma que este programa funciona correctamente.
fuente
Stax , 11 bytes (puntaje de 4)
¡Ejecute y depure en línea!
Es un honor para mí tener la primera respuesta (cronológicamente) a este desafío con un puntaje mayor o igual a 4. Sin embargo, el puntaje puede ser aún mayor.
En Stax, se escribe un literal de cadena que se compone de un solo carácter
'
, por'', 'c, 'd, '~
lo que todos los literales de cadena. Los comandos correspondientes parac
d
y~
significa duplican la parte superior de la pila principal, abren la parte superior de la pila principal, abren la parte superior de la pila principal y empujan a la pila de entrada, respectivamente. Para este desafío, la pila de entrada no afecta la salida y no es importante, por lo tanto, podemos decird
y~
son idénticos.Explicación
Es mejor dividir el código en varias partes y considerarlas por separado.
Cuando no se manipula,
'''cc
empuja un literal'
y un literalc
a la pila principal, y duplica la parte superior, por lo que la pila sería (de abajo a abajo)c,c,'
.Cuando no se manipula,
'~~
empuja el literal~
y luego lo hace estallar (y empuja a la pila de entrada), que es básicamente un no-op para la pila principal.Cuando no se manipula,
'dd
empuja el literald
y luego lo abre, otro no-op para la pila principal.Al final del programa, dado que no se realiza una salida explícita, la parte superior de la pila principal se imprimirá implícitamente.
Si el programa se ejecuta tal cual, la pila final está quieta
c,c,'
y generarác
.Si la primera parte se convierte
''cc
, entonces tenemos un literal'
, y dos instrucciones de copia, la pila final será',','
. Dado que las otras dos partes no funcionan, el resultado será'
.Si se convierte en la primera parte
'''c
, el resultado es básicamente el mismo con la sin control, peroc
no se duplica. Entonces la pila serác,'
. Después de dos no-op la parte superior de la pila esc
.Entonces podemos detectar la radiación en la primera parte.
La segunda parte y la tercera parte funcionan exactamente de la misma manera. Tomaré la tercera parte como ejemplo.
Si se manipula la tercera parte, las dos primeras partes se mantienen tal cual y la pila antes de ejecutar la tercera parte es
c,c,'
Si la tercera parte se convierte
'd
,d
se empuja un literal a la parte superior de la pila principal y no se hace nada más. La parte superior de la pila principal es ahora lad
que saldrá.Si se convierte en la tercera parte
dd
, se sacan dos elementos de la pila principal y ahora la parte superior de la pila es'
y se emite.Por lo tanto, podemos detectar radiación en la tercera parte. Por la misma razón, podemos detectar radiación en la segunda parte.
fuente
05AB1E , puntaje 2, 6 bytes
Imprime el doble del personaje eliminado a veces. No contiene
'
.Cómo funciona:
Quitando el primero
„
Pruébalo en línea!
Primero, empujamos un literal de cadena vacío a la pila. Luego presionamos
„„
, que se imprime implícitamente.Eliminar un
"
Pruébalo en línea!
Primero, empujamos
""
a la pila con las2-char string
instrucciones. Luego intentamos obtener otra cadena de 2 caracteres, pero esto se cancela (no estoy exactamente seguro de por qué) y el""
se imprime.Eliminar el segundo o el tercero
„
Pruébalo en línea!
Primero, empujamos
""
a la pila con las2-char string
instrucciones. Luego presionamos„
, que se imprime implícitamente.fuente
Gelatina , 5 bytes, puntaje 2
Pruébalo en línea!
Con cualquier
”
eliminado:Pruébalo en línea!
El carácter
”
comienza un carácter literal de un byte. Este programa comienza con el””
que produce la cadena”
. Laḷ
diada toma su argumento izquierdo. La cadena”
acaba se pasa a través de las dos instancias deḷ
.Con cualquier
ḷ
eliminado:Pruébalo en línea!
En este programa se
””
obtiene el carácter,”
se”ḷ
obtiene el carácterḷ
y solo se genera este.Otras soluciones
a
oo
habrían funcionado en lugar deḷ
esta presentación.⁾⁾⁾⁾FFF
. Esto funciona de manera similar.⁾
es como”
pero inicia un literal de cadena de dos bytes. Los programas "irradiados" emiten el byte eliminado dos veces, que se consideró válido en los comentarios.Aquí hay una versión Jelly (mucho menos elegante) del verificador de validez de Magic Octopus Urn. La columna izquierda de la salida es el carácter eliminado y la columna derecha es la salida del programa resultante.
fuente