Cualquiera puede aumentar el rendimiento de un programa agregando caracteres, así que hagamos exactamente lo contrario.
Escriba un programa completo, una función interna o un fragmento para un entorno REPL en un idioma de su elección que satisfaga los siguientes criterios:
Su código debe tener al menos 1 carácter de largo.
La ejecución del código original produce x caracteres de salida a STDOUT (o la alternativa más cercana), donde 0 ≤ x <+ ∞ .
La eliminación de cualquier carácter individual arbitrario del código original vuelve a generar un código válido, que produce al menos x + 1 caracteres de salida a STDOUT.
Ni el código original ni las modificaciones pueden producir ningún resultado de error, ya sea STDOUT, STDERR, syslog u otro lugar. Las únicas excepciones a esta regla son las advertencias del compilador.
Es posible que su programa no requiera ningún indicador o configuración para suprimir la salida de error.
Es posible que su programa no contenga errores fatales, incluso si no producen ningún resultado.
Tanto el código original como las modificaciones deben ser deterministas y terminar finalmente (sin bucles infinitos).
Ni el código original ni las modificaciones pueden requerir entrada de ningún tipo.
Las funciones o fragmentos pueden no mantener ningún estado entre ejecuciones.
Teniendo en cuenta que esta tarea es trivial en algunos idiomas y francamente imposible en otros, este es un concurso de popularidad .
Al votar, tenga en cuenta la "brevedad relativa" del código, es decir, una respuesta más corta debe considerarse más creativa que una respuesta más larga en el mismo idioma .

111111111111111111^111111111111111111(si se refería a la proporción más baja).kinstrucciones constantes , la salida de cada programa es estrictamente mayor que la salida del original a partir de entonces (porque el otro los programas realizarían un bucle más rápido o generarían más cada bucle). Se veía bastante interesante. Tal vez veré si puedo terminarlo de todos modos y hacer otro desafío.Respuestas:
Cualquier REPL con operación caret XOR, 5 bytes
11^11es, por supuesto, 0. Las únicas otras posibilidades son1^11o11^1que son 10, o1111que se produce a sí mismo.fuente
99|99-10es más largo que0.TI-BASIC,
31Cuando la última línea de un programa es una expresión, la calculadora mostrará esa expresión. De lo contrario, la calculadora aparece
Donecuando finaliza el programa. La expresión aquí es la cadena vacía, pero también podría funcionar con cualquier número de un dígito.2 bytes:
Igual que el anterior pero con un token de 2 bytes.
3 bytes:
Impresiones
1debido a multiplicación implícita. Se puede extender indefinidamente agregando pares de⁻¹'s. Los siguientes también funcionan.Soluciones más largas:
Probablemente también hay soluciones de varias líneas, pero no puedo encontrar ninguna.
fuente
Doneficha; la calculadora apareceDonecuando termina de ejecutar cualquier programa sin una expresión en la última línea (incluido el programa vacío).CJam, JavaScript, Python, etc., 18 bytes
Las salidas en CJam son:
JavaScript y Python funcionan de manera similar. No es competitivo en JavaScript y Python,
pero no es fácil encontrar uno más corto en CJam.fuente
Octava, 5 bytes
(x: y) da la matriz de números entre x e y en incrementos de 1, por lo que entre 10 y 10 el único elemento es 10:
Cuando el segundo argumento es menor que el primero, la octava imprime la matriz vacía y sus dimensiones:
Cuando se elimina un carácter del primer número, hay más elementos en la matriz:
Cuando se eliminan los dos puntos, el número vuelve a aparecer:
fuente
Microscript, 1 byte
Esto no produce salida, ya que
hsuprime la impresión implícita del lenguaje. Eliminar el único carácter produce un programa cuya salida es0\n.Trataré de encontrar una mejor respuesta más tarde.EDITAR EL 17 DE NOVIEMBRE:
Esto también funciona en Microscript II, con la excepción de que, en lugar de ceder
0\n, el programa vacío rindenull.fuente
Pyth, 3 bytes
Gse preinicializa con las letras minúsculas en el alfabeto.ces la función divididacGGdivide el alfabeto por ocurrencias del alfabeto, que termina en['', ''](8 bytes).Cuando falta el segundo parámetro,
cdivide la cadena por espacios en blanco, tabuladores o líneas nuevas. Como ninguno de ellos apareceG, la salidacGes['abcdefghijklmnopqrstuvwxyz'](30 bytes).Y
GGsimplemente imprime dos veces el alfabeto en dos líneas separadas:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz(53 bytes).Pruébelo en línea: demostración
fuente
Python REPL, 6 bytes
No es el más corto, pero aquí hay otra respuesta de abuso de punto flotante:
Pero...
fuente
JavaScript (y mucho más), 5byte
44/44ofuente
CJam, 5
Pruébalo en línea
fuente
Lenguage , 5 bytes
La longitud del programa es 5, que corresponde al programa brainf *** que
,lee el final del carácter de entrada y termina sin salida.La eliminación de cualquier resultado de caracteres en el código
0000que tiene una longitud de 4 correspondiente al programa brainf ***.imprime un carácter (punto de código0) y termina.El equivalente unario sería
0000000000000(13 ceros) porque tiene que anteponer un líder1a la longitud binaria del código para que se101convierta1101.fuente
PHP, 6 bytes
He estado viendo este grupo durante un par de semanas y estoy sorprendido de tus técnicas de programación. Ahora tenía que iniciar sesión, hay algo que puedo hacer, lo siento :-) Sin embargo, esta podría ser mi última publicación aquí ...
(tenga en cuenta el espacio después de segundo
p)Esto genera una cadena vacía. La eliminación de cualquier carácter genera el texto sin el carácter. Tenga en cuenta que puede producir errores HTML (contenido no representado por los navegadores, por ejemplo
<?ph).También probé con la
echoetiqueta. es decir. p.ej.:Este sale
1. Si=se omite,<? __LINE__;;es la salida. Sin embargo, eliminar cualquiera de los caracteres de la constante mágica dará como resultado E_NOTICE : Aviso: Uso de la constante indefinida LNE - asumió ' LNE ' en ...Si los avisos no se consideran errores (punto 4 de las reglas), esto también se aplica :-)
fuente
<HTML>etiqueta, etc.)php test.php. El segundo código no es válido por cierto. La pregunta no prohíbe errores, sino errores de salida , es decir, errores, advertencias, avisos, etc.#!en un archivo de script también funciona.Python,
108 bytesFunciona en Python y amigos. Gracias a Jakube por mostrar cómo hacerlo 2 bytes más pequeño.
Desde IDLE:
Originalmente tenía esto (10 bytes):
Desde IDLE:
y en la misma nota:
funciona de manera idéntica debido al buen redondeo de Python, en 17 bytes.
fuente
56...,26...y de56...nuevo, pero solo hay una forma de obtener 56, por lo que debe incluirse solo una vez, ¿no?Intérprete SWI-Prolog
Nota: No puede eliminar la final
.. Los intérpretes de Prolog siempre buscarán un período final para ejecutar su consulta, por lo que si nos atenemos estrictamente a las reglas de este concurso y nos permitimos eliminar el período que no se ejecutará, saltará una línea y esperará comandos adicionales hasta termina con un puntoLa consulta original
__A=__A.saletrue..La consulta
_A=__A.sale_A = '$VAR'('__A'). Modificaciones similares (es decir, eliminar uno_o uno de los dosA) resultarán en salidas similares.Finalmente, la consulta
__A__A.sale en SWI-Prolog:fuente
Sed, 1 byte
Como
sedrequiere un flujo de entrada, propondré una convención según la cual el programa en sí debería ser suministrado como entrada.Un programa alternativo es
x, pero eso solo cambia de1a2bytes de salida cuando se elimina.fuente
K, 3 bytes
Salidas
0en el REPL. La eliminación de las primeras 2 salidas0 1, la eliminación de los resultados de exclamación22y la eliminación de los últimos 2 resultados en una cadena que varía entre las implementaciones de K pero siempre tiene al menos 2 caracteres (en OK, es(2!); según @Dennis, salidas de Kona2!).fuente
*impresiones justas 2. Eliminación de las 2 impresiones(*!)(una función incompleta) en OK; No sé acerca de otros intérpretes (por ejemplo, Kona, k2, etc.), aunque creo que Kona imprimiría*[!;]o algo similar. Fui con la eliminación de la estrella porque parecía la más segura.MATLAB,
97 bytesEs 2 bytes más largo que la otra respuesta de MATLAB / Octave, pero de todos modos me gusta, ya que es un poco más complejo.
El
'operador de Matlab es la transposición conjugada compleja. Usando esto en un número imaginario escalar, obtienesi' = -i. Como los números imaginarios se pueden escribir simplemente como2ise puede hacer:Eliminar cualquiera de los caracteres dará como resultado uno de los siguientes:
fuente
GolfScript, 2 bytes
Esta respuesta no es competitiva, pero como es el código que inspiró este desafío, quería compartirla de todos modos.
Por defecto, todos los programas de GolfScript imprimen toda la pila, seguida de un salto de línea, ejecutándose
putsen toda la pila. La función enputssí se implementa como{print n print}en el intérprete, dondeprintes una función incorporada real ynes una variable que contiene la cadena"\n"de forma predeterminada.Ahora, un programa GolfScript siempre empuja la entrada de STDIN en la pila. En este caso, como no hay ninguna entrada, se empuja una cadena vacía. La asignación variable
:nguarda esa cadena vacían, suprime el salto de línea implícito y hace que la salida esté completamente vacía.Al eliminar
n, queda la asignación de variable incompleta:(se podría pensar que es un error de sintaxis, pero no), por lo que el salto de línea implícito se imprime como de costumbre.Al eliminar
:, quedan, lo que empuja un salto de línea en la pila, por lo que el programa imprime dos saltos de línea.fuente
APL, J y posiblemente otras variantes, 3 bytes
Sale
1en APL.-1salidas¯1y--salidas de lo siguiente en TryAPL :fuente
J, 5 bytes
Magnitud del número complejo
5 + 12ien REPL..
J, 9 bytes
Basado en precisión de coma flotante, inversa y matriz inversa.
Pruébelo en línea aquí.
fuente
Mathematica, 3 bytes
fuente
Dyalog APL , 2 bytes
⍴0devuelve una cadena vacía (longitud 0)⍴devuelve⍴(longitud 1)0devuelve0(longitud 1)fuente
Swift (y mucho más), 8 bytes
salida (4 caracteres):
Al eliminar el enésimo carácter, la salida es:
Hay 78 posibles soluciones como esta en el formato de
a^b<c.Creo que el objetivo de este desafío debería ser tantos bytes como sea posible, porque cuantos más bytes, más bytes posibles eliminar y, por lo tanto, más difícil.
fuente
MathGolf , 2 bytes
Pruébalo en línea!
Explicación
¿Por qué funciona esto?
La salida regular es
9. Si(se elimina, la salida es 10. Si♂se elimina, el programa saca implícitamente un 0 de la pila para alimentar al(operador, que genera-1.fuente
Clojure, 11 bytes
Al principio pensé simplemente publicar una respuesta de un solo carácter en el REPL como los otros idiomas, por ejemplo
Pero el problema es que si elimina ese carácter, el REPL no hace nada al presionar la tecla enter. Por lo tanto, tenía que envolverse con una función permitida por las reglas de la pregunta. Cuando llama a esta función, devuelve 1. Si elimina el único carácter de la función,
devuelve la función
nilque imprime dos bytes adicionales.fuente
1en este caso (1 byte).05AB1E (legado), 1 byte
Cualquier byte en 05AB1E (legado) funcionaría, excepto
[(bucle infinito).Vea aquí todas las salidas posibles para todos los programas 05AB1E de byte único posibles.
Al eliminar ese byte único para que quede un programa vacío, el contenido de info.txt se enviará a STDOUT de forma predeterminada.
Pruébalo en línea.
05AB1E , 1 byte
Pruébalo en línea.
Desafortunadamente, un programa vacío en la nueva versión de 05AB1E solo genera una nueva línea de 1 byte de forma predeterminada ( Pruébelo en línea ), por lo que casi ninguno de los caracteres de 1 byte es posible ya que no tendrán que mostrar nada.
?Hasta donde yo sé, el único programa posible que no genera nada (por lo que tampoco es la nueva línea implícita) .fuente
Japt , 2 bytes
Pruébalo en línea!
Ase pre-inicializado a 10,Éresta 1, y el resultado es 1 byte:9.La eliminación de É da como resultado el programa
A, que genera el valor de A10, por lo que el resultado es de 2 bytes.Del mismo modo, eliminar A da como resultado exactamente lo
Éque se interpreta como -1 y se genera como-1, por lo que el resultado es de 2 bytes.fuente
Encantamientos rúnicos , 6 bytes (modificables)
Pruébalo en línea!
Runic no tiene un entorno REPL y escribir un programa completo para satisfacer las restricciones no es fácilmente factible (lo que lleva a programas no válidos o sin salida). Entonces, la parte del código
11-{{Bestá actuando como una función interna y solo esta parte puede modificarse. LaBinstrucción está lo suficientemente cerca de un puntero de función y una declaración de retorno de que esta clasificación debe ser aceptable (ya que salta la IP a una posición en el código y empuja una ubicación de retorno a la pila a la que puede acceder un usuario posteriorBo descartado) .01s:05-:11{:Error051B:120El final
\al final de la primera línea proporciona un límite externo alrededor de la función interna en el caso de que se elimine la instrucción de retorno para que la IP no se desplace por todas partes por todas partes (e imprima sin salida).Tenga en cuenta que
Error051es solo una cadena arbitraria, podría poner lo que quisiera en esa parte del código y "Error" fue un resultado divertido por tener un código que agiliza las coordenadas de retorno y los teletransportes IP a una ubicación arbitraria.fuente