Позвольте n
и b
быть положительные целые числа больше, чем 1
.
Выведите расстояние от n
до следующей степени b
.
Для n=5
и b=3
, следующая степень 3
от 5
is 9
( 3^2 = 9
), поэтому вывод 9 - 5 = 4
.
Для n=8
и b=2
, следующая степень 2
от 8
is 16
( 2^4 = 16
), поэтому вывод 16 - 8 = 8
. Обратите внимание, что n
это сила 2
в этом примере.
Testcases:
n b output
212 2 44
563 5 62
491 5 134
424 3 305
469 8 43
343 7 2058
592 7 1809
289 5 336
694 3 35
324 5 301
2 5 3
Это код-гольф . Кратчайший ответ в байтах побеждает. Применяются стандартные лазейки .
code-golf
arithmetic
Дрянная Монахиня
источник
источник
;)æċ
!" вместо «ауууууууууууууууу…»æċ_⁸
Сборка x86-64 ( Соглашение о вызовах Windows x64 ),
1413 байтНеэффективный (но изящный!) Итеративный подход (с благодарностью за @Neil за вдохновение):
Вышеуказанная функция принимает два целочисленных параметра
n
(переданных вECX
регистре) иb
(переданных вEDX
регистре) и возвращает один целочисленный результат (вEAX
регистре). Чтобы вызвать его из C, вы должны использовать следующий прототип:Это ограничено диапазоном 32-разрядного целого числа. Его можно легко модифицировать для поддержки 64-битных целых чисел с помощью полных длинных регистров, но для кодирования этих инструкций потребуется больше байтов. :-)
источник
push 1
+pop rax
всего за 3 байта. Но ... тогда вам не нужно будет пропускать умножение, так что это все равно будет разумной экономией, потому что вы можете отброситьjmp
.C (gcc) ,
3935 байтНовое неопределенное поведение благодаря Эрику
Попробуйте онлайн!
источник
f(n,b,i){for(i=b;b<n;b*=i);n=b-n;}
сохраняет 5 байт и поддерживается gccb-=n
?b-=n
если вы меняете порядокb
иn
?Dyalog APL, 10 байт
2 байта сохранены благодаря @ZacharyT
Попробуйте онлайн!
Принимает в
n
качестве правого аргумента и вb
качестве левого аргумента.Рассчитывает .
b⌊logbn + 1⌋ - n
источник
⊣-⍨⊢*1+∘⌊⍟⍨
.⊢-⍨⊣*1+∘⌊⍟
за 10 байтов, но с замененными аргументами, так чтоn
это правильный аргумент иb
левый аргумент. Я использовал хитрость ZacharyT,1+∘⌊
чтобы получить это далеко.R ,
3834 байтаАнонимная функция. Сохраняет все значения b в степени всего в диапазоне [0, n], вычитает n из каждого, подмножества положительных значений и возвращает мин.
TIO имеет версию, не предназначенную для чтения, называемую как
f(n,b)
; эта версия должна называться какf(b,n)
.Спас 4 байта благодаря Jarko Dubbeldam, который тогда превзошел меня.
Попробуйте онлайн!
источник
pryr::f({a=b^(0:n)-n;min(a[a>0])})
на несколько байтов короче.pryr::f
когда я определяю новую переменную в функции; Похоже, это работает здесь.sapply(x, sum)
или что-то еще, что это добавляетsum
к аргументам.Cubix ,
2420 байт-4 байта благодаря MickyT
Читает на входе как
n,b
Устанавливается на куб 2x2x2:
Объяснение:
I|I0
: прочитайте ввод, нажмите 0 (счетчик) в стек^w
помещает IP в нужное место для цикла:Pp-
: вычислитьb^(counter)
, перейтиn
на вершину стека, вычислитьb^(counter) - n
?
: повернуть налево, если отрицательно, прямо, если 0, вправо, если положительноO@
вывести вершину стека (расстояние) и выйти.|?
действовать так, как если бы вершина стека была нулевой<;qu;)
: направьте IP-адрес в правильном направлении, вытолкните вершину стека (отрицательное / нулевое число), переместитесьn
в нижнюю часть стека, разверните поворот, вытолкните вершину стека (b^(counter)
) и увеличьте счетчик^w
и программа продолжается.Смотреть онлайн!
Попробуйте онлайн!
источник
Pwp.I|-.;)^0@O?|uq;<
Haskell , 20 байтов
Попробуйте онлайн!
until
спасает деньисточник
05AB1E ,
98 байтПопробуйте онлайн!
объяснение
источник
ć
вместо¬
.n
неявно, как при сравнении фильтров, так и при расчете абсолютной разности.Java (OpenJDK 8) , 42 байта
На основе @ C ответа GovindParmar в .
Попробуйте онлайн!
источник
MATL ,
109 байтПопробуйте онлайн!
объяснение
Рассмотрим входные данные
694
и3
в качестве примера.источник
JavaScript (ES6), 29 байт
Очень похоже на подход Рика, но опубликовано с его разрешения (и некоторые помогают сохранить байт).
Попытайся
источник
Mathematica, 24 байта
спасибо Мартин
I / O
источник
1/Log@##
или#2~Log~#
. Или даже лучше поменять порядок входов и использоватьLog@##
.#^Floor[...]#
короче чем#^(Floor[...]+1)
. И есть операторы Unicode дляFloor
.Log@##
! На самом деле, если вы меняете порядок аргументов,#^⌊Log@##⌋#-#2&
должно быть возможно для -5 байт (я думаю)!С,
4240 байтовСпасибо комментатору @Steadybox за подсказку
источник
for
вместоwhile
сохранения двух байтов:o;p(n,b){for(o=b;n>=b;)b*=o;return b-n;}
n/b
вместоn>=b
R, 30 байт
Оценивает функцию
Который принимает первую степень больше или равна
n
, а затем вычитаетn
из этого значения.Изменено,
ceiling(power)
чтобыfloor(power+1)
гарантировать, что еслиn
это силаb
, мы берем следующую власть.источник
JavaScript (ES6), 31 байт
Тестовые случаи:
Показать фрагмент кода
источник
n
иb
или простоn
), потому что избавляет вас от необходимости проходитьn
рекурсивно.n=>g=(b,p=b)=>p>n?p-n:g(b,p*b)
иn=>b=>(g=p=>p>n?p-n:g(p*b))(b)
.f=(n,i)=>g=(b=i)=>b>n?b-n:g(b*i)
работать на 30 байтов? Он должен был бы называться так:f(324,5)()
. РЕДАКТИРОВАТЬ: Ах @ Нил побил меня к этому.Октава , 32 байта
Попробуйте онлайн!
источник
Октава, 26 байт
Проверьте все контрольные примеры!
источник
Рубин , 38 байт
Два разных подхода:
Попробуйте онлайн!
Попробуйте онлайн!
источник
Haskell , 31 байт
Попробуйте онлайн!
источник
Perl 6 ,
31 3029 байтПроверьте это (31)
Проверьте это (30)
Проверьте это (29)
Проверьте это (29)
источник
PARI / GP ,
2624 байтаисточник
Japt , 9 байт
Проверьте это онлайн!
объяснение
источник
Python ,
4241 байтРекурсивная функция, которая, начиная с
v=1
, многократно умножаетсяb
до тех пор, пока она строго не превысит,a
а затем возвращает разницу.Попробуйте онлайн!
Примечание: результат никогда не будет нулевым, поэтому
a>=v and f(a,b,v*b)or v-a
его можно заменить,(a<v)*(v-a)or f(a,b,v*b)
не вызывая ошибок рекурсии.Python 3, 37 байт?
Используя идею Ричи ...
который использует арифметику с плавающей точкой (следовательно, результаты могут отклоняться от их истинного расстояния),
попробуйте это здесь .
источник
b-n
никогда не будет равен нулю в то же время, чтоn<b
и истина)Брахилог , 7 байт
Попробуйте онлайн!
Принимает ввод в виде списка
[b, n]
.источник
PHP> = 7.1, 46 байт
PHP Sandbox Online
источник
Луа,
7473 байтПрямое решение, я использую 10 байтов, чтобы аргументы обрабатывались как числа, а не как строки. Выходы в STDIN.
Редактировать: забыл удалить пробел в
w=1 n=n+0
, сохраняет один байтРазъяснения
Попробуйте онлайн!
источник
1
иend
необходимым?1end
начнут интерпретироваться как число, а1e
затем выдают ошибку, потому что1en
это недопустимое шестнадцатеричное значение. Это происходит только в том случае, если буква, следующая за цифрой,[abcdef]
как и другие буквы, не может быть интерпретирована как шестнадцатеричное значение ->w=1while
не выдает ошибку.QBIC , 23 байта
b
Сначала принимает параметр , затемn
.объяснение
источник
Python 2 ,
4841 байтПолная программа без рекурсии и немного твидлинга:
Попробуйте онлайн!
Формат ввода:
n, b
.источник
Python 3 ,
5048 байтовСпасибо EriktheOutgolfer за сохранение 2 байта!
Попробуйте онлайн!
У Python нет никаких причудливых конструкций из бревен или потолка, поэтому я просто пошел с очевидным подходом с небольшим чутьем игры в гольф.
источник
import math;lambda n,b:b**-~int(math.log(n,b))-n
сохраняет два байта и допускается на мета-консенсус.ceil
не будет работать.ceil
потому что он не работает для мощностейb
, но, как указывал @Uriel при импорте, до сих пор сохраняет байт.import
после лямбды, и добавьтеf=
в шапку.Common Lisp, 73 байта
Попробуйте онлайн!
источник