var QUESTION_ID=13152,OVERRIDE_USER=8611;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:
Befunge (1)
Wydaje na
0
zawsze. Działa, ponieważ w Befunge linie się zawijają, a otrzymasz,0
jeśli wyskoczysz z pustego stosu.źródło
x86 .COM Plik wykonywalny, 7
w hex:
Inne potrzebują kilobajtów lub więcej bibliotek systemowych i środowiska wykonawczego. Powrót do podstaw:
Możesz zmienić drugi bajt (
0x21
lub!
), aby zmienić wyjście.Wykorzystuje przerwanie systemu BIOS do wyjścia; nie potrzebuje DOS-a, ale nie skonfigurowałem QEMU.
Wyjaśnienie
Kod maszynowy odpowiada następującemu zespołowi:
Dane wyjściowe są w
int
wywołaniu - zgodnie z tym odniesieniem int 0x10 z 0x0e w AH wydrukuje bajt w AL na ekranie.Wiedząc, że rejestr AX jest 16-bitowym słowem złożonym z AH w wysokim bajcie i AL w niskim bajcie, możemy zaoszczędzić dodatkowe obciążenie (a tym samym bajt w kodzie maszynowym), ładując je razem.
źródło
Plik wsadowy Windows, 2 znaki
Nazywa się nieskończenie.
źródło
%0
nie ma@
, więc ciągle wyświetlałby coś takiego...> %0
. Może to jednak kiedyś pochłonąć całą pamięć RAM, ponieważ jest rekurencyjna.Befunge 98-2
Wydaje „,,,,,,,,,,,” na wieczność.
źródło
sh, 3 bajty
wyjścia w
y
sposób ciągłyźródło
yes
jest zewnętrznym plikiem binarnym i nie jest częścią bash (ściśle mówiąc).y=yes
a jeśli twój system nie jest ezoteryczny, możesz założyć, żeyes
jest w twoim$PATH
(zobacz GNU Core Utilities ). Dzięki twojej logice możliwe jest przyjęcie dziwnych konstelacji dla każdego rozwiązania.bash
możliwości: I'ts w skorupkach POSIX podstawowa część rdzenia utils . (Tj .: zmień tytuł na sh: 3 znaki ;-)Haskell: 8 znaków
Stary wątek, ale fajny jest
w Haskell drukuje
na zawsze, ponieważ w zasadzie działa
Wie, że
x
jest to ciąg znaków, więc pierwszy znak to"
, więc należy go uciec\"
, ale wiem, że\
trzeba go uciec\\\x
, i tak dalej.źródło
fix$show
byłby bardziej estetyczny :-)import Data.Function
, a ponieważ zwraca ciąg zamiast go drukować, kwestionuję rzetelność liczby znaków. Ponadto ciąg jest w rzeczywistości „\” \\\ "\\\\\\\" \\\\\\\\\\\\\\\ "\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\ "\\\\\\\\\\\\\\\\\…”.Plik wsadowy Windows, 8 znaków
źródło
:a\r\ngoto a
ponieważ Windows używa CRLF3a 61 0a 67 6f 74 6f 20
działa na moich oknach 8 ...: PBrainfuck, 4
Alternatywnie,
źródło
\x01
też\xFF
znaków do druku. Chyba nie był to jednak wymóg: - /Java, 54 znaki
Najlepsza próba w Javie:
źródło
for(;;)
wzoru? Cowhile(true)
?static
bloku.Bash, 4 bajty
Wysyła w
./forever2.sh: line 1: $: command not found
sposób ciągły.Ponieważ
$0
jest w tle, każdy rodzic umiera po niepoprawnym poleceniu$
, dlatego stos / pamięć nie zostanie zjedzona i powinno to trwać w nieskończoność.O dziwo, wydajność z czasem staje się coraz wolniejsza.
top
zgłasza, że użycie procesora przez system jest bliskie 100%, ale istnieją procesy zapamiętywania pamięci lub procesora. Prawdopodobnie część alokacji zasobów w jądrze staje się coraz mniej wydajna.źródło
$0
nie powiedzie.LOLCODE (36)
Myślałem, że dam LOLCODE szansę, ma zaskakująco dużą funkcjonalność.
źródło
HAI
iKTHXBYE
JavaScript: 14
źródło
alert()
daje mi ten błądError: Not enough arguments [nsIDOMWindow.alert]
Maszyna Turinga - 6 znaków:
gdzie
#
jest pusty symbol (domyślnie na taśmie),s
opisuje jedyny istniejący (początkowy) stan,1
drukuje cyfrę,R
oznacza przesunięcie w prawo,s
na końcu pozostaje w tym samym stanie.źródło
s#1Rs
(stan aktualny, symbol prądu, symbol do zapisu, kierunek do zmiany, następny stan).Haskell, 10
Myślę, że jest to najkrótszy kod do
Show
: zdolną strukturę danych.Dla zainteresowanych drukuje:
źródło
Cudowny 4
Marbelous ma tu zaskakująco dobrze. Spowoduje to opublikowanie nieskończonej ilości znaków dolara
$
, choć dość szybko osiągnie limit stosu.Jak to działa.
24 to dosłowny język, który spadnie z planszy i zostanie wydrukowany na STDOUT jako odpowiadający mu znak ascii. MB to nazwa domyślnie nadana płycie głównej, ponieważ płyta główna nie ma danych wejściowych, będzie uruchamiana co tyknięcie. A ponieważ komórki są oceniane od lewej do prawej, literał zawsze będzie drukowany przed następnym wywołaniem rekurencyjnym.
Jest to więc z grubsza odpowiednik tego pseudokodu:
Rozwiązanie bez nieskończonej rekurencji 11
Ten działa poprzez zapętlenie literału między dwoma portalami
@0
, ilekroć 24 trafi w dół@0
, jest transportowane do komórki pod górną@0
. To ląduje na/\
, który jest operatorem klonowania, kładzie jedną kopię marmuru (dosłownie) na jego lewej stronie (z powrotem na portalu), a drugą na prawo. Ta koperta następnie spada z planszy (ponieważ..
jest pustą komórką) i jest drukowana do STDOUT. W pseudokodzie oznaczałoby to:Krótsze rozwiązanie bez nieskończonej rekurencji 9
Ten ciągle rzuca marmurem między klonerem a deflektorem, kładąc jeden egzemplarz na prawej komórce, aby go zrzucić z planszy. W pseudokodzie wyglądałoby to tak:
Uwaga
Te
..
komórki są konieczne z dwóch ostatnich płyt od kulki wylądują z planszy (i wyrzucić) inaczej. Aby uzyskać dodatkową zabawę, zamieniasz24
marmur na,FF
a pustą..
komórkę na??
, co zamienia każdy marmur w marmur od 0 do jego bieżącej wartości przed upuszczeniem. Zgadnij, jak by to wyglądało na STDOUT.źródło
C, 23 znaki
Nieco krótszy niż najlepsza jak dotąd odpowiedź C / C ++. Drukuje puste linie w nieskończoność (ale jeśli skompilowane bez optymalizacji, przepełnia stos).
źródło
putc(0)
(lub 1 lub 2, ... lub 9). Czy to zadziała?putc
wymaga 2 parametrów.Python 3: 15, 17 lub 18 znaków
Odpowiedź mdeitrick jest dłuższa w Pythonie 3, który zastępuje
print
instrukcję wywołaniem funkcji (15 znaków):Jest to najkrótszy czas, jaki znalazłem w Pythonie 3. Istnieją jednak bardziej interesujące sposoby drukowania w nieskończonej pętli, które mają tylko kilka znaków dłużej.
print()
zwracaNone
, co! = 9, co czyni go nieskończoną pętlą;8
jest nie-OP, która zastępujepass
(18 znaków):iter(print, 9)
definiuje iterowalny, który zwraca wynikprint()
aż do równości9
(co nigdy się nie zdarza).any
zużywa iterowalne dane wejściowe w poszukiwaniu prawdziwej wartości, która nigdy nie dociera, ponieważprint()
zawsze zwracaNone
. (Możesz również użyćset
tego samego efektu.)Lub możemy konsumować iterowalny testując, czy zawiera on
8
(17 znaków):Lub rozpakuj go za pomocą operatora splat :
Najdziwniejszy sposób myślałem o to, aby używać splat destructuring wewnątrz wywołania funkcji,
function(*iterable)
. Wygląda na to, że Python próbuje wykorzystać całą iterowalność przed próbą wywołania funkcji - nawet jeśli wywołanie funkcji jest fałszywe. Oznacza to, że nie potrzebujemy nawet prawdziwej funkcji, ponieważ błąd typu zostanie zgłoszony dopiero po wyczerpaniu iterowalności (tj. Nigdy):źródło
*iter(print,1),
działa i ma tylko 15 znaków, ale zużywa sporo pamięci.piet - 3 kody
Wyprowadza nieskończoną liczbę 1
źródło
x86 .COM Plik wykonywalny, 5 bajtów
w hex:
w asm:
Wyjaśnienie:
inc ax
zwiększa rejestr AX o jeden.int 0x29
to procedura „szybkiego umieszczenia znaku” w MSDOS, która po prostu wyświetla wartość w AL (najniższa część AX) i przesuwa kursor o jeden.jmp si
to po prostu dziwny sposób powrotu do góry, ponieważ rejestr SI ma wartość 0x100 w prawie każdym systemie operacyjnym podobnym do DOS, czyli tam, gdzie rozpoczyna się program .com;) Zamiast tego można również wykonać krótki skok, który również używa 2 bajtów.Źródła:
MSDOS Start Values
Kodowanie rozmiaru WIKI
źródło
Bitxtreme , 0,25 bajtów
Reprezentacja binarna:
Z dokumentacji:
Licznik programu i akumulator są inicjowane do zera; następnie zawartość miejsca pamięci 0 jest odejmowana od akumulatora. Zdarza się, że wynosi 0, pozostawiając akumulator na zero. Ponieważ nie było przeniesienia, drugi bit nie jest dodawany do licznika programu.
Licznik programu jest następnie zwiększany o 2 modulo 2, wysyłając go z powrotem na początek i powodując nieskończoną pętlę. Na każdym etapie specjalna lokalizacja pamięci 0 jest modyfikowana, co powoduje
0
zapisanie jej zawartości (a ) na wyjściu.Można argumentować, że ten program powinien zostać oceniony jako 1 bajt, ponieważ oficjalny interpreter w Pythonie wymaga zerowania. Jednak nie sądzę, że dopełnianie zera jest tak naprawdę kodem .
źródło
Podsumowanie: Ruby - 9, Golfscript - 6,> <> - 2, Białe znaki - 19,
Perl - 2Jeden język, który znam, i dwa, których nigdy wcześniej nie używałem: D
EDYCJA: Perl nie działał, kiedy instalowałem Perla, aby go wypróbować :(
Ruby, 9
Po prostu drukuje 1 na osobnych liniach w sposób ciągły.
Ponadto kilka alternatyw:
10-znakowe rozwiązanie:
Byłem właściwie zaskoczony, że mogłem usunąć przestrzeń między pierwszym
1
a pierwszymwhile
, ale najwyraźniej to działaGolfscript, 6
Mój pierwszy program Golfscript! : P
> <> ( Ryba ), 2
Biała spacja , 19
Gdzie
s
reprezentuje spację,t
reprezentuje tabulator il
linię.źródło
{1p}do
drukuje1
i zamyka tylko, ponieważ do jest sekwencją wykonawczą-testową, która jest kontynuowana tylko wtedy, gdy testuje wartość true. (Ponieważ nie ma danych wejściowych, stos jest początkowo""
, który po wykonaniu1p
zostaje wyskakujący i testowany jest fałsz.) Jednak po prostu dodanie dup będzie działało, tj.{1.p}do
(Przy 7 bajtach).C,
2524źródło
s/while/main/
return main(puts("1"))
to byłby ogon.methodName(void)
akceptuje dokładnie zero parametrów.> <> (Ryba) , 2
Kreatywny sposób korzystania z nieskończonego codbox ryb:
Ponieważ wskaźnik instrukcji wraca na początek linii po osiągnięciu końca, ten kod można zasadniczo odczytać jako
co oznacza „przeczytaj ciąg„ o ”, a następnie wyślij go”.
Możesz przetestować kod tutaj
źródło
perl, 10 znaków
Oto kolejne rozwiązanie 10 znaków z kilkoma różnymi kompromisami. W szczególności nie wymaga flagi -n ani danych wejściowych użytkownika do uruchomienia. Jednak wciąż je pamięć ad infinitum.
zapisz do pliku, uruchom ten plik, a otrzymasz np .:
źródło
say
(który zawsze drukuje nowy wiersz, nawet jeśli nie może znaleźć argumentu z dowolnego miejsca) zamiastwarn
? (Wymaga to użycia nowoczesnego wariantu Perla-M5.010
, ale nie liczy się to do liczby postaci.)dc , 7
wypisuje 'pdx \ n' nieskończenie wiele razy.
źródło
VBA: 12
Dźwięk jest wyprowadzany, prawda?
Umieść to w swoim ulubionym współpracowniku MS Office z obsługą makr, aby uzyskać trochę zabawy!
Punkty bonusowe, jeśli używają słuchawek.
źródło
Ziarno , 4 bajty
Wypróbuj online! Wysyła
11
nieskończenie wiele razyGeneruje następujący program Befunge-98:
Wypróbuj online!
Odpowiednia część jest taka:
b
przesuwa11
się na stos i.
drukuje go.1
i49
są również wypychane na stos, ale tak naprawdę nigdy nie są drukowane.Animacja uruchomionego kodu:
źródło
C,
262524 (bez rekurencji)Drukuje niekończące się
'\n'
znaki. Jest to bajt dłuższy niż najkrótsza odpowiedź C, ale nie polega na optymalizacji wywołania ogona, aby uniknąć przepełnienia stosu.źródło
for(;;)
zamiastwhile(!
!
ponieważ wciąż\n
R, 13 znaków
źródło
repeat cat(1)
powinien działaćPowerShell 2.0:
17118Moje wstępne rozwiązanie:
Dzięki res:
Myślę, że Danko Durbić ma tutaj zwycięzcę. Nie jestem nawet pewien, dlaczego to powinno działać, ale tak jest i do tej pory nie mogę wymyślić nic krótszego.
źródło
while(1){1}
.while($true){1}
ale twoje rozwiązanie zdecydowanie wygrywa - zapomniałem o tym w PowerShell$true -eq 1
. Opublikuj to jako odpowiedź, a dam ci głos.for(){1}
.