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


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.


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 .


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.


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.


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ę.


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 ...)


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


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!


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.


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 !


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 .


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


14

Japt , zdobądź 10

A

Jak pokazuje wynik, drukuje 10.


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



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.


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.


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.


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



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.



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.


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.




6

Python 2, 107918163081

print 69**6

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”


Nie sądzę, że C ++ pozwala pominąć typ zwracany main(). OTOH, to byłaby dobra odpowiedź C ...
Toby Speight


5

05AB1E , wynik 10

Kod

T

Wyjaśnienie:

T         # Puts 10 onto the stack
          # Implicit, print the last item of the stack
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.