ตลาดหุ้นโง่


16

รับสตริงที่มีข้อมูลการลงทุนของหลาย ๆ คนค้นหาว่าพวกเขาบันทึกกำไร / ขาดทุนจำนวนเท่าใด

สตริงมีเพียงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กเช่นนี้

AABaBbba

ตัวอักษรแต่ละตัวแสดงถึงบุคคล - ตัวพิมพ์ใหญ่หมายถึงซื้อตัวอักษรตัวเล็กหมายถึงขาย ราคาหุ้นที่พวกเขาลงทุน (CGLF) เริ่มต้นที่ $ 50 หลังจากมีคนซื้อราคาก็สูงขึ้น 5% หลังจากมีคนขายราคาก็ลดลง 5% คุณต้องคิดออกว่าแต่ละคนที่เข้าร่วมทำ / แพ้จะต้องใช้เงินเท่าไหร่

หมายเหตุ:

  • สตริงจะใช้ได้ตลอดไม่มีการขายโดยไม่ต้องซื้อครั้งแรก ทุกคนที่ซื้อหุ้นจะขายมันในที่สุด
  • การคำนวณของคุณควรแม่นยำถึงตำแหน่งทศนิยมอย่างน้อย 6 ตำแหน่ง อย่างไรก็ตามคำตอบสุดท้ายควรปัดเศษเป็นทศนิยมสองตำแหน่ง

กรณีทดสอบ:

การป้อนข้อมูล: AABaBbba

  • A: ซื้อ - $ 50
  • A: ซื้อ - $ 52.50
  • B: ซื้อ - $ 55.125
  • a: ขาย - $ 57.88125
  • B: ซื้อ - $ 54.9871875
  • b: ขาย - $ 57.736546875
  • b: ขาย - $ 54.8497195313
  • a: ขาย - $ 52.1072335547
  • บุคคลกำไร: 57.88125+52.1072335547-50-52.50=7.4884835547
  • กำไรบุคคล B: 57.736546875+54.8497195313-55.125-54.9871875=2.4740789063

เอาท์พุท: A:7.49,B:2.47 (คำสั่งไม่สำคัญไม่จำเป็นต้องมีตัวคั่น)


การป้อนข้อมูล: DGdg

  • D: ซื้อ - $ 50
  • G: ซื้อ - $ 52.50
  • d: ขาย - $ 55.125
  • g: ขาย - $ 52.36875
  • กำไรบุคคล D: 55.125-50=5.125
  • กำไรบุคคล G: 52.36875-52.50=-0.13125

เอาท์พุท: D:5.13,G:-.13


การป้อนข้อมูล: ADJdja

  • A: ซื้อ - $ 50
  • D: ซื้อ - $ 52.50
  • J: ซื้อ - $ 55.125
  • d: ขาย - $ 57.88125
  • j: ขาย - $ 54.9871875
  • a: ขาย - $ 52.237828125
  • บุคคล A กำไร: 52.237828125-50=2.237828125
  • บุคคลกำไร D: 57.88125-52.50=5.38125
  • กำไรบุคคล J: 54.9871875-55.125=-0.1378125

เอาท์พุท: A:2.24,D:5.38,J:-.14


@ETHproductions เมื่อคุณพิมพ์เอาต์พุตมันไม่สำคัญว่าประเภทข้อมูลคืออะไรมันแค่ต้องการถ่ายทอดข้อมูลที่ถูกต้อง
geokavel

ผลลัพธ์สุดท้ายสามารถถูกตัดทอนแทนการปัดเศษได้หรือไม่?
Mwr247

@Mwr ขออภัยคุณต้องปัดเศษ
geokavel

เราต้องส่งออกคนตามลำดับตัวอักษร?
PurkkaKoodari

นอกจากนี้ Python roundยังมีสิ่งแปลกประหลาด 5.125ปัดเศษเป็น5.12ค่าเริ่มต้น เป็นที่ยอมรับหรือไม่?
PurkkaKoodari

คำตอบ:



3

Java, 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 ก่อนจุดทศนิยมก็โอเคไม่จำเป็นต้องใช้คอมม่าและโคลอน
geokavel

ยอดเยี่ยมนี้ช่วยลดจำนวนไบต์ของฉันลงอย่างมาก
ByteBit

ชั้นไม่จำเป็นต้องเป็นสาธารณะ
ปาเก็ตตี้

การระบุสถานที่จำเป็นหรือไม่ ฉันไม่คิดว่ามันจะปรากฏเป็น "3,54"
geokavel

เก็บเงินของคุณในfloatนี้ช่วยประหยัดไบต์และอาจได้รับคุณบางกำไรพิเศษ;)
RobAu

2

JavaScript (ES7), 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 ไบต์จะมาก .. ฉันแน่ใจว่าคุณสามารถหาวิธีที่ดีกว่า!
geokavel

2

Python 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.