Dumme Börse

16

Ermitteln Sie anhand einer Zeichenfolge mit den Investitionsdaten mehrerer Personen, wie viel Gewinn / Verlust sie verbucht haben.

Die Zeichenfolge enthält nur Groß- und Kleinbuchstaben wie folgt:

AABaBbba

Jeder Buchstabe steht für eine Person - ein Großbuchstabe bedeutet kaufen, ein Kleinbuchstabe bedeutet verkaufen. Der Kurs der Aktie, in die sie investieren (CGLF), beginnt bei 50 USD. Nachdem jemand gekauft hat, steigt der Preis um 5%. Nachdem jemand verkauft hat, sinkt der Preis um 5%. Sie müssen herausfinden, wie viel Geld jede Person, die teilgenommen hat, verdient / verloren hat.

Anmerkungen:

  • Die Zeichenfolge ist immer gültig, kein Verkauf ohne ersten Kauf. Außerdem wird jeder, der eine Aktie kauft, diese letztendlich verkaufen.
  • Ihre Berechnungen sollten auf mindestens 6 Dezimalstellen genau sein. Die endgültigen Antworten sollten jedoch auf zwei Dezimalstellen gerundet werden.

Testfälle:

Eingang: AABaBbba

  • A: Kaufen - 50 US-Dollar
  • A: Kaufen - 52,50 USD
  • B: Kaufen - 55,125 $
  • a: Verkaufen - $ 57,88125
  • B: Kaufen - 54,9871875 USD
  • b: Verkaufen - $ 57.736546875
  • b: Verkaufen - 54,8497195313 $
  • a: Verkaufen - $ 52.1072335547
  • Person A Gewinn: 57.88125+52.1072335547-50-52.50=7.4884835547
  • Person B Gewinn: 57.736546875+54.8497195313-55.125-54.9871875=2.4740789063

Ausgabe: A:7.49,B:2.47 (Reihenfolge spielt keine Rolle, Trennzeichen nicht erforderlich)


Eingang: DGdg

  • D: Kaufen - 50 $
  • G: Kaufen - 52,50 USD
  • d: Verkauf - 55,125 USD
  • g: Verkaufen - 52,36875 $
  • Person D Gewinn: 55.125-50=5.125
  • Person G Gewinn: 52.36875-52.50=-0,13125

Ausgabe: D:5.13,G:-.13


Eingang: ADJdja

  • A: Kaufen - 50 US-Dollar
  • D: Kaufen - 52,50 USD
  • J: Kaufen - 55,125 $
  • d: Verkaufen - $ 57,88125
  • j: Verkaufen - 54,9871875 $
  • a: Verkaufen - $ 52.237828125
  • Person A Gewinn: 52.237828125-50=2.237828125
  • Person D Gewinn: 57.88125-52.50=5.38125
  • Person J Gewinn: 54.9871875-55.125=-0,1378125

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

Geokavel
quelle
@ETHproductions Wenn Sie eine Ausgabe drucken, spielt es keine Rolle, um welchen Datentyp es sich handelt, sondern es müssen nur die richtigen Informationen übermittelt werden.
Geokavel
Kann das Endergebnis abgeschnitten statt gerundet werden?
Mwr247,
@Mwr Sorry, du musst runden.
Geokavel
Müssen wir die Personen in alphabetischer Reihenfolge ausgeben?
PurkkaKoodari
Auch Pythons roundZeug ist komisch; 5.125rundet 5.12standardmäßig auf. Wird das akzeptiert?
PurkkaKoodari

Antworten:

0

Japt, 91 84 Bytes

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

Basierend auf meiner Antwort von JS. Probieren Sie es online!

ETHproductions
quelle
3

Java, 277 Bytes

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++;}}}

Ungolfed:

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
quelle
Viele Formatierungen sind nicht erforderlich. Eine 0 vor dem Dezimalpunkt ist in Ordnung, Kommas und Doppelpunkte sind nicht erforderlich.
Geokavel
Großartig,
Die Klasse muss nicht öffentlich sein.
ein Spaghetto
Ist die Angabe des Gebietsschemas erforderlich? Es macht mir nichts aus, wenn es als "3,54" angezeigt wird.
Geokavel
Speichern Sie Ihr Geld in a float, dies spart Bytes und kann Ihnen zusätzlichen Gewinn bringen;)
RobAu
2

JavaScript (ES7), 145 142 Bytes

Ich kann keinen kürzeren Weg finden, um die Ergebnisse abzurunden ...

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)])

Unterhaltsame Tatsache: Dies wären nur 101 Bytes, wenn nicht die Rundungsanforderung erfüllt wäre:

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
ETHproductions
quelle
43 Bytes scheinen zu viel zu sein. Ich bin sicher, Sie können einen besseren Weg finden!
Geokavel
2

Python 3, 116 Bytes

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))

Ungolfed

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
quelle
Es scheint kürzer zu sein, direkt zu tun u=2*(c>C)-1.
Xnor