Pasar Saham Konyol


16

Diberikan string dengan data investasi beberapa orang, cari tahu berapa untung / rugi yang mereka catat.

String hanya berisi huruf kapital dan huruf kecil, seperti ini:

AABaBbba

Setiap huruf mewakili seseorang - huruf kapital berarti membeli, huruf kecil berarti menjual. Harga saham yang mereka investasikan (CGLF) mulai dari $ 50. Setelah seseorang membeli, harganya naik 5%. Setelah seseorang menjual harganya turun 5%. Anda perlu mencari tahu berapa banyak uang yang dihasilkan / hilang setiap orang.

Catatan:

  • String akan selalu valid, tidak ada penjualan tanpa pembelian terlebih dahulu. Juga, setiap orang yang membeli saham pada akhirnya akan menjualnya.
  • Perhitungan Anda harus akurat hingga setidaknya 6 tempat desimal. Namun, jawaban akhir harus dibulatkan menjadi dua desimal.

Kasus uji:

Memasukkan: AABaBbba

  • A: Beli - $ 50
  • A: Beli - $ 52,50
  • B: Beli - $ 55,125
  • a: Jual - $ 57,88125
  • B: Beli - $ 54.9871875
  • b: Jual - $ 57,736546875
  • b: Jual - $ 54.8497195313
  • a: Jual - $ 52,1072335547
  • Orang yang mendapat untung: 57.88125+52.1072335547-50-52.50=7.4884835547
  • Keuntungan Orang B: 57.736546875+54.8497195313-55.125-54.9871875=2.4740789063

Output: A:7.49,B:2.47 (pesanan tidak masalah, pemisah tidak diperlukan)


Memasukkan: DGdg

  • D: Beli - $ 50
  • G: Beli - $ 52,50
  • d: Jual - $ 55,125
  • g: Jual - $ 52.36875
  • Keuntungan Orang D: 55.125-50=5.125
  • Laba Orang G: 52.36875-52.50=-0,13125

Keluaran: D:5.13,G:-.13


Memasukkan: ADJdja

  • A: Beli - $ 50
  • D: Beli - $ 52,50
  • J: Beli - $ 55,125
  • d: Jual - $ 57,88125
  • j: Jual - $ 54.9871875
  • a: Jual - $ 52.237828125
  • Keuntungan Orang A: 52.237828125-50=2.237828125
  • Orang D untung: 57.88125-52.50=5.38125
  • Orang J untung: 54.9871875-55.125=-0.1378125

Keluaran: A:2.24,D:5.38,J:-.14


@ ETHproductions Ketika Anda mencetak output, tidak peduli apa datatype itu, hanya perlu menyampaikan informasi yang benar.
— geokavel

Bisakah hasil akhir dipotong daripada dibulatkan?
— Mwr247

@ Mcr Maaf, Anda harus membulatkan.
— geokavel

Apakah kita harus menampilkan orang-orang dalam urutan abjad?
— PurkkaKoodari

Juga, roundhal-hal Python aneh; 5.125putaran ke 5.12secara default. Apakah ini diterima?
— PurkkaKoodari

Jawaban:


0

Japt, 91 84 byte

A=[]J=50¡AhD=Xc %H(X<'_?[AgD ª0 -JJ*=1.05]:[AgD +JJ*=.95] g};A£X©[Y+I d X*L r /L]} f

Berdasarkan jawaban JS saya. Cobalah online!


3

Java, 277 byte

class c{public static void main(String[]a){double[]m=new double[26];double s=50;for(byte b:a[0].getBytes()){if(b>=97){m[b-97]+=s;s*=.95;}else{m[b-65]-=s;s*=1.05;}}char g=65;for(double k:m){if(k!=0){System.out.println(g+String.format(java.util.Locale.ENGLISH,"%.2f",k));}g++;}}}

Tidak Terkumpul:

class c {
    public static void main(String[]a) {
        double[] m = new double[26];
        double s = 50;
        for(byte b : a[0].getBytes()) {
            if(b>=97) {
                m[b-97]+=s;  
                s*=.95;
            } else {
                m[b-65]-=s;
                s*=1.05;
            }
        }
        char g=65;
        for(double k:m) {
            if(k!=0) {
                System.out.println(g+String.format(java.util.Locale.ENGLISH,"%.2f",k));
            }
            g++;
        }
    }
}

Banyak format tidak perlu. Memiliki 0 sebelum titik desimal ok, koma dan titik dua tidak diperlukan.
— geokavel

hebat ini mengurangi jumlah byte saya secara signifikan
— ByteBit

Kelas tidak perlu bersifat publik.
— spaghetto

Apakah menentukan Lokal diperlukan? Saya tidak keberatan jika itu muncul sebagai "3,54".
— geokavel

Simpan uang Anda dalam float, ini menghemat byte dan mungkin memberi Anda keuntungan ekstra;)
— RobAu

2

JavaScript (ES7), 145 142 byte

Saya tidak dapat menemukan cara yang lebih singkat untuk melengkapi hasilnya ...

x=>[for(c of(i=50,a={},x))(a[d=c.toUpperCase()]=a[d]||0,c<"["?(a[d]-=i,i*=1.05):(a[d]+=i,i*=.95))]&&Object.keys(a).map(k=>[k,a[k].toFixed(2)])

Fakta menyenangkan: ini hanya akan menjadi 101 byte jika bukan karena persyaratan pembulatan:

x=>[for(c of(i=50,a={},x))(a[d=c.toUpperCase()]=a[d]||0,c<"["?(a[d]-=i,i*=1.05):(a[d]+=i,i*=.95))]&&a

43 byte sepertinya jauh ... Saya yakin Anda dapat menemukan cara yang lebih baik!
— geokavel

2

Python 3, 116 byte

P=50
M={}
for c in input():C=c.upper();u=c>C;u+=~-u;M[C]=M.get(C,0)+P*u;P*=1-u*.05
for k in M:print(k,round(M[k],2))

Tidak disatukan

price = 50
profits = {}
for char in input():
    upper = char.upper()
    direction = 2 * (char > upper) - 1
    profits[upper] = profits.get(upper, 0) + price * direction
    price *= 1 - direction * .05
for key in profits:
    print(key, round(profits[key], 2))

Tampaknya lebih singkat untuk dilakukan u=2*(c>C)-1secara langsung.
— xnor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.