GALAXY MERCHANT TRADING GUIDE

Permasalahan

Anda memutuskan untuk pergi dari bumi setelah keruntuhan finansial terbaru meninggalkan
99,99% populasi bumi dengan 0,01% dari kekayaan. Untungnya, dengan sedikit uang yang tersisa
di rekening, Anda mampu menyewa pesawat ruang angkasa, meninggalkan bumi, dan terbang ke
seluruh galaksi untuk menjual logam dan kotoran (yang tampaknya sangat berharga).
Jual beli di seluruh galaksi mengharuskan Anda untuk mengubah angka dan unit, Anda akhirnya
memutuskan untuk menulis program untuk membantu Anda.
Angka yang digunakan untuk transaksi intergalaksi mengikuti konvensi yang mirip dengan angka
romawi dan tanpa program, Anda kesusahan mengumpulkan terjemahan yang sesuai di antara
mereka. Angka romawi adalah berdasarkan tujuh simbol dibawah ini :
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
Angka dibentuk dengan menggabungkannya dengan simbol dan menjumlahkan nilainya. Misalnya,
MMVI adalah 1000 + 1000 + 5 + 1 = 2006. Umumnya, simbol ditempatkan dalam urutan nilai,
dimulai dengan nilai terbesar. Saat nilai yang lebih kecil mendahului nilai yang lebih besar, nilai
yang lebih kecil akan dikurangi nilai yang lebih besar, dan hasilnya ditambahkan ke total. Misalnya
MCMXLIV = 1000 + (1000 - 100) + (50 - 10) + (5 - 1) = 1944.
Simbol "I", "X", "C", dan "M" dapat diulang tiga kali berturut-turut, tetapi tidak boleh
lebih. (Mereka dapat muncul empat kali jika yang ketiga dan keempat dipisahkan oleh nilai yang
lebih kecil, seperti XXXIX.)
"D", "L", dan "V" tidak pernah bisa diulang.
"I" hanya dapat dikurangi dari "V" dan "X". "X" hanya dapat dikurangi dari "L" dan "C". "C" bisa
dikurangi dari "D" dan "M" saja. "V", "L", dan "D" tidak pernah bisa dikurangi.
Hanya satu simbol dengan nilai kecil yang dapat dikurangkan dari simbol denga nilai besar mana
pun.
Angka yang ditulis dalam angka arab dapat dipecah menjadi beberapa digit. Misalnya, 1903 terdiri
dari 1, 9, 0, dan 3. Untuk menulis angka romawi, setiap angka bukan nol harus diperlakukan secara
terpisah.
Dalam contoh di atas, 1.000 = M, 900 = CM, dan 3 = III. Oleh karena itu, 1903 = MCMIII.
- Sumber: Wikipedia ( http://en.wikipedia.org/wiki/Roman_numerals )
Test Input:
-------------
glob is I
prok is V
pish is X
tegj is L
glob glob Silver is 34 Credits
glob prok Gold is 57800 Credits
pish pish Iron is 3910 Credits
how much is pish tegj glob glob ?
how many Credits is glob prok Silver ?
how many Credits is glob prok Gold ?
how many Credits is glob prok Iron ?
how much wood could a woodchuck chuck if a woodchuck could chuck wood ?
Expecting Output:
---------------
pish tegj glob glob is 42
glob prok Silver is 68 Credits
glob prok Gold is 57800 Credits
glob prok Iron is 782 Credits
I have no idea what you are talking about

Solusi

Identifikasi pola input

Input dari permasalahan ini dapat dibagi menjadi 5 kategori, yaitu :

  1. Definisi alias
    input :

    glob is I
    prok is V
    pish is X
    tegj is L
    

    Pola : [alias] is [simbol_romawi]
    Pola jenis ini akan memberikan nama lain/alias dari simbol romawi (I-M).

  2. Definisi metal
    input:

    glob glob Silver is 34 Credits
    glob prok Gold is 57800 Credits
    pish pish Iron is 3910 Credits
    

    Pola input ini adalah : [alias] is [angka] Credits

  3. Jawab pertanyaan how many
    input:

    how many Credits is glob prok Silver ?
    how many Credits is glob prok Gold ?
    how many Credits is glob prok Iron ?
    

    Pola : [h/H]ow many Credits is [alias] [nama_metal] ?

  4. Jawab pertanyaan how much
    input:

    how much is pish tegj glob glob ?
    

    Pola : [h/H]ow much is [alias] ?

  5. Input tidak diketahui
    input:

    how much wood could a woodchuck chuck if a woodchuck could chuck wood ?
    

    Pola : Tidak cocok dengan semua pola diatas

Penanganan Input

Ide nya adalah menerapkan algoritma yang berbeda setiap kategori input.
Penggolongan input adalah tanggung jawab dari Input Pattern Detector.
Setelah input diketahui kategorinya, maka akan diberikan algoritma yang berbeda (see: Currency calculator ).

Rancangan aplikasi

Aplikasi android terdiri dari dua modul, yaitu :app dan :currency_converter. Semua proses logic penanganan permasalahan akan dilakukan di modul :currency_converter, sehingga modul :app hanya perlu memanggil fungsi .convert(text) untuk mendapatkan output dari text didalam editText dan menampilkannya ke textView.

GitHub

View Github