Rotar un número

Aug 15 2020

Dado un número positivo n, gire sus mposiciones de dígitos de base 10 hacia la derecha. Es decir, genere el resultado de los mpasos de mover el último dígito al inicio. El recuento de rotaciones mserá 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 001y 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

13 Shaggy Aug 15 2020 at 15:16

Japonés -N , 2 bytes

Toma mcomo una cadena y V=ncomo un número entero o una cadena, genera un número entero. Anteponer so ìde 1 byte si tiene que tomar tanto como enteros.

éV

Intentalo

9 DominicvanEssen Aug 15 2020 at 19:10

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=> 123123123123para m = 4) y luego calcula DIV 10 ^ m (entonces: 12312312para 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.

5 ManishKundu Aug 15 2020 at 13:47

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

5 Mukundan314 Aug 15 2020 at 17:40

05AB1E , 4 bytes

(._ï

¡Pruébelo en línea!

Explicación

(._ï
(     : get negative of m
 ._   : rotate n left negative m times
   ï  : remove leading zeros
4 Mukundan314 Aug 15 2020 at 17:18

MATL , 3 bytes

YSU

¡Pruébelo en línea!

Toma ncomo una cadena y mcomo 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.

4 Neil Aug 15 2020 at 17:55

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.

4 DomHastings Aug 15 2020 at 16:44

Perl 5 + -pl, 26 bytes

eval'$_=chop.$_;'x<>;$_|=0

¡Pruébelo en línea!

4 Graham Aug 15 2020 at 14:35

APL + WIN, 8 7 bytes

Solicita n como entero y m como cadena:

⍎(-⎕)⌽⎕

¡Pruébelo en línea! Cortesía de Dyalog Classic

4 Arnauld Aug 15 2020 at 14:48

JavaScript (ES6), 36 bytes

Espera (m)(n), donde nes una cadena y mes una cadena o un entero.

m=>g=n=>m--?g(n%10+n.slice(0,-1)):+n

¡Pruébelo en línea!

4 Noodle9 Aug 15 2020 at 18:31

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.

4 Mukundan314 Aug 15 2020 at 17:01

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
4 JonathanAllan Aug 16 2020 at 03:19

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 nderecha mes lo mismo que girar a la nderecha en mmó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 ny 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 mdígitos de m ns concatenados entre sí, (n*m)[-m:]que nos da la solución de 39 bytes.

3 Lyxal Aug 15 2020 at 11:22

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
3 Noodle9 Aug 15 2020 at 21:25

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.

3 OlivierGrégoire Aug 15 2020 at 22:21

Java (JDK) , 66 bytes

(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))

¡Pruébelo en línea!

2 xash Aug 15 2020 at 14:12

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
2 Noname Aug 15 2020 at 14:26

Io , 89 bytes

Utiliza un reducetruco 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!

2 Dingus Aug 16 2020 at 07:44

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 \ $ :

  1. Concatenar \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ veces:123123123123123123
  2. Cuenta atrás desde el final \ $ m (d + 1) = 8 \ $ caracteres:123123123123123123
  3. Tome la subcadena de longitud \ $ d = 3 \ $ :123123123123123123
2 DanielH. Aug 16 2020 at 07:42

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!

2 JonathanAllan Aug 16 2020 at 04:49

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
2 EthanChapman Aug 16 2020 at 10:53

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
2 EngineerToast Aug 17 2020 at 22:45

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!

2 Adám Aug 18 2020 at 01:34

APL (Dyalog Extended) , 4 bytes ( SBCS )

Función infijo tácito anónimo. Toma una cadena ncomo argumento derecho y un número mcomo 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

1 J42161217 Aug 15 2020 at 14:42

Wolfram Language (Mathematica) , 43 bytes

FromDigits@RotateRight[IntegerDigits@#,#2]&

¡Pruébelo en línea!

1 Razetime Aug 15 2020 at 15:46

Rubí , 44 40 bytes

->a,b{a.to_s.chars.rotate(-b).join.to_i}

-4 de Dingus.

¡Pruébelo en línea!

1 Neil Aug 15 2020 at 17:33

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 ma unario.

+`(.*)(\d)_
$2$1

Rotar n mtiempos. 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,nque reduciría la complejidad del tiempo (a costa de un byte, por supuesto).

^0+

Delete leading zeros.

1 user Aug 15 2020 at 22:07

Scala, 61 bytes

(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}

Try it in Scastie

1 Hackinet Aug 16 2020 at 15:37

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.    
  
1 YaroslavGaponov Aug 17 2020 at 20:00

JavaScript (V8), 47 bytes

(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)

Try it online!

1 nmjcman101 Aug 17 2020 at 23:22

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