Rotar un número
Dado un número positivo n
, gire sus m
posiciones de dígitos de base 10 hacia la derecha. Es decir, genere el resultado de los m
pasos de mover el último dígito al inicio. El recuento de rotaciones m
será un número entero no negativo.
Debe eliminar los ceros iniciales en el resultado final, pero no en ninguno de los pasos intermedios. Por ejemplo, para el caso de prueba 100,2 => 1
, primero rotamos a 010
, luego a 001
y finalmente soltamos los ceros iniciales para obtener 1
.
Pruebas
n,m => Output
123,1 => 312
123,2 => 231
123,3 => 123
123,4 => 312
1,637 => 1
10,1 => 1
100,2 => 1
10,2 => 10
110,2 => 101
123,0 => 123
9998,2 => 9899
Respuestas
Japonés -N , 2 bytes
Toma m
como una cadena y V=n
como un número entero o una cadena, genera un número entero. Anteponer s
o ì
de 1 byte si tiene que tomar tanto como enteros.
éV
Intentalo
R , 51 bytes
function(n,m,p=10^nchar(n))sum(n*p^(0:m))%/%10^m%%p
¡Pruébelo en línea!
Solución numérica (que falla para combinaciones de n & m que hacen que exceda el rango numérico de R): encadena los dígitos de n, m veces (entonces: 123
=> 123123123123
para m = 4) y luego calcula DIV 10 ^ m (entonces: 12312312
para m = 4) MOD 10 ^ dígitos (n) (entonces:) 312
.
R , 61 53 bytes
Editar: -8 bytes gracias a Giuseppe
function(n,m,N=nchar(n),M=10^(m%%N))n%%M*10^N/M+n%/%M
¡Pruébelo en línea!
Función basada en texto que gira combinando las dos partes del número juntas, por lo que no se sale del rango numérico: coloca los últimos (m MOD dígitos (n)) dígitos de n primero, seguidos de los otros dígitos de n.
Python 3 , 61 57 bytes
i=input
n=i()
k=int(i())%len(n)
print(int(n[-k:]+n[:-k]))
¡Pruébelo en línea!
Utiliza la división de cadenas para mover los últimos k dígitos al principio y lo convierte en un número entero para eliminar los ceros iniciales.
-4 bytes gracias a Lyxal
05AB1E , 4 bytes
(._ï
¡Pruébelo en línea!
Explicación
(._ï
( : get negative of m
._ : rotate n left negative m times
ï : remove leading zeros
MATL , 3 bytes
YSU
¡Pruébelo en línea!
Toma n
como una cadena y m
como un entero.
Explicación
YS % Shift first input second input number of times
U % Convert to integer to remove leading 0s
MATL , 5 bytes
ViYSU
¡Pruébelo en línea!
Esta respuesta toma ambas entradas como números enteros.
Carbón , 9 bytes
II⭆θ§θ⁻κη
¡Pruébelo en línea! El enlace corresponde a la versión detallada del código. Explicación:
θ Input `n` as a string
⭆ Map over characters and join
κ Current index
⁻ Subtract
η Input `m`
§ Cyclically indexed into
θ Input `n` as a string
I Cast to integer
I Cast to string
Implicitly print
Convenientemente, si intenta restar un número entero y una cadena, la cadena se convierte en un número entero.
Perl 5 + -pl
, 26 bytes
eval'$_=chop.$_;'x<>;$_|=0
¡Pruébelo en línea!
APL + WIN, 8 7 bytes
Solicita n como entero y m como cadena:
⍎(-⎕)⌽⎕
¡Pruébelo en línea! Cortesía de Dyalog Classic
JavaScript (ES6), 36 bytes
Espera (m)(n)
, donde n
es una cadena y m
es una cadena o un entero.
m=>g=n=>m--?g(n%10+n.slice(0,-1)):+n
¡Pruébelo en línea!
C (gcc)-lm
, 65 \$\cdots\$ 56 55 bytes
Guardado un byte gracias a roofcat !!!
e;f(n,m){for(e=log10(n);m--;)n=n%10*exp10(e)+n/10;m=n;}
¡Pruébelo en línea!
Ingresa enteros \$n\$y \$m\$.
Base-10 gira digitalmente \$n\$correcto \$m\$-veces y lo devuelve.
Pyth , 4 bytes
v.>z
¡Pruébelo en línea!
Explicación
v.>zQ
Q : first line of input evaluated
z : second line of input as string
.> : cyclically rotate second line right by number in first line
v : evaluate to remove leading 0s
Python 3 , 39 bytes
lambda n,m:int(((n*m)[-m:]+n)[:len(n)])
¡Pruébelo en línea! O vea la suite de pruebas .
¿Cómo?
Girar a la n
derecha m
es lo mismo que girar a la n
derecha en m
módulo de longitud n
( m%len(n)
), que es la concatenación de los últimos m%len(n)
dígitos con los primeros len(n)-m%len(n)
dígitos.
Un simple trozo nos daría
lambda n,m:int(n[-m%len(n):]+n[:-m%len(n)])
por 43 bytes. Para eliminar la necesidad de repetir -m%
, podemos concatenar los últimos m%len(n)
dígitos con todos los dígitos de n
y luego tomar los primeros len(n)
dígitos. Esto es
lambda n,m:int((n[-m%len(n):]+n)[:len(n)])
por 42 bytes. El n[-m%len(n):]
entonces se puede sustituir con la toma de las más a la derecha m
dígitos de m
n
s concatenados entre sí, (n*m)[-m:]
que nos da la solución de 39 bytes.
Barrilete , -hr
, 11 bytes
÷(¿|")⑷⅍⑸⅀ℤ
¡Pruébelo en línea!
Explicado
÷(¿|")⑷⅍⑸⅀ℤ
÷ # Split m into individual numbers
(¿|") # n times, shift the stack right
⑷⅍⑸ # turn each character into a string
⅀ℤ # sum stack and convert to integer. `-hr` prints it as integer
Python 3 , 47 bytes
f=lambda n,m:m and f(n[-1]+n[:-1],m-1)or int(n)
¡Pruébelo en línea!
Entradas \$n\$como una cadena y \$m\$como un número entero.
Devoluciones rotadas \$n\$ como un número entero.
Java (JDK) , 66 bytes
(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))
¡Pruébelo en línea!
J , 11 bytes
(".@|.":)~-
¡Pruébelo en línea!
Cómo funciona
Utiliza el truco tácito de @ Bubbler para (F x) G (H y) = (G~F)~H
.
(".@|.":)~-
- negate y to shift right
( )~ flip arguments, so ((-y) ".@|. (":x))
": convert x to string
|. shift that by negated y
".@ and convert back to number
Io , 89 bytes
Utiliza un reduce
truco para asignar diferentes líneas de STDIN a variables.
File standardInput readLines reduce(a,b,a splitAt(-b asNumber)reverse join)asNumber print
¡Pruébelo en línea!
Io , 56 bytes
method(a,b,doString(a splitAt(-b asNumber)reverse join))
¡Pruébelo en línea!
Rubí -nl
, 34 bytes
->m{($_*-~m*2)[~~/$/*m,~/$/].to_i}
¡Pruébelo en línea!
Toma \ $ n \ $ de STDIN y \ $ m \ $ como argumento. Concatena \ $ n \ $ \ $ 2 (m + 1) \ $ veces, luego de esta cadena toma la subcadena de longitud \ $ d \ $ (donde \ $ d \ $ es el número de dígitos en \ $ n \ $ ) que comienza \ $ m (d + 1) \ $ caracteres desde el final. En el código, $_
es \$n\$y ~/$/
da \ $ d \ $ .
Ejemplo
Para \ $ n = 123 \ $ , \ $ m = 2 \ $ :
- Concatenar \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ veces:
123123123123123123
- Cuenta atrás desde el final \ $ m (d + 1) = 8 \ $ caracteres:
123123123123123123
- Tome la subcadena de longitud \ $ d = 3 \ $ :
123123123123123123
Python 3.8 (versión preliminar) , 42 40 bytes
lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])
¡Pruébelo en línea!
Gelatina , (4?) 5 bytes
4 si aceptamos una lista de dígitos (elimine los primeros D
).
DṙN}Ḍ
¡Pruébelo en línea!
¿Cómo?
DṙN}Ḍ - Link: integer, n; integer, m
D - convert to base ten
} - use m as the input of:
N - negate
ṙ - rotate (n) left by (-m)
Ḍ - convert from base ten
CJam ,
10
7
6 bytes
Ahorró 3 bytes recordando que puede realizar la mayoría de las operaciones de matriz en cadenas.
-1 byte de @mi pronombre es monicareinstate y observa que m>
toma argumentos en cualquier orden.
rr~m>~
Pruébelo en línea
Explicación:
rr Read two string inputs
~ Parse m to number
m> Rotate n string right m times
~ Parse n to number to remove leading zeros
(implicit) output
Versión antigua, 7 bytes:
q~\sm>~
Pruébelo en línea
Explicación:
q~ Take input as a string, evaluate to two numbers
\ Swap order
s Convert n to string
m> Rotate n string right m times
~ Parse n to number to remove leading zeros
(implicit) output
Taxi , 1698 bytes
Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s 1 l 1 r.Pickup a passenger going to Addition Alley.1 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 1 l 2 l. Pickup a passenger going to Addition Alley.Go to Addition Alley:w 1 r 3 r 1 r 1 r.Pickup a passenger going to The Underground.Go to Chop Suey:n 1 r 2 r.[1]Switch to plan "2" if no one is waiting.Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 1 l 1 r 1 l.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan "1".[2]Go to Narrow Path Park:n 1 l 1 r 1 l.Switch to plan "3" if no one is waiting.Pickup a passenger going to Chop Suey.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan "2".[3]Go to Chop Suey:e 1 r 1 l 1 r.[a]Go to The Underground:s 1 r 1 l.Switch to plan "b" if no one is waiting.Pickup a passenger going to The Underground.Go to Fueler Up:s.Go to Chop Suey:n 3 r 1 l.Pickup a passenger going to Chop Suey.Switch to plan "a".[b]Go to Chop Suey:n 2 r 1 l.[4]Switch to plan "5" if no one is waiting.Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 1 l 1 r 1 l.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan "4".[5]Go to Narrow Path Park:n 1 l 1 r 1 l.[c]Switch to plan "d" if no one is waiting.Pickup a passenger going to KonKat's.Go to KonKat's:e 1 r.Pickup a passenger going to KonKat's.Go to Narrow Path Park:n 2 l.Switch to plan "c".[d]Go to KonKat's:e 1 r.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:s.Pickup a passenger going to The Babelfishery.Go to KonKat's:n.Go to The Babelfishery:s.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.
¡Pruébelo en línea!
Elegí ser despedido en lugar de sacrificar los bytes necesarios para regresar al garaje al final. He comprobado tanto las entradas muy largas como las rotaciones muy largas y la ganancia neta es positiva para que nunca te quedes sin gasolina.
Formateado para legibilidad y con comentarios:
[ Pick up the inputs, add 1 to the second, and chop the first into pieces. ]
Go to Post Office:w 1 l 1 r 1 l.
Pickup a passenger going to Chop Suey.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s 1 l 1 r.
Pickup a passenger going to Addition Alley.
1 is waiting at Starchild Numerology.
Go to Starchild Numerology:n 1 l 1 l 1 l 2 l.
Pickup a passenger going to Addition Alley.
Go to Addition Alley:w 1 r 3 r 1 r 1 r.
Pickup a passenger going to The Underground.
Go to Chop Suey:n 1 r 2 r.
[ Reverse the order the charaters are stored in so we can right-shift instead of left-shift. ]
[1]
Switch to plan "2" if no one is waiting.
Pickup a passenger going to Narrow Path Park.
Go to Narrow Path Park:n 1 l 1 r 1 l.
Go to Chop Suey:e 1 r 1 l 1 r.
Switch to plan "1".
[2]
Go to Narrow Path Park:n 1 l 1 r 1 l.
Switch to plan "3" if no one is waiting.
Pickup a passenger going to Chop Suey.
Go to Chop Suey:e 1 r 1 l 1 r.
Switch to plan "2".
[3]
Go to Chop Suey:e 1 r 1 l 1 r.
[ Loop the required times, rotating the passengers at Chop Suey each time. ]
[a]
Go to The Underground:s 1 r 1 l.
Switch to plan "b" if no one is waiting.
Pickup a passenger going to The Underground.
Go to Fueler Up:s.
Go to Chop Suey:n 3 r 1 l.
Pickup a passenger going to Chop Suey.
Switch to plan "a".
[b]
Go to Chop Suey:n 2 r 1 l.
[ Reverse the character order again. ]
[4]
Switch to plan "5" if no one is waiting.
Pickup a passenger going to Narrow Path Park.
Go to Narrow Path Park:n 1 l 1 r 1 l.
Go to Chop Suey:e 1 r 1 l 1 r.
Switch to plan "4".
[5]
Go to Narrow Path Park:n 1 l 1 r 1 l.
[ Concatenate the passengers at Narrow Path Park. ]
[c]
Switch to plan "d" if no one is waiting.
Pickup a passenger going to KonKat's.
Go to KonKat's:e 1 r.
Pickup a passenger going to KonKat's.
Go to Narrow Path Park:n 2 l.
Switch to plan "c".
[ Convert to a number to remove leading zeros and then back to a string so the Post Office can handle it. ]
[d]
Go to KonKat's:e 1 r.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery:s.
Pickup a passenger going to The Babelfishery.
Go to KonKat's:n.
Go to The Babelfishery:s.
Pickup a passenger going to Post Office.
Go to Post Office:n 1 l 1 r.
¡Pruébelo en línea!
APL (Dyalog Extended) , 4 bytes ( SBCS )
Función infijo tácito anónimo. Toma una cadena n
como argumento derecho y un número m
como argumento izquierdo.
⍎-⍛⌽
¡Pruébelo en línea!
⍎
ejecutar el resultado de
-⍛
negando el argumento de la izquierda, luego usándolo para
⌽
rotar cíclicamente el argumento correcto
Wolfram Language (Mathematica) , 43 bytes
FromDigits@RotateRight[IntegerDigits@#,#2]&
¡Pruébelo en línea!
Rubí , 44 40 bytes
->a,b{a.to_s.chars.rotate(-b).join.to_i}
-4 de Dingus.
¡Pruébelo en línea!
Retina 0.8.2 , 29 bytes
,.+
$*_ +`(.*)(\d)_ $2$1
^0+
¡Pruébelo en línea! El enlace incluye casos de prueba. Toma la entrada como n,m
. Explicación:
,.+
$*_
Convierta m
a unario.
+`(.*)(\d)_
$2$1
Rotar n
m
tiempos. Esto es O (m³) debido a la forma en que la expresión regular retrocede tratando de encontrar una segunda coincidencia. Coincidencia de derecha a izquierda, anclar la coincidencia al principio o reescribir el código para tomar la entrada, ya m,n
que reduciría la complejidad del tiempo (a costa de un byte, por supuesto).
^0+
Delete leading zeros.
Scala, 61 bytes
(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}
Try it in Scastie
PHP,
45
43 bytes
Saved 2 bytes, realized we can shorten the variable names.
<?=(int)(substr($s,-$n).substr($s,0,-$n))?>
Try it online
Explanation:
<?= ?> Shorthand for <?php echo ;?>
(int) Typecast string to int, removes 0s from prefix
substr() substr(string,start,[length]), returns part of string,
if range go out of bounds, starts again from the opposite end.
Basically returns part of from a 'circular' string.
JavaScript (V8), 47 bytes
(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)
Try it online!
V (vim), 11 bytes
Àñ$x0Pñó^0«
Try it online!
Àñ ñ # (M-@)rg number of times
$ # end of line
x # delete character (cut)
0 # beginning of line
P # paste character
ó # (M-s)ubsitute
^0« # ^0\+
# (implicitly) with nothing