Thị trường chứng khoán ngớ ngẩn


16

Đưa ra một chuỗi với dữ liệu đầu tư của nhiều người, hãy tìm hiểu xem họ đã ghi nhận bao nhiêu lãi / lỗ.

Chuỗi chỉ chứa chữ in hoa và chữ thường, như thế này:

AABaBbba

Mỗi chữ cái đại diện cho một người - một chữ cái viết hoa có nghĩa là mua, một chữ cái viết thường có nghĩa là bán. Giá của cổ phiếu mà họ đang đầu tư (CGLF) bắt đầu từ $ 50. Sau khi ai đó mua, giá tăng 5%. Sau khi ai đó bán giá giảm 5%. Bạn cần tính xem mỗi người tham gia kiếm được / mất bao nhiêu tiền.

Ghi chú:

  • Chuỗi sẽ luôn luôn hợp lệ, không bán mà không mua trước. Ngoài ra, tất cả những người mua một cổ phiếu sẽ bán nó cuối cùng.
  • Tính toán của bạn phải chính xác đến ít nhất 6 chữ số thập phân. Tuy nhiên, câu trả lời cuối cùng nên được làm tròn thành hai số thập phân.

Các trường hợp thử nghiệm:

Đầu vào: AABaBbba

  • A: Mua - $ 50
  • A: Mua - $ 52,50
  • B: Mua - $ 55,125
  • a: Bán - $ 57,88125
  • B: Mua - $ 54.9871875
  • b: Bán - $ 57,736546875
  • b: Bán - $ 54.8497195313
  • a: Bán - $ 52.1072335547
  • Lợi nhuận của người A: 57.88125+52.1072335547-50-52.50=7.4884835547
  • Lợi nhuận của người B: 57.736546875+54.8497195313-55.125-54.9871875=2,4740789063

Đầu ra: A:7.49,B:2.47 (thứ tự không quan trọng, không yêu cầu dấu phân cách)


Đầu vào: DGdg

  • D: Mua - $ 50
  • G: Mua - $ 52,50
  • d: Bán - $ 55,125
  • g: Bán - $ 52.36875
  • Lợi nhuận của người D: 55.125-50=5.125
  • Lợi nhuận của người G: 52.36875-52.50=-0,13125

Đầu ra: D:5.13,G:-.13


Đầu vào: ADJdja

  • A: Mua - $ 50
  • D: Mua - $ 52,50
  • J: Mua - $ 55,125
  • d: Bán - $ 57,88125
  • j: Bán - $ 54.9871875
  • a: Bán - $ 52,237828125
  • Lợi nhuận của người A: 52.237828125-50=2.237828125
  • Lợi nhuận của người D: 57.88125-52.50=5,38125
  • Lợi nhuận của người J: 54.9871875-55.125=-0.1378125

Đầu ra: A:2.24,D:5.38,J:-.14


@ETHproductions Khi bạn in đầu ra, thực sự không quan trọng kiểu dữ liệu là gì, nó chỉ cần truyền tải đúng thông tin.
geokavel

Kết quả cuối cùng có thể được cắt bớt thay vì làm tròn?
Mwr247

@Mwr Xin lỗi, bạn phải làm tròn.
geokavel

Chúng ta có phải xuất ra những người theo thứ tự bảng chữ cái không?
PurkkaKoodari

Ngoài ra, roundcông cụ Python kỳ lạ; 5.125làm tròn 5.12theo mặc định. Điều này có được chấp nhận không?
PurkkaKoodari

Câu trả lời:



3

Java, 277 byte

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

Ung dung:

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

Rất nhiều định dạng là không cần thiết. Có 0 trước dấu thập phân là ok, dấu phẩy và dấu hai chấm là không cần thiết.
geokavel

thật tuyệt, điều này làm giảm đáng kể số byte của tôi
ByteBit

Lớp học không cần phải công khai.
một spaghetto

Là chỉ định Địa điểm cần thiết? Tôi không phiền nếu nó hiện lên là "3,54".
geokavel

Lưu trữ tiền của bạn trong một float, điều này giúp tiết kiệm byte và có thể giúp bạn có thêm lợi nhuận;)
RobAu

2

JavaScript (ES7), 145 142 byte

Tôi không thể tìm thấy một cách ngắn hơn để làm tròn kết quả ...

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

Sự thật thú vị: đây sẽ chỉ là 101 byte nếu không có yêu cầu làm tròn:

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 byte dường như nhiều..Tôi chắc chắn bạn có thể tìm thấy một cách tốt hơn!
geokavel

2

Python 3, 116 byte

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

Bị đánh cắp

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

Có vẻ ngắn hơn để chỉ làm u=2*(c>C)-1trực tiếp.
xnor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.