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


@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:



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

Viele Formatierungen sind nicht erforderlich. Eine 0 vor dem Dezimalpunkt ist in Ordnung, Kommas und Doppelpunkte sind nicht erforderlich.
— Geokavel


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

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

Es scheint kürzer zu sein, direkt zu tun u=2*(c>C)-1.
— Xnor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.