Interesuje mnie widok programów, które nie proszą o żadne dane wejściowe, wypisują kopie googolów jakiegoś niepustego łańcucha, nie mniej, nie więcej, a potem się zatrzymują. Googol definiuje się jako 10 ^ 100, to znaczy 1, a następnie przez sto 0 jest w systemie dziesiętnym.
Przykładowe dane wyjściowe:
111111111111111111111111111111111111111111111111111111111111111111111111...
lub
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
...
Sznurek może również w całości składać się z białych znaków lub specjalnych symboli. Jedynym wyjątkiem od identycznych kopii stałego ciągu jest to, że Twój język zdobi dane wyjściowe w taki sposób, że nie można temu zapobiec, ale można je w trywialny sposób cofnąć w skrypcie opakowania, na przykład przygotowując numer linii do każdej linii. Skrypt opakowania w takich przypadkach nie musi być dostarczony.
Możesz założyć, że na twoim komputerze nigdy nie zabraknie czasu, ale poza tym twój program musi mieć rozsądne zapotrzebowanie na zasoby. Ponadto należy przestrzegać wszelkich ograniczeń, jakie stawia wybrany przez siebie język programowania, na przykład nie można przekroczyć maksymalnej dopuszczalnej wartości dla jego typów liczb całkowitych, aw żadnym momencie nie potrzeba więcej niż 4 GB pamięci.
Innymi słowy, program powinien w zasadzie być testowalny, uruchamiając go na komputerze. Ale ze względu na zasięg tej liczby będziesz musiał udowodnić, że liczba kopii łańcucha, który wysyła, wynosi dokładnie 10 ^ 100, a program zatrzymuje się później. Zatrzymanie może być zakończeniem lub zatrzymaniem, a nawet zakończeniem z powodu błędu, ale jeśli tak, błąd nie może generować żadnych danych wyjściowych, których nie można łatwo oddzielić od danych wyjściowych programu.
To jest golf golfowy , więc wygrywa rozwiązanie z najmniejszą liczbą bajtów.
Przykładowe rozwiązanie (C, bez golfa, 3768 bajtów)
#include <stdio.h>
int main() {
int a00, a01, a02, a03, ..., a99;
for(a00 = 0; a00 < 10; a00++)
for(a01 = 0; a01 < 10; a01++)
for(a02 = 0; a02 < 10; a02++)
for(a03 = 0; a03 < 10; a03++)
...
for(a99 = 0; a99 < 10; a99++)
puts("1");
return 0;
}
Odpowiedzi:
Galaretka ,
64 bajtówJest to łącze niladyczne (funkcja bez argumentów), które drukuje 10 200 kopii ciągu 100 , co oznacza, że drukuje 10 100 kopii ciągu, który składa się z 10 100 kopii ciągu 100 .
Wypróbuj online!
Należy pamiętać, że ze względów praktycznych interpreter online ogranicza dane wyjściowe do 100 KB. Kod działa również jako pełny program, ale z powodu niejawnego wyniku program ten drukuje jedną kopię za dużo.
Jak to działa
źródło
10^100
kopii oryginalnego wyjścia (10^100
kopii ciągu znaków) zabiera go trochę daleko, nawet dla dwóch całych bajtów. Czy przesłałeś to do wyzwania „Wynik to wynik / długość programu, najwyższe wygrane”?Rozmyte Octo Guacamole,
13121110 bajtówWyjaśnienie:
Wydrukowano próbkę kozy:
źródło
Python, 28 bajtów
-1 bajt dzięki Jonathan Allan!
Python 2:
Python 3 (30 bajtów):
źródło
i=10**100
nowa liniawhile i:print();i-=1
zapisuje bajt. Zaoszczędź jeszcze dwa, używając Pythona 2 zwhile i:print;i-=1
Haskell, 28 bajtów
Łączy 10 ^ 100 kopii ciągu
"1"
i drukuje go.źródło
s=[1..10^100]>>"1"
dozwolony jest format odpowiedzi?s
z przykładu nie drukuje - lub w przypadku korzystania z REPL otacza1
się"
. ChybaputStr$[1..10^100]>>"1"
bez tegomain=
byłoby dobrze, ale chciałem przesłać pełny program.Brainfuck,
48018811410698 bajtówTylko dlatego, że trzeba to zrobić.
Zakłada 8-bitowe komórki z zawijaniem. Drukuje 250 255 bajtów NUL, czyli 10 100 razy 10 155 razy 25 255 bajtów NUL.
Wyjaśnienie:
>>>>>>
jest potrzebne, aby zostawić trochę miejsca do pracy.-
produkuje 255.[[->>>+<<<]------>>>-]
zamienia to w 255 kopii o wartości 250, dając taśmę, która wygląda następująco:<<<[<<<]+
przesuwa wskaźnik danych z powrotem i kończy początkowe dane:Potem pojawia się pętla:
[+...-]
początkowo ustawia 1 na 2, która zostaje ustawiona z powrotem na 1 na końcu pętli. Pętla kończy się, gdy korpus pętli jest już ustawiony na 2 na 1.Teraz liczby 2 250 250 250 ... 250 reprezentują licznik w bazie 250, przy czym każda liczba jest większa od cyfry, którą reprezentuje.
[>>>]<<<
przesuwa się maksymalnie w prawo. Ponieważ każda cyfra jest reprezentowana przez liczbę niezerową, jest to trywialne.->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-
zmniejsza licznik o 1. Począwszy od ostatniej cyfry: cyfra ulega zmniejszeniu. Jeśli pozostanie pozytywny, skończymy. Jeśli zmieni się na zero, ustaw go na 250 i kontynuuj od poprzedniej cyfry.[<<<].>>>
przesuwa wskaźnik z powrotem przed najbardziej lewą cyfrą, i jest to dobry moment na wydrukowanie bajtu NUL. Następnie zmień położenie dokładnie na lewą cyfrę, aby zobaczyć, czy skończyliśmy.Aby zweryfikować poprawność, zmień wartość początkową
-
na+
drukującą 250 1 NUL bajtów,++
dla 250 2 itd.źródło
C, 51 bajtów
Funkcja
g()
wywołuje funkcję rekurencyjnąf()
na głębokość 99.Nie obejmuje niepotrzebnego nowego wiersza dodanego pomiędzy
f()
ig()
dla jasności.Drukuje nowe linie 1E100.
Deklaracja
i
jako drugiego parametruf()
nie gwarantowanego działania we wszystkich wersjach C. Testowana na mojej własnej maszynie (GCC na CygWin) i na ideone.com (myślę, że one również działają GCC), ale oczywiście nie do f (99) powody!źródło
f()
, czyli około 1980 bajtów.puts
Zrzuca nowe linie API i API po wyjściowego i przepłukać bufora jest to konieczne.f
zapisuje na stosie, że wywołujący nie był nie oczekuję tego). clang ostrzega o „zbyt małej liczbie argumentów w wywołaniu„ f ”, w-std=c89
i-std=c99
, więc definicja działa jak deklaracja z określoną liczbą argumentów. Ale zapominam; Myślę, że może to oznaczać, że kompilator wie, że funkcja oczekuje 2 argumentów i zawsze pozostawi miejsce na drugi argument.g
i jego funkcję pomocnicząf
.main
byłoby dłużej. Istnieje kilka innych funkcji przesłanych tutaj, jeśli przejrzysz.Kod maszynowy Commodore VIC 20 (40 bajtów)
... tutaj pokazany jako szesnastkowy:
(Kroki z:
SYS 4160
)Znaczenie bajtów w nawiasach
Czy to błąd w pisaniu na klawiaturze?
Mamy rok 1981.
Typowy komputer domowy ma od 1 do 16 KB pamięci RAM! I prawie nie znajdziesz profesjonalnych modeli, które mają 1 M B lub więcej.
(Ok. Tylko żart.)
Program został przetestowany z innymi bazami i wykładnikami. Nie mam wątpliwości, że będzie działać również ze 100 i 50.
Przynajmniej nie ulega awarii z tymi liczbami (ale nie kończy się również w mierzalnym czasie).
Rozmiar pamięci jest wystarczający dla wykładnika 50, a 100 jest mniejszy niż 127, więc podstawa 100 nie powinna stanowić problemu.
Podstawowy pomysł
Istnieje 50-cyfrowy licznik, który liczy się w systemie 100. Bajty 0x01-0x64 reprezentują cyfry 0–99. Pierwszy bajt w liczniku jest najniższą cyfrą. Po ostatnim bajcie w liczniku (najwyższa cyfra) następuje bajt o wartości 0x00.
Licznik ma wartość początkową 100 ^ 50.
Zewnętrzna pętla zapisuje bajt do „kanału bieżącego” („standardowe wyjście” w nowoczesnych systemach; zazwyczaj ekran), a następnie zmniejsza licznik.
Zmniejszanie odbywa się za pomocą wewnętrznej pętli: Zmniejsza cyfrę, aw przypadku niedomiaru od 1 do 99 przesuwa się do następnej cyfry. Jeżeli bajt 0x00 na końcu licznika jest zmniejszany, program zatrzymuje się.
Kod zestawu to
EDYTOWAĆ
Program działa również na Commodore C64!
źródło
Węzeł, 89 bajtów
Wyprowadza 10 100 nowych linii. (Teoretycznie, to znaczy, test zastępując
100
z1
wyjściowe 10 1 nowe linie zamiast).Działa to poprzez ustawienie
i
na ciąg(100 zer i 1; googol odwrócony), a następnie kilkakrotnie „odejmowanie 1” z wyrażeniem regularnym zamienia i wypisuje znak nowej linii, aż wszystkie zera będą ciągiem zerowym.
Port odpowiedzi C ++ miałby 49 bajtów:
źródło
05AB1E , 6 bajtów
Wyjaśnienie
źródło
Ruby, 20 bajtów
Drukuje 1, a następnie nowy wiersz 1E100 razy.
1E100
nie działa, ponieważ jest liczbą zmiennoprzecinkową, a nie liczbą całkowitą o dowolnej precyzji.źródło
10**(100.times{p 1})
1E100.to_i
ocenione na 10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104 na moim komputerze./// , 36 znaków ASCII (4 różne)
Wysyła
.
znak 3 * 10 ^ 125 razy, co oznacza, że wysyła ciąg składający się z 3 * 10 ^ 25 powtórzeń.
znaku, 10 ^ 100 razy.Wyjaśnienie:
/t./.ttttt/
Wymienićt.
z.ttttt
całej pozostałej części programu, powtarzając aż żadne przypadkit.
pozostają. Zastępujet...
się...
następnie przez 125t
s./.t/t\........../
Wymienić.t
zt..........
całej pozostałej części programu, powtarzając aż żadne przypadki.t
pozostają. Zajmuje to...
następujące po nich 125t
s, i zamienia je w 125t
s, po których następuje 10 ^ 125 wystąpień...
./t//
: Usuń wszystkie pozostałet
s.t...
: Zostaje zastąpione przez 3 * 10 ^ 125.
s. Wyjmij je.Teraz generowanie 10 ^ 100 powtórzeń 3 * 10 ^ 25 powtórzeń czegoś w rodzaju czucia się jak oszustwo. Ten program wypisuje
.
znak dokładnie 10 ^ 100 razy, używając 45 znaków ASCII:Wyjaśnienie tego:
/T/tttttttttt/
WymienićT
ztttttttttt
całej pozostałej części programu. Zastępuje toTTTTTTTTTT
100 powtórzeniamit
./.t/t........../
Wymienić.t
zt..........
całej pozostałej części programu. To zajmuje.
następne 100t
sekund i zamienia je w 100t
sekund, a następnie 10 ^ 100.
sekund./t//
: Usuń wszystkie pozostałet
s..TTTTTTTTTT
: Zostaje zastąpione przez 10 ^ 100.
s. Wyjmij je.Wreszcie, oto program kompromisowy, który wypisuje
.
znak 2 * 10 ^ 100 razy, używając 40 znaków:źródło
Befunge 93, 33 bajty
Niestety Befunge nie ma funkcji power, więc prawie cały ten kod jest moją implementacją funkcji power. Nadal nad tym pracuję.
Wyjaśnienie:
1
: Zacznij od1
w lewym górnym rogu, aby po pomnożeniu nie za0
każdym razem.01g
: pobierz znak na pozycji (0, 1), czylid
o kodzie ASCII 100.0`
: sprawdź, czy wartość zapisana w (0, 1) jest większa niż 0; ta wartość się zmieni.#@!# _
: Logiczne nie!
do wartości, którą otrzymujemy z ostatniego kroku (0 lub 1), więc jeśli był to 1, teraz mamy 0, i zauważamy, że#
oznacza to pominięcie następnego znaku w kodzie.01g 1- 01p
: Weź ponownie wartość zapisaną w (0, 1), odejmij 1 od niej i zapisz nową wartość w (0, 1)25**
: pomnóż najwyższą wartość stosu przez 101.
: drukuj za1
każdym razem, gdy ta pętla1
jest drukowany (teoretycznie) razy googol, ale to szybko ucieka ze strony, na której testowałem to.Możesz uruchomić kod Befunge 93 tutaj . Z jakiegoś powodu najwyższą wartością stosu jest to,
1.0000000000000006e+100
kiedy powinno być1.0e+100
. Nie wiem, skąd to się6
wzięło, ale nie sądzę, że powinno tam być i że może to być jakiś błąd zaokrąglenia lub coś takiego.źródło
ABCR , 56 bajtów
Turingi są zabawne, zwłaszcza gdy nie mają łatwego mnożenia lub wykładników. Z drugiej strony musiałem użyć tylko dwóch z trzech kolejek!
Wyjaśnienie:
źródło
Partia,
574242 bajtówKażda pętla przechodzi przez to, wykonując dodatkową iterację. Pętle są ograniczone do ~ 2³² ze względu na 32-bitowy limit liczb całkowitych. Pierwsze cztery pętle liczą 2²⁵, co daje w sumie 2¹⁰⁰, podczas gdy pozostałe dziesięć pętli liczy 5¹⁰, co daje w sumie 5¹⁰⁰.
Edycja: Zaoszczędź niewyobrażalne 58% dzięki @ ConorO'Brien.
źródło
TI-Basic, 20 bajtów
Bezpośredni. Wyświetlanych jest tylko osiem wierszy jednocześnie, a poprzednie wiersze nie pozostają w pamięci. Ponieważ
ᴇ100
nie jest obsługiwany, musimy wykonywać pętle od-ᴇ99
do9ᴇ99
. Następnie, jeśliI!=0
, wyświetl ciąg (który, nawiasem mówiąc, wynosi 3). W ten sposób drukujemy go dokładnieᴇ100
razy.źródło
funkcja kodu maszynowego x86-64, 30 bajtów.
Wykorzystuje tę samą logikę rekurencji jako C Odpowiedź @Level rzeki św . (Maksymalna głębokość rekurencji = 100)
Korzysta z
puts(3)
funkcji libc, z którą normalne pliki wykonywalne są powiązane. Można go wywoływać za pomocą ABI x86-64 System V, tj. Z C w systemie Linux lub OS X, i nie blokuje żadnych rejestrów, których nie powinien.objdump -drwC -Mintel
wyjście, skomentowane z wyjaśnieniem0x040035e - 0x0400340 = 30 bytes
Zbudowany z
yasm -felf64 -Worphan-labels -gdwarf2 golf-googol.asm && gcc -nostartfiles -o golf-googol golf-googol.o
. Mogę opublikować oryginalne źródło NASM, ale wydawało się, że to bałagan, ponieważ instrukcje asm są tam w trakcie demontażu.putchar@plt
znajduje się w odległości mniejszej niż 128 bajtówjl
, więc mógłbym użyć 2-bajtowego krótkiego skoku zamiast 6-bajtowego skoku w pobliżu, ale jest to prawdą tylko w małym pliku wykonywalnym, a nie jako część większego programu. Więc nie sądzę, żebym mógł usprawiedliwić nie liczenie wielkości implementacji put libc, jeśli skorzystam z krótkiego kodowania jcc, aby to osiągnąć.Każdy poziom rekurencji wykorzystuje 24B przestrzeni stosu (2 wypychania i adres zwrotny wypychany przez CALL). Każda inna głębokość będzie
putchar
sprawdzać ze stosem wyrównanym tylko o 8, a nie o 16, więc to narusza ABI. Implementacja stdio, która używa wyrównanych sklepów do rozlewania rejestrów xmm na stos, byłaby błędna. Ale glibc'sputchar
tego nie robi, pisząc do potoku z pełnym buforowaniem lub pisząc do terminala z buforowaniem linii. Testowane na Ubuntu 15.10. Można to naprawić za pomocą manekina push / pop w.loop
celu wyrównania stosu o kolejne 8 przed wywołaniem rekurencyjnym.Dowód, że drukuje odpowiednią liczbę nowych linii:
Moja pierwsza wersja to 43B i była używana
puts()
w buforze 9 nowych linii (i kończącym 0 bajtów), więc put wstawiałby 10. Ten podstawowy przypadek rekurencji był jeszcze bliższy inspiracji C.Faktoring 10 ^ 100 w inny sposób mógł skrócić bufor, może nawet do 4 nowych linii, oszczędzając 5 bajtów, ale zdecydowanie lepiej jest użyć putchar. Potrzebuje tylko liczby całkowitej, a nie wskaźnika i bufora. Standard C pozwala na implementacje, dla których jest to makro
putc(val, stdout)
, ale w glibc istnieje jako prawdziwa funkcja, którą można wywołać z asm.Drukowanie tylko jednej nowej linii na połączenie zamiast 10 oznacza po prostu, że musimy zwiększyć maksymalną głębokość rekurencji o 1, aby uzyskać kolejny współczynnik 10 nowych linii. Ponieważ zarówno 99, jak i 100 mogą być reprezentowane przez 8-bitowy znak bezpośredni z rozszerzonym znakiem,
push 100
nadal jest to tylko 2 bajty.Co więcej, posiadanie
10
w rejestrze działa zarówno jako licznik nowej linii, jak i licznik pętli, oszczędzając bajt.Pomysły na oszczędzanie bajtów
Wersja 32-bitowa może zaoszczędzić bajt dla
dec edi
, ale konwencja wywoływania argumentów stosu (dla funkcji bibliotecznych takich jak putchar) sprawia, że wywołanie ogonowe jest trudniejsze i prawdopodobnie wymagałoby więcej bajtów w większej liczbie miejsc. Mógłbym użyć konwencji register-arg dla prywatnegof()
, wywoływanego tylko przezg()
, ale wtedy nie mogłem wywołać putchar tail-call (ponieważ f () i putchar () przyjmowałyby inną liczbę argumentów stosu).Byłoby możliwe, aby f () zachowywał stan dzwoniącego, zamiast zapisywania / przywracania w dzwoniącym. Prawdopodobnie jest to do bani, ponieważ prawdopodobnie musiałoby się dostać osobno z każdej strony gałęzi i nie jest kompatybilne z ogłaszaniem. Próbowałem, ale nie znalazłem żadnych oszczędności.
Utrzymywanie licznika pętli na stosie (zamiast push / pop rcx w pętli) również nie pomogło. Było gorzej o 1B z wersją, która używa putów, i prawdopodobnie jeszcze większą stratę z tą wersją, która taniej konfiguruje rcx.
źródło
PHP, 44 bajty
Ten fragment wyświetli
1
czasy googola. Nie zabraknie pamięci, ale jest strasznie powolny. Korzystam z BCMath, aby móc obsługiwać długie liczby całkowite.Nieco lepsza wydajność, ale nie tak mała (74 bajty):
Wyświetli literę
a
razy googol. Zużyje prawie 4 GB pamięci, generując jednocześnie około 4e9 znaków.źródło
a
, to ciąg 4 * 10 ^ 9a
s. Nie ma możliwości, aby nie przekroczyć 4 GB, jeśli zamierzasz umieścić tam 3 razy więceja
s. Ob_flush nie ma z tym nic wspólnego, celem drugiego przykładu jest wypisywanie dużych ciągów naraz zamiast wypisywania małych ilości znaków za każdym razem, co powoduje, że program działa znacznie szybciej, kosztem większego zużycia pamięci.Haskell,
4543 bajtówźródło
Pyke,
65 bajtówWypróbuj tutaj!
Niesprawdzony, ponieważ powoduje awarię przeglądarki. Pierwsze 4 znaki generują 10 ^ 100 i
V
wypisują tyle nowych linii. Przetestuj za pomocą100V
.źródło
Rakieta 36 bajtów
Wynik:
źródło
JAISBaL , 4 bajty
Chrome nie może odczytać wszystkich symboli i nie jestem pewien co do innych przeglądarek, więc oto zdjęcie:
Wyjaśnienie:
Całkiem proste .... po prostu drukuje przestrzenie googol. Trzy instrukcje, ale stała googol ma dwa bajty.
(Napisane w wersji 3.0.5)
źródło
JavaScript ES6,
8583 bajtówZaoszczędzono 2 bajty dzięki produktom ETH!
Drukuje 1e100 nowych linii.
Wewnętrzna część generuje ten program, który jest następnie oceniany.
Teraz, jako dowód poprawności, użyjemy indukcji. Załóżmy zastąpić początkowej 100 dla innych wartości, ogólnie N . Twierdzę, że wstawienie N da 10 N nowych linii. Piszmy wynik tego do
wc -l
, który zlicza liczbę nowych linii na wejściu. Użyjemy tego zmodyfikowanego, ale równoważnego skryptu, który pobiera dane wejściowe N :Oto kilka wyników:
Widzimy, że przekształca to wejściowe N dla małych wartości na 10 N nowych linii.
Oto przykładowy wynik dla N = 1:
źródło
eval([...Array(i=100)].map(_=>`for($${--i}=0;$${i}++<10;)`).join``+"console.log()")
Mathematica,
483025 bajtówWynik:
źródło
For[n=0,n++<10^100,Echo[]]
?>>
część wyniku. Są drukowane, jeśli używaszEcho
na konsoli.Echo@0&~Array~10^100;
na 21 bajtów?Fortran 95, Free-form, Recursive, 117 bajtów
Drukuje googol linii zawierających
Fortran 90, rekurencyjny, 149 bajtów
Rekurencyjne wywoływanie 100 zagnieżdżonych pętli, każda 10 iteracji, tworzy dokładnie jeden googol. N, L i liczniki pętli pasują do bajtów liczb całkowitych.
Testowany przez zastąpienie 99 przez 1, 2, 3, 4, 5 i zauważenie, że w każdym przypadku wynikowa liczba wierszy z „wc” ma n + 1 zer.
Fortran II, IV, 66 lub 77, 231 bajtów:
Drukuje googol nowych linii.
Wszystkie te programy będą działać na komputerach 32-bitowych; w rzeczywistości wersje rekurencyjne działałyby dobrze na komputerze 16-bitowym. Można użyć mniejszej liczby pętli w wersji brute-force, uruchamiając na starym Cray z 60-bitowymi liczbami całkowitymi. Tutaj dziesięć zagnieżdżonych pętli 2 * 10 ^ 9 w jednej pętli 5 ^ 10 (9765625) odpowiada 10 ^ 100 całkowitej iteracji.
Żadna z wersji nie używa pamięci, by mówić o innym kodzie niż sam kod obiektu, liczniki, jedna kopia ciągu wyjściowego, a w wersji rekurencyjnej 100-poziomowy stos zwrotny.
Sprawdź czynniki, porównując
źródło
Symulator maszyny Turinga, 1082 bajty
Symulator maszyny Turinga
Nie wiem, czy jest to poprawne wyjście, ponieważ ma 82 spacje wiodące.
Nie wiem, czy przestrzega to limitu 4 GB, więc jeśli nie, to jest niekonkurencyjny i służy tylko prezentacji. Dane wyjściowe to 1e100 bajtów, więc należy je odjąć od liczby bajtów pamięci. Końcowa liczba bajtów wynosi 82 bajty.
Oto wyjaśnienie:
Pierwsze 80 wierszy kodu to 80 różnych stanów, które generują licznik pętli base-19 1
6EC1BCF4688309GH806H932ADCC44EEG6DE0FE9FAHDE66DGH108C9G3623E045A0H7A95AB594CE99A
.Następne 19 wierszy kodu to stan licznika, który zmniejsza liczbę za każdym razem, gdy znak jest drukowany.
Następne 6 wierszy to stan drukarki, do którego dołączony jest znak
=
.Wreszcie, ostatnie 2 wiersze to stan czyszczenia, który jest potrzebny, aby upewnić się, że jedynym wyjściem jest
=====...=====
. Wiodące / końcowe spacje nie są liczone jako wynik, ponieważ są nieuniknionymi efektami ubocznymi.Program zatrzymuje się.
1 Zrobiłem z tego matematykę.
źródło
Pyth, 7 bajtów
Nowy (konkurencyjny)
Wyjaśnienie
Stare (niekonkurujące) 7 bajtów
Wyjaśnienie
źródło
*TT
jest krótsza niż zwykła100
.Python 3, 32 bajty
Alternatywne rozwiązanie, 33 bajty:
źródło
range(10**100)
tworzy listę liczb[1, 2, 3, 4, ...]
, w wyniku czegoOverflowError: range() result has too many items
. To działałoby w Pythonie 2 z wywołaniem „xrange()
zamiast” i działa w Pythonie 3, ponieważxrange()
zmieniono jego nazwę narange()
, a oryginał,range()
który wygenerował listę, był przestarzały.Java,
198179155 bajtówDrukuje (
x
==null
?:null
Ciąg, który zaczyna się[La;@
lub coś takiego) 10 100 razy w czasie O (na zawsze).źródło
class
, ale nie maszpublic static void main(String[]a)
metody. Co do wskazówek golfowych: można wymienićnew BigInteger("0")
,new BigInteger("1")
inew BigInteger("10")
zBigInteger.ZERO
,BigInteger.ONE
iBigInteger.TEN
; można zastąpićimport java.math.BigInteger;
zimport java.math.*;
.java.math.BigInteger b=null;for(b=b.ZERO;!(b=b.add(b.ONE)).equals(b.TEN.pow(100);)System.out.print(x);
b
ma wartość NULL.Java, 153 bajty
Wyjście: 1e100 1s
Wiem, że jest jeszcze jedna odpowiedź Java, która jest również bardzo bliska. Mój ma główną i wciąż jest krótszy.
To mój pierwszy wpis do golfa. Docenione wskazówki.
źródło
import java.math.*;()->{for(BigInteger i=BigInteger.ZERO;!i.add(i.ONE).equals(i.TEN.pow(100));)System.out.print(1);};
javac
to nie pozwolę mi tego skompilować.Pyth,
87 bajtówPołączyć
Rozwiązanie jest testowane z małą wydajnością, ale powinno wydrukować
abcdefghijklmnopqrstuvwxyz
1e100 razy.Z jakiegoś powodu,
p
było niepotrzebne, a 31343 (Maltysen) powiedział .źródło
p