Wir haben viele horizontale Achsen für Zahlen, aber ich denke ehrlich, dass sie irgendwie langweilig sind. Ihre Aufgabe heute ist es, einen Teil einer diagonalen Achse zwischen zwei verschiedenen nicht-negativen Ganzzahlen zu bilden, die als Eingabe angegeben werden.
Wie baue ich eine diagonale Achse?
Nehmen wir ein Beispiel mit der Eingabe
0, 5
. Unsere Achse sollte so aussehen:0 1 2 3 4 5
Unsere Achse sollte jedoch auch für Zahlen mit mehr Ziffern gut aussehen! Wenn die Eingabe beispielsweise lautet,
0, 14
sollte die neue Achse wie folgt lauten:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Die Idee ist, dass die erste Ziffer der nächsten Ziffer auf der Achse immer genau nach der letzten Ziffer der vorherigen Ziffer platziert werden muss. Um die Idee noch besser zu verstehen, hier ein weiteres Beispiel mit
997, 1004
:997 998 999 1000 1001 1002 1003 1004
Regeln
Sie können davon ausgehen, dass die Eingabe in aufsteigender oder absteigender Reihenfolge erfolgt (Sie können zwischen
5,3
und wählen3,5
).Sie können auch davon ausgehen, dass der Unterschied zwischen den beiden Ganzzahlen kleiner als 100 ist.
Möglicherweise haben Sie in jeder Zeile einen führenden Zeilenumbruch oder ein konsistentes Leerzeichen. Nachgestellte Leerzeichen / Zeilenumbrüche sind ebenfalls in Ordnung.
Sie können die Eingabe und Ausgabe mit jedem Standardmittelwert vornehmen .
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache!
Andere Testfälle
1, 10
:1 2 3 4 5 6 7 8 9 10
95, 103
:95 96 97 98 99 100 101 102 103
999999, 1000009
:999999 1000000 1000001 1000002 1000003 1000004 1000005 1000006 1000007 1000008 1000009
Antworten:
05AB1E ,
876 BytesVielen Dank an Magic Octopus Urn für das Speichern eines Bytes!
Es funktioniert irgendwie, aber ehrlich gesagt habe ich keine Ahnung warum.
Code
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
Erläuterung
quelle
.O = pop a,b push connected_overlap(b) (deprecated)
- Oh, ich denke?.O
ist extrem fehlerhaft und seit über einem Jahr veraltet. Ich habe keine Ahnung, was funktioniert und was nicht. Ich könnte schwören, dass ich es brauchteÎ
, aber das scheint plötzlich nicht mehr der Fall zu sein (?). Vielen Dank! :)Î
benötigt, um die maximale Anzahl der führenden Leerzeichen auf 1 zu reduzieren.Python 2 , 43 Bytes
Verwendet die vertikale Registerkarte, um den Leiter-Effekt zu erzielen. Die Art und Weise,
\v
wie das gerendert wird, ist konsolenabhängig, daher funktioniert es möglicherweise nicht überall (wie bei TIO).quelle
\x0b
in Ihrem Code verwenden, um ein Byte zu speichern?\\v
und ersetzt, bei\x0B
dem einVT
Charakter an seiner Stelle für die Wertung angezeigt wird. Sie können entweder einen umkehrbaren Hexdump (xxd
oder etwas anderes ) posten oder einfach stelle fest: "\v
ist eine wörtliche vertikale Lasche", ich denke das wäre fair. Hoffentlich hilft das!Kohle ,
98 BytesProbieren Sie es online!
Der Link verweist auf die ausführliche Version des Codes. Eingabe in aufsteigender Reihenfolge.
quelle
R
706961 BytesFunktion, die die Start- und Endvariable als Argumente verwendet. Durchläuft die Sequenz und druckt jedes Element, dem genügend Leerzeichen vorangestellt sind.
F
Beginnt mitFALSE=0
und während jeder Iteration wird die Anzahl der Zeichen für diesen Wert hinzugefügt.F
legt die Anzahl der gedruckten Leerzeichen fest.Probieren Sie es online!
-8 Bytes dank @ Giuseppe
quelle
scan()
zweimaliger Verwendung kann es auf 67 Byte reduziert werdenfor(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
.F=0;for(i in scan():scan()){cat(rep(' ',F),i,'\n',sep='');F=F+nchar(i)}
(71 Byte)nchar
.\n
für einen tatsächlichen Zeilenumbruch funktioniert auch, und das kostet anscheinend keine zwei Bytes.cat
, aber ich konnte nicht klar denken und es aus irgendeinem Grund herausfinden.C #,
908985 Bytes1 Byte dank @LiefdeWen gespeichert.
4 Bytes dank @auhmaan gespeichert.
Probieren Sie es online!
Voll / Formatierte Version:
quelle
i<=e
bise>i
i
unds
stattdessen wiederverwendenPython 2 ,
5854 BytesProbieren Sie es online!
quelle
Mathematica, 59, Bytes
Eingang
-3 Bytes @JungHwanMin
Problem mit 0 behoben (siehe Kommentare für Details)
Danke an @ngenisis
quelle
Spacings -> 0
wenn dies zeichengenau sein soll.Grid[(DiagonalMatrix@Range[1+##]/. 0->""+1)-1,Spacings->0]&
ist der kürzeste Weg, den ich finden konnte, um diese Probleme zu behebenGelee , 9 Bytes
Probieren Sie es online!
quelle
Mathematica, 48 Bytes
Da es so viele Antworten gibt, dachte ich, dass diese enthalten sein sollte
Eingang
Ausgabe
quelle
C
1661349582 BytesNeue Antwort
Nur als Funktion nicht als ganzes Programm.
Vielen Dank an Falken, der geholfen hat, 13 Bytes zu beseitigen (und einen Fehler zu beheben)!
Danke an Steph Hen für die Hilfe, 12 Bytes wegzuschlagen!
Vielen Dank an Zacharý für die Hilfe!
Alte Antworten
Wurde das int vor main entfernt und const char * v [] in char ** v geändert und return 0 entfernt;
Dies ist mein erstes Mal beim Golfen und ich wollte etwas in C ausprobieren. Ich bin mir nicht sicher, ob ich das richtig formatiert habe, aber ich hatte Spaß daran!
Erläuterung
Verwendung
quelle
argc
undargv
auf einen Buchstaben Variablen.int s=0
die for-Schleife verschieben, wie infor(int s=0;a<=b;a++)
.int i=s;while(i--)
anstelle vonfor(int i=0;i<s;i++)
für die innere Schleife werden zwei Bytes gespart.C ++,
167165 Bytes-2 Bytes dank Zacharý
quelle
int m=0,i=l,j
in die erstefor
Schleife verschieben, um ein Byte zu speichern? 2. Können Sie wechselnr+=t;r+=10
zur+=t+10
? 3. Ich habe jemanden geschlagen.r+=t+=10
aber nichtr+=t+10
, es gab mir einen Fehlerr+=t+=10
funktioniert das? Würde sich das nicht auswirkent.size()
?++i
nachstd::to_string(i)
as verschiebenstd::to_string(i++)
, um ein weiteres Byte zu speichern?APL (Dyalog) ,
2524 Bytes-1 danke an Zacharý .
Nimmt
⎕IO←0
für nullbasiertes Zählen an. Nimmt die Untergrenze als linkes Argument und die Obergrenze als rechtes Argument.Probieren Sie es online!
(
…)
Wende folgende implizite Funktion zwischen den Argumenten an:-
subtrahieren Sie die obere untere von der oberen Grenze1-
subtrahiere das von eins (dh 1 + ∆)⊣+∘⍳
linke untere Grenze plus die ganzen Zahlen 0 durch⍕¨
jedes formatieren (stringifizieren){
…}
Wenden Sie dazu anonym Folgendes an (dargestellt durch ⍵):≢¨
Länge von jedem (Anzahl)+\
kumulative Summe-
negieren⍵↑⍨¨
Nimm für jede Zeichenfolge so viele Zeichen vom Ende (Pads mit Leerzeichen)↑
Liste der Zeichenketten in eine Zeichenmatrix mischenquelle
+-⍨
sein--
?Netzhaut ,
81 bis78 BytesProbieren Sie es online! Übernimmt die Eingabe als durch Zeilenumbrüche getrennte Liste mit zwei Ganzzahlen. Bearbeiten: 3 Bytes durch Stehlen des Bereichserweiterungscodes aus meiner Antwort auf "Teilen wir den primären Cluster?" Erläuterung:
Konvertieren Sie beide Eingänge in unary.
Während sich die letzten beiden Elemente (a, b) der Liste um mehr als 1 unterscheiden, ersetzen Sie sie durch (a, a + 1, b). Dies erweitert die Liste von einem Tupel in einen Bereich.
Zurück in doppeltes Dezimalformat konvertieren.
Konvertieren Sie die Kopie in Leerzeichen.
Summieren Sie die Leerzeichen von einer Zeile zur nächsten.
quelle
Pyth ,
1413 BytesProbieren Sie es online!
quelle
LOGO , 53 Bytes
Es gibt kein "Online ausprobieren!" Link, da alle Online-LOGO-Interpreter keine Vorlagenliste unterstützen.
Das ist eine Template-Liste (entspricht der Lambda-Funktion in anderen Sprachen).
Verwendung:
(
apply
ruft die Funktion auf)wird gedruckt
Hinweis:
Dies verwendet Schildkröten
ycor
(Y-Koordinate), um die Anzahl der für die Eingabe erforderlichen Leerzeichen zu speichern.window
sollte ausgeführt werden, wenn esycor
zu groß wird, dass sich die Schildkröte vom Bildschirm entfernt. Beschreibung deswindow
Befehls: Imif the turtle is asked to move past the boundary of the graphics window, it will move off screen.
Gegensatz zur Standardeinstellungwrap
, dieif the turtle is asked to move past the boundary of the FMSLogo screen window, it will "wrap around" and reappear at the opposite edge of the window.
Erläuterung:
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
-2 danke an Adnan .
quelle
vy
durchʒ
undgF
durch ersetzenv
, um 2 Bytes zu sparen.ʒ
Trick noch verwendet wird ...JavaScript (ES8),
696762 ByteÜbernimmt die Eingabe als Ganzzahl in aufsteigender Reihenfolge unter Verwendung der Curry-Syntax. Gibt ein Array von Zeichenfolgen zurück.
Versuch es
quelle
Japt , 12 Bytes
Nimmt Eingaben in beliebiger Reihenfolge vor und gibt die Zahlen immer in aufsteigender Reihenfolge als Array von Zeilen zurück.
Probieren Sie es online! mit dem
-R
Flag, um das Array mit Zeilenumbrüchen zu verbinden.Erläuterung
Implizite Eingabe von
U
undV
.Erstellen Sie einen Inklusivbereich
[U, V]
und ordnen Sie jeden Wert ...Die Werte vor dem aktuellen (
¯Y
), verbunden mit einem String (¬
) und gefüllt mit Leerzeichen (ç
).Plus die aktuelle Nummer. Das resultierende Array wird implizit ausgegeben.
quelle
Python 2 ,
65 63 6261 Bytes-2 Bytes Dank an @Mr. Xcoder:
exec
braucht keine geschweiften Klammern-1 Tschüss, danke an @ Zacharý:
print s*' '
asprint' '*s
Probieren Sie es online!
quelle
m,n=input();s=0;exec(n-m+1)*"print s*' '+`m`;s+=len(`m`);m+=1;"
genügt.print s*' '
umprint' '*s
ein Byte zu speichern.JavaScript, 57 Bytes
quelle
y=>g=(x,s='')=>y<x?s:s+'\n'+g(x+1,s.replace(/./g,' ')+x)
Rufen Sie mit den ganzen Zahlen currying umgekehrt:f(103)(95)
.x=>y=>g=(s='')=>y<x?s:s+'\n'+g(s.replace(/./g,' ')+x++)
Aufruf alsf(x)(y)()
.Python 2,
6059 Bytes-1 Byte Danke an Mr.Xcoder für die Definition von s = 0 als optionale Variable in meiner Funktion.
Probieren Sie es online!
Ich denke, es ist möglich, dies in eine Lambda-Version zu übertragen, aber ich weiß nicht wie. Ich denke auch, dass es eine Art Zuordnung zwischen den Leerzeichen und der Länge der aktuellen Nummer gibt, aber das habe ich auch noch nicht herausgefunden. Ich denke also, es gibt noch Raum für Verbesserungen.
Ich habe einen Bereich vom unteren
l
bis zum oberen Rand erstellt, in demu
jede Zeile mit einem Leerzeichen multipliziert mit einer Zahl gedruckt wirds
. Ich erhöhe den Multiplikator mit der Länge der aktuellen Zahl.quelle
Python 2,
787779 BytesProbieren Sie es online!
f(A, B)
Gibt den Teil der Achse zwischen A und B einschließlich aus.Zum ersten Mal beantworte ich eine Herausforderung!
Verwendet und missbraucht die Backticks von Python 2, um die Anzahl der Leerzeichen zu zählen, die vor der Zahl hinzugefügt werden müssen.
-1 Byte dank Mr.Xcoder
+2 weil ich a vergessen habe
+1
quelle
sum(len(`j`)) for
kann werdensum(len(`j`)for
, -1 Bytesrange(a,b)
mitrange(a,b+1)
, weil Python halb inklusive Bereiche hat.C (GCC) ,
4138 Bytes-3 Bytes Nur dank ASCII
Funktioniert mit RedHat6, Zugriff über PuTTY
Probieren Sie es online!
quelle
more
für diese Datei zu verwendenV , 16 Bytes
Probieren Sie es online!
Das wäre viel einfacher, wenn ich es aushalten könnte,
start
end - start
aber ich denke, das ändert die Herausforderung ein bisschen zu sehr.Dabei wird die Startnummer als Eingabe in den Puffer und die Endnummer als Argument verwendet. Es erstellt tatsächlich die Leiter von
start
bisstart + end
und löscht dann alles nach der Endnummer.quelle
MATL , 11 Bytes
Probieren Sie es online!
Erläuterung
Dazu wird für jede Zahl eine Zeichenfolge generiert und mit einer logisch negierten Kopie der vorherigen Zeichenfolge verknüpft. Daher wird char 0 so oft 0 vorangestellt wie die Länge der vorherigen Zeichenfolge. Zeichen 0 wird als Leerzeichen angezeigt, und jede Zeichenfolge wird in einer anderen Zeile angezeigt
quelle
Swift 4 , 115 Bytes
Ich denke, niemand hätte sowieso eine Swift-Lösung gepostet ...
Probieren Sie es online!
quelle
Perl, 19 Bytes
Hinweis:
\x0b
Wird als ein Byte gezählt.Zusammen mit anderen habe ich gedacht, dass die Verwendung von Cursorbewegungen die kürzeste Route ist. Dies bedeutet, dass dies bei TIO nicht funktioniert:
Verwendung
quelle
1..
dort macht, da Sie zwei ganze Zahlen erhalten.1..
ich die Spezifikation nicht vollständig gelesen, das ist jetzt behoben! Da die Ausgabe die vertikale Registerkarte enthält, wird sie beim Online-Testen nicht wie erwartet gerendert. Ich versuche herauszufinden, ob ich einen Renderer finde, der Steuerzeichen unterstützt. Wenn nicht, könnte das mein neues Projekt sein!Japt ,
109 BytesOnline testen! Gibt ein Array von Zeilen zurück.
-R
Fahne eingeschlossen, um sich in Zeilenumbrüchen zur leichteren Anzeige zu verbinden.Erläuterung
Alte Version, 10 Bytes:
Online testen!
quelle
D,
133127126125121119 BytesGelee und APL wurden genommen.
Probieren Sie es online!
Wenn Sie mit konsolenabhängigen Ergebnissen zufrieden sind (entspricht dem Prinzip der C-Antwort von Giacomos), finden Sie hier eine für
72 bis71 Byte:Wie? (Nur D-spezifische Tricks)
f(T)(T a,T b,T s=0)
Das Vorlagensystem von D kann auf Typen schließenfor(T j;j++<s;)
Ganzzahlen standardmäßig auf0
.' '.write;a.writeln
D lässt dich anrufenfun(arg)
wiearg.fun
(eines der wenigen golferischen Dinge, die D hat)a.text.length
Dasselbe wie oben, und D ermöglicht es Ihnen auch, eine Methode ohne Parameter aufzurufen, als wäre es eine Eigenschaft (text
Konvertierung in einen String).quelle
Java 8, 79 Bytes
Probieren Sie es online!
quelle
(a,b)->
zub->a->
. (Und Sie konnten drei weitere Bytes speichern von 10 bis Java gehen und WechselString
zuvar
.) Online ausprobieren.