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).k
instrucciones 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^11
es, por supuesto, 0. Las únicas otras posibilidades son1^11
o11^1
que son 10, o1111
que se produce a sí mismo.fuente
99|99
-10
es 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
Done
cuando 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
1
debido 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
Done
ficha; la calculadora apareceDone
cuando 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
h
suprime 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
G
se preinicializa con las letras minúsculas en el alfabeto.c
es la función divididacGG
divide el alfabeto por ocurrencias del alfabeto, que termina en['', '']
(8 bytes).Cuando falta el segundo parámetro,
c
divide la cadena por espacios en blanco, tabuladores o líneas nuevas. Como ninguno de ellos apareceG
, la salidacG
es['abcdefghijklmnopqrstuvwxyz']
(30 bytes).Y
GG
simplemente 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/44
ofuente
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
0000
que 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íder1
a la longitud binaria del código para que se101
convierta1101
.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
echo
etiqueta. 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
sed
requiere 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 de1
a2
bytes de salida cuando se elimina.fuente
K, 3 bytes
Salidas
0
en el REPL. La eliminación de las primeras 2 salidas0 1
, la eliminación de los resultados de exclamación22
y 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 como2i
se 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
puts
en toda la pila. La función enputs
sí se implementa como{print n print}
en el intérprete, dondeprint
es una función incorporada real yn
es 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
:n
guarda 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
1
en APL.-1
salidas¯1
y--
salidas de lo siguiente en TryAPL :fuente
J, 5 bytes
Magnitud del número complejo
5 + 12i
en 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
⍴0
devuelve una cadena vacía (longitud 0)⍴
devuelve⍴
(longitud 1)0
devuelve0
(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
nil
que imprime dos bytes adicionales.fuente
1
en 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!
A
se 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-{{B
está actuando como una función interna y solo esta parte puede modificarse. LaB
instrucció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 posteriorB
o descartado) .0
1
s:05
-
:11
{
:Error051
B
:120
El 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
Error051
es 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