सिली स्टॉक मार्केट


16

कई लोगों के निवेश डेटा के साथ एक स्ट्रिंग को देखते हुए, पता करें कि उन्होंने कितना लाभ / हानि दर्ज की।

स्ट्रिंग में केवल कैपिटल और लोअरकेस अक्षर होते हैं, जैसे:

AABaBbba

प्रत्येक पत्र एक व्यक्ति का प्रतिनिधित्व करता है - एक कैपिटल लेटर का अर्थ है खरीदना, एक लोअरकेस अक्षर का मतलब बेचना। वे जिस शेयर (CGLF) में निवेश कर रहे हैं उसकी कीमत $ 50 से शुरू होती है। किसी को खरीदने के बाद, कीमत 5% बढ़ जाती है। किसी को बेचने के बाद कीमत 5% कम हो जाती है। आपको यह पता लगाने की आवश्यकता है कि प्रत्येक व्यक्ति जिसने भाग लिया / खो दिया है, कितना पैसा है।

टिप्पणियाँ:

  • स्ट्रिंग हमेशा मान्य होगी, पहली खरीद के बिना कोई बिक्री नहीं। साथ ही, जो कोई शेयर खरीदता है, वह अंततः उसे बेच देगा।
  • आपकी गणना कम से कम 6 दशमलव स्थानों पर सटीक होनी चाहिए। हालांकि, अंतिम उत्तरों को दो दशमलव तक गोल किया जाना चाहिए।

परीक्षण के मामलों:

इनपुट: AABaBbba

  • एक: खरीदें - $ 50
  • एक: खरीदें - $ 52.50
  • बी: खरीदें - $ 55.125
  • a: बेचना - $ 57.88125
  • बी: खरीदें - $ 54.9871875
  • b: बेचें - $ 57.736546875
  • b: बेचें - $ 54.8497195313
  • a: बेचें - $ 52.1072335547
  • व्यक्ति लाभ: 57.88125+52.1072335547-50-52.50=7.4884835547
  • व्यक्ति बी लाभ: 57.736546875+54.8497195313-55.125-54.9871875=2.4740789063

आउटपुट: A:7.49,B:2.47 (कोई फर्क नहीं पड़ता, विभाजकों की आवश्यकता नहीं है)


इनपुट: DGdg

  • डी: खरीदें - $ 50
  • जी: खरीदें - $ 52.50
  • डी: बेचें - $ 55.125
  • जी: बेचें - $ 52.36875
  • व्यक्ति डी लाभ: 55.125-50=5.125
  • व्यक्ति जी लाभ: 52.36875-52.50=-0.13125

आउटपुट: D:5.13,G:-.13


इनपुट: ADJdja

  • एक: खरीदें - $ 50
  • डी: खरीदें - $ 52.50
  • जे: खरीदें - $ 55.125
  • डी: बेचें - $ 57.88125
  • j: बेचें - $ 54.9871875
  • a: बेचें - $ 52.237828125
  • व्यक्ति का लाभ: 52.237828125-50=2.237828125
  • व्यक्ति डी लाभ: 57.88125-52.50=5.38125
  • व्यक्ति जे लाभ: 54.9871875-55.125=-0.1378125

आउटपुट: A:2.24,D:5.38,J:-.14


@ETHproductions जब आप आउटपुट प्रिंट करते हैं, तो यह वास्तव में मायने नहीं रखता है कि डेटाटाइप क्या है, इसे सही जानकारी देने की आवश्यकता है।
जियोकॉवेल

क्या गोल के बजाय अंतिम परिणाम को छोटा किया जा सकता है?
Mwr247

@ मेरा क्षमा करें, आपको गोल करना है।
जियोकॉवेल

क्या हमें वर्णमाला के क्रम में लोगों का उत्पादन करना है?
पुरकाकूदरी

इसके अलावा, अजगर roundअजीब तरह से सामान; डिफ़ॉल्ट रूप 5.125से राउंड 5.12। क्या यह स्वीकार है?
पुरकाकूदरी

जवाबों:



3

जावा, 277 बाइट्स

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

बहुत सारे स्वरूपण अनावश्यक हैं। दशमलव बिंदु ठीक होने से पहले 0 होना, अल्पविराम और कॉलोन आवश्यक नहीं हैं।
जियोकालेवल

यह मेरी बाइट की गिनती को काफी कम कर देता है
बाइटबिट

वर्ग को सार्वजनिक होने की आवश्यकता नहीं है।
एक स्पेगेटो

क्या लोकेल को निर्दिष्ट करना आवश्यक है? मुझे कोई आपत्ति नहीं है अगर यह "3,54" के रूप में दिखाई देता है।
जियोकॉवेल

अपने पैसे को स्टोर करें float, इससे बाइट्स
बचती हैं

2

जावास्क्रिप्ट (ईएस 7), 145 142 बाइट्स

मुझे परिणाम निकालने का कोई छोटा रास्ता नहीं मिल रहा है ...

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

मजेदार तथ्य: यह केवल 101 बाइट्स होगा यदि राउंडिंग आवश्यकता के लिए नहीं:

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 बाइट्स लगती हैं..मुझे यकीन है कि आप एक बेहतर तरीका पा सकते हैं!
जियोकॉवेल

2

पायथन 3, 116 बाइट्स

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

यह सिर्फ u=2*(c>C)-1सीधे करने के लिए छोटा लगता है ।
xnor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.