¿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

Arandur
fuente
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.

Martin Ender
fuente
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í .

Tom Carpenter
fuente
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.

Trauma digital
fuente
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.

Arcturus
fuente
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.

Tom Carpenter
fuente
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 ...)

SuperJedi224
fuente
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é ...

LegionMammal978
fuente
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!

Adnan
fuente
¡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.

nicael
fuente
¡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 !

Cyoce
fuente
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í .

Tom Carpenter
fuente
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

Glenn Randers-Pehrson
fuente
14

Japt , puntaje 10

A

Como muestra el puntaje, imprime 10.

nicael
fuente
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
11

Python 2, 101010101010

print'10'*6
Azul
fuente
10

PHP, puntaje 10,000,000

<?=1e7;

Esto imprime 10000000 como se puede ver allí .

nicael
fuente
2
Dado que el OP solicitó el número entero más pequeño, ¿por qué elegiste un exponente de siete? ¿Se imprime sin comas?
WGroleau
@WGroleau imprime sin comas, justachat.freevar.com/test.php
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.

Martin Ender
fuente
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.

alephalpha
fuente
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.

Lynn
fuente
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
yeti
fuente
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

Vitsy , 7! = 5040

7FN

Salidas 5040.

Pruébalo en línea!

Addison Crump
fuente
¿Por qué no 3FNsalir 6?
Peter Taylor
@PeterTaylor El número tiene que ser mayor en longitud, no mayor en magnitud.
Addison Crump
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.

Lynn
fuente
7

CJam, puntaje 10

A

Pruébalo en línea!

Dennis
fuente
¿Por qué no Y, puntaje 2?
Peter Taylor
2
Debido a 2que solo tiene un carácter, no es más largo que el código fuente.
Dennis
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.

Lynn
fuente
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.

ETHproducciones
fuente
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

Luis Mendo
fuente
6

Perl, 1000000000

print 1e9

Sencillo.

Lynn
fuente
1
¿No puedes reducir tu puntaje usando say?
Neil
Eso requeriría habilitar la -Ebandera, supongo. No estoy seguro de cómo contar eso, en este desafío.
Lynn
1
Como " -M5.010, cuando es necesario, es gratis", no debería tener que contarlo en absoluto.
ThisSuitIsBlackNot
6

Python 2, 107918163081

print 69**6
Azul
fuente
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"

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

O, 10

A

Al parecer, la puntuación es el número que imprimimos!

kirbyfan64sos
fuente
5

05AB1E , puntaje 10

Código

T

Explicación:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Adnan
fuente