Gire um número
Dado um número positivo n
, gire suas m
posições de base de 10 dígitos para a direita. Ou seja, produza o resultado das m
etapas de movimentação do último dígito para o início. A contagem de rotação m
será 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
Japt -N , 2 bytes
Toma m
como uma string e V=n
como um inteiro ou string, produz um inteiro. Prepend s
ou ì
para +1 byte se tivermos que tomar ambos como inteiros.
éV
Tente
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
=> 123123123123
para m = 4) e, em seguida, calcula DIV 10 ^ m (então: 12312312
para 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.
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
05AB1E , 4 bytes
(._ï
Experimente online!
Explicação
(._ï
( : get negative of m
._ : rotate n left negative m times
ï : remove leading zeros
MATL , 3 bytes
YSU
Experimente online!
Toma n
como string e m
como 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.
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.
Perl 5 + -pl
, 26 bytes
eval'$_=chop.$_;'x<>;$_|=0
Experimente online!
APL + WIN, 8 7 bytes
Solicita n como número inteiro e m como string:
⍎(-⎕)⌽⎕
Experimente online! Cortesia de Dyalog Classic
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!
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.
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
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 n
direita m
é o mesmo que girar para a n
direita pelo m
comprimento 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 n
e, 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 m
dígitos mais à direita de m
n
s concatenados, (n*m)[-m:]
fornecendo-nos a solução de 39 bytes.
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
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.
Java (JDK) , 66 bytes
(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))
Experimente online!
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
Io , 89 bytes
Usa um reduce
truque 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!
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á \ $ d \ $ .
Exemplo
Para \ $ n = 123 \ $ , \ $ m = 2 \ $ :
- Concatenar \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ vezes:
123123123123123123
- Contagem regressiva desde o final \ $ m (d + 1) = 8 \ $ caracteres:
123123123123123123
- Pegue a substring de comprimento \ $ d = 3 \ $ :
123123123123123123
Python 3.8 (pré-lançamento) , 42 40 bytes
lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])
Experimente online!
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
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
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!
APL (Dyalog Extended) , 4 bytes ( SBCS )
Função infixo tácita anônima. Aceita string n
como argumento direito e número m
como argumento esquerdo.
⍎-⍛⌽
Experimente online!
⍎
execute o resultado de
-⍛
negar o argumento da esquerda e usá-lo para
⌽
girar ciclicamente o argumento certo
Wolfram Language (Mathematica) , 43 bytes
FromDigits@RotateRight[IntegerDigits@#,#2]&
Experimente online!
Ruby , 44 40 bytes
->a,b{a.to_s.chars.rotate(-b).join.to_i}
-4 de Dingus.
Experimente online!
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 m
para unário.
+`(.*)(\d)_
$2$1
Gire n
m
vezes. 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,n
reduziria a complexidade do tempo (ao custo de um byte, é claro).
^0+
Exclua os zeros à esquerda.
Scala, 61 bytes
(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}
Experimente no Scastie
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.
JavaScript (V8) , 47 bytes
(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)
Experimente online!
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