Napisz program, który liczy się na zawsze, zaczynając od jednego.
Zasady:
- Twój program musi się zalogować na
STDOUT
akceptowalną alternatywę, jeśli STDOUT
nie jest dostępna.
- Twój program musi być pełnym programem, który można uruchomić, a nie funkcją lub fragmentem kodu.
- Twój program musi wypisać każdą liczbę ze znakiem oddzielającym pomiędzy nimi (nowy wiersz, spacja, tabulator lub przecinek), ale musi to być spójne dla wszystkich liczb.
- Można drukować numery w systemie dziesiętnym, w jednoskładnikowa lub w bazie 256, gdzie każda cyfra jest reprezentowana przez wartość bajtów .
- Twój program musi liczyć co najmniej do 2 128 (włącznie) bez problemów i bez braku pamięci na rozsądnym komputerze stacjonarnym. W szczególności oznacza to, że jeśli używasz jednoargumentowej, nie możesz przechowywać w pamięci jednoznacznej reprezentacji bieżącego numeru.
W przeciwieństwie do naszych zwykłych zasad, możesz swobodnie używać języka (lub wersji językowej), nawet jeśli jest on nowszy niż to wyzwanie. Języki napisane specjalnie w celu przesłania 0-bajtowej odpowiedzi na to wyzwanie są uczciwą grą, ale nie są szczególnie interesujące.
Pamiętaj, że musi być tłumacz, aby można było przetestować zgłoszenie. Zezwala się (a nawet zachęca) do samodzielnego napisania tego tłumacza dla wcześniej niewdrożonego języka.
- Nie chodzi o znalezienie języka z najkrótszym rozwiązaniem tego problemu (są takie, w których pusty program rozwiązuje problem) - chodzi o znalezienie najkrótszego rozwiązania w każdym języku. Dlatego żadna odpowiedź nie zostanie oznaczona jako zaakceptowana.
Katalog
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 63834; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 39069; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Odpowiedzi:
Labirynt , 5 bajtów
IP Adres IP w kodzie się kręci round
Odpowiednie instrukcje:
źródło
:
i\
> <> , 8 bajtów
Kroki:
(Program mniej wydajny (a więc nieprawidłowy))
llnao
.źródło
Haskell, 21 bajtów
Liczby całkowite o dowolnej dokładności i nieskończone listy ułatwiają to :-)
Na szczęście
mapM_
jest w Preludium. GdybyData.Traversable
tak było, moglibyśmy nawet zmniejszyć go do 19 bajtów:źródło
sequence
tego, aby wyjście naprawdę się wydarzyło.[1..]
dozwolone, ponieważ wypisuje wszystkie liczby przecinkiem między nimi? czy pierwszy[
to wszystko schrzanić?[
nie jest dozwolone.Gol> <> , 3 bajty
Kroki:
źródło
Marbelous ,
114504632 bajtówDrukowanie miejsc po przecinku to ból !!
Zdecydowanie nie wygrywam z tym, ale pomyślałem, że dam temu szansę. Mam nadzieję, że to w porządku, że uzupełnia wyjście do 40 zer (aby zmieścić 2 ^ 128).
źródło
Ehun
planszy, które powinno zwiększać kolejną cyfrę, ale nie działa poprawnieinclude/
domyślnieC (tylko architektura 64-bitowa), 53 bajty
Opiera się na wskaźnikach o długości co najmniej 64 bitów i drukuje je w formacie szesnastkowym przy użyciu
%p
specyfikatora. Program powróci zaraz, gdy osiągnie 2 ^ 128.źródło
Sześciokąt ,
1211107 bajtówDzięki alephalpha za dopasowanie kodu do boku 2.
Rozłożony:
Ten jest dość prosty.
10
zapisuje 10, tzn. wysuwa wiersz do początkowej krawędzi pamięci. Następnie})!';
jest wielokrotnie wykonywany w pętli:}
przejdź do następnej krawędzi pamięci.)
zwiększ to.!
wydrukuj jako liczbę całkowitą.'
wróć do 10.;
wydrukuj jako postać.Uważam, że jest to optymalne (choć zdecydowanie nie unikalne). Mam niech brute force napisałem skrypt do tej odpowiedzi poszukiwaniu rozwiązań 6-bajtowych przy założeniu, że będzie musiał zawierać co najmniej po jednym z
;
i!
i albo(
albo)
i nie zawierają?
,,
albo@
i nie zrobił znajdź jakieś rozwiązania.źródło
Pyth, 4 bajty
Wyjaśnienie:
źródło
f!\n
( Link TIO ) będzie działał przez 3 bajty, ale nie jestem pewien, czy korzysta on z funkcji dodanych po Twojej odpowiedzi.f
była to cecha Pytha 4 lata temu.pne, 10
Niezwykłe to
bc
to jest krótsze niżdc
.Od
man bc
:źródło
++i
jest wyrażeniem, ale nie przypisaniem i dlatego jest jawnie wyprowadzany. Próbowałeś go uruchomić?echo 'for(;;)++i' | bc
w najbliższym terminalu Linux.Java,
139138127123 bajtówźródło
for(;;)
przeznaczona na łatwe 3 bajty.BigInteger b=null;b=b.ZERO;
, niestety,=null
jest to potrzebne, nawet myślałem, że jest to dostęp statyczny.BigInteger
do FQCN tylko raz.interface
i usunąć jąpublic
z funkcji. Nie chcę kopiować kodu i publikować go jako nowej odpowiedzi.Mathematica, 22 bajty
Echo
jest nową funkcją w Mathematica 10.3.źródło
Echo
daje cztery znaki oddzielające: znak nowej linii">> "
. Nie jestem pewien, czy jest to poprawne - możePrint
zamiast tego użyć ? Zapisz bajt za pomocąi=0;While[Echo@++i>0]
.Rubin,
1512 bajtówp
, gdy podano liczbę całkowitą, drukuje liczbę całkowitą taką, jaka jest (dzięki uprzejmości @philomory )$.
to magiczna zmienna przechowująca liczbę linii odczytanych ze standardowego wejścia. Jest oczywiście inicjowany na 0, a także przypisywany :)źródło
Python 3,
3325 bajtówO ile rozumiem, liczby całkowite w Pythonie są dowolne i
print()
automatycznie tworzą nowe linie.Dzięki za @Jakub i @ Sp3000 i @wnnmaw! Naprawdę nie znam dużo Pythona, jedyne, co wiedziałem, to to, że obsługuje liczby całkowite o dowolnym rozmiarze =)
źródło
1
jest prawdziwą wartością w Pythonie (i większości innych języków). Towhile 1:
wystarczy.while
w jednym wierszurepr(k)
raczej niżprint(k)
. Ponadto liczę twój bajt jako 25 (bez mojej sugerowanej zmiany)repr
zamiastprint
.repr
nic nie wyprowadza. @wnnmawrepr
wtedy robi?Przetwarzanie ,
958571 bajtówPróbowałem czegoś z pętlą while, ale powoduje to awarię całego Przetwarzania, więc na razie pozostanę przy tym.
(Dzięki @ SuperJedi224 i @TWiStErRob za sugestie.)
źródło
import java.math.*;BigInteger i=BigInteger.ZERO;void draw(){println(i=i.add(BigInteger.ONE));}
że zadziała.BigInteger.ONE
zmianę nai.ONE
?Samau , 2 bajty
Wyjaśnienie:
Gdy wyjściem programu jest lista, skrajne nawiasy kwadratowe są pomijane.
źródło
@
„push” jest błędnie napisane.JavaScript (ES6),
999467 bajtówalert
jest ogólnie przyjętymSTDOUT
odpowiednikiem JavaScript, ale użycie go oznacza, że kolejne liczby są automatycznie rozdzielane. Założyłem, że z tego powodu wypisywanie znaku po liczbie nie jest konieczne.źródło
2^53
ale pytanie wymaga, aby je podnieść2^128
.Matlab, 132 bajty
Ok, myślę, że jest to pierwsza poważna odpowiedź, która wykonuje to zadanie bez trywialnej liczby całkowitej wielkości arytmetycznej. Ten program implementuje liczbę całkowitą o dowolnym rozmiarze jako tablicę liczb całkowitych. Każda liczba całkowita ma zawsze wartość od 0 do 9, więc każdy element tablicy reprezentuje jedną cyfrę dziesiętną. Rozmiar tablicy zostanie zwiększony o jeden, gdy tylko będziemy na np
999
. Rozmiar pamięci nie stanowi tutaj problemu, ponieważ2^128
wymaga tylko tablicy o długości 39.źródło
C ++,
146141138 bajtówKorzystanie z biblioteki standardowej bigint jest chyba najbardziej nudny sposób odpowiedzieć na to pytanie, ale ktoś musiał to zrobić.
Nie golfowany:
Powodem, dla którego gra w golfa jest używana,
stdio.h
a nie,cstdio
jest unikanie konieczności używaniastd::
nazw.To jest moja pierwsza gra w golfa w C ++, daj mi znać, jeśli są jakieś sztuczki, aby to jeszcze skrócić.
źródło
'\n'
zamiaststd::endl
, zaoszczędziłby Ci 8 bajtów. Może być też sposób na użycie CPP #define do skompresowania niektórych powtórzeń,i
domyślnie skonstruowany z wartością 0? Następnie możesz usunąć definicję i przełączyć przyrostowy na preincremet, co pozwoli zaoszczędzić 2b#import
?C # .NET 4.0,
11110310297 bajtówNie znalazłem tutaj żadnej odpowiedzi w języku C #, więc musiałem tylko napisać jedną.
.NET 4.0 jest wymagany, ponieważ jest to pierwsza wersja, która zawiera BigInteger . Musisz jednak odwołać się do System.Numerics.dll .
Z wcięciem:
Dzięki sweerpotato, Kvam, Berend za uratowanie niektórych bajtów
źródło
class C{static void Main(){var b=System.Numerics.BigInteger.One;for(;;)System.Console.WriteLine(b++);}}
: ~)!Console.WriteLine
do struktury pętli:class C{static void Main(){for(var b=System.Numerics.BigInteger.One;;Console.WriteLine(b++));}}
System
. To oszczędza jeden bajt!using System;
(13 bajtów), możesz pozbyć sięSystem.
(7 bajtów) dwa razy, oszczędzając 1 bajt.Clojure, 17 bajtów
Leniwe sekwencje i dowolne liczby całkowite precyzji ułatwiają to (tak jak w przypadku Haskell i CL).
prn
oszczędza mi kilka bajtów, ponieważ nie muszę drukować ciągu formatu.doseq
prawdopodobnie byłby bardziej idiomatyczny, ponieważ tutaj mamy do czynienia tylko z efektami ubocznymi;map
nie ma większego sensu w użyciu, ponieważ utworzy sekwencjęnil
(która jest wartością zwracaną dla każdego z nichprn
wywołania.Zakładając, że liczę na zawsze, sekwencja wskaźnika zerowego wynikająca z tej operacji nigdy nie zostanie zwrócona.
źródło
MarioLANG , 11 bajtów
Zainspirowany odpowiedzią Martina Büttnera na inne pytanie .
źródło
CJam, 7 bajtów
Wyjaśnienie:
Uwaga: Należy użyć interpretera Java.
źródło
C, 89 bajtów
Nowe podejście (implementujące moduł przyrostowy bitowy) w C:
Mniej golfa
Zakończyć
Ta wersja ma niewielką wadę, polegającą na tym, że się nie kończy (co obecnie nie jest wymagane). Aby to zrobić, musisz dodać 3 znaki:
źródło
forever
Foo , 6 bajtów
Wyjaśnienie
źródło
Minkolang , 4 bajty
Wypróbuj tutaj. (Właściwie uważaj. 3 sekundy czasu wystarczyły, aby dostać się do ~ 40 000).
1+
dodaje 1 na górze stosu,d
duplikuje go iN
wysyła górę stosu jako liczbę całkowitą z końcową spacją. Zapętla się, ponieważ Minkolang jest toroidalny, więc gdy licznik programu zejdzie z prawej krawędzi, ponownie pojawi się po lewej.źródło
Zestaw Intel 8086+, 19 bajtów
Oto podział:
Wysyła 128 bitową liczbę w 8 górnych lewych pozycjach ekranu. Każda pozycja ekranu zawiera 8-bitowy znak ASCII i dwa 4-bitowe kolory.
Uwaga: otacza 2 128 ; wystarczy zmienić
8
in,mov cx, 8
aby9
wyświetlić liczbę 144 bitów, a nawet80*25
pokazać liczby do 2 32000 .Bieganie
Skompresowana bzip2 1.44Mb, dyskietka startowa zakodowana w standardzie base64 Obraz
Wygeneruj obraz dyskietki, kopiując i wklejając następujące elementy
w tym wierszu poleceń:
i biegać na przykład z
qemu -fda floppy.img -boot a
Rozruchowy ISO 1,8 Mb
Jest to obraz ISO zakodowany w formacie bzip2 w formacie base64. Wygeneruj ISO, wklejając
w
i skonfiguruj maszynę wirtualną do uruchamiania z niej.
DOS .COM
Jest to plik wykonywalny DOS .COM zakodowany w standardzie base64 :
Wygeneruj plik .COM za pomocą
i uruchom go w (darmowym) systemie DOS.
źródło
Perl ,
343230282623 bajtówPrzetestuj za pomocą
źródło
for(,,){...}
z{...;redo}
dla dwóch osób.SV UNDEF
, które po zwiększeniu nie spowodująBigInt
przeciążenia - ponieważ nie jest toBigInt
. Jednak literały całkowite są tworzone jakoBigInt
s. Naprawdę nie takie dziwne;)$-
aby zachować go jako liczbę całkowitą i powrócić do używania++$-
?perl -Mbigint -E '{say++$-;$-+=$-;redo}' | more
i zawija się do 1. Pozostaje int, ale bigint nie wkracza , niestety.Cudowny, 358 bajtów
16 pół sumatorów połączonych razem, skrajnie prawy, wykonujący N ++ w każdym cyklu, a każdy sumator podaje swój przelew (00 lub 01) do następnego w łańcuchu. Dane wyjściowe są w formacie szesnastkowym.
Interpretator python ma błąd polegający na tym, że dane wyjściowe z zapamiętanych funkcji są tracone, więc musisz uruchomić to z „-m 0”, aby działało poprawnie. Bez tego parametru można zobaczyć, jak szybko będzie działać bez błędu, ale dane wyjściowe nie będą działać poprawnie.Uwaga do siebie: napraw ten błąd w marbelous.pyTen błąd został naprawiony w najnowszej wersji marbelous.pyźródło
R, 52 bajty
(Uwaga:
gmp
jest biblioteką zewnętrzną, więc może być konieczne pobranie jej, aby to rozwiązanie działało)źródło
a=gmp::as.bigz(0);repeat{cat(paste(a<-a+1,''))}
. Możesz zanotować notatkę, któragmp
jest biblioteką zewnętrzną, która może wymagać pobrania.BotEngine,
1281201128x13 = 104Dane wyjściowe są binarne.
źródło