El reto
Dados dos enteros como entrada ( x
y y
), salida x
como una cadena con tantos ceros iniciales necesarios para que sean y
caracteres largos sin el signo.
Reglas
Si
x
tiene más dey
dígitos, salidax
como cadena sin modificación.No se acepta la salida como entero, incluso si no hay ceros a la izquierda.
Cuando
x
es negativo, mantenga el estado-
actual y opere con el valor absoluto.Negativo
y
debe tratarse como 0, lo que significa que la salidax
es como es (pero como cadena)
Ejemplos:
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"
El código más corto en bytes gana, se aplican las lagunas estándar.
(-1,1)
da+
aceptable un signo inicial para números positivos?Respuestas:
Japt ,
138 bytesToma la primera entrada (
x
) como una cadena.Intentalo
Ahorró 5 bytes masivos gracias a ETHproductions.
Explicación
Entrada implícita de cadena
U=x
y enteroV=y
.® }'-
se divideU
en una matriz en el símbolo menos, se asigna sobre él y se une a una cadena con un símbolo menos.©
es AND lógico (&&
), por lo que si el elemento actual es verdadero (una cadena no vacía), rellene left (ù
) con 0 (T
) a la longitudV
.fuente
-
: ethproductions.github.io/japt/…q
, que seríaq-_©ùTV
guardar 1 byte :-)S.q()
(darnosS.q(s,f)
), entoncesS
se dividirías
, ejecutaríaf
y se uniría a ellas
? ¡Me gusta! :)N.s
,S/A.y
,N.ì
hacer esto ya) con un montón de métodos? Tuve una conversación con alguien, pero no recuerdo quién ahora: sPyth , 12 bytes
Pruébalo aquí!
fuente
Python 2 , 29 bytes
Pruébalo en línea!
Solo
str.zfill
se acerca mucho.fuente
05AB1E ,
1110 bytesEntrada dada como
amount_of_digits, number
Pruébalo en línea!
Explicación
fuente
Python, 29 bytes
Tomar entrada como
f(x,y)
. Usando el%
operador de Python .Pruébalo en línea!
fuente
C #, 56 bytes
Pruébalo en línea!
fuente
Java (OpenJDK 8) , 47 bytes
Pruébalo en línea!
Al principio pensé, fácil, 30 caracteres máximo (que es bastante corto al manipular cadenas en Java). Entonces ocurrieron las excepciones.
fuente
JavaScript (ES6), 42
Parámetros recursivos en orden inverso, primero y luego x. Y curry
Prueba
fuente
f(y)(x)
lugar def(x,y)
.y=>r=x=>x<0?'-'+r(-x):(x+='')[y-1]?x:r(0+x)
acerca tanto ...Python 3.6 ,
2837 bytesPruébalo en línea!(Caso de prueba de la respuesta de Colera Su)
Aprovechando la nueva forma de formatear cadenas en Python 3.6
+9 bytes para manejar
y<0
fuente
y
es negativo: tio.run/##K6gsycjPM/…bash,
27, 25 bytes-2 bytes gracias a Bruce Forte
pruébalo en línea
fuente
printf %\ 0$[1+$1]d $2|xargs
.printf %\ 0$[1+$2]d $1|xargs
, no recordaba este formato para los números con signo y también el truco de xargs para eliminar el espacioCasco , 12 bytes
Pruébalo en línea!
Explicación
fuente
R,
5648 bytesPruébalo en línea!
-8 bytes gracias a djhurio
Explicación
sprintf("%0zd",x)
regresax
como una cadena rellenada con ceros para ser de longitudz
paste0("%0",y+(x<0),"d")
construye la cadena"%0zd"
, dondez
estáy
, más 1 six
es menor que ceroz
es menor que el número de dígitosx
,x
se imprime como una cadena como esfuente
function(x,y)sprintf(paste0("%0",y+(x<0),"d"),x)
Alice , 23 bytes
Pruébalo en línea!
La entrada debe estar separada por salto de línea con el número en la primera línea y el ancho en la segunda.
Explicación
Este es el marco habitual para programas lineales en modo ordinal. El único inconveniente en este caso es este bit:
Esto hace que la IP entre en modo Cardinal verticalmente y se ejecute solo
&
en modo Cardinal antes de reanudarse en modo Ordinal.Al desplegar el flujo de control en zigzag, se obtiene:
Aquí hay dos alternativas, también en 23 bytes, que usan Cardinal
H
( abs ) para deshacerse de-
:En principio, este es un comando más corto, pero
&
no cabe en una posición donde hay una cadena de 1 carácter en la pila, por lo que debemos omitirla con a#
.fuente
C, 33 bytes
Pruébalo en línea!
fuente
Carbón ,
1613 bytesPruébalo en línea!
Esto es lo más corto que podría obtener usando carbón sin imprimir espacios en blanco iniciales o finales. Al menos ahora estoy empezando a entender cómo usar el
Modulo
función para formatear cadenas.El código deverbosed es el siguiente:
fuente
-
o nada es realmente fácil en Carbón: imprimir 1 imprime-
mientras imprimir 0 imprime nada. Entonces, el ternario es superfluo, ahorrando 3 bytes.InputNumber()
con elCast(q)
, creo que puedes cambiar a una comparación de cadena para guardar otro byte.Ternary
!Retina , 39 bytes
Pruébalo en línea!
La entrada debe estar separada por comas con el número primero y el ancho segundo.
fuente
PHP, 45 bytes
o
Ejecutar
-nr
o probarlos en línea .fuente
Mathematica, 118 bytes
Pruébalo en línea!
fuente
Mathematica,
6362 bytesPruébalo en línea!
fuente
IntegerLength
lugar deIntegerDigits
. Puede guardar un byte utilizando enIntegerLength@#
lugar deIntegerLength[#]
sin embargo.Excel, 29 bytes
Uso de la
TEXT
funcionalidad de Excel ("Convierte un valor en texto en un formato de número específico").x
en A1,y
en B1fuente
)))
bytes -3 convirtiéndolos en Hojas de cálculo de GoogleOctava , 44 bytes
Pruébalo en línea!
fuente
Haskell , 54 bytes
Pruébalo en línea!
fuente
Ruby ,
3128 bytesGracias Carl por guardar 3 bytes usando interpolación.
Pruébalo en línea!
fuente
Japt ,
1412 bytesGuardado 2 bytes gracias a @ETHproductions
Pruébalo en línea
fuente
x
como una cadena de 10 bytes .U
una cadena que nos permite jugar golf con los primeros 2 caracteres.PowerShell ,
2540 bytesPruébalo en línea!
Explicación
Esto llama
.ToString()
al número con una cadena de formato generada, pero la multiplica por -1, 0 o 1 en función de si$b
(y
) es negativo, 0 o positivo respectivamente; esto es para manejar negativoy
valores que las cadenas de formato no tienen por sí mismas.Esto parece requerir envolver números negativos en una subestación
()
para que funcione, lo cual es solo una peculiaridad de la invocación cuando se usan literales; si se pasan variables de tipo entero, no necesitaría eso.fuente
y
es negativo.C # 6.0, 35 bytes
Solución alternativa (51 bytes)
fuente
Limpio ,
908683 bytesPruébalo en línea!
fuente
C (gcc) , 45 bytes
Pruébalo en línea!
Explicación
printf
Formatea tres argumentos:%s
formatea la cadena"-"+(x>=0)
."-"
es en realidad sólo una dirección, algo así41961441
. En la memoria, esto se parece a esto:Cuando se formatea en una cadena, C toma la dirección (por ejemplo, 41961441) y continúa adquiriendo caracteres hasta que se cumple un byte nulo (0x00). Cuando x es menor que cero, el valor
"-"+(x>=0)
tiene el de la dirección original (41961441). De lo contrario,x>=0
es 1, por lo que la expresión se convierte"-"+1
, lo que señala el byte nulo después"-"
, que no imprime nada.%0*i
imprime un número entero rellenado con un número especificado de0
s.y
denota este número. Acolchamosabs(x)
para evitar lo negativo en algunos argumentos.fuente
Perl, 25 +
-n
bandera = 26 bytesPruébalo en línea!
fuente
Perl 5, 22 + 1 (-
n
) = 23 bytesPruébalo en línea
fuente
10,-1
+5 bytes
-5 bytes