Ruota un numero
Dato un numero positivo n, ruota le sue posizioni in base 10 cifre mverso destra. Cioè, mostra il risultato dei mpassaggi di spostamento dell'ultima cifra all'inizio. Il conteggio delle rotazioni msarà un numero intero non negativo.
È necessario rimuovere gli zeri iniziali nel risultato finale, ma non in nessuno dei passaggi intermedi. Ad esempio, per il caso di test 100,2 => 1, prima ruotiamo su 010, poi su 001, quindi infine rilasciamo gli zeri iniziali per ottenere 1.
Test
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
Risposte
Japt -N , 2 byte
Prende mcome stringa e V=ncome numero intero o stringa, restituisce un numero intero. Anteporre so ìper 1 byte, se ci devono prendere sia come numeri interi.
éV
Provalo
R , 51 byte
function(n,m,p=10^nchar(n))sum(n*p^(0:m))%/%10^m%%p
Provalo online!
Soluzione numerica (che fallisce per le combinazioni di n & m che causano il superamento dell'intervallo numerico di R): concatena le cifre di n, m volte (quindi: 123=> 123123123123per m = 4) e quindi calcola DIV 10 ^ m (quindi: 12312312per m = 4) MOD 10 ^ cifre (n) (quindi:) 312.
R , 61 53 byte
Modifica: -8 byte grazie a Giuseppe
function(n,m,N=nchar(n),M=10^(m%%N))n%%M*10^N/M+n%/%M
Provalo online!
Funzione basata su testo che ruota combinando le due parti del numero insieme, quindi non esce dall'intervallo numerico: inserisce prima le ultime (m MOD cifre (n)) cifre di n, seguite dalle altre cifre di n.
Python 3 , 61 57 byte
i=input
n=i()
k=int(i())%len(n)
print(int(n[-k:]+n[:-k]))
Provalo online!
Utilizza il sezionamento della stringa per spostare le ultime k cifre all'inizio e lo converte in un numero intero per rimuovere gli zeri iniziali.
-4 byte grazie a Lyxal
05AB1E , 4 byte
(._ï
Provalo online!
Spiegazione
(._ï
( : get negative of m
._ : rotate n left negative m times
ï : remove leading zeros
MATL , 3 byte
YSU
Provalo online!
Accetta ncome stringa e mcome numero intero.
Spiegazione
YS % Shift first input second input number of times
U % Convert to integer to remove leading 0s
MATL , 5 byte
ViYSU
Provalo online!
Questa risposta prende entrambi gli input come numeri interi.
Carboncino , 9 byte
II⭆θ§θ⁻κη
Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:
θ 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 provi a sottrarre un numero intero e una stringa, la stringa viene convertita in numero intero.
Perl 5+ -pl, 26 byte
eval'$_=chop.$_;'x<>;$_|=0
Provalo online!
APL + WIN, 8 7 byte
Richiede n come numero intero em come stringa:
⍎(-⎕)⌽⎕
Provalo online! Per gentile concessione di Dyalog Classic
JavaScript (ES6), 36 byte
Prevede (m)(n), dove nè una stringa ed mè una stringa o un numero intero.
m=>g=n=>m--?g(n%10+n.slice(0,-1)):+n
Provalo online!
C (gcc)-lm , 65 \$\cdots\$ 56 55 byte
Ho salvato un byte grazie a Ceilingcat !!!
e;f(n,m){for(e=log10(n);m--;)n=n%10*exp10(e)+n/10;m=n;}
Provalo online!
Ingressi interi \$n\$e \$m\$.
Base-10 ruota digitalmente \$n\$a destra \$m\$-time e lo restituisce.
Pyth , 4 byte
v.>z
Provalo online!
Spiegazione
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 byte
lambda n,m:int(((n*m)[-m:]+n)[:len(n)])
Provalo online! Oppure guarda la suite di test .
Come?
Ruotare a ndestra di mè uguale a ruotare a ndestra di mlunghezza modulo n( m%len(n)), che è la concatenazione delle ultime m%len(n)cifre con le prime len(n)-m%len(n)cifre.
Una semplice fetta ci darebbe
lambda n,m:int(n[-m%len(n):]+n[:-m%len(n)])
per 43 byte. Per eliminare la necessità del ripetuto -m%possiamo invece concatenare le ultime m%len(n)cifre con tutte le cifre di ne poi prendere le prime len(n)cifre. Questo è
lambda n,m:int((n[-m%len(n):]+n)[:len(n)])
per 42 byte. Il n[-m%len(n):]possono poi essere sostituiti con l'assunzione di più a destra mcifre del m ns concatenati insieme, (n*m)[-m:]dandoci la soluzione 39 byte.
Barilotto , -hr, 11 byte
÷(¿|")⑷⅍⑸⅀ℤ
Provalo online!
Ha spiegato
÷(¿|")⑷⅍⑸⅀ℤ
÷ # 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 byte
f=lambda n,m:m and f(n[-1]+n[:-1],m-1)or int(n)
Provalo online!
Ingressi \$n\$come una stringa e \$m\$come numero intero.
Restituisce ruotato \$n\$ come numero intero.
Java (JDK) , 66 byte
(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))
Provalo online!
J , 11 byte
(".@|.":)~-
Provalo online!
Come funziona
Utilizza il trucco tacito di @ Bubbler per (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 byte
Utilizza un reducetrucco per assegnare diverse righe di STDIN alle variabili.
File standardInput readLines reduce(a,b,a splitAt(-b asNumber)reverse join)asNumber print
Provalo online!
Io , 56 byte
method(a,b,doString(a splitAt(-b asNumber)reverse join))
Provalo online!
Ruby -nl , 34 byte
->m{($_*-~m*2)[~~/$/*m,~/$/].to_i}
Provalo online!
Accetta \ $ n \ $ da STDIN e \ $ m \ $ come argomento. Concatena \ $ n \ $ \ $ 2 (m + 1) \ $ volte, quindi da questa stringa prende la sottostringa di lunghezza \ $ d \ $ (dove \ $ d \ $ è il numero di cifre in \ $ n \ $ ) che inizia \ $ m (d + 1) \ $ caratteri dalla fine. Nel codice $_è \$n\$e ~/$/restituisce \ $ d \ $ .
Esempio
Per \ $ n = 123 \ $ , \ $ m = 2 \ $ :
- Concatena \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ volte:
123123123123123123 - Conta alla rovescia dalla fine \ $ m (d + 1) = 8 \ $ caratteri:
123123123123123123 - Prendi una sottostringa di lunghezza \ $ d = 3 \ $ :
123123123123123123
Python 3.8 (pre-rilascio) , 42 40 byte
lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])
Provalo online!
Gelatina , (4?) 5 byte
4 se possiamo accettare un elenco di cifre (rimuovere l'interlinea D).
DṙN}Ḍ
Provalo online!
Come?
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 byte
Salvati 3 byte ricordando che è possibile eseguire la maggior parte delle operazioni sugli array sulle stringhe.
-1 byte da @my pronome è monicareinstate notando che m>accetta argomenti in entrambi gli ordini.
rr~m>~
Provalo online
Spiegazione:
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
Vecchia versione, 7 byte:
q~\sm>~
Provalo online
Spiegazione:
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 byte
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.
Provalo online!
Ho scelto di essere licenziato piuttosto che sacrificare i byte necessari per tornare al garage alla fine. Ho controllato sia ingressi molto lunghi che rotazioni molto lunghe e il guadagno netto è positivo in modo da non rimanere mai senza benzina.
Formattato per la leggibilità e con commenti:
[ 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.
Provalo online!
APL (Dyalog Extended) , 4 byte ( SBCS )
Funzione di infisso tacito anonimo. Accetta la stringa ncome argomento destro e il numero mcome argomento sinistro.
⍎-⍛⌽
Provalo online!
⍎ eseguire il risultato di
-⍛ negando l'argomento a sinistra, quindi usandolo per
⌽ ruotare ciclicamente l'argomento destro
Wolfram Language (Mathematica) , 43 byte
FromDigits@RotateRight[IntegerDigits@#,#2]&
Provalo online!
Ruby , 44 40 byte
->a,b{a.to_s.chars.rotate(-b).join.to_i}
-4 da Dingus.
Provalo online!
Retina 0.8.2 , 29 byte
,.+
$*_ +`(.*)(\d)_ $2$1
^0+
Provalo online! Il collegamento include casi di test. Accetta input come n,m. Spiegazione:
,.+
$*_
Converti min unario.
+`(.*)(\d)_
$2$1
Ruota i n mtempi. Questo è O (m³) a causa del modo in cui la regex torna indietro cercando di trovare una seconda corrispondenza. Corrispondenza da destra a sinistra, ancoraggio della corrispondenza all'inizio o riscrittura del codice per ricevere input in modo da m,nridurre la complessità del tempo (al costo di un byte ovviamente).
^0+
Elimina gli zeri iniziali.
Scala, 61 byte
(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}
Provalo in Scastie
PHP ,
45
43 byte
Salvati 2 byte, ci siamo resi conto che possiamo abbreviare i nomi delle variabili.
<?=(int)(substr($s,-$n).substr($s,0,-$n))?>
Provalo online
Spiegazione:
<?= ?> 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 byte
(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)
Provalo online!
V (vim) , 11 byte
Àñ$x0Pñó^0«
Provalo 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