var QUESTION_ID=93441,OVERRIDE_USER=41723;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<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="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><div id="language-list"> <h2>Winners 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><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>
Odpowiedzi:
Sesos ,
11 33 bajtyWypróbuj online! Zaznacz opcję Debuguj, aby zobaczyć wygenerowany kod SBIN.
Montaż Sesos
Powyższy plik binarny został wygenerowany przez skompletowanie następującego kodu SASM.
źródło
Haskell, 19 bajtów
Tworzy nieskończoną listę
[0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7...
Haskell zezwala na nieskończone listy natywnie. Wydrukowanie takiej listy spowoduje wydrukowanie jej elementów raz na zawsze.
źródło
[n,1-n]
![1-n,n]
przyniosłoby lepszy wynik.concatMap (\n -> [1-n, n]) [1..]
, prawda? Miły!Brainfuck, 6 bajtów
Wykorzystuje to zawijanie komórek i drukuje wszystkie możliwe wartości. W Brainfuck natywna reprezentacja liczb całkowitych jest wartością bajtową .
Wypróbuj online!
źródło
int
nie ma nagle mniej lub więcej bitów tylko dlatego, że dodałeś lub usunąłeś trochę pamięci RAM.Cubix ,
1412 bajtówPrzetestuj online! Możesz teraz dostosować prędkość, jeśli chcesz, aby działała szybciej lub wolniej.
Jak to działa
Pierwszą rzeczą, którą robi interpreter, jest usunięcie wszystkich białych znaków i uzupełnienie kodu brakiem operacji,
.
aż idealnie dopasuje się do kostki. Oznacza to, że powyższy kod można również napisać w następujący sposób:Teraz kod jest uruchamiany. IP (wskaźnik instrukcji) zaczyna się w lewym górnym rogu skrajnie lewej twarzy, skierowanej na wschód. Oto ścieżki, którymi zajmuje się podczas uruchamiania programu:
Adres IP zaczyna się na czerwonym szlaku po lewej stronie obrazu. Następnie uruchamia się
OSo;
, co wykonuje następujące czynności:O
Wydrukuj TOS (góra stosu) jako liczbę całkowitą. Na początku programu stos zawiera nieskończone zera, więc jest drukowany0
.S
Push32
, kod char dla znaku spacji.o
Wydrukuj TOS jako znak. To drukuje spację.;
Pop TOS. Usuwa32
ze stosu.Teraz adres IP uderza w
?
, który kieruje go w lewo, w prawo lub prosto, w zależności od znaku TOS. W tej chwili TOS jest0
, więc idzie prosto. To jest niebieska ścieżka;.
nic nie robi, a IP uderza w strzałkę>
, która ponownie kieruje ją na wschód czerwoną ścieżką.~
przejmuje bitowe NIE z TOS, zmieniając je na-1
.Tutaj IP dociera do prawej krawędzi sieci, która owija ją z powrotem w lewo; to ponownie drukuje TOS (tym razem
-1
) i spację.Teraz IP uderza
?
ponownie. Tym razem TOS jest-1
; ponieważ jest to ujemne, adres IP skręca w lewo, podążając zieloną ścieżką. Lustro\
odchyla adres IP do(
, co zmniejsza TOS, zmieniając go na-2
. Wraca i uderza w strzałę;~
trwa bitowe NIE ponownie, obracając-2
się1
.Ponownie TOS jest wyprowadzany i spacja drukowana. Tym razem, gdy IP uderza w
?
, TOS jest1
; ponieważ jest to pozytywne, IP skręca w prawo, podążając żółtą ścieżką. Pierwszym napotkanym operatorem jestS
pchanie dodatkowego32
;;
wyskakuje to wcześniej może to spowodować żadnych kłopotów.Teraz adres IP wraca do strzałki i wykonuje procedurę,
~
zmieniając TOS-2
iO
drukując go. Ponieważ TOS znów jest ujemny, adres IP ponownie podąża zieloną ścieżką. I tak po prostu ciągle jeździ na rowerze *: czerwony, zielony, czerwony, żółty, czerwony, zielony, czerwony, żółty ..., drukowanie w następującym cyklu:TL; DR
Ten program wielokrotnie przechodzi przez 3 proste kroki:
Wersja niepodzielona, 6 bajtów
Usunięcie separacji upraszcza program tak bardzo, że można go zmieścić na kostce jednostkowej:
* Uwaga : Żaden program nie jest naprawdę nieskończony, ponieważ liczą tylko do 2 52 (gdzie JavaScript zaczyna tracić precyzję liczb całkowitych).
źródło
MATL , 8 bajtów
Wykorzystuje domyślny typ danych MATL, czyli
double
działa do2^53
wartości bezwzględnej. Dane wyjściowe toWypróbuj online!
Wyjaśnienie
źródło
@_@XD
,@_D@D
abyś mógł włączyć 0 przy pierwszym uruchomieniu.XD
+1 za buźkęJęzyk programowania Szekspira , 227 bajtów
Oczywiście, ta odpowiedź nie jest bliska wygranej, ale podobało mi się, że jest to przypadek użycia, do którego SPL jest stosunkowo dobrze przystosowany.
Wyjaśniono:
Jak widać, porównując ten kod z moją odpowiedzią na pokrewne wyzwanie polegające na liczeniu na zawsze (tj. Drukowaniu wszystkich liczb naturalnych), długość kodu SPL rośnie dość źle, gdy zwiększa się rozmiar problemu ...
źródło
Let us return to scene II.
powinno byćscene I
.$puck
do zera, a następnie liczenie nie będzie już działać. Dodałem brakiI
w kodzie i poprawiłem długość bajtu (co zresztą trochę się nie zgadzało)Python 2, 27 bajtów
Wydruki
-1 0 -2 1 -3 2 -4 3 ...
źródło
05AB1E ,
96 bajtówZaoszczędzono 3 bajty dzięki Adnan
Wypróbuj online!
Wydruki
0, -1, 1, -2, 2 ...
oddzielone znakami nowej linii.źródło
[N,N±,
.±
i skończyło się to 3 bajtami dłużej niż twój.D,
można go zastąpić,=
aby zapisać bajt.GNU sed, 189 + 2 (flagi rn) = 191 bajtów
Jest to najprawdopodobniej najdłuższe rozwiązanie, ponieważ sed nie ma operacji na liczbach całkowitych ani operacji arytmetycznych. Jako taki musiałem emulować dowolny operator przyrostu rozmiaru , używając tylko wyrażeń regularnych.
Biegać:
Wynik:
źródło
Brainfuck, 127 bajtów
Wypróbuj online!
Biorąc pod uwagę, że nieskończona taśma teoretycznie będzie działać wiecznie.
Bez kompresji
źródło
ShadyAsFuck , 3 bajty
Wyjaśnienie:
Wykorzystuje to zawijanie komórek i drukuje wszystkie możliwe wartości. W SAF natywna reprezentacja liczb całkowitych jest wartością bajtową .
źródło
R,
2524 bajtówGrał jeden bajt dzięki @JDL.
Wypróbuj online!
Przykładowe dane wyjściowe:
źródło
while(1)
zrepeat
zaoszczędzić char.Partia, 56 bajtów
Wynik:
itp. Działa do 2147483647; 58 bajtów, jeśli chcesz (-) 2147483648 w danych wyjściowych:
44 bajty, jeśli drukowanie wszystkich obsługiwanych dodatnich liczb całkowitych, to wszystkie obsługiwane ujemne liczby całkowite, a następnie powtarzanie w nieskończoność, jest dopuszczalne:
źródło
Java 7,
151134122118 bajtów12 bajtów zapisanych dzięki @flawr (i @xnor pośrednio)
Po zmianie reguły .. (
595663 bajtów)Ponieważ w Javie
2147483647 + 1 = -2147483648
nie możemy po prostu robići++
i kontynuować w nieskończoność, ponieważ wyzwaniem było wydrukowanie wszystkich liczb raz. Z powyższego kodu z dodatkiem zakresie, to zamiast drukować wszystkie liczby całkowite od-2147483648
na2147483647
raz każda, w następującej kolejności:0, -1, 1, -2, 2, -3, 3, -4, ..., 2147483646, -2147483647, 2147483647, -2147483648
. Podziękowania dla @ OlivierGrégoire za wskazanie zachowania Javy w odniesieniu doMIN_VALUE-1
/MAX_VALUE+1
. Wypróbuj tutaj.Kod niepoznany i testowy:
Wypróbuj tutaj - powodując błąd w czasie wykonywania
Wynik:
źródło
int
program do zmiany wersji, podany w nieskończonym czasie, wypisze każdą liczbę całkowitą w nieskończonej ilości czasu.MAX_VALUE
, możesz sprawdzić moją odpowiedź (prawdopodobnie wciąż na ostatniej stronie))DC (smak GNU lub OpenBSD) - 16 bajtów
Ta wersja nie jest krótsza niż wersja poniżej, ale powinna być w stanie działać bez wybuchu stosu na komputerze. Niemniej jednak nieskończone duże liczby zajmą nieskończoną ilość pamięci ... kiedyś ...
Z powodu
r
polecenia potrzebuje GNU-DC lub OpenBSD-DC .Test:
DC - 16 bajtów
Trochę złośliwe teraz. ;-)
Ta wersja wykorzystuje długość stosu jako licznik, jednocześnie pozwalając na wzrost stosu.
Test:
DC - 17 bajtów
Bez brudnych sztuczek.
Test:
źródło
[-]P
zrobić45P
. „GNU-Dc lub OpenBSD-Dc” - Czy są jakieś inne wersje powszechnie dostępne na wolności?dc
ma tylko kilku operatorów. Opracowałem je niezależnie od nich.r
jako „swap”. Czasem się mylę, gdy patrzę na różne wersje. Prawdopodobnie nikt już nie chce kodować w starożytnym Dc (i tamr
wyczyści stos). Może zmieniłbym „Dc” na „AT&T dc”? ... i dzięki za45P
podpowiedź ...C # 74 bajtów
Wynik:
Spróbuj:
dotnetfiddle.net (ograniczony do 1000)
źródło
public
modyfikatory i zapisać 14 bajtów. Wartości domyślne będą działać równie dobrze.Ruby,
26221916 bajtówDrukuje liczby oddzielone znakami nowej linii. -3 bajty z @manatwork. -3 bajty z @ m-chrzan.
źródło
p
zrobi to również.0.step{|n|p n,~n}
dla 17 bajtów.JavaScript,
2926 bajtówWersja nieskończona, 26 bajtów
Zaoszczędzono 3 bajty dzięki produktom ETH
wyświetli wszystkie liczby całkowite od -9007199254740991 do 9007199254740992.
Wersja nieskończona (ES6),
114112 bajtówZaoszczędzono 2 bajty dzięki produktom ETH
wyświetli wszystkie liczby całkowite, biorąc pod uwagę nieskończony czas i pamięć.
źródło
n[a,b,c]
zwracan[c]
, więc możesz wstawić nawiasyn[(a||n.unshift(1),0)]
.1
wejścia dla pętli ani;for(;;)
działa wiecznie. Możesz zapisać dwa kolejne bajty za pomocąfor(n=1;;)alert([1-n,n++])
. Ponadto nie korzysta już z żadnych funkcji ES6 ;-)> <> ,
1915 bajtówSpowoduje to wydrukowanie następujących elementów:
... i tak dalej. Separator to nowa linia.
Przepisane po przeczytaniu odpowiedzi @ xnor, aby użyć wersji tego algorytmu. Począwszy od
n=1
drukuje programowych1-n
in
, każdy następuje znak nowej linii, przed inkrementacjin
. Po przepełnieniu wartości maksymalnej program zakończy się błędem wynoszącymsomething smells fishy...
. To, kiedy to nastąpi, zależy od implementacji interpretera.Poprzednia wersja:
Począwszy od 0, program zapętla się w nieskończoność. W każdej pętli drukowana jest bieżąca wartość wraz z nową linią. Następnie jest negowany i zwiększany, jeśli jest dodatni.
źródło
Narzędzia Bash + GNU, 26
źródło
$[++i]
robi to w bash.seq NaN
do pracy i po 999999 drukowanie odbywa się w notacji naukowej z dokładnością do 5 cyfr. Jeśli chodzi o wyzwanie, ta wartość jest wówczas największą liczbą całkowitą, którą drukujesz, co jest w porządku, ponieważ reszta nie powtórzy poprzedniej liczby. Zauważyłem również, że możesz uruchomić sekwencjęinf
, bez rozróżniania wielkości liter, tak jak dlanan
. +1bc,
1716 bajtówEdycja: 1 bajt mniej dzięki Digital Trauma .
Dodając do różnorodności używanych dotychczas języków, przedstawiam rozwiązanie bc, które działa z liczbami całkowitymi o dowolnym rozmiarze . Po kodzie wymagany jest nowy wiersz, który jest liczony w bajtach ogółem.
W pierwszej iteracji
i
nie jest zdefiniowany, ale wydrukowanie powoduje moje zdziwienie 0.źródło
for(;;){i;-++i}
bc
że też ją miałem.for(;;){i++;-i}
(ta sama długość).Labirynt , 9 bajtów
Wypróbuj online!
To również działa i jest zasadniczo takie samo:
Wyjaśnienie
Przepływ sterowania w tym kodzie jest raczej zabawny. Pamiętaj, że wskaźnik instrukcji (IP) w programie Labirynt podąża ścieżką znaków spacji i bada górę stosu na dowolnym skrzyżowaniu, aby zdecydować, którą ścieżkę wybrać:
Kiedy IP trafia w ślepy zaułek, odwraca się (wykonując polecenie na końcu tylko raz). I adres IP zaczyna się w lewym górnym rogu, przesuwając się na wschód. Zauważ też, że stos jest domyślnie wypełniony nieskończoną liczbą zer na początek.
Program zaczyna się od tego krótkiego bitu:
Teraz adres IP znajduje się na odpowiednim skrzyżowaniu i przesuwa się na wprost, do
(
którego zmniejsza się górna część stosu-1
. IP uderza w ślepy zaułek i się odwraca.:
ponownie powtarza górę stosu. Teraz wierzch stosu jest ujemny, a IP skręca w lewo (na zachód). Teraz wykonujemy jeszcze jedną iterację głównej pętli:Tym razem górna część stosu jest dodatnia, więc IP skręca w prawo (na zachód) i natychmiast wykonuje kolejną iterację głównej pętli, która wypisuje
1
. Następnie, po ponownym zanegowaniu, uderzamy:
z-1
na stosie.Tym razem adres IP skręca w lewo (wschód). To
"
tylko brak op, a IP zmienia się w ślepy zaułek.:
robi kolejną kopię i tym razem IP skręca na południe.(
zmniejsza wartość-2
, IP ponownie się obraca. Ponieważ górna część stosu jest nadal ujemna, IP skręca teraz na zachód:
i wykonuje następną iterację głównej pętli.W ten sposób adres IP będzie teraz iterował między ciasną pętlą iteracji, drukując liczbę dodatnią, a iteracją, która przechodzi przez oba ślepe zaułki w celu zmniejszenia wartości przed wydrukowaniem liczby ujemnej.
Możesz zadać sobie pytanie, dlaczego jest
"
druga linia, jeśli tak naprawdę nic nie robi: bez niej, gdy IP osiągnie:
wartość ujemną, nie może skręcić w lewo (wschód), więc zamiast tego skręciłby w prawo (zachód) (ogólna zasada, jeśli zwykły kierunek na skrzyżowaniu nie jest dostępny, adres IP przyjmie kierunek przeciwny). Oznacza to, że IP nigdy nie osiągnie(
dolnej granicy i nie możemy odróżnić dodatnich i ujemnych iteracji.źródło
JavaScript (ES5),
32313029 bajtówWydruki
0 -1 1 -2 2 -3 3 -4 4 -5 5 ...
Zaoszczędził 1 bajt dzięki Patrick Roberts! Zaoszczędzono 2 bajty dzięki Conorowi O'Brienowi!
źródło
[i++,-i].map(alert)
zamiastalert(i++),alert(-i)
?for(;;)
jest o jeden bajt krótszy niżwhile(1)
map
to ES6i=0;
bit do pętli for, aby zapisać bajt.Java,
6554 bajtówNie testowany kod testu
źródło
biggest magnitude of the standard integer type of your language
int
jest standardowym typem całkowitym Java.()->{for(int i=0;;)System.out.print(i+" "+(1-i++));};
C #, 83 bajty
Nie golfowany:
Wyjścia:
źródło
void f(){code_present_in_main}
Wystarczy więc do liczenia bajtów. Jeśli chodzi o sam kod, możeszvoid f(){for(decimal n=1;;)Console.Write((1-n)+","+n+++",");}
decimal n=0
n++;
void f(){for(decimal n=0;;n++){Console.Write(n+",");if(n>0)Console.Write(-n+",");}}
C #
8666 bajtówNowa odpowiedź:
Jasny:
Stara odpowiedź (86 bajtów):
Nie golfowany:
źródło
Enumerable.Range
i jeden przedint.MaxValue
.void f(){for(var n=1;;)Console.Write((1-n)+","+n+++",");}
( 57 bajtów ) .J, 25 bajtów
Działa na stronie internetowej , ale nie mogę tego jeszcze zweryfikować na komputerze. Wyświetla liczby takie jak:
itp.
źródło
PowerShell,
201918 bajtówUlepszony przez bezwstydne kradzież z odpowiedzi TimmyD
Wynik:
Stara wersja:
Nie jestem pewien, dlaczego tbh, ale - niezadeklarowana zmienna (lub - $ null) jest ewaluowana jako 0, co pozwoliło nam zaoszczędzić 2 bajty w tej wersji ...
źródło
Pyke ,
72 bajtyWypróbuj tutaj!
7 bajtów
Wypróbuj tutaj!
Jeśli drukowanie + -0 jest w porządku,
oD_r
źródło
Brachylog , 2 bajty
Wypróbuj online!
Ponieważ program nie otrzymuje danych wejściowych, zmienna wejściowa głównego predykatu pozostaje nieograniczona. Początkowo przyjmuje się, że wynosi 0, ale gdy wykonanie się powiedzie
⊥
, następuje powrót do jedynego możliwego punktu awarii: wybór wartości dla zmiennej wejściowej. Następnie wypróbowuje 1, -1 i każdą inną liczbę całkowitą, drukując każdą z nich oddzieloną zawsze znakami nowej linii, ponieważ⊥
zawsze wymusza powrót do poprzedniej linii , a efektẉ
jest wykonywany natychmiast.źródło