Die Herausforderung
Geben Sie zwei Ganzzahlen als Eingabe ( x
und y
) ein und geben Sie sie x
als Zeichenfolge mit so vielen führenden Nullen aus, dass die y
Zeichen ohne Vorzeichen lang sind.
Regeln
Wenn
x
mehr alsy
Ziffern vorhanden sind, wird die Ausgabex
ohne Änderung als Zeichenfolge ausgeführt.Die Ausgabe als Ganzzahl wird nicht akzeptiert, auch wenn keine führenden Nullen vorhanden sind.
Wenn
x
negativ, behalten Sie den Ist- Zustand bei-
und arbeiten Sie mit dem Absolutwert.Negativ
y
sollte als 0 behandelt werden, was bedeutet, dass Sie so ausgeben,x
wie es ist (aber als Zeichenfolge)
Beispiele:
IN: (1,1) OUT: "1"
IN: (1,2) OUT: "01"
IN: (10,1) OUT: "10"
IN: (-7,3) OUT: "-007"
IN: (-1,1) OUT: "-1"
IN: (10,-1) OUT: "10"
IN: (0,0) OUT: "0"
IN: (0,1) OUT: "0"
IN: (0,4) OUT: "0000"
Kürzester Code in Bytes gewinnt, Standardlücken gelten.
(-1,1)
es+
Vorzeichen für positive Zahlen akzeptabel?Antworten:
Japt ,
138 BytesNimmt die erste Eingabe (
x
) als Zeichenfolge.Versuch es
Dank ETHproductions konnten satte 5 Bytes eingespart werden.
Erläuterung
Implizite Eingabe von Zeichenfolge
U=x
und GanzzahlV=y
.® }'-
Teilt sichU
in ein Array auf dem Minus-Symbol, ordnet es darüber zu und fügt es einer Zeichenfolge mit einem Minus-Symbol wieder hinzu.©
&&
Ist logisch AND ( ), wenn das aktuelle Element wahr ist (eine nicht leere Zeichenfolge), füllen Sie left (ù
) mit 0 (T
) aufV
.quelle
-
q
sollteq-_©ùTV
, um dann 1 Byte zu sparen :-)S.q()
(uns zu gebenS.q(s,f)
), dannS
aufgespaltens
, durchlaufenf
und wieder verbunden würdes
? Ich mag das! :)N.s
,S/A.y
,N.ì
tun dies bereits) mit einem Bündel von Methoden? Ich hatte ein Gespräch mit jemandem, ich kann mich nur nicht erinnern, wer jetzt ist: sPyth , 12 Bytes
Probieren Sie es hier aus!
quelle
Python 2 , 29 Bytes
Probieren Sie es online!
str.zfill
Kommt einfach so nah.quelle
05AB1E ,
1110 BytesEingabe erfolgt als
amount_of_digits, number
Probieren Sie es online!
Erläuterung
quelle
Python, 29 Bytes
Eingabe übernehmen als
f(x,y)
. Verwenden des Python-%
OperatorsProbieren Sie es online!
quelle
C #, 56 Bytes
Probieren Sie es online!
quelle
Java (OpenJDK 8) , 47 Byte
Probieren Sie es online!
Anfangs dachte ich, einfach, maximal 30 Zeichen (was ziemlich kurz ist, wenn man Strings in Java manipuliert). Dann passierten die Ausnahmen.
quelle
JavaScript (ES6), 42
Rekursiv, Parameter in umgekehrter Reihenfolge, zuerst y, dann x. Und Currys
Prüfung
quelle
f(y)(x)
nichtf(x,y)
.y=>r=x=>x<0?'-'+r(-x):(x+='')[y-1]?x:r(0+x)
kommt so nah ...Python 3.6 ,
2837 BytesProbieren Sie es online! (Testfall aus der Antwort von Colera Su)
Nutzen Sie die neue Methode zum Formatieren von Zeichenfolgen in Python 3.6
+9 Bytes zu handhaben
y<0
quelle
y
es negativ ist: tio.run/##K6gsycjPM/…Bash,
27, 25 Bytes-2 Bytes dank Bruce Forte
versuche es online
quelle
printf %\ 0$[1+$1]d $2|xargs
.printf %\ 0$[1+$2]d $1|xargs
, ich nicht dieses Format für Zahlen mit Vorzeichen erinnere mich auch xargs Trick führenden Raum zu entfernenSchale , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
R,
5648 BytesProbieren Sie es online!
-8 Bytes dank Djhurio
Erläuterung
sprintf("%0zd",x)
Gibtx
als Zeichenfolge zurück, die mit Nullen aufgefüllt ist, um eine Länge zu habenz
paste0("%0",y+(x<0),"d")
Konstruiert die Zeichenfolge"%0zd"
, wobeiz
isty
, plus 1, wennx
kleiner als Null istz
kleiner als die Anzahl der Ziffern in istx
,x
wird der Ausdruck unverändert als Zeichenfolge ausgegebenquelle
function(x,y)sprintf(paste0("%0",y+(x<0),"d"),x)
Alice , 23 Bytes
Probieren Sie es online!
Die Eingabe sollte mit der Nummer in der ersten Zeile und der Breite in der zweiten Zeile durch einen Zeilenvorschub getrennt sein.
Erläuterung
Dies ist der übliche Rahmen für lineare Programme im Ordinalmodus. Der einzige Haken in diesem Fall ist dieses Bit:
Dies bewirkt, dass die IP vertikal in den Kardinalmodus wechselt und nur den Befehl ausführt
&
Kardinalmodus bevor sie wieder in den Ordinalmodus wechselt.Das Entfalten des Zickzack-Kontrollflusses ergibt dann:
Hier sind zwei Alternativen, ebenfalls bei 23 Bytes, die Cardinal
H
( abs ) verwenden, um das loszuwerden-
:Im Prinzip sind diese Befehle kürzer, aber
&
sie passen nicht in eine Position, in der sich eine 1-Zeichen-Zeichenfolge auf dem Stapel befindet. Wir müssen sie daher mit einem überspringen#
.quelle
C 33 Bytes
Probieren Sie es online!
quelle
Kohle ,
1613 BytesProbieren Sie es online!
Dies ist der kürzeste Zeitraum, in dem ich Charcoal verwenden kann, ohne führende oder nachfolgende Leerzeichen zu drucken. Zumindest fange ich jetzt an zu verstehen, wie man die
Modulo
Funktion zum Formatieren von Strings verwendet.Der deverbosed Code lautet wie folgt:
quelle
-
Charcoal ist es wirklich einfach zu drucken oder nichts zu drucken : Beim Drucken von 1 wird gedruckt,-
während beim Drucken von 0 nichts gedruckt wird. Der Ternär ist also überflüssig und spart 3 Bytes.InputNumber()
mit tauschenCast(q)
, können Sie meines Erachtens dann zu einem Zeichenfolgenvergleich wechseln, um ein weiteres Byte zu speichern.Ternary
!Retina , 39 Bytes
Probieren Sie es online!
Die Eingabe sollte durch Kommas getrennt sein, wobei die Nummer an erster Stelle und die Breite an zweiter Stelle stehen.
quelle
PHP, 45 Bytes
oder
Laufen Sie mit
-nr
oder probieren Sie sie online aus .quelle
Mathematica, 118 Bytes
Probieren Sie es online!
quelle
Mathematica,
6362 BytesProbieren Sie es online!
quelle
IntegerLength
stattIntegerDigits
. Sie können ein Byte speichern, indem SieIntegerLength@#
stattdessen verwendenIntegerLength[#]
.Excel, 29 Bytes
Verwenden von Excel
TEXT
Funktionalität ("Konvertiert einen Wert in Text in einem bestimmten Zahlenformat").x
in A1,y
in B1quelle
)))
für -3 Bytes löschen, indem Sie in Google SheetsOktave , 44 Bytes
Probieren Sie es online!
quelle
Haskell , 54 Bytes
Probieren Sie es online!
quelle
Ruby ,
3128 BytesVielen Dank an Carl, dass er 3 Bytes durch Interpolation eingespart hat.
Probieren Sie es online!
quelle
Japt ,
1412 Bytes2 Bytes gespart dank @ETHproductions
Probieren Sie es online aus
quelle
x
als String für 10 Bytes .U
es uns ermöglicht, die ersten beiden Zeichen abzuspielen .PowerShell ,
25 bis40 ByteProbieren Sie es online!
Erläuterung
Dies ruft
.ToString()
die Zahl mit einer generierten Formatzeichenfolge auf, multipliziert sie jedoch mit -1, 0 oder 1, je nachdem, ob$b
(y
) negativ, 0 oder positiv ist. Dies dient dazu, negativey
Werte zu verarbeiten , die Formatstrings nicht von sich aus haben.Dies scheint zu erfordern, dass negative Zahlen in eine Unteranweisung eingeschlossen werden,
()
damit dies funktioniert. Dies ist nur eine Eigenheit des Aufrufs, wenn Literale verwendet werden. Wenn Variablen vom Typ Integer übergeben werden, wird dies nicht benötigt.quelle
y
negativ sind.C # 6.0, 35 Bytes
Alternative Lösung (51 Bytes)
quelle
Sauber ,
908683 BytesProbieren Sie es online!
quelle
C (gcc) , 45 Bytes
Probieren Sie es online!
Erläuterung
printf
formatiert drei Argumente:%s
formatiert die Zeichenfolge"-"+(x>=0)
."-"
ist eigentlich nur eine adresse, sowas41961441
. Im Gedächtnis sieht das ungefähr so aus:Bei der Formatierung in eine Zeichenfolge nimmt C die Adresse (z. B. 41961441) und erfasst so lange Zeichen, bis ein Nullbyte (0x00) erreicht wird. Wenn x kleiner als Null ist, hat der Wert
"-"+(x>=0)
den der ursprünglichen Adresse (41961441). Andernfallsx>=0
ist 1, so dass der Ausdruck wird"-"+1
, der auf das nachfolgende Null-Byte verweist"-"
, das nichts ausgibt.%0*i
Gibt eine Ganzzahl aus, die mit einer angegebenen Anzahl von0
s aufgefüllt ist .y
bezeichnet diese Nummer. Wir füllenabs(x)
auf, um das Negative in einigen Argumenten zu vermeiden.quelle
Perl, 25 +
-n
Flag = 26 BytesProbieren Sie es online!
quelle
Perl 5, 22 + 1 (-
n
) = 23 BytesProbieren Sie es online aus
quelle
10,-1
+5 bytes
-5 bytes