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.