Gringotes não é apenas um cofre, mas uma instituição financeira respeitável e assistentes também precisam de empréstimos. Como você não quer ser ferrado pelos duendes de Gringotes, decidiu que seria uma boa ideia escrever um programa para calcular juros. Os juros são compostos apenas anualmente.
Sua tarefa é calcular o valor total devido após os juros, considerando o principal, a taxa de juros e o tempo (anos inteiros), operando em denominações inteiras de dinheiro dos feiticeiros, arredondando para o Knut inteiro mais próximo. Existem 29 Knuts de bronze em uma foice de prata e 17 foices em um galeão de ouro.
Exemplo
Loan taken out:
23 Knuts
16 Sickles
103 Galleons
@ 7.250%
For 3 years
Total owed after interest:
24 Knuts
4 Sickles
128 Galleons
Notas e Regras
- A entrada e a saída podem estar em qualquer formato conveniente. Você deve conhecer Knuts, Foice, Galeão, taxa de juros e tempo. Todos, exceto a taxa de juros, serão números inteiros. A taxa de juros está em incrementos de 0,125%.
- O dinheiro de entrada não é garantido como canônico (ou seja, você pode ter 29 ou mais Knuts e 17 ou mais foices.)
- A saída deve ser a representação canônica. (ou seja, menos de 29 Knuts e menos de 17 Foices)
- Os totais devidos, até 1.000 galeões, devem ser precisos dentro de 1 Knut por ano de interesse, quando comparados com cálculos de precisão arbitrários.
- Você pode arredondar para baixo após cada ano de interesse ou apenas no final. Os cálculos de referência podem levar isso em consideração para verificações de precisão.
Feliz golfe!
0.0725
vez de7.25
)rounding down
Respostas:
R ,
7062 bytesExperimente online!
Toma entrada como d: depósito em knuts, foices, galeões; i: taxa de juros como decimal; y: anos. Produz depósito final em knuts, foices, galeões. Obrigado a @ Giuseppe por usar a multiplicação de matrizes para economizar alguns bytes (e apontar como evitar a necessidade de quebrar em 1e99).
fonte
%%
função, que é mod. Idealmente, eu gostaria de deixar os galeões sozinhos, mas usar um número infinito de mod retorna NaN e, portanto, acabei de usar um número muito grande (mas que é pequeno em bytes). As alternativas que eu vim acima com são mais longos (por exemplo, [ tio.run/##JYrLCsIwEEV/... Experimente online!])9e99
bem ... Além disso, você pode golfe até 63 bytesPython 3.8 (pré-lançamento) ,
757471 bytes-1 bytes graças a @EmbodimentofIgnorance
-3 bytes graças a @xnor
Isso leva Knuts, Sickles e Galeões como ints, juros como float (decimal, não porcentagem) e anos como int. Retorna uma tupla contendo o número após o interesse de Knuts, Foice e Galeão, respectivamente.
Uso:
Experimente online!
fonte
operating in whole denominations of wizard money, rounding down
. Tomeirounding down
a significarchop off everything after the decimal point.
Usando o cabeçalho definitivamente soa como uma maneira mais fácil de fazer as coisas. Eu vou fazer isso para posts futuros, graçasI\=
o cabeçalho dessa maneira . Além disso, parece quek//29//17
pode serk//493
.APL + WIN,
37 2826 bytes2 bytes economizados graças ao lirtosiast
Experimente online! Cortesia de Dyalog Classic
Explicação:
fonte
⌊a⊤(⎕⊥⍨a←0 17 29)×⎕*⍨1+⎕
por 24?Perl 6 , 47 bytes
Experimente online!
Estou surpreso por ter conseguido colocar isso em um anonimamente, lambda! Especialmente a parte em que é mais
*
do que qualquer outra coisa. Toma entrada comointerest rate (e.g. 0.0725), years, [Knuts, Sickles, Galleons]
e retorna uma lista de moedas na mesma ordem.Explicação:
fonte
*
segundos, mas mais bytes). O resto dos*
s são de multiplicação (*
) e exponenciais (**
)Gelatina , 29 bytes
Um programa completo aceitar argumentos:
rate
;[Galleons, Sickles, Knuts]
;years
.Impressões
[Galleons, Sickles, Knuts]
.Experimente online!
Pisos no final de todo o período.
÷ȷ2
pode ser removido se aceitarmos a taxa como uma proporção e não como uma porcentagem.Quão?
fonte
Conjunto de FPU Intel 8087, 86 bytes
Desmontado e documentado:
Implementado como um MACRO (basicamente uma função), este é um código de máquina não específico do SO, usando apenas o co-processador Intel 80x87 FPU / matemática para o cálculo.
Exemplo de programa de teste com saída:
Resultado
fonte
Japonês, 48 bytes
Minha primeira tentativa no Japt, indo para a recompensa de @ Shaggy! Escusado será dizer que isso não é muito golfe :(
Experimente Online!
fonte
Haskell , 73 bytes
Experimente online!
Obrigado a @Laikoni por dois bytes.
Os truques sujos: o número de moedas na entrada é ponto flutuante (
Double
), enquanto o número de moedas na saída é integral (Integer
). O resultado é um par aninhado((Galleons, Sickles), Knotts)
para evitar ter que achatar para um triplo.Explicação
fonte
(truncate$ ... )
->truncate( ... )
e em(g#s)k r n
vez dec g s k r n
.Stax , 24 bytes
Execute e depure
Entrada é valores separados por espaço.
interest years knuts sickles galleons
A saída é separada por nova linha.
fonte
TI-BASIC (TI-84),
9690 bytesA entrada é
Ans
uma lista com 5 itens: Knuts, Foice, Galeões, Juros (decimal) e Tempo (anos).A saída é
Ans
impressa e automaticamente impressa quando o programa é concluído.Sem golfe:
Exemplo:
Explicação:
Uma nova lista
∟C
,, é criada eAns
armazenada nela.Os Knuts, Foices e Galeões são convertidos em Knuts e armazenados em
T
.Toma a quantidade de Knuts e aplica juros compostos a ela.
Os juros são calculados aqui.
Armazena o I nteger Parte do
T
modulo 493 emR
. Usado para reduzir a contagem de bytes.Avalia uma lista com 3 itens (Knuts, Foice e Galeão). A lista é automaticamente armazenada
Ans
.Nota: A contagem de bytes é avaliada considerando a contagem de bytes fornecida em [MEM] → [2] → [7] (lista de programas na RAM) e subtraindo a quantidade de caracteres no nome do programa e mais 8 bytes usados para o programa:
103-5-5 = 90 bytes
fonte
K, 46 bytes
c
armazene a lista para conversão baset
é a função que calcula a quantidade totalUse exemplo:
escreve
(128;4;24.29209)
Explicação:
c/:x
transformar a lista (galeão; foice; knuts) em kuts1+y%100
calcular taxa de juros (exemplo 1.0725 para taxa de 7,25%)O lambda
{z(y*)\x}
faz o trabalho: itere 3 vezes, aplicando interes * main e retorna final main.c\:
gera galeão, foices, knuts a partir de knutsNOTA.- se você não precisar de uma função de nomes, podemos usar um lambda, economizando 2 bytes
{c\:{z(y*)/x}[c/:x;1+y%100;z]}inputArgs
fonte
C # (compilador interativo do Visual C #) , 86 bytes
Tira inout como uma tupla nomeada com 3 valores que representam knuts, foices e galeões e a taxa de juros como um dobro (não uma porcentagem). Eu realmente gostaria que o C # tivesse um operador de exponenciação. Math.Pow é muito longo :(
Experimente online!
fonte
Lote, 171 bytes
Recebe entrada como argumentos de linha de comando na ordem Galleons, Sickles, Knuts, interesse, anos. O interesse é uma porcentagem, mas expresso sem o sinal de%. Trunca após todos os anos. A saída está na ordem Galeões, foices e Knuts. Suporta pelo menos 5000 galeões. Explicação:
O lote possui apenas aritmética inteira. Felizmente, a taxa de juros é sempre um múltiplo de
0.125
. Começamos dividindo na vírgula decimal, para que elai
se torne a parte inteira da taxa de juros ef
da fração decimal. Estes são multiplicados por 8. O primeiro dígito def
agora é o número de oitavos na taxa de juros percentual.Isso é então extraído usando o fatiamento de cordas e adicionado para fornecer uma taxa de juros em 1/800ths. O número de Knuts também é calculado.
Calcule e adicione os juros de cada ano.
Converta de volta para Galeões e Foices.
fonte
05AB1E (herdado) , 24 bytes
Porto da resposta do Perl 6 do @JoKing , por isso não deixe de vota-lo também se você gosta desta resposta!
Estou usando a versão legada devido a um bug na nova versão em que
£
que não funciona com números inteiros, portanto, uma conversão explícita para string§
(entre o segundo•
e o3
) (até que o bug seja corrigido).Toma o interesse como decimal, seguido pelo ano, seguido pela lista de [Knuts, Foice, Galeões].
Experimente online.
Explicação:
Veja este 05AB1E ponta do meu (seção Como comprimir grandes inteiros? ) Para entender por que
•1ýÑ•
é119493
.fonte
APL (NARS), 37 caracteres, 74 bytes
tradução da solução APL muito boa e com poucos bytes pelo usuário Graham para uma solução que usa uma função em vez da entrada padrão ... test e como usá-la:
(não digo que entendi algoritmo)
fonte
Perl 5 , 70 bytes
Experimente online!
fonte