Gringotts bukan hanya lemari besi, tetapi lembaga keuangan dan penyihir terkemuka juga membutuhkan pinjaman. Karena Anda tidak ingin dikacaukan oleh para goblin Gringotts, Anda memutuskan untuk menulis sebuah program untuk menghitung bunga. Bunga hanya diperparah setiap tahun.
Tugas Anda adalah untuk menghitung jumlah total utang setelah bunga diberikan pokok, tingkat bunga, dan waktu (sepanjang tahun), yang beroperasi di seluruh denominasi uang penyihir, dibulatkan ke seluruh Knut terdekat. Ada 29 Bronze Knuts di Silver Sickle dan 17 Sickles di Gold Galleon.
Contoh
Loan taken out:
23 Knuts
16 Sickles
103 Galleons
@ 7.250%
For 3 years
Total owed after interest:
24 Knuts
4 Sickles
128 Galleons
Catatan dan Aturan
- Input dan output mungkin dalam format apa pun yang nyaman. Anda harus menerima Knuts, Sickles, Galleon, suku bunga, dan waktu. Semua kecuali suku bunga akan menjadi bilangan bulat. Tingkat bunga adalah sebesar 0,125%.
- Uang input tidak dijamin kanonik (yaitu, Anda dapat memiliki 29 Knuts atau lebih dan 17 atau lebih Sabit.)
- Keluaran harus berupa representasi kanonik. (yaitu kurang dari 29 Knuts dan kurang dari 17 Sabit)
- Total utang, hingga 1.000 Galleon, harus akurat hingga dalam 1 Knut per tahun yang diminati bila dibandingkan dengan perhitungan presisi yang arbitrer.
- Anda dapat membulatkan setelah setiap tahun bunga atau hanya di akhir. Perhitungan referensi dapat memperhitungkan ini untuk pemeriksaan akurasi.
Selamat bermain golf!
0.0725
alih-alih7.25
)rounding down
Jawaban:
R ,
7062 byteCobalah online!
Mengambil input sebagai d: menyetor knut, sabit, galleon; i: suku bunga sebagai desimal; y: tahun. Menghasilkan setoran akhir dalam knuts, sabit, galleon. Terima kasih kepada @Giuseppe untuk menggunakan perkalian matriks untuk menghemat beberapa byte (dan menunjukkan bagaimana menghindari keharusan untuk membungkus pada 1e99).
sumber
%%
fungsi, yaitu mod. Idealnya, saya ingin meninggalkan galleon sendirian, tetapi mengambil sejumlah mod tanpa batas mengembalikan NaN, jadi saya baru saja menggunakan jumlah yang sangat besar (tetapi yang kecil dalam byte). Alternatif yang saya buat lebih panjang (mis. [ Tio.run / ##JYrLCsIwEEV/... Coba online!])9e99
juga ... Anda juga dapat bermain golf hingga 63 bytePython 3.8 (pra-rilis) ,
757471 byte-1 byte terima kasih kepada @EmbodimentofIgnorance
-3 byte terima kasih kepada @xnor
Ini membutuhkan Knuts, Sickles, dan Galleon sebagai int, bunga sebagai float (desimal, bukan persentase), dan tahun sebagai int. Ini mengembalikan tuple yang berisi nomor setelah bunga Knuts, Sickles, dan Galleons, masing-masing.
Pemakaian:
Cobalah online!
sumber
operating in whole denominations of wizard money, rounding down
. Aku mengambilrounding down
berartichop off everything after the decimal point.
Menggunakan header pasti terdengar seperti cara yang lebih mudah untuk melakukan sesuatu. Saya akan melakukannya untuk posting selanjutnya, terima kasihI\=
header seperti ini . Juga, sepertinyak//29//17
bisak//493
.APL + WIN,
37 2826 byte2 byte disimpan berkat lirtosiast
Cobalah online! Atas perkenan Dyalog Classic
Penjelasan:
sumber
⌊a⊤(⎕⊥⍨a←0 17 29)×⎕*⍨1+⎕
untuk 24?Perl 6 , 47 byte
Cobalah online!
Saya terkejut saya berhasil membuat ini menjadi lambda Apapun anonim! Terutama bagian di mana itu lebih
*
dari apa pun. Mengambil input sebagaiinterest rate (e.g. 0.0725), years, [Knuts, Sickles, Galleons]
dan mengembalikan daftar mata uang dalam urutan yang sama.Penjelasan:
sumber
*
s tetapi lebih byte). Sisanya*
berasal dari perkalian (*
) dan eksponensial (**
)Jelly , 29 byte
Sebuah program penuh menerima argumen:
rate
;[Galleons, Sickles, Knuts]
;years
.Cetakan
[Galleons, Sickles, Knuts]
.Cobalah online!
Lantai di akhir masa.
÷ȷ2
dapat dihapus jika kami dapat menerima tarif sebagai rasio daripada persentase.Bagaimana?
sumber
Perakitan FPU Intel 8087, 86 byte
Belum dirakit dan didokumentasikan:
Diimplementasikan sebagai MACRO (pada dasarnya fungsi), ini adalah kode mesin non-OS khusus menggunakan hanya Intel 80x87 FPU / matematika co-prosesor untuk perhitungan.
Contoh program uji dengan output:
Keluaran
sumber
Japt, 48 byte
Coba pertama saya di Japt, pergi untuk karunia @ Shaggy! Tak perlu dikatakan, ini tidak terlalu golf :(
Cobalah secara Online!
sumber
Haskell , 73 byte
Cobalah online!
Terima kasih kepada @Laikoni untuk dua byte.
Trik kotor: jumlah koin dalam input adalah floating point (
Double
), sedangkan jumlah koin dalam output adalah integral (Integer
). Hasilnya adalah pasangan bersarang((Galleons, Sickles), Knotts)
untuk menghindari meratakan ke tiga.Penjelasan
sumber
(truncate$ ... )
->truncate( ... )
dan(g#s)k r n
bukannyac g s k r n
.Stax , 24 byte
Jalankan dan debug itu
Input adalah nilai yang dipisahkan ruang.
interest years knuts sickles galleons
Output dipisahkan baris baru.
sumber
TI-BASIC (TI-84),
9690 BytesInput adalah
Ans
, daftar dengan 5 item: Knuts, Sickles, Galleons, Bunga (desimal), dan Waktu (tahun).Output dalam
Ans
dan secara otomatis dicetak ketika program selesai.Tidak golf:
Contoh:
Penjelasan:
Daftar baru,,
∟C
dibuat danAns
disimpan di dalamnya.Knuts, Sickles, dan Galleon dikonversi menjadi Knuts dan disimpan menjadi
T
.Mengambil jumlah Knuts dan menerapkan bunga majemuk untuk itu.
Bunga dihitung di sini.
Toko yang saya nteger Bagian dari
T
modulo 493 menjadiR
. Digunakan untuk mempersingkat jumlah byte.Mengevaluasi daftar dengan 3 item (Knuts, Sickles, dan Galleons). Daftar ini disimpan secara otomatis
Ans
.Catatan: Jumlah byte dievaluasi dengan mengambil jumlah byte yang diberikan dalam [MEM] → [2] → [7] (daftar program dalam RAM) dan mengurangi jumlah karakter dalam nama program dan 8 byte tambahan yang digunakan untuk program:
103 - 5 - 8 = 90 byte
sumber
K, 46 Bytes
c
simpan daftar untuk konversi basist
adalah fungsi yang menghitung jumlah totalGunakan contoh:
menulis
(128;4;24.29209)
Penjelasan:
c/:x
mengubah daftar (galleon; sabit; knuts) menjadi kuts1+y%100
menghitung suku bunga (misalnya 1,0725 untuk suku bunga 7,25%)lambda
{z(y*)\x}
melakukan pekerjaan: iterate 3 kali, menerapkan interes * main, dan mengembalikan main final.c\:
menghasilkan galleon, sabit, knuts dari knutsCATATAN.- jika Anda tidak memerlukan fungsi-nama, kita dapat menggunakan lambda, menghemat 2 byte
{c\:{z(y*)/x}[c/:x;1+y%100;z]}inputArgs
sumber
C # (Visual C # Interactive Compiler) , 86 byte
Dimasukkan sebagai tuple bernama dengan 3 nilai yang mewakili knut, sabit, dan galleon, dan suku bunga sebagai dobel (bukan persentase). Saya benar-benar berharap C # memiliki operator eksponensial. Math.Pow terlalu panjang :(
Cobalah online!
sumber
Batch, 171 byte
Mengambil input sebagai argumen baris perintah dalam urutan Galleon, Sabit, Knuts, bunga, tahun. Bunga adalah persentase tetapi dinyatakan tanpa tanda%. Potong setelah setiap tahun. Output dalam urutan Galleon, Sabit, Knuts. Mendukung setidaknya 5.000 Galleon. Penjelasan:
Batch hanya memiliki bilangan aritmatika. Untungnya, suku bunga selalu kelipatan
0.125
. Kita mulai dengan membagi titik desimal, sehinggai
menjadi bagian bilangan bulat dari suku bunga danf
fraksi desimal. Ini kemudian dikalikan dengan 8. Digit pertamaf
sekarang adalah angka delapan dalam tingkat bunga persentase.Ini kemudian diekstraksi menggunakan string slicing dan ditambahkan untuk memberikan tingkat bunga dalam 1/800-an. Jumlah Knuts juga dihitung.
Hitung dan tambahkan bunga setiap tahun.
Konversi kembali ke Galleon dan Sabit.
sumber
05AB1E (warisan) , 24 byte
Port dari @JoKing 's Perl 6 menjawab , jadi pastikan untuk menghapusnya juga jika Anda suka jawaban ini!
Saya menggunakan versi lawas karena bug di versi baru di mana
£
tidak bekerja pada bilangan bulat, jadi diperlukan pelemparan eksplisit ke string§
(antara yang kedua•
dan3
) (sampai bug diperbaiki).Mengambil bunga sebagai desimal, diikuti oleh tahun, diikuti oleh daftar [Knuts, Sickles, Galleons].
Cobalah online.
Penjelasan:
Lihat ini 05AB1E ujung tambang (bagian Cara kompres bilangan bulat besar? ) Untuk memahami mengapa
•1ýÑ•
adalah119493
.sumber
APL (NARS), 37 char, 74 byte
terjemahan dari solusi APL byte yang sangat baik dan sangat sedikit oleh pengguna Graham ke solusi yang menggunakan satu fungsi alih-alih input standar ... tes dan cara menggunakannya:
(Saya tidak mengatakan saya mengerti algoritma)
sumber
Perl 5 , 70 byte
Cobalah online!
sumber