Le défi
Étant donné deux entiers en entrée ( x
et y
), la sortie x
sous la forme d'une chaîne avec autant de zéros de tête nécessaires pour qu'elle soit y
longue sans le signe.
Règles
Si
x
a plus dey
chiffres, sortezx
sous forme de chaîne sans modification.La sortie sous forme d'entier n'est pas acceptée, même s'il n'y a pas de zéros non significatifs.
Lorsque
x
est négatif, conservez-le-
tel quel et opérez sur la valeur absolue.Négatif
y
doit être traité comme 0, ce qui signifie que vous produisezx
tel quel (mais sous forme de chaîne)
Exemples:
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"
Le code le plus court en octets gagne, les failles standard s'appliquent.
(-1,1)
donne?+
signe de tête est-il acceptable pour les nombres positifs?Réponses:
Japt ,
138 octetsPrend la première entrée (
x
) sous forme de chaîne.L'essayer
Enregistré un énorme 5 octets grâce à ETHproductions.
Explication
Saisie implicite de chaîne
U=x
et d'entierV=y
.® }'-
se diviseU
en un tableau sur le symbole moins, mappe dessus et le rejoint en une chaîne avec un symbole moins.©
est un ET logique (&&
), donc si l'élément actuel est véridique (une chaîne non vide), remplissez left (ù
) avec 0 (T
) à la longueurV
.la source
-
: ethproductions.github.io/japt/…q
, qui serait alorsq-_©ùTV
pour sauver 1 octet :-)S.q()
(nous donnerS.q(s,f)
), elleS
serait alors divisées
, parcouruef
et rejointes
? Je l'aime! :)N.s
,S/A.y
,N.ì
déjà le faire) avec un tas de méthodes? J'ai eu une conversation avec quelqu'un, je ne me souviens plus qui maintenant: sPyth , 12 octets
Essayez-le ici!
la source
Python 2 , 29 octets
Essayez-le en ligne!
Vient juste
str.zfill
si près.la source
05AB1E ,
11 à10 octetsEntrée donnée en tant que
amount_of_digits, number
Essayez-le en ligne!
Explication
la source
Python, 29 octets
Prenez l'entrée comme
f(x,y)
. Utilisation de l'%
opérateur de Python .Essayez-le en ligne!
la source
C #, 56 octets
Essayez-le en ligne!
la source
Java (OpenJDK 8) , 47 octets
Essayez-le en ligne!
Au début, je pensais, facile, 30 caractères max (ce qui est assez court lors de la manipulation de chaînes en Java). Puis les exceptions se sont produites.
la source
JavaScript (ES6), 42
Récursif, paramètres dans l'ordre inverse, d'abord y puis x. Et curry
Tester
la source
f(y)(x)
au lieu def(x,y)
.y=>r=x=>x<0?'-'+r(-x):(x+='')[y-1]?x:r(0+x)
si proche ...Python 3.6 ,
2837 octetsEssayez-le en ligne! (Cas de test de la réponse de Colera Su)
Profiter de la nouvelle façon de formater les chaînes en python 3.6
+9 octets à gérer
y<0
la source
y
est négatif: tio.run/##K6gsycjPM/…bash,
27, 25 octets-2 octets grâce à Bruce Forte
essayez-le en ligne
la source
printf %\ 0$[1+$1]d $2|xargs
.printf %\ 0$[1+$2]d $1|xargs
, je ne me souvenais pas de ce format pour les numéros signés aussi astuce xargs pour supprimer l'espace de têteCoque , 12 octets
Essayez-le en ligne!
Explication
la source
R,
5648 octetsEssayez-le en ligne!
-8 octets grâce à djhurio
Explication
sprintf("%0zd",x)
renvoiex
comme une chaîne remplie de zéros pour être de longueurz
paste0("%0",y+(x<0),"d")
construit la chaîne"%0zd"
, oùz
esty
, plus 1 six
est inférieur à zéroz
est inférieur au nombre de chiffresx
,x
est imprimé sous forme de chaîne tel quella source
function(x,y)sprintf(paste0("%0",y+(x<0),"d"),x)
Alice , 23 octets
Essayez-le en ligne!
L'entrée doit être séparée par des sauts de ligne avec le numéro sur la première ligne et la largeur sur la seconde.
Explication
C'est le cadre habituel pour les programmes linéaires en mode Ordinal. Le seul hic dans ce cas est ce bit:
Cela amène l'IP à entrer verticalement en mode Cardinal et à exécuter uniquement le
&
mode Cardinal avant de reprendre en mode Ordinal.Déplier le flux de contrôle en zigzag donne alors:
Voici deux alternatives, également à 23 octets, qui utilisent Cardinal
H
( abs ) pour se débarrasser de-
:En principe, ce sont des commandes plus courtes, mais le
&
ne rentre pas dans une position où il y a une chaîne de 1 caractère sur la pile, nous devons donc la sauter avec un#
.la source
C, 33 octets
Essayez-le en ligne!
la source
Fusain ,
1613 octetsEssayez-le en ligne!
C'est le plus court que j'ai pu utiliser avec du charbon de bois sans imprimer d'espaces blancs de début ou de fin. Au moins, je commence maintenant à comprendre comment utiliser la
Modulo
fonction pour formater les chaînes.Le code déverbosé est le suivant:
la source
-
ou rien n'est vraiment facile dans Charcoal: Imprimer 1 imprime-
tout en imprimant 0 n'imprime rien. Ainsi, le ternaire est superflu, économisant 3 octets.InputNumber()
avec leCast(q)
, je pense que vous pouvez ensuite passer à une comparaison de chaînes pour enregistrer un autre octet.Ternary
!Rétine , 39 octets
Essayez-le en ligne!
L'entrée doit être séparée par des virgules avec le nombre en premier et la largeur en second.
la source
PHP, 45 octets
ou
Courez avec
-nr
ou essayez-les en ligne .la source
Mathematica, 118 octets
Essayez-le en ligne!
la source
Mathematica,
6362 octetsEssayez-le en ligne!
la source
IntegerLength
au lieu deIntegerDigits
. Vous pouvez enregistrer un octet en utilisantIntegerLength@#
au lieu deIntegerLength[#]
bien.Excel, 29 octets
Utiliser la
TEXT
fonctionnalité d'Excel ("Convertit une valeur en texte dans un format numérique spécifique").x
en A1,y
en B1la source
)))
octets de -3 en les convertissant en feuilles de calculOctave , 44 octets
Essayez-le en ligne!
la source
Haskell , 54 octets
Essayez-le en ligne!
la source
Rubis ,
3128 octetsMerci Carl d' avoir économisé 3 octets en utilisant l'interpolation.
Essayez-le en ligne!
la source
Japt ,
1412 octetsEnregistré 2 octets grâce à @ETHproductions
Essayez-le en ligne
la source
x
une chaîne de 10 octets .U
une chaîne nous permettant de jouer au golf sur les 2 premiers caractères.PowerShell ,
2540 octetsEssayez-le en ligne!
Explication
Cela fait appel
.ToString()
au nombre avec une chaîne de format générée, mais le multiplie par -1, 0 ou 1 selon que$b
(y
) est négatif, 0 ou positif respectivement; il s'agit de gérer desy
valeurs négatives que les chaînes de format ne sont pas seules.Cela semble nécessiter le regroupement de nombres négatifs dans une sous-déclaration
()
pour que cela fonctionne, ce qui n'est qu'une bizarrerie de l'invocation lors de l'utilisation de littéraux; si passé des variables de type entier, il n'en aurait pas besoin.la source
y
est négatif.C # 6.0, 35 octets
Solution alternative (51 octets)
la source
Propre ,
908683 octetsEssayez-le en ligne!
la source
C (gcc) , 45 octets
Essayez-le en ligne!
Explication
printf
formate trois arguments:%s
formate la chaîne"-"+(x>=0)
."-"
est vraiment juste une adresse, quelque chose comme41961441
. En mémoire, cela ressemble à ceci:Lorsqu'il est formaté en chaîne, C prend l'adresse (par exemple 41961441) et continue d'acquérir des caractères jusqu'à ce qu'un octet nul (0x00) soit atteint. Lorsque x est inférieur à zéro, la valeur
"-"+(x>=0)
a celle de l'adresse d'origine (41961441). Sinon,x>=0
est 1, donc l'expression devient"-"+1
, qui pointe l'octet nul après"-"
, qui n'affiche rien.%0*i
imprime un entier rempli avec un nombre spécifié de0
s.y
désigne ce nombre. Nous remplissonsabs(x)
pour éviter le négatif dans certains arguments.la source
Perl, 25 +
-n
drapeau = 26 octetsEssayez-le en ligne!
la source
Perl 5, 22 + 1 (-
n
) = 23 octetsEssayez-le en ligne
la source
10,-1
+5 bytes
-5 bytes