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.