Faire pivoter un nombre

Aug 15 2020

Étant donné un nombre positif n, faites pivoter ses mpositions 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 msera 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

13 Shaggy Aug 15 2020 at 15:16

Japt -N , 2 octets

Prend mcomme une chaîne et V=ncomme un entier ou une chaîne, génère un entier. Prepend sou ìpour 1 octet si nous avons à prendre à la fois comme des entiers.

éV

Essayez-le

9 DominicvanEssen Aug 15 2020 at 19:10

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=> 123123123123pour m = 4) puis calcule DIV 10 ^ m (donc: 12312312pour 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.

5 ManishKundu Aug 15 2020 at 13:47

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

5 Mukundan314 Aug 15 2020 at 17:40

05AB1E , 4 octets

(._ï

Essayez-le en ligne!

Explication

(._ï
(     : get negative of m
 ._   : rotate n left negative m times
   ï  : remove leading zeros
4 Mukundan314 Aug 15 2020 at 17:18

MATL , 3 octets

YSU

Essayez-le en ligne!

Prend ncomme une chaîne et mcomme 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.

4 Neil Aug 15 2020 at 17:55

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.

4 DomHastings Aug 15 2020 at 16:44

Perl 5 + -pl, 26 octets

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

Essayez-le en ligne!

4 Graham Aug 15 2020 at 14:35

APL + WIN, 8 7 octets

Demande n comme entier et m comme chaîne:

⍎(-⎕)⌽⎕

Essayez-le en ligne! Gracieuseté de Dyalog Classic

4 Arnauld Aug 15 2020 at 14:48

JavaScript (ES6), 36 octets

Attend (m)(n), où nest une chaîne et mest une chaîne ou un entier.

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

Essayez-le en ligne!

4 Noodle9 Aug 15 2020 at 18:31

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.

4 Mukundan314 Aug 15 2020 at 17:01

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
4 JonathanAllan Aug 16 2020 at 03:19

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 ndroite équivaut à mla rotation vers la ndroite de mmodulo 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 mchiffres les plus à droite de m ns concaténés ensemble, (n*m)[-m:]nous donnant la solution de 39 octets.

3 Lyxal Aug 15 2020 at 11:22

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
3 Noodle9 Aug 15 2020 at 21:25

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.

3 OlivierGrégoire Aug 15 2020 at 22:21

Java (JDK) , 66 octets

(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))

Essayez-le en ligne!

2 xash Aug 15 2020 at 14:12

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
2 Noname Aug 15 2020 at 14:26

Io , 89 octets

Utilise une reduceastuce 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!

2 Dingus Aug 16 2020 at 07:44

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 \ $ :

  1. Concaténer \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ fois:123123123123123123
  2. Compte à rebours à partir de la fin \ $ m (d + 1) = 8 \ $ caractères:123123123123123123
  3. Prenez une sous-chaîne de longueur \ $ d = 3 \ $ :123123123123123123
2 DanielH. Aug 16 2020 at 07:42

Python 3.8 (pré-version) , 42 40 octets

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

Essayez-le en ligne!

2 JonathanAllan Aug 16 2020 at 04:49

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
2 EthanChapman Aug 16 2020 at 10:53

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
2 EngineerToast Aug 17 2020 at 22:45

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!

2 Adám Aug 18 2020 at 01:34

APL (Dyalog Extended) , 4 octets ( SBCS )

Fonction d'infixe tacite anonyme. Prend une chaîne ncomme argument de droite et un nombre mcomme 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

1 J42161217 Aug 15 2020 at 14:42

Wolfram Language (Mathematica) , 43 octets

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

Essayez-le en ligne!

1 Razetime Aug 15 2020 at 15:46

Rubis , 44 40 octets

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

-4 de Dingus.

Essayez-le en ligne!

1 Neil Aug 15 2020 at 17:33

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 men unaire.

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

Tournez les n mtemps. 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,nqui réduirait la complexité temporelle (au prix d'un octet bien sûr).

^0+

Supprimez les zéros non significatifs.

1 user Aug 15 2020 at 22:07

Scala, 61 octets

(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}

Essayez-le dans Scastie

1 Hackinet Aug 16 2020 at 15:37

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.    
  
1 YaroslavGaponov Aug 17 2020 at 20:00

JavaScript (V8) , 47 octets

(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)

Essayez-le en ligne!

1 nmjcman101 Aug 17 2020 at 23:22

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