Qual é o menor número inteiro positivo da base 10 que pode ser impresso por um programa mais curto (em caracteres) do que ele próprio?


179

Eu acho que a pergunta acima é clara, mas apenas no caso:

  • Escreva um programa completo (não apenas uma função) que imprima um número inteiro positivo de base 10, opcionalmente seguido por uma única nova linha.

  • Os programas qualificados serão aqueles cuja saída for maior ( em bytes ) do que o código fonte do programa, medido em bytes (assumindo a codificação ASCII ou UTF-8 para o código fonte do programa).

    Ou seja, o código deve ser menor que o número de dígitos no número resultante.

  • Os zeros à esquerda não são permitidos em todas as circunstâncias. Contar zeros à esquerda banaliza o problema; ignorar zeros à esquerda complica desnecessariamente a questão.

  • O programa vencedor será o programa de qualificação que imprime o número inteiro com a menor magnitude.

Snippet de cabeçalho


64
Número 1 nas perguntas da Hot Network . Nada mal para uma primeira pergunta ...
Trichoplax

6
@Kslkgh Estritamente menor que, caso contrário, a questão é trivial para programas que imprimem implicitamente seu último valor.
arandur

6
É 1.0um número inteiro?
histocrat

23
A restrição ao UTF-8 é ridícula e prejudicial. Bytes são bytes, independentemente da codificação. Eu recomendo fortemente que você altere as regras, pois, atualmente, elas não permitem idiomas que não sejam baseados em caracteres (por exemplo, Minecraft, Piet, Folders) ou que tenham contagens de bytes UTF-8 mais longas do que as "reais" (válidas de acordo com esta pergunta). ) contagem de bytes (por exemplo, APL, TI-BASIC, Seriamente, Jelly).
lirtosiast

7
@ZachGates não é assim que a lista HNQ funciona. ;)
Martin Ender

Respostas:


193

Retina , pontuação 1


O programa vazio conta o número de correspondências do regex vazio na entrada (que é a cadeia vazia). Isso é exatamente uma correspondência, portanto é impresso 1.

Experimente online.


39
... NÓS TEMOS UM VENCEDOR.
arandur

9
Entre, eu diria que o número de correspondências é infinito. A cadeia vazia pode repetir um número ilimitado de vezes e corresponder infinitamente.
Nicael

50
@nicael Felizmente, não é assim que a regex funciona. ;)
Martin Ender

8
@ MartinBüttner que depende do seu mecanismo de expressão regular. Definitivamente, eu encontrei sistemas que são ruins, se você tentar corresponder à string vazia.
Sparr

19
@LorenPechtel: essa regra se aplica apenas a desafios de quine em que o programa vazio é trivialmente uma solução na maioria dos idiomas. Eu acho que é um jogo justo aqui, já que esse programa vazio realmente tem semântica não trivial e o Retina não tem esse comportamento por causa de desafios como esse, mas porque é a única generalização consistente de seu comportamento para todos os programas de linha única.
Martin Ender

73

Pitão , 10

T

Primeira tentativa de usar Pyth. Tendo a pergunta esclarecida, parece que 10 será o menor número. Em Pyth, a letra T começa como o número 10, então isso simplesmente imprime 10que é maior que o comprimento do código-fonte. Você pode tentar aqui .


97
Eu gosto de como sua primeira tentativa de usar Pyth é apenas a letra T.
djechlin

8
Bem, eu pensei que este seria o programa Pyth mais legível que eu veria por um tempo, mas isso é impressionantemente fácil de entender.
Deusovi 30/12/15

2
Este é um polígono, também funciona em 05AB1E. 05ab1e.tryitonline.net/#code=VA
Urna de polvo mágico

60

bc, 10

A

Felizmente, bcimprime o resultado da última expressão por padrão. Aé interpretado como um dígito hexadecimal, resultando em 10.


1
Mas já está (pelo menos) 5 respostas semelhantes, incluindo a solução com A, porque muitas línguas golfe está definindo um como 10.
nicael

45
@nicael Sim, é verdade. Eu afirmo que esta resposta é diferente porque bcnão é uma linguagem de golfe. Na verdade, é um idioma definido pelo Posix disponível por padrão em praticamente qualquer sistema * nix padrão que você pode encontrar.
Digital Trauma

47

Fishing, score 7.958.661.109.946.400.884.391.936 1.208.925.819.614.629.174,70676

Essa é a pontuação mais alta e sem trivial de todos os tempos em um desafio de minimização? (Mesmo tendo sido um golfe de 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Explicação

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

O número é 32^16e tem 25 dígitos. O código tem 24 bytes. A resposta anterior foi 6^32.


2
Trouxe uma lágrima ao meu olho. Obrigado pela sua contribuição.
Arandur #

30
Provavelmente ainda vai vencer o Java ... Felizmente.
Arcturus

3
Bem, ele bate o C # ... #
28415

Por que 6 e não 9?
immibis

@immibis O objetivo do desafio é minimizar a pontuação, por isso não é apenas minimizar bytes; colocar 9 antes teria aumentado minha pontuação desnecessariamente.
quer

36

MATLAB, 1.000.000.000 (10 9 )

Também funciona com o Octave

disp(1e9)

Nunca superando os esolangs, mas apenas por diversão, este é o menor MATLAB / Octave capaz de fazer, então pensei em publicá-lo de qualquer maneira.


18
As respostas esolang, embora válidas, são meio chatas. Fico feliz em ver um que não é!
arandur

1
Perl say 1e9é um pouco menor, se você quiser melhorar sua pontuação de golfe. (Embora isso não chega nem perto do número inteiro menor para que esta abordagem funciona ...)
derobert

@derobert True. 1e1 satisfazem a definição do problema e dar uma pontuação de 10 (o mais baixo, o melhor) (Assumindo um char é um byte)
dberm22

@ dberm22 10(2 caracteres) não é mais do que 1e1(3 caracteres)
SuperJedi224

@ SuperJedi224 Ahh, eu li que a magnitude do número impresso deve ser maior que o número de bytes, não o número de dígitos no número impresso. Obrigado pelo esclarecimento.
precisa saber é o seguinte

29

TI-84 BASIC, 120

5!

ᴇ2teria uma pontuação melhor se não fosse o requisito bobo de UTF-8. (São apenas dois bytes na codificação token nativa da calculadora, mas são 4 em UTF-8 ...)


Talvez esteja faltando alguma coisa, mas a string "E2" tem apenas dois bytes em UTF-8 ...
jbg 30/12/2015

11
@ JasperBryant-Greene e Enão são o mesmo personagem. No TI-BASIC, é notação científica e Eé uma variável.
SuperJedi224

4
Obrigado :) Eu deveria ter notado que o personagem era sutilmente menor que a altura total ...
jbg

Não seria 3!melhor?
precisa saber é o seguinte

1
@NobodyNada Desta vez, a pergunta disse especificamente para marcar em UTF8, por algum motivo.
SuperJedi224

26

C #, pontuação 10 ^ 72 10 ^ 70 10 ^ 64 10 ^ 63

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

Isso é 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Acho que tentei ...


1
Impressionante, realmente.
arandur

4
Não Write(new string('1',70))seria melhor?
28415 Lynn

1
Você pode escrevê-lo como um duplo e não como uma string, o que o reduz para 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric

@ goric Isso apenas gera 1E+56.
usar o seguinte

23

Hexagonia , pontuação 100100

Código:

d!!@

De uma forma mais legível:

  d !
 ! @ .
  . .

O valor do char dé 100. Isso simplesmente imprime o valor do char duas vezes e termina depois.

Experimente online!


Fofa! Obrigado pela sua contribuição.
Arandur

18
Forma mais legível? Realmente? xD
RK.

17

JavaScript, pontuação 100.000.000.000 (ou 1 * 10 11 )

alert(1e11)

Isso é se estiver usando alerta. Embora você possa obter uma pontuação 100.000.000 vezes menor se estiver usando o console:

1e3

Pontuação 1000, como você pode ver, embora não tenha certeza se conta usando o console.


Não sei por que não conta!
arandur

6
@Arandur Acho que "não sei se conta" se refere à pontuação mais baixa de 1000, pois isso requer o uso do console como um REPL, em vez de ser um programa completo.
Trichoplax

@tri exatamente, fez um esclarecimento.
Nicael

11
+1 para o alerta, eu não permitiria a saída automática do console
edc65

17

PlatyPar , 59

#

#inicia um literal numérico de base 60 e, como nenhum dígito é encontrado, ele termina como 59. Isso começou como um acidente feliz, mas como eu já [ab] usei esse bug em outra resposta , eu o mantive.

Experimente online !

Aqui está outra abordagem, minha opinião sobre a maneira chata que todos e sua avó usaram para esse desafio.

PlatyPar , 100000000 (9 dígitos)

'18Md0+;

Explicação

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

Experimente online !


16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

E outra redução:

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

O que fornece 35 1s consecutivos, ou aproximadamente 1e34.


Um pouco menor ainda

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

Dá 36 1, que é um número cerca de 11% maior que 1e35.


Agradecemos a @Martin Büttner por eliminar alguns caracteres, reduzindo a produção total em um fator de 100 com este código (rendimento 1e36):

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

Meu código antigo (produz 1 + e38):

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

Eu tenho experimentado esolangs por tédio. Este é o melhor que eu poderia fazer em BF. Gostaria de saber se é possível torná-lo menor?

Você pode experimentá-lo online aqui .


Eu escrevi uma resposta mais curta, a partir do zero: link
Lynn

@Mauris impressionante!
Tom Carpenter

16

C, 1000000000000000000000000000 (28 dígitos)

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

Semelhante à minha resposta em C ++, sem a #include <stdio.h> (Ignore o aviso de falta de declaração de printf. Obrigado @ Dennis)

A nova linha exigiria 2 bytes adicionais, usando o formato 1%029d\n


14

Japt , 10 pontos

A

Como mostra a pontuação, imprime 10.


Isso não é código de golfe; o objetivo é imprimir o menor número, sua pontuação é 10. #
pppery

@ppp "O número deve ser maior em bytes que o programa - ter mais dígitos do que o código possui caracteres" - os OP foram editados.
Nicael

2
Você não entendeu mal; se o programa Japt Aimprimir 10, então este é um programa válido com uma pontuação de 10. #
281 Arandur

3
Woohoo, meu idioma está empatado em <s> primeiro </s> segundo lugar! olha para Retina
ETHproductions

4
Alguma razão para voto negativo?
Nicael



9

Labirinto , pontuação 10.000.000

1!!!!>@

Pode ser possível reduzir isso em uma ordem de magnitude, mas não consigo encontrar nada no momento.

As primeiras 1!!!!impressões 1000. Em seguida, >muda o código fonte para

@1!!!!>

o que evita a rescisão antecipada. Então o IP atinge um beco sem saída e se vira. Agora !!!!imprime mais quatro zeros e @finaliza o programa.

Experimente online.


9

Samau , 42

A

Acoloca a resposta para a questão final da vida, do universo e de tudo na pilha. Em seguida, a parte superior da pilha é impressa automaticamente.


Eu acho que algo está errado com suas mensagens de confirmação: P
Maçaneta da porta

3
@ Doorknob 冰 Não sei como escrever mensagens de confirmação, então uso apenas emojis aleatórios.
Alephalpha

5
Ok, aqui está a verdadeira questão: o que Qempurra?
Cyoce

9

Brainfuck, 3333333333333333333333333 (25 anos)

Como está escrito "do zero", acho que não há problema em postar uma resposta separada:

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

23 bytes.


Eu estava pensando em uma solução bf, existem intérpretes atuais que apenas saída como números?
Rohan Jhunjhunwala

@RohanJhunjhunwala gera 51 (o código ASCII "3") 25 vezes.
Level River St

@LevelRiverSt o que estou dizendo é que não pode existir um intérprete bf que não faz entrada como ascii e só faz saída inteiro, assim, (-). Saída seria 255.
Rohan Jhunjhunwala



8

C, 11111111111111111111111111111111111 (35 unidades)

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

Talvez exista um caminho mais curto. A falta de uma maneira simples de imprimir grandes números em C torna complicado.



7

Java, 1111111111111111111111111111111111111111111111111111111111111111111111111111111 (81 ones)

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

Sublinhei a parte que é realmente "variável" aqui; tudo o mais é absolutamente necessário para um programa Java funcional.

Presumivelmente, isso é mais curto do que mexer com o Java BigInteger.


Presumivelmente ... - talvez System.out.print(BigInteger.TEN.pow(10));- esse personagem seja menos? Desculpe - nem grande o suficiente - e .pow(10).pow(10)é mais longo.
OldCurmudgeon

Você pode substituir interfacepor class.
usar o seguinte

2
Mas então mainprecisaria ser public.
Lynn

7
você pode raspar 2 personagens, fazendo isso para o loop for: for (A a: new A [81])
Jack Ammo

@OldCurmudgeon .pow(100)Não funcionaria por algum motivo?
ETHproductions

7

Cubix , 100100

@'dOu

Cubix é um esolang bidimensional baseado em pilha. O Cubix é diferente de outros idiomas 2D, pois o código-fonte está envolvido na parte externa de um cubo.

Teste online!

Explicação

A primeira coisa que o intérprete faz é descobrir o menor cubo no qual o código se ajustará. Nesse caso, o comprimento da borda é 1. Em seguida, o código é preenchido com no-ops .até que todos os seis lados sejam preenchidos. O espaço em branco é removido antes do processamento, portanto, esse código é idêntico ao acima:

  @
' d O u
  .

Agora o código está sendo executado. O IP (ponteiro de instrução) inicia na face esquerda extrema, apontando para leste.

O primeiro caractere que o IP encontra é o 'que coloca o próximo byte na pilha; esse byte é dou 100. A seguir O, é apresentado o item superior (100) como um número inteiro.

Em seguida, o IP atinge u, que o vira para a direita, move-o para a frente e depois vira-o novamente. Ele alterna para a face inferior apontando para o norte e depois gira para o leste. Isso o envolve Onovamente, produzindo 100 e até @o final do programa.


6

MATL , 1000

1e3

Nota: o último commit do GitHub do compilador funciona no Octave e no Matlab.

Isso interpreta o número na notação científica e o imprime implicitamente, produzindo assim a saída

1000



6

Python 2, 107918163081

print 69**6

Você pode remover o espaço entre printe 2.
Bakuriu

1
@Bakuriu Não, não pode
Azul

69**6é apenas 107918163081.
Neil

2
Curiosamente, isso também funciona em Perl.
Grimy

6

C ++, 1e46

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

A nova linha exigiria 2 bytes adicionais, usando o formato "1% 048d \ n"


Eu não acho que o C ++ permita que você omita o tipo de retorno main(). OTOH, este faria uma boa resposta C ...
Toby Speight


5

05AB1E , pontuação 10

Código

T

Explicação:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.