Una quina frágil
Una quina frágil es una quine que satisface la propiedad de tener cada subcadena hecha mediante la eliminación de un solo carácter, cuando se evalúa, produce un error.
Por ejemplo. Si su programa asdf
es una quine, entonces para que sea frágil, deben fallar los siguientes programas:
sdf
adf
asf
asd
Su programa (y todas sus subcadenas) deben ser totalmente deterministas y deben estar en el mismo idioma. Un programa que cae en un bucle infinito (es decir, que no termina), incluso si finalmente no produce un error, se considera que "produce un error" a los efectos de este desafío.
Se aplican las lagunas estándar, incluidas las restricciones habituales de quine (por ejemplo, no se puede leer el código fuente propio).
Por ejemplo, print("foo")
no es frágil. Todas estas subcadenas deben error:
rint("foo")
pint("foo")
prnt("foo")
prit("foo")
prin("foo")
print"foo")
print(foo")
print("oo")
print("fo")
print("fo")
print("foo)
print("foo"
Los que no fallan son:
print("oo")
print("fo")
print("fo")
Entonces no es frágil.
Una nota importante sobre quines
Por consenso , cualquier posible quine debe satisfacer esto:
Debe ser posible identificar una sección del programa que codifique una parte diferente del programa. ("Diferente" significa que las dos partes aparecen en diferentes posiciones).
Además, una quine no debe acceder a su propia fuente, directa o indirectamente.
Ejemplo
Dado que considero que la función # toString de JavaScript es "leer su propio código fuente", no lo estoy permitiendo. Sin embargo, si no fuera a prohibirlo, aquí hay una frase frágil en JavaScript:
f=(n=b=`f=${f}`)=>(a=(n)==`f=${f}`,n=0,a)&(n!=b)?b:q
Ensayador
Aquí hay un programa que, dado el código fuente de su programa, genera todos los programas que deben error.
let f = (s) =>
[...Array(s.length).keys()].map(i =>
s.slice(0, i) + s.slice(i + 1)).join("\n");
let update = () => {
output.innerHTML = "";
output.appendChild(document.createTextNode(f(input.value)));
};
input.addEventListener("change", update);
update();
#output {
white-space: pre;
}
#input, #output {
font-family: Consolas, monospace;
}
<input id="input" value="print('foo')">
<div id="output"></div>