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.