Jaka jest najmniejsza dodatnia liczba całkowita 10, która może być wydrukowana przez program krótszy (w znakach) niż on sam?

179

Myślę, że powyższe pytanie jest jasne, ale na wszelki wypadek:

  • Napisz pełny program (nie tylko funkcję), który wypisze dodatnią liczbę całkowitą o wartości 10, opcjonalnie po niej pojedynczy znak nowej linii.

  • Kwalifikujące się programy to te, których wynik jest dłuższy ( w bajtach ) niż kod źródłowy programu, mierzony w bajtach (przy założeniu kodowania ASCII lub UTF-8 dla kodu źródłowego programu).

    Tzn. Kod musi być krótszy niż liczba cyfr w wynikowej liczbie.

  • Zera wiodące są niedozwolone we wszystkich okolicznościach. Liczenie wiodących zer powoduje, że problem jest trywialny; ignorowanie początkowych zer niepotrzebnie komplikuje pytanie.

  • Zwycięski program będzie programem kwalifikującym, który wypisze liczbę całkowitą o najmniejszej wielkości.

Fragment tabeli wyników

Arandur
źródło
64
Numer 1 w Hot Network Questions . Nieźle jak na pierwsze pytanie ...
trichoplax
6
@Kslkgh Dokładnie mniej niż, w przeciwnym razie pytanie jest trywialne dla programów, które domyślnie wypisują swoją ostatnią wartość.
Arandur
6
Czy 1.0liczba całkowita?
histocrat
23
Ograniczenie do UTF-8 jest śmieszne i szkodliwe. Bajty są bajtami, bez względu na kodowanie. Zdecydowanie zalecam zmianę zasad, ponieważ obecnie nie zezwalają na języki, które nie są oparte na znakach (np. Minecraft, Piet, foldery) lub mają dłuższą liczbę bajtów UTF-8 niż ich „rzeczywiste” (ważne zgodnie z tym pytaniem) ) liczba bajtów (np. APL, TI-BASIC, poważnie, galaretka).
lirtosiast
7
@ZachGates to nie tak działa lista HNQ. ;)
Martin Ender

Odpowiedzi:

193

Siatkówka , wynik 1


Pusty program zlicza liczbę dopasowań pustego wyrażenia regularnego na wejściu (którym jest pusty ciąg). To dokładnie 1 dopasowanie, więc drukuje 1.

Wypróbuj online.

Martin Ender
źródło
39
... MAMY ZWYCIĘZCĘ.
Arandur
9
Po prostu, powiedziałbym, że liczba dopasowań jest nieskończona. Pusty ciąg znaków może powtarzać się nieograniczoną liczbę razy i być dopasowywany w nieskończoność.
nicael
50
@nicael Na szczęście nie tak działa regex. ;)
Martin Ender
8
@ MartinBüttner, który zależy od silnika wyrażeń regularnych. Zdecydowanie napotkałem systemy, które zawalą się, jeśli kiedykolwiek spróbujesz dopasować pusty ciąg.
Sparr
19
@LorenPechtel ta reguła ma zastosowanie tylko do quine wyzwań, w których pusty program jest trywialnym rozwiązaniem w większości języków. Myślę, że jest to uczciwa gra, ponieważ ten pusty program faktycznie ma nietrywialną semantykę, a Retina nie ma tego zachowania z powodu takich wyzwań, ale ponieważ jest to jedyna konsekwentna generalizacja jego zachowania dla wszystkich programów jednowierszowych.
Martin Ender,
73

Pyth , 10

T

Pierwsza próba użycia Pytha. Po wyjaśnieniu pytania wydaje się, że 10 będzie najmniejszą liczbą. W Pyth litera T zaczyna się od liczby 10, więc po prostu drukuje, 10która jest większa niż długość kodu źródłowego. Możesz spróbować tutaj .

Tom Carpenter
źródło
97
Podoba mi się, jak twoją pierwszą próbą użycia Pytha jest tylko litera T.
djechlin
8
Cóż, myślałem, że to będzie najbardziej czytelny Program Pyth bym widzieć przez jakiś czas, ale to jest imponująco łatwe do zrozumienia.
Deusovi
2
To jest poligraf, to działa również w 05AB1E. 05ab1e.tryitonline.net/#code=VA
Magic Octopus Urn
60

pne, 10

A

Na szczęście bcdomyślnie drukuje wynik ostatniego wyrażenia. Ajest interpretowany jako cyfra szesnastkowa, więc wynikiem jest 10.

Cyfrowa trauma
źródło
1
Ale jest już (co najmniej) 5 podobnych odpowiedzi, w tym rozwiązanie A, ponieważ wiele języków golfowych definiuje A jako 10.
nicael
45
@nicael Tak, to prawda. Twierdzę, że ta odpowiedź jest inna, ponieważ bcnie jest językiem golfowym. W rzeczywistości jest to język zdefiniowany przez Posix, domyślnie dostępny w prawie każdym standardowym systemie * nix, jaki można znaleźć.
Cyfrowy uraz
47

Wędkarstwo, wynik 7 958 661,109,946,400,884,391,936 1,208,925,819,614,629,174,706,176

Czy to najwyższy nietrywialny wynik kiedykolwiek w wyzwaniu minimalizacji? (Pomimo tego, że grał w golfa o 84,8%)

v+CCCCCCCCCC
  `32`nSSSSP

Wyjaśnienie

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

Numer 32^16składa się z 25 cyfr. Kod ma 24 bajty. Poprzednia odpowiedź brzmiała 6^32.

Arktur
źródło
2
Przyniosła mi łzę do oka. Dziękuję za twój wkład.
Arandur
30
Prawdopodobnie nadal będzie w stanie pokonać Javę ... Mam nadzieję.
Arcturus,
3
Cóż, pokonuje C # ...
LegionMammal978
Dlaczego 6, a nie 9?
immibis
@immibis Celem wyzwania jest zminimalizowanie wyniku, więc nie jest to tylko minimalizacja bajtów; wstawienie 9 wcześniej niepotrzebnie zwiększyłoby mój wynik.
Arcturus,
36

MATLAB, 1 000 000 000 (10 9 )

Działa również z Octave

disp(1e9)

Nigdy nie pobiję esolangów, ale dla zabawy, jest to najmniejszy MATLAB / Octave, który będzie w stanie to zrobić, więc pomyślałem, że i tak to opublikuję.

Tom Carpenter
źródło
18
Odpowiedzi na esolang, choć ważne, są trochę nudne. Cieszę się, że taki nie jest!
Arandur
1
Perl say 1e9jest nieco krótszy, jeśli chcesz poprawić swój wynik golfowy. (Chociaż nigdzie nie jest w pobliżu mniejszej liczby całkowitej, dla której to podejście działa ...)
derobert
@derobert True. 1e1 spełniłoby opis problemu i dałoby wynik 10 (im niższy, tym lepszy) (Zakładając, że char ma 1 bajt)
dberm22
@ dberm22 10(2 znaki) nie jest dłuższy niż 1e1(3 znaki)
SuperJedi224,
@ SuperJedi224 Ahh, czytam, ponieważ wielkość wydrukowanej liczby musi być większa niż liczba bajtów, a nie liczba cyfr na wydrukowanej liczbie. Dziękuję za wyjaśnienie.
dberm22
29

TI-84 BASIC, 120

5!

ᴇ2uzyskałby lepszy wynik, gdyby nie głupie wymaganie UTF-8. (To tylko dwa bajty w natywnym kodowanym tokenizowanym kalkulatorze, ale 4 w UTF-8 ...)

SuperJedi224
źródło
Może czegoś mi brakuje, ale ciąg „E2” ma tylko dwa bajty w UTF-8…
jbg
11
@ JasperBryant-Greene i Enie są tą samą postacią. W TI-BASIC jest notacją naukową i Ejest zmienną.
SuperJedi224,
4
Dzięki :) Powinienem zauważyć, że postać była subtelnie mniejsza niż pełna wysokość…
jbg
Nie 3!lepiej strzeliłby?
dberm22
1
@NobodyNada Tym razem pytanie z jakiegoś powodu brzmiało w UTF8 z jakiegoś powodu.
SuperJedi224
26

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

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

To 1.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000. Chyba próbowałem ...

LegionMammal978
źródło
1
Oszałamiająco, naprawdę.
Arandur
4
Nie Write(new string('1',70))byłoby lepiej?
Lynn
1
Możesz napisać go jako podwójny zamiast ciąg, co skraca go do 10 ^ 56:class A{static void Main(){System.Console.Write(1e56);}}
goric
@goric To tylko wyniki 1E+56.
LegionMammal978
23

Sześciokąty , wynik 100100

Kod:

d!!@

W bardziej czytelnej formie:

  d !
 ! @ .
  . .

Wartość char dwynosi 100. Spowoduje to po prostu wydrukowanie wartości char dwa razy i zakończy się później.

Wypróbuj online!

Adnan
źródło
Uroczy! Dziękuję za twój wkład.
Arandur
18
Bardziej czytelna forma? Naprawdę? xD
RK.
17

JavaScript, zdobądź 100 000 000 000 (lub 1 * 10 11 )

alert(1e11)

Dzieje się tak, jeśli używasz alertu. Chociaż możesz uzyskać 100 000 000 razy mniej punktów, jeśli używasz konsoli:

1e3

Zdobądź 1000, jak widzisz, ale nie jestem pewien, czy liczy się to za pomocą konsoli.

Nicość
źródło
Nie wiem, dlaczego to się nie liczy!
Arandur
6
@Arandur Zgaduję, że „nie jestem pewien, czy to się liczy” odnosi się do niższego wyniku 1000, ponieważ wymaga to użycia konsoli jako REPL, a nie pełnego programu.
trichoplax
@tri dokładnie, zrobił wyjaśnienie.
nicael
11
+1 za alert, nie zezwalam na automatyczne wyjście konsoli
edc65
17

PlatyPar , 59

#

# rozpoczyna literał liczbowy base-60, a ponieważ nie znaleziono żadnych cyfr, kończy się na 59 . Zaczęło się to jako szczęśliwy wypadek, ale ponieważ już [ab] użyłem tego błędu w innej odpowiedzi , zachowałem go.

Wypróbuj online !

Oto inne podejście, mój nudny sposób, w jaki wszyscy i ich babcia wykorzystali to wyzwanie.

PlatyPar , 100000000 (9 cyfr)

'18Md0+;

Wyjaśnienie

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

Wypróbuj online !

Cyoce
źródło
16

Brainf ** k , 11111111111111111111111111111111111 (~ 1e34)

I kolejna redukcja:

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

Co daje 35 kolejnych 1, lub około 1e34.


Jeszcze trochę mniejszy

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

Daje 36 1, czyli o około 11% więcej niż 1e35.


Dzięki @Martin Büttner za odrzucenie kilku znaków zmniejszających całkowitą moc wyjściową o współczynnik 100 przy pomocy tego kodu (daje 1e36):

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

Mój stary kod (daje 1 + e38):

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

Eksperymentowałem z esolangami z nudów. To najlepsze, co mogłem zrobić w BF. Zastanawiam się, czy można go zmniejszyć?

Możesz spróbować online tutaj .

Tom Carpenter
źródło
Napisałem krótszą odpowiedź od zera: link
Lynn
@Mauris imponujące!
Tom Carpenter
16

C, 1000000000000000000000000000 (28 cyfr)

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

Podobne do mojej odpowiedzi w C ++, bez #include <stdio.h> (Ignoruj ​​ostrzeżenie o brakującej deklaracjiprintf . Dzięki @Dennis)

Nowa linia wymagałaby dodatkowych 2 bajtów przy użyciu formatu 1%029d\n

Glenn Randers-Pehrson
źródło
14

Japt , zdobądź 10

A

Jak pokazuje wynik, drukuje 10.

Nicość
źródło
To nie jest kod golfowy; celem jest wydrukowanie najmniejszej liczby, twój wynik to 10.
pppery
@ppp „Liczba musi być dłuższa w bajtach niż program - mieć więcej cyfr niż kod zawiera znaki” - właśnie zmodyfikowano OP.
nicael
2
Nie zrozumiałeś źle; jeśli program Japt Awypisuje 10, to jest to poprawny program z wynikiem 10.
Arandur
3
Woohoo, mój język jest przywiązany do <s> pierwszego </s> drugiego miejsca! patrzy na Retina
ETHproductions
4
Czy jest jakiś powód do głosowania?
nicael
11

Python 2, 101010101010

print'10'*6
niebieski
źródło
10

PHP, zdobądź 10.000.000

<?=1e7;

Drukuje 10000000, jak można tam zobaczyć .

Nicość
źródło
2
Skoro OP poprosił o najmniejszą liczbę całkowitą, dlaczego wybrałeś wykładnik siedmiu? Czy drukuje bez przecinków?
WGroleau,
@WGroleau drukuje bez przecinków, justachat.freevar.com/test.php
nicael
9

Labirynt , zdobądź 10.000.000

1!!!!>@

Być może uda się to obniżyć o jeden rząd wielkości, ale w tej chwili nic nie mogę znaleźć.

Pierwsze 1!!!!odbitki 1000. Następnie >przesuwa kod źródłowy na

@1!!!!>

co pozwala uniknąć wcześniejszego rozwiązania umowy. Następnie IP uderza w ślepy zaułek i się odwraca. Teraz !!!!wypisuje jeszcze cztery zera i @kończy działanie programu.

Wypróbuj online.

Martin Ender
źródło
9

Samau , 42 lata

A

Awypycha odpowiedź na ostateczne pytanie życia, wszechświata i wszystkiego na stos. Następnie górna część stosu jest drukowana automatycznie.

alephalpha
źródło
Myślę, że coś jest nie tak z twoimi komunikatami zatwierdzenia: P
Klamka
3
@Doorknob 冰 Nie wiem, jak pisać wiadomości z zatwierdzeniami, więc po prostu używam losowych emoji.
alephalpha
5
Ok, oto prawdziwe pytanie: co Qpopycha?
Cyoce,
9

Brainfuck, 3333333333333333333333333 (25 trójek)

Jest to napisane „od zera”, więc myślę, że można opublikować osobną odpowiedź:

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

23 bajty.

Lynn
źródło
Zastanawiałem się nad rozwiązaniem BF, czy są jakieś obecne interpretery, które generują tylko liczby?
Rohan Jhunjhunwala
@RohanJhunjhunwala daje to 51 (kod ASCII "3") 25 razy.
Level River St
@LevelRiverSt mówię, że może istnieć interpreter BF, który nie wprowadza danych ascii i tylko generuje liczby całkowite, więc (-.) Wyprowadza 255.
Rohan Jhunjhunwala
9

DC , 10000

Program 4 znaków:

I4^f

Wyjście 5 cyfr:

$ dc<<<'I4^f'
10000
yeti
źródło
3
+1. Tak, myślę, że jest to optymalne w DC. Niezwykle bc jest krótszy .
Cyfrowy uraz
Myślałem, że dobrze sobie radzę 6d^p(daje 46656), ale masz ten rytm - dobra robota!
Toby Speight
8

Vitsy , 7 lat! = 5040

7FN

Wyjścia 5040.

Wypróbuj online!

Addison Crump
źródło
Dlaczego nie 3FNprodukować 6?
Peter Taylor,
@PeterTaylor Liczba musi być większa, a nie większa.
Addison Crump
8

C, 11111111111111111111111111111111111 (35 jedynek)

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

Może jest krótsza droga. Brak prostego sposobu drukowania dużych liczb w C sprawia, że ​​jest to trudne.

Lynn
źródło
7

CJam, wynik 10

A

Wypróbuj online!

Dennis
źródło
Dlaczego nie Y, zdobyć 2?
Peter Taylor,
2
Ponieważ 2jest tylko jeden znak, więc nie jest dłuższy niż kod źródłowy.
Dennis
7

Java, 111111111111111111111111111111111111111111111111111111111111111111111111111111111 (81)

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

Podkreśliłem tutaj część, która w rzeczywistości jest „zmienna”; wszystko inne jest absolutnie niezbędne dla działającego programu Java.

Przypuszczalnie jest to krótsze niż robienie z Javy BigInteger.

Lynn
źródło
Przypuszczalnie ... - być może System.out.print(BigInteger.TEN.pow(10));- czy ta postać jest mniejsza? Przepraszam - nie jest wystarczająco duży - i .pow(10).pow(10)jest dłuższy.
OldCurmudgeon
Można wymienić interfacez class.
LegionMammal978
2
Ale wtedy mainmusiałoby być public.
Lynn
7
możesz ogolić 2 postacie, robiąc to dla pętli for: for (A a: new A [81])
Jack Ammo
@OldCurmudgeon .pow(100)Nie działałby z jakiegoś powodu?
ETHprodukcje
7

Cubix , 100100

@'dOu

Cubix to dwuwymiarowy esolang oparty na stosie. Cubix różni się od innych języków 2D tym, że kod źródłowy jest owinięty na zewnątrz sześcianu.

Przetestuj online!

Wyjaśnienie

Pierwszą rzeczą, którą robi interpreter, jest ustalenie najmniejszej kostki, na której będzie pasował kod. W tym przypadku długość krawędzi wynosi 1. Następnie kod jest .uzupełniany brakiem operacji, aż wszystkie sześć stron zostanie wypełnione. Białe znaki są usuwane przed przetwarzaniem, więc ten kod jest identyczny z powyższym:

  @
' d O u
  .

Teraz kod jest uruchamiany. IP (wskaźnik instrukcji) zaczyna się na skrajnie lewej twarzy, wskazując na wschód.

Pierwszy znak, jaki napotyka IP ', wypycha następny bajt na stos; ten bajt to dlub 100. Dalej jest O, który wypisuje najwyższy element (100) jako liczbę całkowitą.

Następnie IP uderza u, który obraca go w prawo, przesuwa go do przodu, a następnie obraca ponownie. Przełącza się na dolną powierzchnię skierowaną na północ, a następnie obraca się na wschód. Spakowuje to Oponownie, generując 100, a następnie do tego, @co kończy program.

ETHprodukcje
źródło
6

MATL , 1000

1e3

Uwaga: najnowsze zatwierdzenie GitHub kompilatora działa zarówno na Octave, jak i na Matlabie.

To interpretuje liczbę w notacji naukowej i domyślnie drukuje ją, tworząc w ten sposób wynik

1000

Luis Mendo
źródło
6

Perl, 1000000000

print 1e9

Bezpośredni.

Lynn
źródło
1
Czy nie możesz zmniejszyć swojego wyniku za pomocą say?
Neil,
To -Echyba wymagałoby włączenia flagi. W tym wyzwaniu nie jestem pewien, jak to policzyć.
Lynn
1
Ponieważ „w -M5.010razie potrzeby jest bezpłatny” , nie powinieneś go wcale liczyć.
ThisSuitIsBlackNot
6

Python 2, 107918163081

print 69**6
niebieski
źródło
Możesz usunąć spację pomiędzy printi 2.
Bakuriu
1
@ Bakuriu Nie, nie możesz
Blue
69**6jest tylko 107918163081.
Neil,
2
Co ciekawe, działa to również w Perlu.
Grimy,
6

C ++, 1e46

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

Nowy wiersz wymagałby dodatkowych 2 bajtów, przy użyciu formatu „1% 048d \ n”

Glenn Randers-Pehrson
źródło
Nie sądzę, że C ++ pozwala pominąć typ zwracany main(). OTOH, to byłaby dobra odpowiedź C ...
Toby Speight
5

O, 10

A

Najwyraźniej wynikiem jest liczba, którą drukujemy!

kirbyfan64sos
źródło
5

05AB1E , wynik 10

Kod

T

Wyjaśnienie:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Adnan
źródło