Hauptaufgabe
Ihre Aufgabe ist es, ganze Zahlen in absteigender Reihenfolge auszudrucken, beginnend mit 1 und steigend, wenn Sie erneut 1 drücken, bis die angegebene Eingabe erreicht ist, und dann den Rest auszudrucken, bis Sie erneut 1 drücken. Beispiel mit Eingabe 6
:
1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Randnotiz: Dies ist A004736 im OEIS. Auch das erste Beispiel (mit Zeilenumbrüchen) ist eine ungültige Ausgabe, wie in den Regeln angegeben.
Eingang
Ihr Code kann jede Art von Eingabe (grafisch, STDIN) in Form einer ganzen Zahl oder Zahl annehmen.
Ausgabe
Ihr Code sollte die oben beschriebene Sequenz ausgeben, bis die eingegebene Nummer erreicht ist, und dann die Ausgabe beenden, bis wieder 1 erreicht ist. Bei der Ausgabe kann es sich um eine beliebige Zahl, einen String, eine Ganzzahl oder eine grafische Ausgabe handeln. Es ist erforderlich, eine einzelne Zahl auszudrucken (keine Zeilenumbrüche, wenn es sich um eine Zeichenfolge handelt). Ihre Ausgabe kann mit beliebig vielen Zeichen ein- und ausgegeben werden (z []
. B. ).
Da es einige Missverständnisse gab, ist hier ein Regex-Muster, mit dem Sie Ihre Ausgaben testen können.
^(\D*(\d)+\D*)$
Regeln
- Die Ausgabe muss eine vollständige Zahl sein, die nicht durch irgendetwas aufgeteilt wird, auch nicht durch Zeilenumbrüche.
- Der Algorithmus sollte für die erste Instanz von N nicht , in irgendeiner Weise erscheinen (zB
21
in121321
), sondern eher für die erste Instanz von N als die tatsächlichen Anzahl. - Eine einzelne abschließende Zeile ist zulässig.
- Der Umgang mit negativen Eingaben liegt ganz bei Ihnen, negative Zahlen sind keine Fälle, die Sie testen sollten.
Testfälle
Input: 6
Output: 121321432154321654321
Input: 1
Output: 1
Input: 26
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321
Input: 0
Output: 0, Empty, or Error
Input: 21
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321
Danke @Emigna, ich habe seinen Algorithmus verwendet, um diese Testfälle zu berechnen.
Gewinner
Der Gewinner wurde ausgewählt! Es war ErikGolfers Antwort mit beeindruckenden 5 Bytes! Herzliche Glückwünsche!
The output must be a full number ...
Meinen Sie die gesamte Sequenz oder nur die verschiedenen Teilzeichenfolgen (1, 2-1, 3-1 ...)? Ihr erstes Beispiel scheint dieser Aussage nicht zu entsprechen.[1, 21, 321, 4321, 54321, 654321]
Wie wäre es mit diesem?[1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1]
Oder reden Sie nur über Arrays mit einem einzigen Element, wie[121321432154321654321]
?mickey321211mouse
. Wirklich, die\D
Teile haben keinen Grund da zu seinAntworten:
Gelee , 5 Bytes
Probieren Sie es online!
Formel nicht meins.
Ich vermute, hier ist zu viel los ...
[ANTWORT AKZEPTIERT] Ich hätte Dennis 5 Wiederholungen gegeben, aber dies ist kein Reputationsaustausch. Dennis hat mir das
VV
Verhalten gezeigt. Zu meiner Überraschung ist dies kürzer als 05AB1E.quelle
05AB1E , 6 Bytes
Probieren Sie es online!
Erläuterung
Beispieleingabe 4
quelle
JavaScript (ES6), 37 Byte
Demo
Code-Snippet anzeigen
Alternative Methode für n <10, 34 Bytes (nicht konkurrierend)
In JavaScript sind Zeichenfolgen unveränderlich. Daher ist es unmöglich, den Inhalt des N-ten Zeichens einer Zeichenfolge zu ändern,
s
indem Sie einen neuen Wert zuweisens[N]
.Der Ausdruck
++s[N]
ist jedoch gültig und wird wie erwartet ausgewertet, auch wenn die Zeichenfolge unverändert bleibt. Zum Beispiel:Und im weiteren Sinne:
quelle
V,
29282723191716 Bytes8 Bytes gespart dank @DJMcMayhem
3 Bytes gespart dank @ nmjcman101
Versteckte Zeichen:
C-x
ist Strg + x.Probieren Sie es online! Nimmt Eingaben über Befehlszeilenargumente entgegen
Hexdump:
Erläuterung
Jetzt sieht es so aus:
Fortsetzung ...
GIF (veraltet)
(für arg
6
)quelle
òy$jpkgJ
À
, wird die 0 nicht oben angezeigt, sodass Sie das x entfernen können. Dann wird APPARENTLY a einò
schließen,ñ
damit Sie das zweiteñ
(das Byte, das Sie speichern) entfernen können . Link, weil das keinen Sinn machteC #,
726965 BytesWenn die Ausgabe nur zurückgegeben werden kann, anstatt in die Konsole geschrieben zu werden
C #,
716864 BytesVielen Dank an @VisualMelon für das Speichern vieler Bytes
Testen Sie es hier (Humorvollerweise bricht der Online-Compiler bei einer beliebigen Zahl über 420 ab)
quelle
j=1
in die for-Schleife aufnehmen und ein Semikolon speichern. Sie können auch erklären ,j
zusammen miti
dem, zu speichernint
. Siei++
können auch in diej=i
Zuordnung verschoben werden , um ein Byte zu speichern. Sie sollten auch in der Lage sein , das zu ersetzen ,i<=n
mit ,i<n
wenn Sie es machen ,j=++i
statt und beginneni
an0
.for(int i=0,j;i<n;)
. Außerdem ist{}
die innere for-Schleife nicht erforderlich .Pure Bash, 34
Zwei Stufen der Strebendehnung. Mit der Eingabe
6
wird die erste Ebene auf erweitert{1..1} {2..1} {3..1} {4..1} {5..1} {6..1}
. Dieser erweitert sich dann zu1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1
, der zu einer Saite mit zusammengeklebt wirdprintf %s
.eval
Auf beiden Expansionsstufen sind 's erforderlich - für die erste Ebene, damit der$1
Parameter zuerst expandiert wird, und für die zweite Ebene, damit er nach der ersten Ebene expandiert.Probieren Sie es online aus
quelle
Perl, 21 Bytes
Verwendet
-E
ohne zusätzliche Kosten.Verwendungszweck
quelle
Pyth, 7 Bytes
Ein Programm, das die Eingabe einer Ganzzahl akzeptiert und das Ergebnis ausgibt.
Probieren Sie es online!
Wie es funktioniert
quelle
jk_hC.:S
ist länger, aber gute Arbeit!GeoGebra , 67 Bytes
Jede Zeile wird separat in die Eingabeleiste eingegeben. Die Eingabe erfolgt aus einem Eingabefeld.
Hier ist ein GIF der Ausführung:
Wie es funktioniert
Die
1
implizite Eingabe weista
zu1
, und derInputBox
Befehl ordnet ein Eingabefeld zua
. Dann wird für jedeni
in{1, 2, 3, ..., a}
der Liste{i, i-1, i-2, ..., 1}
wird mit dem erstelltenSequence
Befehl, und jederj
in dieser Liste wird in einen String umgewandelt mitText
. SchließlichJoin
verschmilzt alle Listen undSum
verkettet alle Elemente zu einem Text - Objekt, das angezeigt wird.quelle
Python 2, 51 Bytes
quelle
Netzhaut ,
2622 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Erläuterung
Eingabe in unär umwandeln.
Fügen Sie an jeder Position das Präfix bis zu diesem Punkt sowie einen Zeilenvorschub ein. Dies erzeugt einen unären Bereich von
2
bisn+1
, einen Wert pro Zeile.Ersetzen Sie jedes
1
Zeichen durch die Anzahl der Zeichen in derselben Zeile. Das macht so etwas wie11111
in43210
.Entfernen Sie alle Zeilenvorschübe und die vorangestellten Nullen.
quelle
GameMaker-Sprache, 65 Byte
quelle
APL, 10 Bytes
Z.B:
Erläuterung:
⍳
: Erhalte die Zahlen von 1 bis N.⍳¨∘
: für jeden von denen erhalten Sie die Zahlen von 1 bis N.⌽∘
: kehren Sie diese Liste um⍕¨∘
: Ermittelt die Zeichendarstellung jedes Elements (daher werden die Zahlen nicht mit Leerzeichen dazwischen ausgegeben)∊
: Reduziere das resultierende Arrayquelle
∘
Ist die Funktionszusammensetzung, gab ich die Erklärung in der Reihenfolge, dass die Funktionen tatsächlich ausgewertet werdenPython 2,
7168 BytesIch wette, eine rekursive Lösung könnte kürzer sein, aber es fällt mir schwer, sie in eine zu formulieren.
Probieren Sie es online aus
quelle
Eigentlich 8 Bytes
Das erste Mal, wenn Sie eine Antwort in "Eigentlich" posten, kann wahrscheinlich Golf gespielt werden.
Wie es funktioniert
Probieren Sie es online!
quelle
R♂R♂RΣεj
hat die gleiche Anzahl von Bytes, es kann jedoch einfacher sein, eine Erklärung dafür zu schreiben.Brachylog , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Perl 6 , 22 Bytes
Ein Lambda, das eine Zeichenfolge zurückgibt.
( Probieren Sie es online. )
Erläuterung:
1..$_
: Bereich von ganzen Zahlen ...(1 2 3 4)
[,] 1..$_
: Verkleinern ("Falten") über Kommaoperator ...(1 2 3 4)
[\,] 1..$_
: Mit Zwischenergebnissen ( dreieckig reduzieren ) ...((1) (1 2) (1 2 3) (1 2 3 4))
[\R,] 1..$_
: Wende den umgekehrten Meta-Operator auf das Komma an ...((1) (2 1) (3 2 1) (4 3 2 1))
[~] flat ...
: Listenverschachtelung entfernen und String-Concat-Operator umklappen ...1213214321
quelle
Haskell, 35 Bytes
Anwendungsbeispiel:
f 6
->"121321432154321654321"
.Verwandeln Sie für alle Zahlen
x
in1 ... x
einer Listex,x-1, ... ,1
die Zahlen in eine Zeichenfolge und verknüpfen Sie sie zu einer einzelnen Zeichenfolge. Verketten Sie diese Zeichenfolgen erneut zu einer einzelnen Zeichenfolge.quelle
C89, 54 Bytes
56 -2 = 54 danke an ErikGolfer!
quelle
(j=i++)
anstelle(j=i)
der letzteni++
(ungetesteten) tun und entfernen .i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}
(52 Bytes)Python 3,
87928374 BytesKürzere Antwort mit Rekursion:
Vielleicht nicht die kürzeste, aber sie wird nur mit Pythons Listenverständnis erstellt!
(Bearbeitet, um die Druckfunktion hinzuzufügen und die \ n zu entfernen)
(Bearbeitet, um die Druckfunktion zu entfernen und n + 1, k + 1 in n, k + 2 zu ändern.)
quelle
`i`
anstelle von verwendenstr(i)
. Und Sie können"".join(...)
anstelle von"".join([...])
undrange(1,k,-1)
das entfernen[...][::-1]
.n>0
kannn
. Und ich meinterange(n,0,-1)
. Und benutzen and f(n-1)+...)or""
.Pyth, 8 Bytes
Erläuterung
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
quelle
Mathematica, 36 Bytes
Wirft eine Reihe von Warnungen, die ignoriert werden können.
Erläuterung
Verwenden Sie die Eingabe
5
als Beispiel:Erstellt einen Bereich
{1, 2, 3, 4, 5}
.Range
ist auflistbar, so dass wir ihm eine Liste für eines seiner Argumente geben können, und es wird automatisch über dieses Argument fädeln. Das gibt uns also eine Reihe von umgekehrten Listen:Nächster:
Dies verbindet die verschachtelte Liste mit der leeren Zeichenfolge. Da die verschachtelte Liste eigentlich keine Zeichenfolgen enthält, kann sie die Werte (in denen die Warnungen generiert werden) nicht wirklich verknüpfen,
""<>
hat jedoch den Nebeneffekt, dass die Liste abgeflacht wird. Das gibt uns alsoJetzt kommt Mathematicas wundervolle Funktion, die
Map
sich nicht um die Struktur kümmert, über die die Zuordnung erfolgt. Normalerweise wenden Sie es auf eine Liste an, aber es funktioniert mit jedem Kopf.f /@ h[a, b, c]
gibt dir einfachh[f[a], f[b], f[c]]
. In unserem Fall ist der KopfStringJoin
und die Werte sind die ganzen Zahlen.Das macht also einfach die ganzen Zahlen zu Strings. An diesem Punkt
StringJoin[...]
weiß er, was er mit ihnen machen soll und fügt sie alle zu einer einzigen Zeichenfolge zusammen:quelle
GolfScript , 14 Bytes
Probieren Sie es online!
Übliche Methode natürlich, aber das ist GolfScript.
Erklärung für diesen VAST- Code:
Beachten Sie, dass die Ausgabe als einzelne Zahl erfolgt. Nachlauf
\n
.quelle
R,
383344 BytesÜbernimmt die Eingabe in STDIN und durchläuft eine Schleife von 1 bis n, wobei für jeden Schritt die Sequenz i bis 1 erstellt und gedruckt wird.
Bearbeiten: Ersetzt
seq(i,1)
durchi:1
Speichern von 5 Bytes und Anzeigen, warum ich während Besprechungen nicht Golf spielen sollte.quelle
101
wenn die Eingabe ist0
.if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
macht den Trick.if(n<-scan())
sollte ausreichen.MATL ,
1411 BytesProbieren Sie es online!
Erläuterung
quelle
not split up by anything
Ich glaube nicht, dass der zweite erlaubt ist.Brainfuck, 17 Bytes
Erläuterung
Probieren Sie es online!
quelle
Python ,
635759 BytesEine rekursive Lösung, die sowohl in Python 2 als auch in Python 3 funktioniert. Golfvorschläge willkommen! Probieren Sie es online!
Edit: -6 Bytes dank Jonathan Allan. +2 Bytes mit Dank an mbomb007 für das Hinweisen auf ein Problem mit meiner Antwort.
Ungolfing
quelle
map
, um 6 Bytes zu speichern:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
PHP,
353433 BytesEin Byte gespeichert, weil ich falsch gezählt habe, danke Titus! Und ein anderer!
Führen Sie von der Kommandozeile aus mit
-r
.Ziemlich einfache Antwort, durchläuft unsere Eingabe von 1
n
, setzt die Zahl auf den Anfang der Zeichenfolge und druckt sie aus.quelle
while($i++<$argv[1])echo$s=$i.$s;
CJam, 13 Bytes
Dolmetscher
quelle
ri{),:)W%}%