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

geokavel
sumber
@ 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!

Produksi ETH
sumber
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++;
        }
    }
}
ByteBit
sumber
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
Produksi ETH
sumber
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))
PurkkaKoodari
sumber
Tampaknya lebih singkat untuk dilakukan u=2*(c>C)-1secara langsung.
xnor