Повернуть число

Aug 15 2020

Учитывая положительное число n, поверните его mпозиции с основанием 10 цифр вправо. То есть вывести результат mшагов по перемещению последней цифры в начало. Счетчик вращения mбудет неотрицательным целым числом.

Вы должны удалить ведущие нули в конечном результате, но не на любом из промежуточных этапов. Например, для тестового случая 100,2 => 1мы сначала вращаемся до 010, затем до 001, а затем, наконец, отбрасываем ведущие нули, чтобы получить 1.

Тесты

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

Ответы

13 Shaggy Aug 15 2020 at 15:16

Japt -N , 2 байта

Принимает mкак строку, а V=nкак целое число или строку, выводит целое число. Добавьте sили ìдля +1 байта, если нам нужно принять оба целых числа.

éV

Попытайся

9 DominicvanEssen Aug 15 2020 at 19:10

R , 51 байт

function(n,m,p=10^nchar(n))sum(n*p^(0:m))%/%10^m%%p

Попробуйте онлайн!

Числовое решение (которое не работает для комбинаций n и m, которые приводят к превышению числового диапазона R): объединяет цифры n, m раз (так: 123=> 123123123123для m = 4), а затем вычисляет DIV 10 ^ m (так: 12312312для m = 4) MOD 10 ^ цифр (n) (так:) 312.


R , 61 53 байта

Изменить: -8 байт благодаря Джузеппе

function(n,m,N=nchar(n),M=10^(m%%N))n%%M*10^N/M+n%/%M

Попробуйте онлайн!

Текстовая функция, которая вращается, объединяя две части числа вместе, поэтому не выходит за пределы числового диапазона: сначала ставит последние (m цифр MOD (n)) цифр числа n, а затем остальные цифры числа n.

5 ManishKundu Aug 15 2020 at 13:47

Python 3 , 61 57 байт

i=input
n=i()
k=int(i())%len(n)
print(int(n[-k:]+n[:-k]))

Попробуйте онлайн!

Использует нарезку строки, чтобы переместить последние k цифр в начало, и преобразует их в целое число, чтобы удалить начальные нули.

-4 байта благодаря Lyxal

5 Mukundan314 Aug 15 2020 at 17:40

05AB1E , 4 байта

(._ï

Попробуйте онлайн!

Объяснение

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

MATL , 3 байта

YSU

Попробуйте онлайн!

Принимает nкак строку и mкак целое число.

Объяснение

YS   % Shift first input second input number of times
  U  % Convert to integer to remove leading 0s

MATL , 5 байтов

ViYSU

Попробуйте онлайн!

Этот ответ принимает оба ввода как целые числа.

4 Neil Aug 15 2020 at 17:55

Уголь , 9 байт

II⭆θ§θ⁻κη

Попробуйте онлайн! Ссылка на подробную версию кода. Пояснение:

   θ        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

Удобно, если вы попытаетесь вычесть целое число и строку, тогда строка будет преобразована в целое число.

4 DomHastings Aug 15 2020 at 16:44

Perl 5+ -pl, 26 байт

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

Попробуйте онлайн!

4 Graham Aug 15 2020 at 14:35

APL + WIN, 8 7 байт

Запрашивает n как целое число и m как строку:

⍎(-⎕)⌽⎕

Попробуйте онлайн! Предоставлено Dyalog Classic

4 Arnauld Aug 15 2020 at 14:48

JavaScript (ES6), 36 байт

Ожидает (m)(n), где n- строка, а mявляется либо строкой, либо целым числом.

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

Попробуйте онлайн!

4 Noodle9 Aug 15 2020 at 18:31

С (gcc)-lm , 65 \$\cdots\$ 56 55 байт

Сэкономил байт благодаря потолку !!!

e;f(n,m){for(e=log10(n);m--;)n=n%10*exp10(e)+n/10;m=n;}

Попробуйте онлайн!

Вводит целые числа \$n\$и \$m\$.
База-10 вращается в цифровом виде \$n\$право \$m\$-раз и возвращает его.

4 Mukundan314 Aug 15 2020 at 17:01

Pyth , 4 байта

v.>z

Попробуйте онлайн!

Объяснение

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 байт

lambda n,m:int(((n*m)[-m:]+n)[:len(n)])

Попробуйте онлайн! Или посмотрите набор тестов .

Как?

Поворот nвправо по аналогии с mповоротом nвправо по mмодулю длины n( m%len(n)), который представляет собой соединение последних m%len(n)цифр с первыми len(n)-m%len(n)цифрами.

Простой кусок дал бы нам

lambda n,m:int(n[-m%len(n):]+n[:-m%len(n)])

для 43 байтов. Чтобы устранить необходимость в повторении, -m%мы можем вместо этого объединить последние m%len(n)цифры со всеми цифрами, nа затем взять первые len(n)цифры. Это

lambda n,m:int((n[-m%len(n):]+n)[:len(n)])

на 42 байта. Затем n[-m%len(n):]можно заменить объединение крайних правых mцифр m ns вместе, что (n*m)[-m:]дает нам решение из 39 байтов.

3 Lyxal Aug 15 2020 at 11:22

Keg , -hr, 11 байт

÷(¿|")⑷⅍⑸⅀ℤ

Попробуйте онлайн!

Объяснил

÷(¿|")⑷⅍⑸⅀ℤ
÷               # 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 байт

f=lambda n,m:m and f(n[-1]+n[:-1],m-1)or int(n)

Попробуйте онлайн!

Входы \$n\$как строка и \$m\$как целое число.
Возвраты повернуты \$n\$ как целое число.

3 OlivierGrégoire Aug 15 2020 at 22:21

Java (JDK) , 66 байт

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

Попробуйте онлайн!

2 xash Aug 15 2020 at 14:12

J , 11 байт

(".@|.":)~-

Попробуйте онлайн!

Как это устроено

Использует неявный трюк @Bubbler для (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 байт

Использует reduceтрюк для присвоения переменных разных строк STDIN.

File standardInput readLines reduce(a,b,a splitAt(-b asNumber)reverse join)asNumber print

Попробуйте онлайн!

Io , 56 байт

method(a,b,doString(a splitAt(-b asNumber)reverse join))

Попробуйте онлайн!

2 Dingus Aug 16 2020 at 07:44

Рубин -nl , 34 байта

->m{($_*-~m*2)[~~/$/*m,~/$/].to_i}

Попробуйте онлайн!

Принимает \ $ n \ $ из STDIN и \ $ m \ $ в качестве аргумента. Объединяет \ $ n \ $ \ $ 2 (m + 1) \ $ раз, затем из этой строки берется подстрока длины \ $ d \ $ (где \ $ d \ $ - количество цифр в \ $ n \ $ ) который начинается \ $ m (d + 1) \ $ символов с конца. В коде $_это \$n\$и ~/$/дает \ $ d \ $ .

пример

Для \ $ n = 123 \ $ , \ $ m = 2 \ $ :

  1. Объединить \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ раз:123123123123123123
  2. Обратный отсчет от конца \ $ m (d + 1) = 8 \ $ символов:123123123123123123
  3. Возьмем подстроку длины \ $ d = 3 \ $ :123123123123123123
2 DanielH. Aug 16 2020 at 07:42

Python 3.8 (предварительная версия) , 42 40 байт

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

Попробуйте онлайн!

2 JonathanAllan Aug 16 2020 at 04:49

Желе , (4?) 5 байт

4, если мы можем принять список цифр (удалите начало D).

DṙN}Ḍ

Попробуйте онлайн!

Как?

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 байт

Вы сэкономили 3 байта, помня, что вы можете выполнять большинство операций с массивами со строками.

-1 байт от @my местоимения - это monicareinstate, указывающий, что m>аргументы принимаются в любом порядке.

rr~m>~

Попробуйте онлайн

Пояснение:

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

Старая версия, 7 байт:

q~\sm>~

Попробуйте онлайн

Пояснение:

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

Такси , 1698 байт

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.

Попробуйте онлайн!

Я предпочел, чтобы меня уволили, чем жертвовать байтами, необходимыми для возвращения в гараж в конце. Я проверил как очень длинные входы, так и очень длинные вращения, и чистая прибыль положительна, так что у вас никогда не закончится бензин.


Отформатировано для удобочитаемости и с комментариями:

[ 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.

Попробуйте онлайн!

2 Adám Aug 18 2020 at 01:34

APL (расширенный Dyalog) , 4 байта ( SBCS )

Анонимная неявная инфиксная функция. Принимает строку nкак правый аргумент и число mкак левый аргумент.

⍎-⍛⌽

Попробуйте онлайн!

 выполнить результат

-⍛ отрицая левый аргумент, а затем используя его для

 циклически повернуть правильный аргумент

1 J42161217 Aug 15 2020 at 14:42

Язык Wolfram Language (Mathematica) , 43 байта

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

Попробуйте онлайн!

1 Razetime Aug 15 2020 at 15:46

Ruby , 44 40 байт

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

-4 от Дингуса.

Попробуйте онлайн!

1 Neil Aug 15 2020 at 17:33

Retina 0.8.2 , 29 байт

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

Попробуйте онлайн! Ссылка включает тестовые примеры. Принимает входные данные как n,m. Пояснение:

,.+
$*_

Преобразовать mв унарный.

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

Поверните n mраз. Это O (м³) из-за того, как регулярное выражение выполняет возврат, пытаясь найти второе совпадение. Сопоставление справа налево, привязка совпадения в начале или переписывание кода для ввода ввода, m,nчто уменьшит временную сложность (конечно, за счет байта).

^0+

Удалите ведущие нули.

1 user Aug 15 2020 at 22:07

Scala, 61 байт

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

Попробуй в Scastie

1 Hackinet Aug 16 2020 at 15:37

PHP , 45 43 байта

Сохранено 2 байта, поняли, что можно сократить имена переменных.

<?=(int)(substr($s,-$n).substr($s,0,-$n))?>

Попробуйте онлайн

Пояснение:

<?= ?>       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 байт

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

Попробуйте онлайн!

1 nmjcman101 Aug 17 2020 at 23:22

V (vim) , 11 байт

Àñ$x0Pñó^0«

Попробуйте онлайн!

Àñ    ñ       # (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