Gire um número

Aug 15 2020

Dado um número positivo n, gire suas mposições de base de 10 dígitos para a direita. Ou seja, produza o resultado das metapas de movimentação do último dígito para o início. A contagem de rotação mserá um número inteiro não negativo.

Você deve remover os zeros à esquerda no resultado final, mas não em nenhuma das etapas intermediárias. Por exemplo, para o caso de teste 100,2 => 1, primeiro giramos para 010, depois para e 001, finalmente, eliminamos os zeros à esquerda para obter 1.

Testes

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

Respostas

13 Shaggy Aug 15 2020 at 15:16

Japt -N , 2 bytes

Toma mcomo uma string e V=ncomo um inteiro ou string, produz um inteiro. Prepend sou ìpara +1 byte se tivermos que tomar ambos como inteiros.

éV

Tente

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

Experimente online!

Solução numérica (que falha para combinações de n & m que fazem com que exceda a faixa numérica de R): encadeia os dígitos de n, m vezes (então: 123=> 123123123123para m = 4) e, em seguida, calcula DIV 10 ^ m (então: 12312312para m = 4) MOD 10 ^ dígitos (n) (então 312:).


R , 61 53 bytes

Editar: -8 bytes graças a Giuseppe

function(n,m,N=nchar(n),M=10^(m%%N))n%%M*10^N/M+n%/%M

Experimente online!

Função baseada em texto que gira combinando as duas partes do número, de modo que não sai do intervalo numérico: coloca os últimos (m dígitos MOD (n)) dígitos de n primeiro, seguidos pelos outros 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]))

Experimente online!

Usa o corte de strings para mover os últimos k dígitos no início e os converte em um inteiro para remover os zeros à esquerda.

-4 bytes graças a Lyxal

5 Mukundan314 Aug 15 2020 at 17:40

05AB1E , 4 bytes

(._ï

Experimente online!

Explicação

(._ï
(     : 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

Experimente online!

Toma ncomo string e mcomo um inteiro.

Explicação

YS   % Shift first input second input number of times
  U  % Convert to integer to remove leading 0s

MATL , 5 bytes

ViYSU

Experimente online!

Essa resposta considera ambas as entradas como inteiros.

4 Neil Aug 15 2020 at 17:55

Carvão , 9 bytes

II⭆θ§θ⁻κη

Experimente online! O link é para a versão detalhada do código. Explicação:

   θ        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, se você tentar subtrair um inteiro e uma string, a string será convertida em um inteiro.

4 DomHastings Aug 15 2020 at 16:44

Perl 5 + -pl, 26 bytes

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

Experimente online!

4 Graham Aug 15 2020 at 14:35

APL + WIN, 8 7 bytes

Solicita n como número inteiro e m como string:

⍎(-⎕)⌽⎕

Experimente online! Cortesia de Dyalog Classic

4 Arnauld Aug 15 2020 at 14:48

JavaScript (ES6), 36 bytes

Espera (m)(n), onde né uma string e mé uma string ou um inteiro.

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

Experimente online!

4 Noodle9 Aug 15 2020 at 18:31

C (gcc)-lm , 65 \$\cdots\$ 56 55 bytes

Salvo um byte graças ao tetocat !!!

e;f(n,m){for(e=log10(n);m--;)n=n%10*exp10(e)+n/10;m=n;}

Experimente online!

Inteiros de entradas \$n\$e \$m\$.
Base-10 gira digitalmente \$n\$certo \$m\$-vezes e retorna.

4 Mukundan314 Aug 15 2020 at 17:01

Pyth , 4 bytes

v.>z

Experimente online!

Explicação

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)])

Experimente online! Ou veja o conjunto de testes .

Quão?

Girar para a ndireita mé o mesmo que girar para a ndireita pelo mcomprimento do módulo n( m%len(n)), que é a concatenação dos últimos m%len(n)dígitos com os primeiros len(n)-m%len(n)dígitos.

Uma simples fatia nos daria

lambda n,m:int(n[-m%len(n):]+n[:-m%len(n)])

para 43 bytes. Para eliminar a necessidade do repetido -m%, podemos concatenar os últimos m%len(n)dígitos com todos os dígitos de ne, em seguida, pegar os primeiros len(n)dígitos. Isto é

lambda n,m:int((n[-m%len(n):]+n)[:len(n)])

para 42 bytes. O n[-m%len(n):]pode então ser substituído com a obtenção dos mdígitos mais à direita de m ns concatenados, (n*m)[-m:]fornecendo-nos a solução de 39 bytes.

3 Lyxal Aug 15 2020 at 11:22

Barril , -hr, 11 bytes

÷(¿|")⑷⅍⑸⅀ℤ

Experimente online!

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)

Experimente online!

Entradas \$n\$como uma string e \$m\$como um número inteiro.
Devoluções rodadas \$n\$ como um número inteiro.

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))

Experimente online!

2 xash Aug 15 2020 at 14:12

J , 11 bytes

(".@|.":)~-

Experimente online!

Como funciona

Usa o truque 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

Usa um reducetruque para atribuir diferentes linhas de STDIN a variáveis.

File standardInput readLines reduce(a,b,a splitAt(-b asNumber)reverse join)asNumber print

Experimente online!

Io , 56 bytes

method(a,b,doString(a splitAt(-b asNumber)reverse join))

Experimente online!

2 Dingus Aug 16 2020 at 07:44

Ruby -nl , 34 bytes

->m{($_*-~m*2)[~~/$/*m,~/$/].to_i}

Experimente online!

Pega \ $ n \ $ de STDIN e \ $ m \ $ como argumento. Concatena \ $ n \ $ \ $ 2 (m + 1) \ $ vezes, a partir dessa string tira a substring de comprimento \ $ d \ $ (onde \ $ d \ $ é o número de dígitos em \ $ n \ $ ) que começa com \ $ m (d + 1) \ $ caracteres a partir do final. No código, $_é \$n\$e ~/$/\ $ d \ $ .

Exemplo

Para \ $ n = 123 \ $ , \ $ m = 2 \ $ :

  1. Concatenar \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ vezes:123123123123123123
  2. Contagem regressiva desde o final \ $ m (d + 1) = 8 \ $ caracteres:123123123123123123
  3. Pegue a substring de comprimento \ $ d = 3 \ $ :123123123123123123
2 DanielH. Aug 16 2020 at 07:42

Python 3.8 (pré-lançamento) , 42 40 bytes

lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])

Experimente online!

2 JonathanAllan Aug 16 2020 at 04:49

Jelly , (4?) 5 bytes

4 se podemos aceitar uma lista de dígitos (remova o inicial D).

DṙN}Ḍ

Experimente online!

Quão?

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

Economizei 3 bytes, lembrando que você pode executar a maioria das operações de array em strings.

-1 byte de @ meu pronome é monicareinstate, observando que m>aceita argumentos em qualquer ordem.

rr~m>~

Experimente online

Explicação:

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

Versão antiga, 7 bytes:

q~\sm>~

Experimente online

Explicação:

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

Táxi , 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.

Experimente online!

Decidi ser despedido em vez de sacrificar os bytes necessários para voltar à garagem no final. Eu verifiquei entradas muito longas e rotações muito longas e o ganho líquido é positivo para que você nunca fique sem gás.


Formatado para legibilidade e com comentários:

[ 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.

Experimente online!

2 Adám Aug 18 2020 at 01:34

APL (Dyalog Extended) , 4 bytes ( SBCS )

Função infixo tácita anônima. Aceita string ncomo argumento direito e número mcomo argumento esquerdo.

⍎-⍛⌽

Experimente online!

 execute o resultado de

-⍛ negar o argumento da esquerda e usá-lo para

 girar ciclicamente o argumento certo

1 J42161217 Aug 15 2020 at 14:42

Wolfram Language (Mathematica) , 43 bytes

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

Experimente online!

1 Razetime Aug 15 2020 at 15:46

Ruby , 44 40 bytes

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

-4 de Dingus.

Experimente online!

1 Neil Aug 15 2020 at 17:33

Retina 0.8.2 , 29 bytes

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

Experimente online! O link inclui casos de teste. Aceita entrada como n,m. Explicação:

,.+
$*_

Converta mpara unário.

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

Gire n mvezes. Este é O (m³) devido à maneira como o regex retrocede ao tentar encontrar uma segunda correspondência. Correspondência da direita para a esquerda, ancorando a correspondência no início ou reescrevendo o código para receber entrada, pois m,nreduziria a complexidade do tempo (ao custo de um byte, é claro).

^0+

Exclua os zeros à esquerda.

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}

Experimente no Scastie

1 Hackinet Aug 16 2020 at 15:37

PHP , 45 43 bytes

Salvo 2 bytes, percebemos que podemos encurtar os nomes das variáveis.

<?=(int)(substr($s,-$n).substr($s,0,-$n))?>

Experimente online

Explicação:

<?= ?>       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)

Experimente online!

1 nmjcman101 Aug 17 2020 at 23:22

V (vim) , 11 bytes

Àñ$x0Pñó^0«

Experimente 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