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


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.