Ten jest dość prosty.
Napisz najkrótszy program, jaki możesz, generując jak najwięcej wyników.
Aby było fajnie, programy wytwarzające nieskończone wyjście zostaną zdyskwalifikowane.
Zwycięzcą jest program o największym stosunku wielkości wyjściowej do wielkości kodu.
Wyniki są oparte na tym, co działa na moim komputerze, którym jest Mac z systemem Mac OS X 10.7.5 z procesorem Intel Core i5 i 8 GB pamięci.
\n
Odpowiedzi:
Python: kod 8 znaków, wyjście 387420489 znaków - Stosunek: 48427561.125: 1
Możemy mieć stosunek do nieskończoności, dodając więcej
**9
s:Na przykład:
który ma stosunek ~ 10 10 10 10 10 8,568 (niewyobrażalnie duża liczba).
źródło
**9
s, czy w końcu nie stanie sięInfinity
?**9
s, jaką możesz umieścić, zanim stanie się wyjścieInfinity
.Są to więc dobre programy, które generują dużo danych wyjściowych przy bardzo małym kodzie, ale żaden z nich nie jest naprawdę krótki ...
brainfuck, 5 znaków, 255 bajtów wyniku
Myślę, że to jedyny przypadek użycia, w którym pieprzenie mózgu naprawdę się wyróżnia. Wiem, że ten nie wygra, ale nie sądzę, że moglibyśmy być lepsi niż przykład w Pythonie. Nie tylko to, ale ...
pieprzenie mózgu, 4 znaki, nieskończona moc wyjściowa
Przypuszczam, że jest to najkrótszy dostępny program o nieskończonej wydajności.
Właściwie, poczekaj, mój kumpel właśnie wymyślił naprawdę dobry.
Python, 80 bajtów, nieznana ilość danych wyjściowych
Ten program ostatecznie zostanie ostatecznie zatrzymany, ale nastąpi to dopiero po około 8 000 latach. Dokładna liczba znaków wyjściowych zależy od szybkości, z jaką komputer może wytwarzać znaki.
źródło
.
generuje nieskończony strumień 0 znaków.Perl - 19 bajtów, wyjście 187200000000000000 bajtów (9852631578947368.42: 1)
166 petaby z pojedynczym wyciągiem, zużywając nie więcej niż 1,7 GB pamięci.
Jest kilka rzeczy, które uczyniły to wyzwanie bardziej interesującym, niż się spodziewałem. Perl wydaje się odmawiać przydzielania więcej niż 1 GB pamięci do dowolnej listy. Dlatego 4-bajtowe odniesienie skalarne do wewnętrznego łańcucha można powtórzyć tylko 26e7 ≈ 2 28 razy.
$]
jest liczbą „starej wersji perla”, która jako ciąg znaków ma długość 8 bajtów i przypomina5.016002
.Przy większej pamięci systemowej powinna być w stanie przejść wyżej. Zakładając, że pełne 8 GB byłyby faktycznie dostępne, powinieneś być w stanie użyć
$]x9e8
zamiast tego wewnętrznego łańcucha, który dałby 1,62 eksabajtów.źródło
Ruby i Python, 13 znaków, wyjście 599994 znaków, stosunek ~ 46153: 1
Po prostu podnosi bardzo dużą liczbę do potęgi innej bardzo dużej liczby. Uruchomienie zajmuje około 20 sekund. Nie mogę zwiększyć liczb, ponieważ dzięki temu liczba stałaby się Nieskończonością.
(Zrobiłem to wcześniej , obecnie pracuję nad stworzeniem pętli dla jeszcze dłuższych wyników)
Edycja: Zrobiłem to!
Ruby, 28 znaków, wyjście char 6e599999, współczynnik ~ 6e599998 (myślę)
Nie przetestowano (z oczywistych powodów), ale jestem pewien, że pierwsza liczba to około 1e599994, która pomnożona przez 599994 to około 6e599999. Teoretycznie to zadziałałoby, ale nie jestem pewien, czy spowodowałoby to awarię komputera, więc zrzeczenie się odpowiedzialności: Nie jestem odpowiedzialny, jeśli w jakikolwiek sposób wyrządzi on szkody Twojemu komputerowi: P
Oczywiście możesz kontynuować:
Ruby, 37 znaków, wyjście 6e359992800041 char, współczynnik ~ 6e359992800040
I tak dalej, ale wątpię, aby jakikolwiek komputer to poradził: P
źródło
Jeśli dozwolone było nieskończone wprowadzanie danych,
Ponieważ to nie jest
(25128 danych wyjściowych: 20 danych wejściowych = 1256,4: 1)
Nie jestem na Linux-ie, ale wyobrażam sobie, że możesz zrobić coś takiego
i uzyskać ogromną wydajność. (poprzez odpowiedź GigaWatt)
źródło
timeout 99d
. Tak, 99-dniowy czas pracy. Nie jestem tego pewien, ale ostatecznie opróżnisz pulę entropii/dev/random
i zostanie ona zablokowana, więc/dev/urandom
może być bardziej odpowiednie. (Udało mi się uzyskać 40 MB / siurandom
tylko 128 KB / srandom
)HQ9 +, 11471
Rzeczywista liczba znaków różni się w zależności od tłumacza, ale prawdopodobnie około 10000 miałoby rację?
źródło
C #: 108 znaków. Przełożenie: 742123445489230793057592: 1
Po prostu pobiera i drukuje listę prawników Sądu Najwyższego Stanów Zjednoczonych w Wikipedii (4344904 znaków) 18446744073709551615 razy.
źródło
for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}
2147483647 znaków * 18446744073709551615 razy = 39614081238685424720914939905/81 => Stosunek: 489062731341795366924875801~ - ~! - Stosunek: (64 4 4 4 64 ) / 154 ~ = 10 10 10 10 10 1,583328920493678
Jak to działa: Najpierw ustawia się
'
na 4 ^ 3 lub 64. Następnie tworzy''
funkcję, która ustawia się'
na'
^ 4 * razy (gdzie * jest to wejście).'''
jest następnie wykonywana funkcja, która wywołuje''
z wejściem jako'
^ 4. Następnie''''
tworzona jest funkcja, która wywołuje'''
z'
^ 4 jako wejściem.''''
jest następnie wywoływany z wejściem 64. Na koniec''
zmienia się na funkcję, która wypisuje spację * razy; jest to następnie wywoływane z wejściem'
.Okazuje się, że w końcu
'
wynosi 64 4 4 4 64 , a długość mojego programu to 154 ; uderz go w Wolfram | Alpha i wypluje 10 10 10 10 10 1.583328920493678 , którego nawet nie zawracał sobie głowy obliczeniem. Nie wiem nawet, ile cyfr zawiera , ale 64 4 4 zawiera 463. Całkiem nieźle jak na język, który obsługuje tylko jednoznaczne liczby wyraźne i nie ma funkcji wykładniczej; 3Mógłbym to znacznie zwiększyć, ale przesada.
źródło
JavaScript: 27 znaków; 260 431 976 znaków wyjściowych; 9 964 628.74
Ten kod rekurencyjnie koduje dane wejściowe
61
do Base64 61 razy. Kodowanie dowolnego wejścia długościn
do Base64 daje wynik długościn * 8/6
zaokrąglony w górę do wielokrotności 4.Musi to zostać uruchomione ze środowiska konsoli JavaScript, które natywnie obsługuje funkcję kodowania Base64
btoa
. (Każda nowoczesna przeglądarka, ale nie Node.js.) Uwaga Chrome nie może działać wyżeji=61
, a Firefox tylkoi=60
. Pamiętaj też, że konsola Chrome nie może faktycznie wyświetlić wyniku, ponieważ jest on zbyt duży, ale możesz sprawdzić rozmiar wyniku, uruchamiającGdyby ten program działał maksymalnie
i=99
, wygenerowałby hipotetyczny wynik o wielkości 14 566 872,071,840 (14,5 biliona, 14,5e12) znaków, przy hipotetycznym stosunku około 540 miliardów (5,39e11).źródło
Rubinowy, 23 znaki - ~ 500000000000000 (5e14) Wyjście
Ti-Basic 84, 13 znaków - ~ 3000 Wyjście
Nazwij program
prgmA
źródło
rubin,
2839644 znakówNiezbyt krótki, ale rekompensuje to na wyjściu, a tyle, że nie byłem jeszcze w stanie go zmierzyć.
źródło
1e127
wyjścia znaków. w każdym razie przypisanie do zmiennej zmniejszy rozmiar kodu o połowę. Ponadto,1e99
jest większa liczba, która zajmuje mniej miejsca. również użyjmap
zamiasteach
, użyjputs
zamiastprint
, usuń dodatkowe spacje międzyprint
i"ier...
. Możesz także zamienić ten duży ciąg na'a'*999
(lub nawet?a*999
), który jest dłuższy i zajmuje mniej miejsca. Podsumowanie: to wcale nie jest gra w golfa(0..1e99).map
do zmiennej? jaka=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
a=(0...1e99).map
. Być może zechcesz to nieco uspokoić.0..1e9
zużyłby około 4 GB.Mathematica 9 znaków Stosunek: ~ 4564112: 1
Poniżej znajduje się obraz danych wejściowych Mathematica. Nie zastanawiałem się, jak to zrobić w SE.
Oto zrzut ekranu pokazujący liczbę cyfr na wyjściu.
IntegerDigits
konwertuje dane wyjściowe na listę cyfr.Length
liczy liczbę cyfr.Klawisze, aby wprowadzić: 9 , ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....
źródło
Befunge-93: 48 znaków, około ((2 ^ 32) ^ 2) * 10 znaków wyjściowych
Stos Befunge jest teoretycznie nieskończony, ale liczby przechowywane w stosie są ograniczone do wielkości długiej liczby całkowitej bez znaku (tutaj zakłada się, że to 32 bity). Zatem dla interpretera Befunge (x + 1)> x jest fałszem dla prawidłowej wartości x. Używamy tego faktu, aby najpierw przesunąć wszystkie wartości od zera do maksimum (dwa razy, z jedną co trzecią liczbą), a następnie dla każdej wartości na stosie, wyprowadzamy ją i zmniejszamy, a następnie wyskakujemy, gdy osiągnie zero. W końcu stos opróżnia się, a program się kończy. Być może jestem trochę zaniepokojony wielkością wyjściową, ale powinna być gdzieś na tym boisku.
źródło
C: 48 znaków, ok. (2 ^ 32-1) * Wyjście 65090 bajtów
Pamiętaj, że 65090 nie jest dokładny i zależy od wielkości stosu. Program ostatecznie się zatrzyma, gdy się zawiesi. Mógłbym też po prostu wstawić coraz dłuższy ciąg w puts (), aby racja zbliżała się do nieskończoności, ale wydaje się to dość oszukańcze.
źródło
java (131): nieznana, ale skończona kwota
Używając niskiej szansy Math.random (), aby dostać się do 0 w pętli, a następnie przejść do 2 ^ 64-1 pętli przez foreach z wyjściem 1234567890;
źródło
Python 3, 115 bajtów, działa przez 7983 lata (nieznana liczba znaków)
EDYCJA: ymbirtt mnie pobił ._.
Wiem, że to nie jest naprawdę krótkie i wiem, że druga odpowiedź w Pythonie jest znacznie dłuższa, ale postanowiłem spróbować.
Program działa przez około 8000 lat, co, jak wiadomo, trwa dość długo.
Ciągle pobiera bieżący czas za pomocą
datetime.datetime.now()
funkcji i porównuje go z tym9999-12-31 24:59:59.999999
, o ile wiem o maksymalnej dacie w Pythonie.Jeśli to jest równe, program zatrzymuje się. Jeśli tak nie jest, ciągle się wyświetla
a
.źródło