Faire pivoter un nombre
Étant donné un nombre positif n
, faites pivoter ses m
positions de chiffres de base 10 vers la droite. Autrement dit, affichez le résultat des m
étapes de déplacement du dernier chiffre vers le début. Le nombre de rotations m
sera un entier non négatif.
Vous devez supprimer les zéros non significatifs dans le résultat final, mais pas dans aucune des étapes intermédiaires. Par exemple, pour le cas de test 100,2 => 1
, nous effectuons d'abord une rotation vers 010
, puis vers 001
, puis finalement supprimons les zéros de tête pour obtenir 1
.
Des tests
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
Réponses
Japt -N , 2 octets
Prend m
comme une chaîne et V=n
comme un entier ou une chaîne, génère un entier. Prepend s
ou ì
pour 1 octet si nous avons à prendre à la fois comme des entiers.
éV
Essayez-le
R , 51 octets
function(n,m,p=10^nchar(n))sum(n*p^(0:m))%/%10^m%%p
Essayez-le en ligne!
Solution numérique (qui échoue pour les combinaisons de n & m qui le font dépasser la plage numérique de R): enchaîne les chiffres de n, m fois (donc: 123
=> 123123123123
pour m = 4) puis calcule DIV 10 ^ m (donc: 12312312
pour m = 4) MOD 10 ^ chiffres (n) (donc:) 312
.
R , 61 53 octets
Edit: -8 octets grâce à Giuseppe
function(n,m,N=nchar(n),M=10^(m%%N))n%%M*10^N/M+n%/%M
Essayez-le en ligne!
Fonction basée sur du texte qui tourne en combinant les deux parties du nombre ensemble, donc ne sort pas de la plage numérique: met les derniers (m MOD chiffres (n)) chiffres de n en premier, suivis des autres chiffres de n.
Python 3 , 61 57 octets
i=input
n=i()
k=int(i())%len(n)
print(int(n[-k:]+n[:-k]))
Essayez-le en ligne!
Utilise le découpage des chaînes pour déplacer les k derniers chiffres au début et le convertit en un entier pour supprimer les zéros de tête.
-4 octets grâce à Lyxal
05AB1E , 4 octets
(._ï
Essayez-le en ligne!
Explication
(._ï
( : get negative of m
._ : rotate n left negative m times
ï : remove leading zeros
MATL , 3 octets
YSU
Essayez-le en ligne!
Prend n
comme une chaîne et m
comme un entier.
Explication
YS % Shift first input second input number of times
U % Convert to integer to remove leading 0s
MATL , 5 octets
ViYSU
Essayez-le en ligne!
Cette réponse prend les deux entrées sous forme d'entiers.
Charbon , 9 octets
II⭆θ§θ⁻κη
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
θ 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
Idéalement, si vous essayez de soustraire un entier et une chaîne, la chaîne est convertie en entier.
Perl 5 + -pl
, 26 octets
eval'$_=chop.$_;'x<>;$_|=0
Essayez-le en ligne!
APL + WIN, 8 7 octets
Demande n comme entier et m comme chaîne:
⍎(-⎕)⌽⎕
Essayez-le en ligne! Gracieuseté de Dyalog Classic
JavaScript (ES6), 36 octets
Attend (m)(n)
, où n
est une chaîne et m
est une chaîne ou un entier.
m=>g=n=>m--?g(n%10+n.slice(0,-1)):+n
Essayez-le en ligne!
C (gcc)-lm
, 65 \$\cdots\$ 56 55 octets
Sauvé un octet grâce à plafonnier !!!
e;f(n,m){for(e=log10(n);m--;)n=n%10*exp10(e)+n/10;m=n;}
Essayez-le en ligne!
Entre des entiers \$n\$et \$m\$.
La base 10 tourne numériquement \$n\$droite \$m\$-times et le renvoie.
Pyth , 4 octets
v.>z
Essayez-le en ligne!
Explication
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 octets
lambda n,m:int(((n*m)[-m:]+n)[:len(n)])
Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
La rotation vers la n
droite équivaut à m
la rotation vers la n
droite de m
modulo length n
( m%len(n)
), qui est la concaténation des derniers m%len(n)
chiffres avec les premiers len(n)-m%len(n)
chiffres.
Une simple tranche nous donnerait
lambda n,m:int(n[-m%len(n):]+n[:-m%len(n)])
pour 43 octets. Pour supprimer le besoin de répéter, -m%
nous pouvons à la place concaténer les derniers m%len(n)
chiffres avec tous les chiffres de n
, puis prendre les premiers len(n)
chiffres. C'est
lambda n,m:int((n[-m%len(n):]+n)[:len(n)])
pour 42 octets. Le n[-m%len(n):]
peut alors être remplacé en prenant les m
chiffres les plus à droite de m
n
s concaténés ensemble, (n*m)[-m:]
nous donnant la solution de 39 octets.
Keg , -hr
, 11 octets
÷(¿|")⑷⅍⑸⅀ℤ
Essayez-le en ligne!
Expliqué
÷(¿|")⑷⅍⑸⅀ℤ
÷ # 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 octets
f=lambda n,m:m and f(n[-1]+n[:-1],m-1)or int(n)
Essayez-le en ligne!
Entrées \$n\$sous forme de chaîne et \$m\$sous forme d'entier.
Renvoie une rotation \$n\$ sous forme d'entier.
Java (JDK) , 66 octets
(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))
Essayez-le en ligne!
J , 11 octets
(".@|.":)~-
Essayez-le en ligne!
Comment ça fonctionne
Utilise l'astuce tacite de @ Bubbler pour (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 octets
Utilise une reduce
astuce pour affecter différentes lignes de STDIN à des variables.
File standardInput readLines reduce(a,b,a splitAt(-b asNumber)reverse join)asNumber print
Essayez-le en ligne!
Io , 56 octets
method(a,b,doString(a splitAt(-b asNumber)reverse join))
Essayez-le en ligne!
Rubis -nl
, 34 octets
->m{($_*-~m*2)[~~/$/*m,~/$/].to_i}
Essayez-le en ligne!
Prend \ $ n \ $ de STDIN et \ $ m \ $ comme argument. Concatène \ $ n \ $ \ $ 2 (m + 1) \ $ fois, puis de cette chaîne prend la sous-chaîne de longueur \ $ d \ $ (où \ $ d \ $ est le nombre de chiffres dans \ $ n \ $ ) qui commence \ $ m (d + 1) \ $ caractères à partir de la fin. Dans le code, $_
est \$n\$et ~/$/
donne \ $ d \ $ .
Exemple
Pour \ $ n = 123 \ $ , \ $ m = 2 \ $ :
- Concaténer \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ fois:
123123123123123123
- Compte à rebours à partir de la fin \ $ m (d + 1) = 8 \ $ caractères:
123123123123123123
- Prenez une sous-chaîne de longueur \ $ d = 3 \ $ :
123123123123123123
Python 3.8 (pré-version) , 42 40 octets
lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])
Essayez-le en ligne!
Gelée , (4?) 5 octets
4 si nous pouvons accepter une liste de chiffres (supprimer le début D
).
DṙN}Ḍ
Essayez-le en ligne!
Comment?
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 octets
Sauvegardé de 3 octets en vous rappelant que vous pouvez préformer la plupart des opérations de tableau sur les chaînes.
-1 octet de @my pronom est monicareinstate notant que m>
prend les arguments dans les deux ordres.
rr~m>~
Essayez-le en ligne
Explication:
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
Ancienne version, 7 octets:
q~\sm>~
Essayez-le en ligne
Explication:
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 octets
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.
Essayez-le en ligne!
J'ai choisi de me faire virer plutôt que de sacrifier les octets nécessaires pour retourner au garage à la fin. J'ai vérifié à la fois des entrées très longues et des rotations très longues et le gain net est positif pour que vous ne soyez jamais à court d'essence.
Formaté pour la lisibilité et avec des commentaires:
[ 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.
Essayez-le en ligne!
APL (Dyalog Extended) , 4 octets ( SBCS )
Fonction d'infixe tacite anonyme. Prend une chaîne n
comme argument de droite et un nombre m
comme argument de gauche.
⍎-⍛⌽
Essayez-le en ligne!
⍎
exécuter le résultat de
-⍛
nier l'argument de gauche, puis l'utiliser pour
⌽
faire pivoter cycliquement le bon argument
Wolfram Language (Mathematica) , 43 octets
FromDigits@RotateRight[IntegerDigits@#,#2]&
Essayez-le en ligne!
Rubis , 44 40 octets
->a,b{a.to_s.chars.rotate(-b).join.to_i}
-4 de Dingus.
Essayez-le en ligne!
Retina 0.8.2 , 29 octets
,.+
$*_ +`(.*)(\d)_ $2$1
^0+
Essayez-le en ligne! Le lien comprend des cas de test. Prend l'entrée comme n,m
. Explication:
,.+
$*_
Convertir m
en unaire.
+`(.*)(\d)_
$2$1
Tournez les n
m
temps. C'est O (m³) à cause de la façon dont l'expression régulière revient en arrière en essayant de trouver une deuxième correspondance. Correspondance de droite à gauche, ancrage de la correspondance au début ou réécriture du code pour prendre une entrée, ce m,n
qui réduirait la complexité temporelle (au prix d'un octet bien sûr).
^0+
Supprimez les zéros non significatifs.
Scala, 61 octets
(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}
Essayez-le dans Scastie
PHP ,
45
43 octets
Sauvegardé 2 octets, réalisé que nous pouvons raccourcir les noms des variables.
<?=(int)(substr($s,-$n).substr($s,0,-$n))?>
Essayez-le en ligne
Explication:
<?= ?> 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 octets
(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)
Essayez-le en ligne!
V (vim) , 11 octets
Àñ$x0Pñó^0«
Essayez-le en ligne!
Àñ ñ # (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