Повернуть число
Учитывая положительное число 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
Ответы
Japt -N , 2 байта
Принимает mкак строку, а V=nкак целое число или строку, выводит целое число. Добавьте sили ìдля +1 байта, если нам нужно принять оба целых числа.
éV
Попытайся
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.
Python 3 , 61 57 байт
i=input
n=i()
k=int(i())%len(n)
print(int(n[-k:]+n[:-k]))
Попробуйте онлайн!
Использует нарезку строки, чтобы переместить последние k цифр в начало, и преобразует их в целое число, чтобы удалить начальные нули.
-4 байта благодаря Lyxal
05AB1E , 4 байта
(._ï
Попробуйте онлайн!
Объяснение
(._ï
( : get negative of m
._ : rotate n left negative m times
ï : remove leading zeros
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
Попробуйте онлайн!
Этот ответ принимает оба ввода как целые числа.
Уголь , 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
Удобно, если вы попытаетесь вычесть целое число и строку, тогда строка будет преобразована в целое число.
Perl 5+ -pl, 26 байт
eval'$_=chop.$_;'x<>;$_|=0
Попробуйте онлайн!
APL + WIN, 8 7 байт
Запрашивает n как целое число и m как строку:
⍎(-⎕)⌽⎕
Попробуйте онлайн! Предоставлено Dyalog Classic
JavaScript (ES6), 36 байт
Ожидает (m)(n), где n- строка, а mявляется либо строкой, либо целым числом.
m=>g=n=>m--?g(n%10+n.slice(0,-1)):+n
Попробуйте онлайн!
С (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\$-раз и возвращает его.
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
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 байтов.
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
Python 3 , 47 байт
f=lambda n,m:m and f(n[-1]+n[:-1],m-1)or int(n)
Попробуйте онлайн!
Входы \$n\$как строка и \$m\$как целое число.
Возвраты повернуты \$n\$ как целое число.
Java (JDK) , 66 байт
(n,x)->new Long((""+n+n).substring(x=(n=(""+n).length())-x%n,x+n))
Попробуйте онлайн!
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
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))
Попробуйте онлайн!
Рубин -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 \ $ :
- Объединить \ $ n \ $ \ $ 2 (m + 1) = 6 \ $ раз:
123123123123123123 - Обратный отсчет от конца \ $ m (d + 1) = 8 \ $ символов:
123123123123123123 - Возьмем подстроку длины \ $ d = 3 \ $ :
123123123123123123
Python 3.8 (предварительная версия) , 42 40 байт
lambda x,r:int(x[(a:=-r%len(x)):]+x[:a])
Попробуйте онлайн!
Желе , (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
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
Такси , 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.
Попробуйте онлайн!
APL (расширенный Dyalog) , 4 байта ( SBCS )
Анонимная неявная инфиксная функция. Принимает строку nкак правый аргумент и число mкак левый аргумент.
⍎-⍛⌽
Попробуйте онлайн!
⍎ выполнить результат
-⍛ отрицая левый аргумент, а затем используя его для
⌽ циклически повернуть правильный аргумент
Язык Wolfram Language (Mathematica) , 43 байта
FromDigits@RotateRight[IntegerDigits@#,#2]&
Попробуйте онлайн!
Ruby , 44 40 байт
->a,b{a.to_s.chars.rotate(-b).join.to_i}
-4 от Дингуса.
Попробуйте онлайн!
Retina 0.8.2 , 29 байт
,.+
$*_ +`(.*)(\d)_ $2$1
^0+
Попробуйте онлайн! Ссылка включает тестовые примеры. Принимает входные данные как n,m. Пояснение:
,.+
$*_
Преобразовать mв унарный.
+`(.*)(\d)_
$2$1
Поверните n mраз. Это O (м³) из-за того, как регулярное выражение выполняет возврат, пытаясь найти второе совпадение. Сопоставление справа налево, привязка совпадения в начале или переписывание кода для ввода ввода, m,nчто уменьшит временную сложность (конечно, за счет байта).
^0+
Удалите ведущие нули.
Scala, 61 байт
(n,m)=>{val s=n+""size;val(a,b)=n+""splitAt s-m%s;b++a toInt}
Попробуй в Scastie
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.
JavaScript (V8) , 47 байт
(n,m,k=(e=n+'').length)=>+(e+e).substr(k-m%k,k)
Попробуйте онлайн!
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