Aptal Borsa


16

Birden fazla kişinin yatırım verilerini içeren bir dize verildiğinde, ne kadar kar / zarar kaydettiklerini öğrenin.

Dize yalnızca büyük ve küçük harfler içerir, örneğin:

AABaBbba

Her harf bir kişiyi temsil eder - büyük harf satın almak, küçük harf satmak demektir. Yatırım yaptıkları hisse senedinin fiyatı (CGLF) 50 $ 'dan başlıyor. Birisi satın aldıktan sonra fiyat% 5 artar. Birisi sattıktan sonra fiyat% 5 düşer. Katılan her kişinin ne kadar para kazandığını / kaybettiğini bulmanız gerekir.

Notlar:

  • Dize her zaman geçerli olacak, ilk satın almadan satış yapamayacaksınız. Ayrıca, bir hisse satın alan herkes sonunda satacaktır.
  • Hesaplamalarınız en az 6 ondalık basamağa kadar doğru olmalıdır. Ancak, nihai cevaplar iki ondalık sayıya yuvarlanmalıdır.

Test Durumları:

Giriş: AABaBbba

  • A: Satın al - 50 $
  • A: Satın al - 52,50 $
  • B: Satın Al - $ 55.125
  • a: Sat - $ 57.88125
  • B: Satın Al - $ 54.9871875
  • b: Sat - $ 57.736546875
  • b: Satış - 54.8497195313
  • a: Sat - $ 52.1072335547
  • Kişi A kar: 57.88125+52.1072335547-50-52.50=7.4884835547
  • Kişi B karı: 57.736546875+54.8497195313-55.125-54.9871875=2.4740789063

Çıktı: A:7.49,B:2.47 (sipariş önemli değil, ayırıcılar gerekli değil)


Giriş: DGdg

  • D: Satın al - 50 TL
  • G: Satın Al - $ 52,50
  • d: Sat - 55.125 dolar
  • g: Sat - $ 52.36875
  • Kişi D kar: 55.125-50=5.125
  • Kişi G karı: 52.36875-52.50=-0.13125

Çıktı: D:5.13,G:-.13


Giriş: ADJdja

  • A: Satın al - 50 $
  • D: Satın Al - $ 52.50
  • J: Satın Al - $ 55.125
  • d: Sat - 57.88125 dolar
  • j: Sat - $ 54.9871875
  • a: Sat - $ 52.237828125
  • Kişi A kar: 52.237828125-50=2.237828125
  • Kişi D kar: 57.88125-52.50=5.38125
  • Kişi J karı: 54.9871875-55.125=-0.1378125

Çıktı: A:2.24,D:5.38,J:-.14


Çıktıları yazdırdığınızda, veri tipinin ne olduğu gerçekten önemli değil, sadece doğru bilgileri iletmesi gerekiyor.
— geokavel

Nihai sonuç yuvarlamak yerine kesilebilir mi?
— Mwr247

@Mwr Üzgünüm, yuvarlaman gerek.
— geokavel

İnsanları alfabetik sırayla çıkarmak zorunda mıyız?
— PurkkaKoodari

Ayrıca, Python rounds tuhaf şeyler; varsayılan olarak 5.125yuvarlar 5.12. Bu kabul edildi mi?
— PurkkaKoodari

Yanıtlar:



3

Java, 277 bayt

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

Biçimlendirmenin çoğu gereksizdir. Ondalık virgülünden önce 0 olması, virgül ve iki nokta üst üste işaretine gerek yoktur.
— geokavel

harika bu benim bayt sayımı önemli ölçüde azaltır
— ByteBit

Sınıfın halka açık olması gerekmez.
— bir

Yerel ayarı belirlemek gerekli mi? "3,54" olarak görünüp görünmediğini umursamıyorum.
— geokavel

Paranızı bir float
— mağazada saklayın

2

JavaScript (ES7), 145 142 bayt

Sonuçları tamamlamak için daha kısa bir yol bulamıyorum ...

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

Eğlenceli gerçek: yuvarlama gereksinimi için değilse sadece 101 bayt olurdu:

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 bayt çok görünüyor .. Eminim daha iyi bir yol bulabilirsin!
— geokavel

2

Python 3, 116 bayt

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)-1Doğrudan yapmak daha kısa görünüyor .
— xnor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.