Гринготтс - это не просто хранилище, но заслуживающее доверия финансовое учреждение и волшебники тоже нуждаются в кредитах. Поскольку вы не хотите, чтобы гоблины Гринготта облажались, вы решили, что было бы неплохо написать программу для начисления процентов. Интерес накапливается только ежегодно.
Ваша задача состоит в том, чтобы рассчитать общую сумму задолженности после начисления процентов с учетом основной суммы, процентной ставки и времени (целых лет), действуя в целых деноминациях волшебных денег, с округлением до ближайшего целого Кнута. Есть 29 Бронзовых Кнутов в Серебряном Серпе и 17 Серпов в Золотом Галеоне.
пример
Loan taken out:
23 Knuts
16 Sickles
103 Galleons
@ 7.250%
For 3 years
Total owed after interest:
24 Knuts
4 Sickles
128 Galleons
Примечания и правила
- Вход и выход могут быть в любом удобном формате. Вы должны взять Кнуты, Серпы, Галеоны, процентную ставку и время. Все, кроме процентной ставки, будут целыми числами. Процентная ставка составляет 0,125%.
- Ввод денег не гарантированно будет каноническим (то есть вы можете иметь 29 или более Кнутов и 17 или более Серпов).
- Вывод должен быть каноническим представлением. (т.е. менее 29 кнутов и менее 17 серпов)
- Общая сумма долга до 1000 галеонов должна быть точной с точностью до 1 кнута в год для интереса по сравнению с вычислениями произвольной точности.
- Вы можете округлять после каждого интересующего года или только в конце. Эталонные расчеты могут учитывать это при проверках точности.
Удачного игры в гольф!
0.0725
вместо7.25
)rounding down
Ответы:
R ,
7062 байтаПопробуйте онлайн!
Принимает входные данные в виде d: депозит в кнутах, серпах, галеонах; я: процентная ставка в десятичном виде; у: лет. Выводит итоговый депозит в кнутах, серпах, галеонах. Спасибо @Giuseppe за использование умножения матриц для сохранения некоторых байтов (и указание, как избежать необходимости переноса в 1e99).
источник
%%
функцию, которая является модом. В идеале, я бы хотел оставить галеоны в покое, но, взяв бесконечность числового мода, возвращает NaN, и поэтому я просто использовал действительно большое число (но то, которое мало в байтах). Альтернативы, которые я придумал, длиннее (например, [ tio.run/##JYrLCsIwEEV/… попробуйте онлайн!])9e99
так же ... Кроме того, вы можетеPython 3.8 (предварительная версия) ,
757471 байт-1 байт благодаря @EmbodimentofIgnorance
-3 байт благодаря @xnor
Это принимает Кнуты, Серпы и Галеоны как целые числа, проценты как число с плавающей запятой (десятичное число, а не процент), а годы как целое число. Возвращает кортеж, содержащий число после интереса Knuts, Sickles и Galleons соответственно.
Использование:
Попробуйте онлайн!
источник
operating in whole denominations of wizard money, rounding down
. Я имелrounding down
в видуchop off everything after the decimal point.
Использование заголовка определенно звучит как более простой способ сделать вещи. Я сделаю это для будущих сообщений, спасибоI\=
в заголовок следующим образом . Кроме того, похоже,k//29//17
может бытьk//493
.APL + WIN,
37 2826 байт2 байта сохранены благодаря lirtosiast
Попробуйте онлайн! Предоставлено Dyalog Classic
Объяснение:
источник
⌊a⊤(⎕⊥⍨a←0 17 29)×⎕*⍨1+⎕
за 24?Perl 6 , 47 байт
Попробуйте онлайн!
Я удивлен, что мне удалось превратить это в анонимную Лямбду! Особенно часть, где это больше
*
чем что-либо еще. Принимает ввод какinterest rate (e.g. 0.0725), years, [Knuts, Sickles, Galleons]
и возвращает список валют в том же порядке.Объяснение:
источник
*
s, но больше байтов). Остальные из*
s от умножения (*
) и экспоненты (**
)Желе , 29 байт
Полная программа, принимающая аргументы
rate
:;[Galleons, Sickles, Knuts]
;years
,Печать
[Galleons, Sickles, Knuts]
.Попробуйте онлайн!
Этажи в конце всего срока.
÷ȷ2
может быть удален, если мы можем принять ставку в процентах, а не в процентах.Как?
источник
Intel 8087 FPU в сборе, 86 байт
В разобранном виде и задокументировано:
Реализованный как MACRO (в основном функция), этот машинный код не зависит от ОС и использует для вычислений только процессор Intel 80x87 FPU / math.
Пример тестовой программы с выводом:
Выход
источник
Japt, 48 байт
Моя первая попытка в Japt, для награды @ Shaggy! Излишне говорить, что это не очень гольф :(
Попробуйте онлайн!
источник
Haskell , 73 байта
Попробуйте онлайн!
Спасибо @Laikoni за два байта.
Грязные приемы: количество монет на входе равно плавающей запятой (
Double
), а количество монет на выходе - целое число (Integer
). В результате получается вложенная пара,((Galleons, Sickles), Knotts)
чтобы избежать сглаживания до тройной.объяснение
источник
(truncate$ ... )
->truncate( ... )
и(g#s)k r n
вместоc g s k r n
.Stax , 24 байта
Запустите и отладьте его
Ввод значений разделенных пробелами.
interest years knuts sickles galleons
Выход разделен новой строкой.
источник
TI-BASIC (TI-84),
9690 байтВходные данные представляют
Ans
собой список из 5 элементов: Кнуты, Серпы, Галеоны, Проценты (десятичные) и Время (годы).Выход находится
Ans
и автоматически распечатывается после завершения программы.Un-golfed:
Пример:
Объяснение:
Новый список,
∟C
создается иAns
сохраняется в нем.Кнуты, Серпы и Галеоны преобразуются в Кнуты и сохраняются в
T
.Принимает количество Кнутов и применяет сложный процент к нему.
Проценты начисляются здесь.
Хранит I nteger Часть из по
T
модулю 493 вR
. Используется для сокращения количества байтов.Оценивает список из 3 предметов (Кнуты, Серпы и Галеоны). Список автоматически сохраняется в
Ans
.Примечание. Счетчик байтов оценивается по количеству байтов, указанному в [MEM] → [2] → [7]. (список программ в ОЗУ), и вычитания количества символов в имени программы и дополнительных 8 байтов, используемых для программы:
103 - 5 - 8 = 90 байт
источник
К, 46 байт
c
сохранить список для преобразования базыt
это функция, которая рассчитывает общую суммуПример использования:
пишет
(128;4;24.29209)
Объяснение:
c/:x
преобразовать список (галеон; серп; кнут) в куц1+y%100
рассчитать процентную ставку (пример 1.0725 для 7.25% ставки)Лямбда
{z(y*)\x}
выполняет свою работу: повторяет 3 раза, применяя интерес * main, и возвращает final main.c\:
генерирует галеон, серпы, кнуты из кнутовПРИМЕЧАНИЕ. Если вам не нужна функция имен, мы можем использовать лямбду, экономя 2 байта
{c\:{z(y*)/x}[c/:x;1+y%100;z]}inputArgs
источник
C # (интерактивный компилятор Visual C #) , 86 байт
Принимает в качестве именованного кортежа с 3 значениями, представляющими кнуты, серпы и галеоны, и процентной ставкой в двойном размере (не в процентах). Мне бы очень хотелось, чтобы в C # был оператор экспоненты. Math.Pow слишком длинный :(
Попробуйте онлайн!
источник
Пакет, 171 байт
Принимает данные в качестве аргументов командной строки в следующем порядке: галеоны, серпы, кнуты, проценты, годы. Проценты - это проценты, но они выражены без знака%. Обрезается после каждого года. Выход в порядке галеонов, серпов, кнутов. Поддерживает не менее 5000 галеонов. Объяснение:
Пакет имеет только целочисленную арифметику. К счастью, процентная ставка всегда кратна
0.125
. Мы начнем с разделения на десятичную точку, чтобы онаi
стала целой частью процентной ставки иf
десятичной дроби. Затем они умножаются на 8. Теперь первая цифраf
- это число восьмых в процентной ставке.Затем это извлекается с использованием нарезки строк и добавляется для получения процентной ставки в 1/800. Количество кнутов также рассчитывается.
Рассчитать и добавить на каждый год интерес.
Конвертировать обратно в галеоны и серпы.
источник
05AB1E (legacy) , 24 байта
Порт ответа @JoKing 's Perl 6 , так что не забудьте также поддержать его, если вам нравится этот ответ!
Я использую устаревшую версию из-за ошибки в новой версии,
£
которая не работает с целыми числами, поэтому явное приведение к строке§
(между вторым•
и3
) (до тех пор, пока ошибка не будет исправлена).Принимает интерес в виде десятичного числа, за которым следует год, за которым следует список [Кнуты, Серпы, Галеоны].
Попробуйте онлайн.
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжать большие целые числа? ), Чтобы понять, почему
•1ýÑ•
это так119493
.источник
APL (NARS), 37 символов, 74 байта
перевод очень хорошего и очень маленького байтового решения APL пользователем Graham в решение, которое использует одну функцию вместо стандартного ввода ... test и как его использовать:
(я не говорю, что понял алгоритм)
источник
Perl 5 , 70 байт
Попробуйте онлайн!
источник