Ruota un numero
Dato un numero positivo n
, ruota le sue posizioni in base 10 cifre m
verso destra. Cioè, mostra il risultato dei m
passaggi di spostamento dell'ultima cifra all'inizio. Il conteggio delle rotazioni m
sarà 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 m
come stringa e V=n
come numero intero o stringa, restituisce un numero intero. Anteporre s
o ì
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
=> 123123123123
per m = 4) e quindi calcola DIV 10 ^ m (quindi: 12312312
per 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 n
come stringa e m
come 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 n
destra di m
è uguale a ruotare a n
destra di m
lunghezza 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 n
e 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 m
cifre del m
n
s 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 reduce
trucco 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 n
come argomento destro e il numero m
come 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 m
in unario.
+`(.*)(\d)_
$2$1
Ruota i n
m
tempi. 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,n
ridurre 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