Schreiben Sie ein Programm, das von eins an für immer zählt.
Regeln:
- Ihr Programm muss sich bei
STDOUT
oder bei einer akzeptablen Alternative anmelden , falls diese STDOUT
nicht verfügbar ist.
- Ihr Programm muss ein vollständiges, lauffähiges Programm sein und darf keine Funktion oder ein Snippet sein.
- Ihr Programm muss jede Zahl mit einem Trennzeichen (eine neue Zeile, ein Leerzeichen, ein Tabulator oder ein Komma) ausgeben, dies muss jedoch für alle Zahlen konsistent sein.
- Sie können die Zahlen dezimal, unär oder zur Basis 256 ausgeben, wobei jede Ziffer durch einen Bytewert dargestellt wird .
- Ihr Programm muss ohne Probleme und ohne Speichermangel auf einem vernünftigen Desktop-PC mindestens 2 128 (einschließlich) zählen. Dies bedeutet insbesondere, dass Sie bei Verwendung von unary keine unary-Darstellung der aktuellen Nummer im Speicher speichern können.
Im Gegensatz zu unseren üblichen Regeln können Sie auch dann eine Sprache (oder Sprachversion) verwenden, wenn diese neuer als diese Herausforderung ist. Sprachen, die speziell geschrieben wurden, um eine 0-Byte-Antwort auf diese Herausforderung zu senden, sind fair, aber nicht besonders interessant.
Beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einreichung getestet werden kann. Es ist erlaubt (und sogar empfohlen), diesen Dolmetscher für eine zuvor nicht implementierte Sprache selbst zu schreiben.
- Hier geht es nicht darum, die Sprache mit der kürzesten Lösung dafür zu finden (es gibt einige, bei denen das leere Programm den Trick macht) - hier geht es darum, die kürzeste Lösung in jeder Sprache zu finden. Daher wird keine Antwort als angenommen markiert.
Katalog
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](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>
Antworten:
Labyrinth , 5 Bytes
♫ Die IP im Code geht um und um ♫
Relevante Anweisungen:
quelle
:
und\
> <> , 8 Bytes
Schritte:
(Ein weniger speichereffizientes (daher ungültiges) Programm ist
llnao
.)quelle
Haskell, 21 Bytes
Ganzzahlen mit beliebiger Genauigkeit und unendliche Listen machen dies einfach :-)
Zum Glück
mapM_
ist im Präludium. WennData.Traversable
ja, könnten wir es sogar auf 19 Bytes verkleinern:quelle
sequence
das Ergebnis sein, damit die Ausgabe wirklich funktioniert.[1..]
erlaubt, da es alle Zahlen mit einem Komma dazwischen druckt? oder das erste[
vermasseln alles?[
ist auch nicht erlaubt.Gol> <> , 3 Bytes
Schritte:
quelle
Marbelous ,
114504632 BytesDezimalzahlen zu drucken ist ein Schmerz !!
Auf keinen Fall damit gewinnen, aber ich dachte, ich würde es versuchen. Ich hoffe, es ist in Ordnung, dass die Ausgabe auf 40 Nullen aufgefüllt wird (für 2 ^ 128).
quelle
Ehun
Board, das die nächste Zifferinclude/
standardmäßig alles beinhaltetC (nur 64-Bit-Architektur), 53 Byte
Setzt voraus, dass Zeiger mindestens 64 Bit lang sind, und druckt sie unter Verwendung des Bezeichners in hexadezimaler Schreibweise
%p
. Das Programm würde direkt zurückkehren, wenn es 2 ^ 128 trifft.quelle
Hexagony ,
1211107 BytesDank an alephalpha für das Einpassen des Codes in die Seitenlänge 2.
Entfaltet:
Dieser ist ziemlich einfach.
10
schreibt eine 10, dh einen Zeilenvorschub an die erste Speicherflanke. Dann})!';
wird wiederholt in einer Schleife ausgeführt:}
zum nächsten Speicherrand gehen.)
erhöhen Sie es.!
Gib es als ganze Zahl aus.'
gehe zurück zu den 10.;
drucke es als Zeichen aus.Ich glaube, dass dies optimal ist (obwohl bei weitem nicht einzigartig). Ich habe die Brute - Force - Skript lasse ich schrieb für diese Antwort für 6-Byte - Lösungen unter der Annahme , dass es suchen muss mindestens ein jeden von enthielte
;
und!
und entweder(
oder)
, und würde nicht enthalten?
,,
oder@
, und es hat nicht finde irgendwelche Lösungen.quelle
Pyth, 4 Bytes
Erläuterung:
quelle
f!\n
( TIO-Link ) funktioniert für 3 Bytes, nicht sicher, ob diese Funktionen verwendet werden, die nach Ihrer Antwort hinzugefügt wurden.f
ein Feature von Pyth vor 4 Jahren war.bc, 10
Ungewöhnlich
bc
ist das kürzer alsdc
.Von
man bc
:quelle
++i
ist ein Ausdruck, aber keine Zuweisung und wird daher explizit ausgegeben. Hast du versucht, es laufen zu lassen?echo 'for(;;)++i' | bc
in Ihrem nächsten Linux-Terminal.Java,
139138127123 Bytesquelle
for(;;)
für einfache 3 Bytes.BigInteger b=null;b=b.ZERO;
, leider wird das=null
benötigt, obwohl es sich um einen statischen Zugriff handelt.BigInteger
einmaliges Referenzieren von FQCN loswerden können .interface
und aus dieser entfernenpublic
. Kopiere deinen Code nicht und poste ihn als neue Antwort.Mathematica, 22 Bytes
Echo
ist eine neue Funktion in Mathematica 10.3.quelle
Echo
ergibt vier Trennzeichen: newline plus">> "
. Nicht sicher, ob dies gültig ist - vielleichtPrint
stattdessen verwenden? Speichern Sie auch ein Byte miti=0;While[Echo@++i>0]
.Rubin,
1512 Bytesp
Gibt bei Angabe einer Ganzzahl die Ganzzahl wie sie ist aus (mit freundlicher Genehmigung von @philomory )$.
ist eine magische Variable, die die Anzahl der aus stdin gelesenen Zeilen enthält. Es ist offensichtlich auf 0 initialisiert und auch zuweisbar :)quelle
Python 3,
3325 BytesNach
print()
meinem Verständnis sind Pythons-Ganzzahlen willkürlich genau und erzeugen automatisch Zeilenumbrüche.Danke für @Jakub und @ Sp3000 und @wnnmaw! Ich kenne wirklich nicht viel Python, der einzige Gedanke, den ich kannte, war, dass es Ganzzahlen mit beliebiger Größe unterstützt =)
quelle
1
ist ein wahrer Wert in Python (und den meisten anderen Sprachen). Sowhile 1:
genügt.while
in eine Zeile setzenrepr(k)
anstelle von verwendenprint(k)
. Außerdem zähle ich Ihre Byte - Größe 25 (ohne meine vorgeschlagene Änderung)repr
anstelle von verwendenprint
.repr
gibt nichts aus. @wnnmawrepr
man dann?Verarbeitung ,
958571 BytesIch habe etwas mit einer while-Schleife ausprobiert, aber dadurch stürzt die gesamte Verarbeitung ab. Daher bleibe ich vorerst bei dieser.
(Vielen Dank an @ SuperJedi224 und @TWiStErRob für Vorschläge.)
quelle
import java.math.*;BigInteger i=BigInteger.ZERO;void draw(){println(i=i.add(BigInteger.ONE));}
es funktionieren wird.BigInteger.ONE
Ändern aufi.ONE
?Samau , 2 Bytes
Erläuterung:
Wenn die Ausgabe eines Programms eine Liste ist, werden die äußersten Klammern weggelassen.
quelle
@
"push" falsch geschrieben.JavaScript (ES6),
999467 Bytesalert
ist die allgemein akzeptierteSTDOUT
Entsprechung für JavaScript, aber die Verwendung von JavaScript bedeutet, dass fortlaufende Nummern automatisch getrennt werden. Ich bin davon ausgegangen, dass die Ausgabe eines Zeichens nach der Zahl aus diesem Grund nicht erforderlich ist.quelle
2^53
aber die Frage erfordert, dass dieser Wert erreicht wird2^128
.Matlab, 132 Bytes
Ok, ich denke, dies ist die erste ernsthafte Antwort, die diese Aufgabe ohne eine trivial eingebaute Ganzzahl mit beliebiger Größe erfüllt. Dieses Programm implementiert eine Ganzzahl beliebiger Größe als Array von Ganzzahlen. Jede Ganzzahl liegt immer zwischen 0 und 9, sodass jedes Array-Element eine Dezimalstelle darstellt. Die Array-Größe wird um eins erhöht, sobald wir z
999
. Die Speichergröße ist hier kein Problem, da2^128
nur ein Array mit der Länge 39 erforderlich ist.quelle
C ++,
146141138 BytesEine Standard - Bigint Bibliothek ist vielleicht die meisten langweilig Weg , um diese Frage zu beantworten, aber jemand musste es tun.
Ungolfed:
Der Grund, warum die Golf-Version verwendet
stdio.h
und nicht,cstdio
ist zu vermeiden, dass derstd::
Namespace verwendet werden muss.Dies ist mein erstes Mal in C ++, lass es mich wissen, wenn es irgendwelche Tricks gibt, um dies weiter zu verkürzen.
quelle
'\n'
stattdessenstd::endl
8 Bytes sparen. Es kann auch eine Möglichkeit geben, CPP #define zu verwenden, um Wiederholungen zu komprimieren.i
standardmäßig mit dem Wert 0 konstruiert? Sie könnten dann die Definition entfernen und das Post-Inkrement auf Preincremet umstellen, wodurch 2b#import
?C # .NET 4.0,
11110310297 BytesIch habe hier keine C # Antwort gefunden, also musste ich nur eine schreiben.
.NET 4.0 ist erforderlich, da es die erste Version ist, die BigInteger enthält . Sie müssen jedoch auf System.Numerics.dll verweisen .
Mit Einrückung:
Dank Sweerpotato, Kvam, Berend für das Speichern einiger Bytes
quelle
class C{static void Main(){var b=System.Numerics.BigInteger.One;for(;;)System.Console.WriteLine(b++);}}
: ~)!Console.WriteLine
in die Schleifenstruktur:class C{static void Main(){for(var b=System.Numerics.BigInteger.One;;Console.WriteLine(b++));}}
System
. Das spart aber ein Byte!using System;
(13 Bytes) hinzufügen , können Sie dieSystem.
(7 Bytes) zweimal entfernen und 1 Byte sparen.Clojure, 17 Bytes
Lazy Sequences und Integer mit beliebiger Genauigkeit machen dies einfach (wie bei Haskell und CL).
prn
spart mir ein paar Bytes, da ich keinen Formatstring drucken muss.doseq
wäre wahrscheinlich idiomatischer, da wir hier nur mit Nebenwirkungen zu tun haben;map
Die Verwendung ist wenig sinnvoll, da dadurch eine Sequenz vonnil
(erstellt wird, die den Rückgabewert jedesprn
Aufrufs darstellt.Angenommen, ich zähle für immer, wird die Nullzeigerfolge, die sich aus dieser Operation ergibt, nie zurückgegeben.
quelle
MarioLANG , 11 Bytes
Inspiriert von Martin Büttners Antwort auf eine andere Frage .
quelle
CJam, 7 Bytes
Erläuterung:
Hinweis: Muss Java-Interpreter verwenden.
quelle
C 89 Bytes
Ein neuer Ansatz (Implementierung eines bitweisen Inkrementierers) in C:
Weniger golfen
Kündigen
Diese Version hat den kleinen Fehler, dass sie nicht terminiert (was im Moment keine Voraussetzung ist). Dazu müssten Sie 3 Zeichen hinzufügen:
quelle
forever
Foo , 6 Bytes
Erläuterung
quelle
Minkolang , 4 Bytes
Probieren Sie es hier aus.(Nun, eigentlich ist Vorsicht geboten. 3 Sekunden Laufzeit reichten aus, um auf ~ 40.000 zu kommen.)
1+
Fügt 1 zum Anfang des Stapels hinzu,d
dupliziert ihn undN
gibt den Anfang des Stapels als Ganzzahl mit einem nachgestellten Leerzeichen aus. Dies führt zu einer Schleife, da Minkolang toroidal ist. Wenn der Programmzähler von der rechten Kante abweicht, wird er auf der linken Seite erneut angezeigt.quelle
Intel 8086+ Assembly, 19 Byte
Hier ist eine Aufschlüsselung:
Es gibt die 128-Bit-Nummer in den oberen linken 8 Bildschirmpositionen aus. Jede Bildschirmposition enthält ein 8-Bit-ASCII-Zeichen und zwei 4-Bit-Farben.
Hinweis: Es wird um 2 128 gewickelt. Ändern Sie einfach den Wert
8
inmov cx, 8
,9
um eine 144-Bit-Zahl anzuzeigen , oder sogar80*25
, um Zahlen bis zu 2 32000 anzuzeigen .Laufen
1,44 MB bzip2 komprimiertes, base64-codiertes bootfähiges Disketten-Image
Generieren Sie das Disketten-Image, indem Sie Folgendes kopieren und einfügen
in diese Kommandozeile:
und laufen zum Beispiel mit
qemu -fda floppy.img -boot a
1,8 MB bootfähiges ISO
Dies ist ein Base64-kodiertes bzip2-komprimiertes ISO-Image. Erzeugen Sie die ISO durch Einfügen
in
und konfigurieren Sie eine virtuelle Maschine zum Booten.
DOS .COM
Dies ist eine Base64-kodierte DOS .COM- Programmdatei:
Generieren Sie eine .COM-Datei mit
und starte es unter (Free) DOS.
quelle
Perl ,
343230282623 BytesTesten Sie mit
quelle
for(,,){...}
mit{...;redo}
zwei.SV UNDEF
Wenn sie inkrementiert werden, wird dieBigInt
Überladung nicht ausgelöst, da dies nicht der Fall istBigInt
. Ganzzahlige Literale werden jedoch alsBigInt
s erstellt. Nicht so seltsam;)$-
, um es als Ganzzahl zu behalten und zur Verwendung zurückzukehren++$-
?perl -Mbigint -E '{say++$-;$-+=$-;redo}' | more
und es geht auf 1 zurück. Es bleibt ein int, aber bigint greift leider nicht ein.Marbelous, 358 Bytes
16 Halbaddierer verkettet, wobei der am weitesten rechts stehende Addierer in jedem Zyklus N ++ ausführt und jeder Addierer seinen Überlauf (00 oder 01) dem nächsten in der Kette zuführt. Die Ausgabe erfolgt in hex.
Der Python-Interpreter weist einen Fehler auf, bei dem die Ausgabe von gespeicherten Funktionen verloren geht. Sie müssen dies also mit "-m 0" ausführen, damit es richtig funktioniert. Ohne diesen Parameter können Sie sehen, wie schnell es ohne den Fehler ausgeführt wird, aber die Ausgabe funktioniert nicht richtig.Hinweis zur Selbsthilfe: Beheben Sie diesen Fehler in marbelous.py.Dieser Fehler wurde in der neuesten Version von marbelous.py behobenquelle
R, 52 Bytes
(Hinweis: Es
gmp
handelt sich um eine externe Bibliothek, daher müssen Sie sie möglicherweise herunterladen, damit diese Lösung funktioniert.)quelle
a=gmp::as.bigz(0);repeat{cat(paste(a<-a+1,''))}
. Möglicherweise möchten Sie eine Notiz erstellen, bei dergmp
es sich um eine externe Bibliothek handelt, die möglicherweise heruntergeladen werden muss.BotEngine,
1281201128 x 13 = 104Die Ausgabe erfolgt binär.
quelle