Einführung
Es mag seltsam klingen, aber wir haben nicht EINE Herausforderung für das Zählen von 1
bis n
einschließlich.
Das ist nicht dasselbe. Das ist eine (abgeschlossene) nicht gut erklärte Herausforderung.
Das ist nicht dasselbe. In diesem Fall geht es darum, auf unbestimmte Zeit hochzuzählen.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die jede ganze Zahl von 1
bis n
einschließlich ausgibt.
Regeln
- Sie können
n
jeden Weg bekommen. - Sie können davon ausgehen, dass dies
n
immer eine positive ganze Zahl ist. - Sie können
n
in jeder Basis erhalten, aber Sie sollten immer in Dezimalzahlen ausgeben. - Die Ausgabe muss durch ein beliebiges Zeichen (oder Muster) getrennt werden, das nicht in enthalten ist
0123456789
. Nicht-dezimale führende oder nachfolgende Zeichen sind zulässig (z. B. bei Verwendung von Arrays wie[1, 2, 3, 4, 5, 6]
). - Standardlücken werden verweigert.
- Wir wollen den kürzesten Ansatz in jeder Sprache finden, nicht die kürzeste Sprache, deshalb werde ich keine Antwort akzeptieren.
- Sie müssen Ihre Antwort (en) nach dieser Änderung aktualisieren. Antworten, die vor der letzten Änderung veröffentlicht wurden, müssen der Änderungsregel für Standardlücken entsprechen (ich wollte sie nicht ablehnen, aber ich wollte die Community nicht zum Brüllen bringen, also Ich habe sie bestritten).
- Sie können eine beliebige Sprachversion (oder Sprache) nach der Datierung verwenden. Sie können keine Sprache oder Sprachversion verwenden, die nur für diese Herausforderung erstellt wurde.
Boni
20%
- Ihr Programm muss mindestens bis
18446744073709551615
(2^64-1
) zählen können. Wenn beispielsweise ein neuer Datentyp die einzige Möglichkeit ist, große Ganzzahlen zu unterstützen, müssen Sie ihn erstellen. Wenn Ihre Sprache keine Möglichkeit hat, große Ganzzahlen bis zu 2 ^ 64-1 zu unterstützen, muss stattdessen die Obergrenze dieser bestimmten Sprache unterstützt werden.
EDIT : Ich habe das Limit von 2^64
auf geändert2^64-1
, um mehr Antworten zu ermöglichen.
EDIT : Ich habe die 2 ^ 64-1-Regel zu einem Bonus gemacht, da an dieser Herausforderung nicht viel Interesse bestand. Wenn Ihre Antwort 2 ^ 64-1 unterstützt, können Sie sie jetzt bearbeiten, um den Bonus einzuschließen. Sie können auch eine Antwort posten, die diese nicht unterstützt, wenn sie kürzer ist.
n
jeden Weg bekommen." Heißt das, wir können davon ausgehenn
, dass wir in einer Variablen gespeichert sind?n
jede mögliche Weise. Sie können es in einer Variablen speichern, aber es darf nicht fest codiert sein.Antworten:
MarioLANG , 29 Bytes
Probieren Sie es online!
Ich weiß, mein Code ist traurig, sehr traurig oder wütend:
Glückliches MarioLANG, 46 Bytes
Probieren Sie es online!
Ein glücklicherer Ansatz:
Nicht-emotionales MarioLANG, 41 Bytes
Probieren Sie es online!
quelle
:!
;)=#
, oder>(
, oder(-[
, usw. Auch keine Ahnung warum, aber es gibt anscheinend eine Liste von Wikipedia-Emoticons , die weder enthält:!
noch enthält einer von denen, die ich erwähnt habe.Pyth, 1 Byte
Der Text muss mindestens 30 Zeichen lang sein. Sie haben 14 eingegeben.
quelle
Cjam, 5 Bytes
Probieren Sie es online!
Dies ist ein unbenannter Block, der
n
auf dem Stapel erwartet und eine Liste mit dem Bereich[1...n]
darauf hinterlässt .Bilden Sie einfach den Bereich mit
,
und erhöhen Sie dann jedes Bereichselement mit:)
, um den Bereich einseitig zu machen.quelle
:)
Mathematica, 5 Bytes
Einfach genug.
quelle
Hexagony, 19
Oder im erweiterten Sechseckformat:
Vielen Dank an Martin für die Idee dieses Programm, ich habe es nur golfed in einer Seitenlänge 3 Sechseck passen.
Probieren Sie es online!
Ich habe keine fantastischen Hexagony-bezogenen Programme von Timwi, daher wird diese Erklärung nicht sehr farbenfroh sein. Stattdessen können Sie einen riesigen Textklumpen lesen. Ist das nicht nett
In jedem Fall beginnt die IP in der oberen linken Ecke des
$
Fensters und bewegt sich nach Osten, wenn Sie sich vorstellen, dass dieses Programm mit der Nordausrichtung nach oben auf einer Karte platziert wurde. Das$
veranlasst uns, den nächsten Befehl zu überspringen@
, der das Programm beenden würde. Stattdessen wird ausgeführt,?
wodurch die aktuelle Speicherflanke als Eingangsnummer festgelegt wird. Jetzt erreichen wir das Ende der Reihe, die uns zur mittleren Reihe des Sechsecks führt und sich immer noch nach Osten bewegt.Der größte Teil des Programms besteht aus einer Schleife. Wir fangen mit
.
dem No-Op an. Als nächstes stoßen wir auf eine Gabelung im ... äh ... Sechseck ... die<
Anweisung bewirkt, dass sich die IP um 60 Grad nach rechts dreht, wenn die aktuelle Speicherflanke positiv ist, andernfalls drehen wir uns um 60 Grad nach links. Da wir uns nach Osten bewegen, ist unser Kurs entweder nach Süden oder nach Nordosten. Da die Eingabe größer als Null (und daher positiv) ist, beginnen wir immer mit dem Südosten.Als nächstes treffen wir eine,
>
die uns nach Osten umleitet; Diese Operatoren gabeln sich nur, wenn Sie den Gabelteil treffen. Dann treffen wir,'
welche Änderungen welchen Erinnerungsrand wir betrachten. Dann treffen wir,)
was den Wert der aktuellen Speicherflanke erhöht. Da alle Speicherflanken bei 0 beginnen, erhalten wir beim ersten Mal den Wert 1. Als nächstes springen wir in die zweite bis oberste Zeile und führen!
den Ausdruck unserer Nummer aus. Dann bewegen wir uns mit zu einer anderen Flanke{
und speichern den ASCII-Wert von M multipliziert mit 10 plus 8 (778). Dann springen wir zurück zur vorletzten Zeile des Sechsecks und drücken die Taste/
. Dies führt dazu, dass wir nach Nordwesten ziehen. Wir gehen rechts unten am vorbei . Dies druckt die aktuelle Speicherflanke mod 256 als ASCII aus. Dies ist zufällig ein Zeilenumbruch. Wir treffen.
in der mittleren Reihe vorbei und kommen an der heraus;
'
was uns zurück zu der ersten Kante bringt, die den Wert hat, den wir eingelesen haben. Das Treffen,/
das uns veranlasst, wieder nach Osten zu gehen. Dann treffen wir,(
was den Wert dekrementiert.=
veranlasst uns, wieder die richtige Richtung für das zukünftige Gedächtnisspringen einzuschlagen.Da der Wert nun positiv ist (es sei denn, er ist Null), kehren wir zum unteren Rand des Sechsecks zurück. Hier schlagen wir zu,
.
dann springen wir über das,;
damit nichts passiert, und wir kehren zum Anfang der Schleife zurück. Wenn der Wert Null ist, kehren wir zum Anfang des Programms zurück, wo dasselbe wieder passiert, aber?
keine andere Zahl gefunden wird, und wir nehmen den anderen Verzweigungspfad. Dieser Weg ist relativ einfach: Wir treffen,{
was den Speicherrand verändert, aber es ist uns egal, dann treffen wir,@
was das Programm beendet.quelle
MATL, 1 Byte
Beispielausgabe:
Probieren Sie es hier online aus
quelle
GNU Coreutils, 6 Bytes
geteilte Antwort auf pure Bash, siehe unten ...
quelle
R, 13 Bytes
Body muss mindestens 30 Zeichen lang sein.
quelle
Javascript
182177160154139138132 Bytes (gültig)1 Byte gespart dank @ShaunH
Willkürliche Präzision zur Rettung!
Da Javascript nur bis zu 2 ^ 53-1 zählen kann (Danke an @ MartinBüttner für den Hinweis), musste ich dafür eine willkürliche Präzision schaffen. Es speichert Daten in einem Array und fügt bei jedem "Häkchen" 1 zum letzten Element hinzu, durchläuft dann das Array und setzt dieses Element auf 0, wenn etwas über 9 liegt, und fügt 1 zum Element auf der linken Seite hinzu.
Probieren Sie es hier aus! Hinweis: Drücken Sie F12, um das Ergebnis tatsächlich zu sehen, da ich Sie nicht auf Textfelder warten lassen wollte.
Übrigens: Ich war der einzige, der nicht wusste, dass ternäre Operatoren im Codegolf so nützlich sind.
ist länger als
um 1 Byte.
Javascript, 28 Bytes (ungültig - kann nicht bis 2 64 zählen )
quelle
&&
es auch nützlich sein kann, wenn es sonst nichts gibt , muss man vorsichtig sein, wenn es um Kohersion geht.condition&&action()
e?c.unshift(1):0
ume&&c.unshift(1)
ein Byte zu speichernJava 8, 43/69/94 Bytes
Durchgestrichene 44 ist immer noch eine normale 44 - warte, ich habe es nicht durchgestrichen, ich habe es nur ersetzt :(Wenn ich ein zurückgeben kann
LongStream
: (43 bytes
)Dies ist ein Lambda für a
Function<Long,LongStream>
. Technisch sollte ichrangeClosed
stattdessen verwendenrange
, da ich auf diese Weise einen von meinem maximalen Input abschneide, der aberrangeClosed
länger ist alsrange
.Wenn ich in der Funktion drucken muss: (
69 bytes
)Dies ist ein Lambda für a
Consumer<Long>
. Technisch missbrauche ichpeek
, da es sich um eine Zwischenoperation handelt , was bedeutet, dass dieses Lambda technischLongStream
wie das erste Beispiel zurückgegeben wird. Ich sollte verwendenforEach
stattdessen verwenden. Auch hier ist Golf kein schöner Code.Leider, denn
long
‚s - Bereich ist ein signiertes 64-Bit - Integer, nicht erreicht es nicht die angeforderte2^64-1
, sondern lediglich2^63-1
.Allerdings bietet Java SE 8 Funktionalität zu behandeln
long
s , als ob sie ohne Vorzeichen waren, durch spezifische Methoden , die auf der anrufendenLong
Klasse explizit. Da Java immer noch Java ist, ist dies leider ziemlich umständlich, obwohl es kürzer ist als die BigInteger-Version, die es ersetzt. (94 bytes
)Dies ist ein
Consumer<Long>
, wie der vorherige.Und einfach zu lang, um Schriftrollen zu vermeiden.
quelle
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
ist, dass die Verwendung einesint
(oder sogarlong
) für den Iterator nicht groß genug ist.long
ohne Vorzeichen, daher ist die Verwendung dieser Methoden kürzer als derBigInteger
Ansatz. (Es wäre nicht gewesen, wenn wir unsere eigene, unsignierte Langzeitbehandlung durchführen müssten, wie Sie es vor J805AB1E , 1 Byte
Code:
Probieren Sie es online! .
Ein interessanterer Ansatz:
Erläuterung:
Probieren Sie es online! .
quelle
MATLAB, 7 Bytes
Eine unbenannte anonyme Funktion:
Rennen wie:
Teste es hier!
Wenn ein volles Programm benötigt wird, 17 Bytes:
Teste es hier!
quelle
Haskell, 10 Bytes
Anwendungsbeispiel:
f 4
->[1,2,3,4]
.quelle
n
, Sie müssen nehmenn
.n
ist hier nicht fest codiert - es ist ein Funktionsargument. Die Haskell-Syntax kann für Leute, die an C-ähnliche Syntax gewöhnt sind, ungewöhnlich sein.MarioLANG , 19 Bytes
Probieren Sie es online!
Vertikale Programme eignen sich normalerweise besser für einfache Loops in MarioLANG. Ich bin mir nicht sicher, was der Dolmetscher tut, wenn er
[
in einem Aufzug vorkommt, aber es scheint, als würde er das Programm beenden, wenn die aktuelle Zelle 0 ist. Das ist wahrscheinlich ein nützlicher Trick im Allgemeinen.Erläuterung
MarioLANG ist eine Brainfuck-ähnliche Sprache (mit einem unendlichen Speicherband von Ganzzahlen mit willkürlicher Genauigkeit), in der der Befehlszeiger an Mario erinnert, der herumläuft und herumspringt.
Mario beginnt in der oberen linken Ecke und fällt nach unten.
;
Liest eine Ganzzahl aus STDIN und platziert sie in der aktuellen Speicherzelle. Nun beachte, dass=
es sich bei Mario um eine Bodenzelle handelt, auf der er gehen"
und#
einen Aufzug bilden kann (wobei Mario#
der Start ist)!
. Das>
und<
stellte seine Bewegungsrichtung ein. Wir können sehen, dass dies eine einfache Schleife ergibt, die den folgenden Code enthält:Normalerweise
[
würde nun Mario abhängig davon, ob die aktuelle Zelle Null ist oder nicht, das nächste Mal überspringen. Das heißt, solange der Zähler nicht Null ist, geschieht nichts. Es sieht jedoch so aus, als ob Mario[
beim Fahren eines Aufzugs auf die aktuelle Zelle stößt und das0
Programm einfach sofort mit einem Fehler beendet wird. Das heißt, wir müssen nicht einmal einen Weg finden, um ihn korrekt umzuleiten.quelle
[
, was eigentlich noch praktischer ist.Joe - 2 oder 6
Während Sie die inklusive Variante der Bereichsfunktion nutzen können.
..das ist langweilig! Nehmen wir stattdessen die kumulative Summe (
\/+
) einer Tabelle mit Einsen der Form n (1~T
).quelle
Pyth -
32 BytesDank @DenkerAffe 1 Byte gespart.
Ohne das eingebaute zu benutzen.
Probieren Sie es online aus .
quelle
hM
wenn Sie wirklich Lust bekommen wollen :)-.-
Pyke, 1 Byte
Probieren Sie es hier aus!
Oder 2 Bytes ohne das eingebaute
Probieren Sie es hier aus!
Probieren Sie es hier aus!
Probieren Sie es hier aus!
quelle
dc, 15
Eingabe von stdin gelesen. Dies zählt ab
n
, indem eine Kopie jeder Zahl auf den Stapel gelegt wird. Der Stapel wird dann als eins mit der ausgegebenf
Befehl , sodass die Zahlen in der richtigen aufsteigenden Reihenfolge gedruckt werden.Da alle Zahlen auf den Stack verschoben werden, ist es sehr wahrscheinlich, dass der Speicher knapp wird, bevor er sich 2 ^ 64 annähert. Wenn dies ein Problem ist, können wir dies stattdessen tun:
dc, 18
quelle
dc
, wiebc
verwendet beliebige Genauigkeit Mathe standardmäßig und damit solche Grenzen sind für diese Sprache irrelevant.ArnoldC, 415 Bytes
Das einzige, was von Interesse ist, ist die Verwendung von nx (wobei n das Ziel und x die inkrementierte Variable ist), um das Ende der while-Schleife zu testen, anstatt eine dedizierte Variable zu haben. Am Ende habe ich also nx und n- (nx) = x in jeder Schleife laufen
Hinweis : Ich kann nur bis 2 ^ 31-1 zählen. Nun, ich denke, die Terminatoren sind doch keine wirkliche Gefahr.
quelle
Piet, 64 Codels
Mit Codegröße 20:
Npiet Spurenbilder
Erste Schleife:
Verbleibende Spur für
n=2
:Anmerkungen
Noch keine Piet-Antwort? Lassen Sie mich das mit meinem ersten Piet-Programm beheben! Dies könnte bei besseren Würfeln und weniger Zeigermanipulation wahrscheinlich kürzer sein ...
Die obere unterstützte Grenze hängt von der Implementierung des Interpreters ab. Theoretisch wäre es möglich, mit dem richtigen Interpreter beliebig große Zahlen zu unterstützen.
Der Begrenzer ist
ETX
(Ascii3
), dies kann jedoch in dieser Antwort nicht richtig angezeigt werden, so dass ich sie einfach weglassen werde. Es funktioniert in der Konsole:Ausgabe
Npiet Spur für
n=2
quelle
ETX
Zeichen (Ascii3
), das die Ausgaben aufteilt. Das ETX-Zeichen kann auf dieser Site jedoch nicht angezeigt werden.JavaScript (ES6),
7776635958 BytesNimmt die Eingabe
n
als Zeichenfolge, sollte bis zu 9007199254740991999999999 unterstützenErklärt:
quelle
2^64-1
ist in Ordnung, ich habe spec geändert.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
zu[a]+b
GNU bc, 23
Eingabe von stdin gelesen.
bc
Standardmäßig werden Zahlen mit willkürlicher Genauigkeit verarbeitet, sodass die maximale Anzahl von 2 ^ 64 kein Problem darstellt.quelle
Eigentlich 1 Byte
Langweilig gebaut ist langweilig. Benötigt eine 64-Bit-Version von Python 3
2**64
.Probieren Sie es online!(Aufgrund von Speicher- und Ausgabelängenbeschränkungen kann der Online-Interpreter nicht sehr hoch sein.)
Hier ist eine 5-Byte-Version, die kein 64-Bit-Python 3 erfordert und die die Speichernutzung ein wenig verbessert:
Probieren Sie es online! (siehe oben Vorbehalte)
quelle
Fuzzy-Octo-Guacamole, 7 Bytes
Erläuterung:
quelle
X
stattdesseno;
für 7 Bytes.n
:
Druckt den vollen Stapel.X
ist neu.^!$[_;]
.$
ist Reichweite.Oration, 31 Bytes (nicht konkurrierend)
quelle
literally,
vor jeder Aussage? (Frage 2: Pre-Dates oder Post-Dates, wenn es Ihre sind? Beide sind akzeptabel, es sei denn, Sie haben dies für diese HerausforderungQBASIC, 43 Bytes
quelle
INPUT e;a
oderINPUT a
ist genug? Ich sehe dich nicht wiederverwendene
.1 TO
?:
zwischen Anweisungen anstelle einer Rückgabe und einer Zeilennummer verwenden? Mit QB4.5 kann ich Folgendes tun:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 Bytes
Probieren Sie es hier aus
Cubix ist eine 2D-Sprache, die von @ETHProductions erstellt wurde, wobei die Befehle in einen Würfel eingeschlossen werden. Dieses Programm bricht wie folgt auf einen Würfel mit einer Kantenlänge von 2 um.
I
Ruft die Ganzzahleingabe ab0
Drücke 0 auf den Stapel-
subtrahiere die obersten Gegenstände des Stapels!
wenn wahrheitsgemäßer Sprung der nächste Befehl@
beendet;
Pop das Subtraktionsergebnis vom Stapel)
Inkrementieren Sie die Oberseite des Stapelsw
Bewegen Sie die IP-Adresse nach rechts und fahren Sie fort. Dadurch wird es in die nächste Zeile verschobenO
gib den Anfang des Stapels als Zahl ausN
Schieben Sie den Zeilenvorschub (10) auf den Stapelo
einen Zeilenvorschub ausgebenw
Bewegen Sie die IP-Adresse nach rechts und fahren Sie fort. Dies bewirkt, dass es zum nächsten Gesicht fällt!
weil TOS wahr ist, springe das@
terminate;
Ziehen Sie den Zeilenvorschub aus dem StapelU
Biegen Sie nach links auf die-
Subtraktion ab und fahren Sie von dort fortquelle
Python 2,
37333233 BytesFunktioniert vermutlich bis zu
2**64
und darüber hinaus.Abgeschossen vier Bytes dank @dieter , und eine andere dank @orlp . Wie @ Sp3000 herausfand, kann
range()
es jedoch anscheinend zu Problemen mit höheren Werten kommen, weshalb die Funktion in geändert wurdexrange()
. Hinweis:xrange()
Möglicherweise gibt es sogar Probleme, zumindest in 2.7.10 .quelle
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
und darüber hinaus." - bezweifle es in Python 2, aber es könnte mitxrange
(bearbeiten:xrange
könnte sogar Probleme haben, zumindest in 2.7.10)-~
Arbeit? Edit : Ich habe es herausgefunden. Auch schöner Trick!Zsh, 12 Bytes
Dies funktioniert, weil Variablen vor den geschweiften Klammern erweitert werden.
quelle
2^64-1
ist jetzt in Ordnung.2^63 - 1
V, 11 Bytes
Da dies unangenehmes UTF-8 und nicht druckbare Dateien enthält, gibt es hier einen umkehrbaren Hexdump:
V ist eine unvollendete Sprache, die ich geschrieben habe, aber dies funktioniert ab Commit 19 . Diese Antwort war etwas ausführlicher als ich es gerne hätte, aber das liegt hauptsächlich daran, dass V keine ganzen Zahlen kennt, sondern nur Strings. Es ist also eine anständige Antwort! Dies wird bis zu 2 ^ 64 funktionieren, aber es wird wahrscheinlich sehr lange dauern lange .
Um das Lesen und Schreiben meiner Erklärung zu vereinfachen, werde ich mit dieser "vom Menschen lesbaren Form" arbeiten.
Erläuterung:
Wenn Lücken erlaubt sind, gibt es eine kürzere Version, die 1 bis n ausgibt, aber auch eine 0 (8 Bytes) ausgibt:
Und in lesbarer Form:
Dies ist kürzer, da das
<A-q>
Ende implizit ist, sodass wir es nicht benötigen, wenn wir die letzte Zeile nicht löschen müssen.quelle