바보 주식 시장


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
  • 개인 A 이익 : 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

또한 파이썬은 round이상하게 들립니다. 기본적으로 5.125반올림합니다 5.12. 이것이 허용됩니까?
PurkkaKoodari

답변:



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

언 골프 드 :

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

자바 스크립트 (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

파이썬 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))

언 골프

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.