¿Cuál es el entero de base 10 positivo más pequeño que puede imprimir un programa más corto (en caracteres) que él mismo?


179

Creo que la pregunta anterior es clara, pero por las dudas:

  • Escriba un programa completo (no solo una función) que imprima un entero positivo de base 10, opcionalmente seguido de una nueva línea.

  • Los programas que califiquen serán aquellos cuya salida es más larga ( en bytes ) que el código fuente del programa, medida en bytes (suponiendo la codificación ASCII o UTF-8 para el código fuente del programa).

    Es decir, el código debe ser más corto que el número de dígitos en el número resultante.

  • Los ceros iniciales no se permiten bajo ninguna circunstancia. Contar los ceros a la izquierda trivializa el problema; ignorar los ceros a la izquierda complica innecesariamente la pregunta.

  • El programa ganador será el programa de calificación que imprime el número entero con la menor magnitud.

Fragmento de tabla de clasificación


64
Número 1 en la red Hot Preguntas . No está mal para una primera pregunta ...
trichoplax

66
@Kslkgh Estrictamente menor que, de lo contrario, la pregunta es trivial para los programas que imprimen implícitamente su último valor.
Arandur

66
Es 1.0un entero?
histocrat

23
La restricción a UTF-8 es ridícula y perjudicial. Los bytes son bytes, sin importar la codificación. Le recomiendo que cambie las reglas, ya que actualmente no permiten idiomas que no estén basados ​​en caracteres (por ejemplo, Minecraft, Piet, Folders) o que tengan un conteo de bytes UTF-8 más largo que su "real" (válido según esta pregunta) ) recuentos de bytes (por ejemplo, APL, TI-BASIC, En serio, Jelly).
lirtosiast el

77
@ZachGates no es así como funciona la lista HNQ. ;)
Martin Ender

Respuestas:


193

Retina , puntaje 1


El programa vacío cuenta el número de coincidencias de la expresión regular vacía en la entrada (que es la cadena vacía). Eso es exactamente 1 partido, por lo que se imprime 1.

Pruébalo en línea.


39
... TENEMOS UN GANADOR.
Arandur

99
Solo por cierto, diría que el número de coincidencias es infinito. La cadena vacía puede repetirse un número ilimitado de veces y coincidir infinitamente.
nicael

50
@nicael Por suerte, no es así como funciona la expresión regular. ;)
Martin Ender

8
@ MartinBüttner que depende de su motor de expresiones regulares. Definitivamente me he encontrado con sistemas que fallarán si alguna vez intentas hacer coincidir la cadena vacía.
Sparr

19
@LorenPechtel esa regla se aplica solo a los desafíos de quine donde el programa vacío es trivialmente una solución en la mayoría de los idiomas. Creo que es un juego justo aquí, ya que este programa vacío en realidad tiene una semántica no trivial y Retina no tiene este comportamiento debido a desafíos como este, sino porque es la única generalización consistente de su comportamiento para todos los programas de una sola línea.
Martin Ender

73

Pyth , 10

T

Primer intento de usar Pyth. Habiendo aclarado la pregunta, parece que 10 será el número más pequeño. En Pyth, la letra T comienza como el número 10, por lo que simplemente imprime 10cuál es mayor que la longitud del código fuente. Puedes probarlo aquí .


97
Me gusta cómo tu primer intento de usar Pyth es solo la letra T.
djechlin

8
Bueno, pensé que este sería el programa más legible Pyth que vería por un tiempo, pero esta es impresionantemente fácil de entender.
Deusovi

2
Este es un poliggot, esto también funciona en 05AB1E. 05ab1e.tryitonline.net/#code=VA
Urna de pulpo mágico

60

a. C., 10

A

Afortunadamente, bcimprime el resultado de la última expresión por defecto. Ase interpreta como un dígito hexadecimal, por lo que resulta en 10.


1
Pero ya hay (al menos) 5 respuestas similares, incluida la solución con A, porque muchos idiomas de golf están definiendo A como 10.
nicael

45
@nicael Sí, eso es cierto. Afirmo que esta respuesta es diferente porque bcno es un lenguaje de golf. De hecho, es un lenguaje definido por Posix disponible de forma predeterminada en casi cualquier sistema estándar * nix que pueda encontrar.
Trauma digital

47

Pesca, puntaje 7,958,661,109,946,400,884,391,936 1,208,925,819,614,629,174,706,176

¿Es este el puntaje más alto de aspecto no trivial en un desafío de minimización? (A pesar de que ha sido golfizado por 84.8%)

v+CCCCCCCCCC
  `32`nSSSSP

Explicación

v              Sets the casting direction to down
 +             Increments the casting distance by 1
  CCCCCCCCCC   Casts the rod

`32`         Pushes a string "32" to the stack
    n        Converts the stack from a string to an integer
     SSSS    Repeated squaring of the stack
         P   Prints the stack

El número es 32^16y tiene 25 dígitos. El código tiene 24 bytes de longitud. La respuesta anterior fue 6^32.


2
Me trajo una lágrima a los ojos. Gracias por tu contribución.
Arandur

30
Probablemente aún superará a Java ... Con suerte.
Arcturus

3
Bueno, supera a C # ...
LegionMammal978

¿Por qué 6 y no 9?
immibis

@immibis El objetivo del desafío es minimizar la puntuación, por lo que no se trata solo de minimizar bytes; poner 9 antes hubiera aumentado mi puntaje innecesariamente.
Arcturus

36

MATLAB, 1,000,000,000 (10 9 )

También funciona con octava

disp(1e9)

Nunca voy a vencer a los esolangs, pero solo por diversión, este es el MATLAB / Octave más pequeño que podrá hacer, así que pensé que lo publicaría de todos modos.


18
Las respuestas de esolang, aunque válidas, son un poco aburridas. Me alegro de ver uno que no lo es!
Arandur

1
Perl say 1e9es un poco más corto, si desea mejorar su puntaje de golf. (Aunque no está cerca del entero más pequeño para el que funciona este enfoque ...)
derobert

@derobert True. 1e1 satisfaría el enunciado del problema y daría una puntuación de 10 (cuanto menor, mejor) (suponiendo que un carácter sea 1 byte)
dberm22

@ dberm22 10(2 caracteres) no es más largo que 1e1(3 caracteres)
SuperJedi224

@ SuperJedi224 Ahh, lo leí ya que la magnitud del número impreso tiene que ser mayor que el bytecount, no el número de dígitos en el número impreso. Gracias por la aclaración.
dberm22

29

TI-84 BASIC, 120

5!

ᴇ2puntuaría mejor si no fuera por el tonto requisito de UTF-8. (Son solo dos bytes en la codificación tokenizada nativa de la calculadora, pero son 4 en UTF-8 ...)


Tal vez me falta algo, pero la cadena "E2" tiene solo dos bytes en UTF-8 ...
jbg

11
@ JasperBryant-Greene y Eno son el mismo personaje. En TI-BASIC, es notación científica y Ees una variable.
SuperJedi224

44
Gracias :) Debería haber notado que el personaje era sutilmente más pequeño que la altura completa ...
jbg

¿No 3!anotaría mejor?
dberm22

1
@NobodyNada Esta vez, la pregunta dice específicamente que puntúa en UTF8, por alguna razón.
SuperJedi224

26

C #, puntaje 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

class A{static void Main(){System.Console.Write($"1{0:D63}");}}

Eso es 1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000. Supongo que lo intenté ...


1
Impresionante, de verdad.
Arandur

44
¿No Write(new string('1',70))sería mejor?
Lynn

1
Puede escribirlo como un doble en lugar de una cadena, lo que lo acorta a 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@goric Eso solo da salida 1E+56.
LegionMammal978

23

Hexagonía , puntaje 100100

Código:

d!!@

En una forma más legible:

  d !
 ! @ .
  . .

El valor de char des 100. Esto simplemente imprimirá el valor de char dos veces y terminará después.

Pruébalo en línea!


¡Linda! Gracias por tu contribución.
Arandur

18
¿Forma más legible? De Verdad? xD
RK.

17

JavaScript, puntaje 100,000,000,000 (o 1 * 10 11 )

alert(1e11)

Esto es si usa la alerta. Aunque puede obtener una puntuación 100 000 000 veces menor si usa la consola:

1e3

Puntuación 1000 como puede ver, aunque no estoy seguro de que cuente con la consola.


¡No sé por qué no contaría!
Arandur

66
@Arandur Supongo que "No estoy seguro de que cuente" se refiere a la puntuación más baja de 1000, ya que eso requiere usar la consola como REPL, en lugar de ser un programa completo.
trichoplax

@tri exactamente, hizo una aclaración.
nicael

11
+1 para alerta, no permitiría la salida automática de la consola
edc65

17

PlatyPar , 59

#

#comienza un literal numérico base-60, y como no se encuentran dígitos, termina como 59. Esto comenzó como un feliz accidente, pero como ya [ab] usé este error en otra respuesta , lo guardé.

Pruébalo en línea !

Aquí hay otro enfoque, mi opinión sobre la forma aburrida que todos y su abuela usaron para este desafío.

PlatyPar , 100000000 (9 dígitos)

'18Md0+;

Explicación

'1        ## push "1" (a string) to the stack
  8Md  ;  ## repeat 8 times
     0+    ## add a 0
          ## [implicitly] print the result

Pruébalo en línea !


16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

Y otra reducción:

+++++++[>+++++++>+<<-]>>[<.....>-]

Lo que da 35 1 consecutivos, o aproximadamente 1e34.


Un poco más pequeño aún

++++++++[>++++++>+<<-]>+>+[<....>-]

Da 36 1's, que es un número aproximadamente 11% mayor que 1e35.


Gracias a @Martin Büttner por eliminar un par de caracteres que reducen la producción total en un factor de 100 con este código (produce 1e36):

++++++[>++++++++>++<<-]>+.->[<...>-]

Mi código anterior (produce 1 + e38):

++++++++[>++++++>++<<-]>+.->+++[<..>-]

He estado experimentando con esolangs por aburrimiento. Esto es lo mejor que puedo hacer en BF. Me pregunto si es posible hacerlo más pequeño.

Puedes probarlo en línea aquí .


Escribí una respuesta más corta, desde cero: enlace
Lynn

@Mauris impresionante!
Tom Carpenter

16

C, 1000000000000000000000000000 (28 dígitos)

main(){printf("1%027d",0);}

Similar a mi respuesta de C ++, sin el #include <stdio.h> (Ignorar la advertencia sobre la declaración faltante de printf. Gracias @Dennis)

Newline requeriría 2 bytes adicionales, usando el formato 1%029d\n


14

Japt , puntaje 10

A

Como muestra el puntaje, imprime 10.


Este no es un código de golf; el objetivo es imprimir el número más pequeño, su puntaje es 10.
pppery

@ppp "El número debe ser más largo en bytes que el programa; tener más dígitos que el código tiene caracteres": los OP recién editados.
nicael

2
No has entendido mal; si el programa Japt Aimprime 10, entonces este es un programa válido con una puntuación de 10.
Arandur

3
¡Woohoo, mi idioma está vinculado al <s> primer </s> segundo lugar! mira a Retina
ETHproductions

44
¿Alguna razón para el voto negativo?
nicael



9

Laberinto , puntaje 10,000,000

1!!!!>@

Podría ser posible reducir esto en un orden de magnitud, pero no puedo encontrar nada en este momento.

Las primeras 1!!!!impresiones 1000. Luego >cambia el código fuente a

@1!!!!>

lo que evita la terminación anticipada. Luego, la IP llega a un callejón sin salida y se da vuelta. Ahora !!!!imprime cuatro ceros más y @finaliza el programa.

Pruébalo en línea.


9

Samau , 42

A

Aempuja la respuesta a la última pregunta de la vida, el universo y todo en la pila. Luego, la parte superior de la pila se imprime automáticamente.


Creo que algo está mal con sus mensajes de confirmación: P
Pomo de la puerta

3
@Doorknob 冰 No sé cómo escribir mensajes de confirmación, así que solo uso emojis aleatorios.
alephalpha

55
Ok, esta es la verdadera pregunta: ¿qué Qempuja?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 tres)

Esto está escrito "desde cero", así que creo que está bien publicar una respuesta por separado:

-[>+>+<<-----]>-[-->.<]

23 bytes de largo.


Estaba considerando una solución bf, ¿hay algún intérprete actual que solo salga como números?
Rohan Jhunjhunwala

@RohanJhunjhunwala esto genera 51 (el código ASCII para "3") 25 veces.
Level River St

@LevelRiverSt lo que estoy diciendo es que podría existir un intérprete bf que no ingresa como ascii y solo genera una salida entera, por lo tanto (-.) Generaría 255.
Rohan Jhunjhunwala

9

DC , 10000

Programa de 4 caracteres:

I4^f

Salida de 5 dígitos:

$ dc<<<'I4^f'
10000

3
+1. Sí, creo que eso es óptimo en CC. Inusualmente bc es más corto .
Trauma digital

Pensé que me estaba yendo bien con 6d^p(produciendo 46656), pero tienes ese ritmo, ¡bien hecho!
Toby Speight


8

C, 11111111111111111111111111111111111 (35 unidades)

main(c){while(c++<36)putchar(49);}

Tal vez hay un camino más corto. La falta de una forma simple de imprimir grandes números en C hace que sea complicado.



7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 unidades)

interface A{static void main(String[]a){for(A i:new A[81])System.out.print(1);}}
                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

He subrayado la parte que en realidad es "variable" aquí; todo lo demás es absolutamente necesario para que un programa Java funcione.

Presumiblemente, esto es más corto que jugar con Java BigInteger.


Presumiblemente ... - tal vez System.out.print(BigInteger.TEN.pow(10));- ¿es ese un personaje menos? Lo siento, no es lo suficientemente grande, y .pow(10).pow(10)es más largo.
OldCurmudgeon

Se puede reemplazar interfacecon class.
LegionMammal978

2
Pero entonces maintendría que ser public.
Lynn

77
puedes eliminar 2 caracteres haciendo esto para el bucle for: for (A a: new A [81])
Jack Ammo

@OldCurmudgeon ¿ .pow(100)No funcionaría por alguna razón?
ETHproductions

7

Cubix , 100100

@'dOu

Cubix es un esolang bidimensional basado en pila. Cubix es diferente de otros idiomas 2D en que el código fuente se envuelve alrededor del exterior de un cubo.

¡Pruébalo en línea!

Explicación

Lo primero que hace el intérprete es averiguar el cubo más pequeño en el que se ajustará el código. En este caso, la longitud del borde es 1. Luego, el código se rellena sin operaciones .hasta que se llenen los seis lados. El espacio en blanco se elimina antes del procesamiento, por lo que este código es idéntico al anterior:

  @
' d O u
  .

Ahora se ejecuta el código. El IP (puntero de instrucción) comienza en el extremo izquierdo, apuntando hacia el este.

El primer carácter que encuentra la IP es ', que empuja el siguiente byte a la pila; este byte es d, o 100. El siguiente es O, que genera el elemento superior (100) como un entero.

Luego, el IP golpea u, que lo gira hacia la derecha, lo mueve hacia adelante y luego lo vuelve a girar. Cambia a la cara inferior apuntando hacia el norte, luego gira hacia el este. Esto lo envuelve Onuevamente, produciendo 100, y luego hasta @que finaliza el programa.


6

MATL , 1000

1e3

Nota: la última confirmación de GitHub del compilador funciona tanto en Octave como en Matlab.

Esto interpreta el número en notación científica y lo imprime implícitamente, produciendo así la salida

1000



6

Python 2, 107918163081

print 69**6

Puede eliminar el espacio entre printy el 2.
Bakuriu

1
@Bakuriu No, no puedes
Azul

69**6es única 107918163081.
Neil

2
Curiosamente, esto también funciona en Perl.
Sucio

6

C ++, 1e46

#include <stdio.h>
main(){printf("1%046d",0);}

Newline requeriría 2 bytes adicionales, utilizando el formato "1% 048d \ n"


No creo que C ++ le permita omitir el tipo de retorno de main(). OTOH, esto sería una buena respuesta C ...
Toby Speight


5

05AB1E , puntaje 10

Código

T

Explicación:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.