나는 달러로만 지불


14

제목은 (단독적으로도) 암시하지만, 나는 단지 달러로 지불합니다.

도전

문자열을 입력으로 사용하는 함수 / 프로그램을 작성하십시오. 이는 기호 앞에 오는 통화 값입니다. ex) £4.99. 그런 다음 동일한 금액을 USD로 변환하여 반환하십시오.

입력

입력으로 문자열을 얻습니다. 통화 기호 다음에 소수점 이하 두 자리 ()가있는 숫자가 표시 .00됩니다. 숫자를 .구분 ,하는 소수점 및 / 또는 쉼표가 있습니다. 다음과 같은 통화 기호가 입력됩니다.

유로 : €
파운드 스털링 : £
위안 인민폐 : ¥

또한 '달러'와 '센트'를 구분하기 위해 통화에 따라 쉼표 또는 소수점이 있습니다.

유로 : #. ###, ##
파운드 스털링 : #, ###. ##
위안 인민폐 : #, ###. ##

산출

기호로 결정된 통화의 입력을 소수점 이하 두 자리로 반올림하여 USD로 변환합니다. 출력 형식 $#,###.##은이며 필요한 경우 출력 왼쪽에 더 많은 숫자가 있습니다 ( EDIT : 입력과 마찬가지로 출력에 임의의 수의 쉼표가 있음을 의미합니다 ). 우리가 사용할 통화 환율은 다음과 같습니다.

입력에 위의 ( € £ ¥ . ,) 중 하나 인 기호가 포함되어 있다고 가정 할 수 있습니다 . 항상 유효합니다.

환율

€1 : $1.10
£1 : $1.37
¥1 : $0.15

Input:
€1,37
£4.00
¥2,782,122.78

Respective output:
$1.51
$5.48
$417,318.42

마지막 단어

  1. 위의 기호 중 하나 (€, £, ¥)를 사용하면 1 바이트로 계산할 수 있습니다.
  2. 이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

1
진정한 l10n을 사용하려면 renminbi에 1k 마크가 ​​아닌 10k 마크에 쉼표 구분 기호가 있어야합니다. (예 10,0000.15)
하지 않는 것이 찰스

24
만약 당신이 어제이 질문을 게시했다면, 영국 파운드의 환율은 £1 : $1.51xD 일 것입니다
Kevin Cruijssen

1
좋아요 @Adnan, 그렇게하겠습니다. 끝난.
Daniel

2
흠, 그 출력이 맞습니까? 1.37 * 1.10 = 1,507 = 1,51(그렇지 않은 1.52) 그리고 4.00 * 1.37 = 5.48(하지 않은 5.50) 그리고 2782122.78 * 0.15 = 417318.417 = 417318.42(않는 420165.06) ... : S
Kevin Cruijssen 2016 년

1
@KevinCruijssen, Google을 사용하여 변환 할 때 환율이 이미 변경되었음을 알았습니다. 고쳤다.
Daniel

답변:


1

피스 -54 53 48 47 바이트

조건부 적용을 잊었습니다 W.

.F"${:,.2f}"*v-tXWqhQ\€Q",.")\,@[1.1.15d1.37)Ch

테스트 스위트 .


흠 .. 나인가요, 아니면 바이트 단위로 Pyth에 대한 큰 대답입니까? o.Ô 그것은 자바 답변 의 거의 1/4입니다 ! (보통 1 / 50의 정도 ..의 xD)
케빈 Cruijssen

1
@KevinCruijssen 예, 문자열 형식과 원시 통화 데이터는 거의 절반 크기입니다.
Maltysen

5

Python 3.6 (시험판), 87

lambda s:f"${int(s.translate({46:'',44:''})[1:])*[110,15,0,137][ord(s[0])%4]/1e4:,.2f}"

f- 문자열 을 사용 하여 결과를 평가하고 형식을 지정합니다 .

s.translate({46:'',44:''})에서 점과 쉼표를 제거 s하여 유효한 int리터럴로 만든 다음 int(...)실제 int객체 로 변환 합니다.


4

볼록, 56 55 54 바이트

(\®\.|,"ö)\e_\'.\++~\"€£¥"#[1.1_.27+.15]=*"%,.2f"\Ø'$\

글쎄, 이것은 분명히 단축 될 수 있습니다. 온라인으로 사용해보십시오!

Lynn 덕분에 바이트를 절약했습니다!

컴퓨터에 액세스 할 수있을 때 나오는 설명입니다.


어때요 [1.1_.27+.15]?
Lynn

@Lynn thats 천재! 감사!
GamrCorps 2016 년

"컴퓨터에 접근 할 수있을 때 다가올 계획"은 놀라운 읽기 불가능한 작은 내용이 모바일 장치 에 쓰여졌다는 것을 암시합니다 . 잘하고 배운 학자. 잘 했어.
strugee

1
@ strugee 그래, 하루 종일 나왔지만이 목적으로 내 iPhone 용 CP-1252 키보드를 만들었습니다.
GamrCorps 2016 년

왜 마지막 55 바이트 마크가 나오나요? 또한,에 오타 definetely - 확실히 .
user48538

3

파이썬 3.5 137 131 121 120 117 바이트 :

( 6 바이트 절약에 대한 힌트는 Maltysen 에게 감사 합니다 (137 -> 131)!)

lambda u:'${:,.2f}'.format(float(u[1:].translate([{44:''},{44:46,46:''}]['€'in u]))*{'€':1.1,'£':1.37,'¥':.15}[u[0]])

온라인으로 사용해보십시오! (아이디어)


2
당신은 당신의 자신의 반올림을 할 필요가 없습니다, .format()당신이하는 경우 당신을 위해 그것을 수행${:,.2f}
Maltysen

@Maltysen 감사합니다! 나는 그것을 할 수 있다는 것을 몰랐다! :)
R. Kap

46:0점을 NUL 문자로 바꿉니다.
vaultah

@vaultah 그래서 무엇? 유로 입력에 적용됩니다.
R. Kap

@ vaultah 글쎄, Ideone 과 내 컴퓨터 에서 완벽하게 작동 합니다.
R. Kap

3

자바 스크립트 (ES6), 107

간단하고 직설적 이며 아마도 골프를 더 잘 할 수 있습니다.

참고 : FireFox에서 테스트되었습니다. 많은 브라우저 (특히 모바일)는toLocaleString

a=>(a.replace(/\D/g,'')/1e4*(a<'¥'?137:a>'€'?110:15)).toLocaleString('en',{style:'currency',currency:'USD'})

테스트

function test()
{
  var i=I.value
  var F=a=>(a.replace(/\D/g,'')/1e4*(a<'¥'?137:a>'€'?110:15)).toLocaleString('en',{style:'currency',currency:'USD'})
  O.textContent=F(i)
}

test()
<input id=I value='¥2,782,122.78' oninput='test()'>
<pre id=O></pre>


Firefox에서만 이것을 테스트 할 수있었습니다. Firefoex에 대한 링크를 제공해 주시겠습니까?
NoOneIsHere6

@NoOneIsHereGoogle "Firefoex", 철자가 틀리더라도 정확한 링크를 제공합니다
edc65

3

자바 7 240 227 215 211 207 202 199 196 바이트

" 위의 기호 (€, £, ¥) 중 하나를 사용하는 경우 1 바이트로 계산할 수 있습니다. ") 많은 바이트를 저장 한 @Frozn 에게
감사 합니다.

String c(String a){int c=a.charAt(0);return java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US).format(new Long(a.substring(1).replaceAll(",|\\.",""))*(c<'¥'?1.37:c>'¥'?1.1:.15)/100);}

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class Main{
  static String c(String a){
    int c = a.charAt(0);
    return java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US)
        .format(new Long(a.substring(1).replaceAll(",|\\.","")) *
                 (c < '¥'
                   ? 1.37
                   : c > '¥'
                     ? 1.1
                     : .15
                  ) / 100);
  }

  public static void main(String[] a){
    System.out.println(c("€1,37"));
    System.out.println(c("£4.00"));
    System.out.println(c("¥2,782,122.78"));
  }
}

산출:

$1.51
$5.48
$417,318.42

2
char c=a.charAt(0)(전체적으로 당신은 전혀 필요하지 않습니다 c, 내 대답을 참조하십시오)
edc65 2016 년

1
잡아 당기는으로 d *삼항의 아웃 일부 중복을 저장합니다. 다음과 같습니다 : d*(c=='€'?1.1:c=='£'?1.37:.15)/100.
Frozn

@Frozn 감사합니다. 또한 불행히도 /100*.01같은 바이트 양이며 c=='€'?.011:c=='£'?.0137:.0015또한와 동일합니다 /100.
Kevin Cruijssen 2016 년

1
그래, 나쁘다 그러나 좋은 소식은 다음과 같습니다. 통화 기호의 고유 한 유니 코드 값 덕분에을 (를) 단축 할 수 있습니다 '£' < '¥' < '€'. 따라서 c<'¥'?1.37:c>'¥'?1.1:.152 자 더 짧은 글 을 쓸 수 있습니다 .
Frozn

1
d한 번만 사용 되므로 더 이상 필요하지 않습니다 .
Frozn

1

F #, 198 바이트

(s:string)="$"+(System.Double.Parse(if s.[0]='€'then s.[1..].Replace(".","").Replace(',','.')else s.[1..].Replace(",",""))*(if s.[0]='€'then 1.1 else if s.[0]='£'then 1.37 else 0.15)).ToString("N2")

언 골프 :

let IOnlyUseDollars(s : string) = 
    let cur = s.[0]
    let str = if cur = '€' then s.[1..].Replace(".","").Replace(',', '.') else s.[1..].Replace(",","")
    let amt = System.Double.Parse(str)
    let dol = amt * (if cur = '€' then 1.1 else if cur = '£' then 1.37 else 0.15)
    "$" + dol.ToString("N2")

나는 여전히 F #을 알아 내려고 노력하고 있으므로 수천 구분 기호를 처리하는 데 많은 바이트가 필요합니다.

챌린지 규칙에 따르면, 유로, 엔 및 파운드 기호는 유니 코드가 내부적으로 저장하는 방법에도 불구하고 각각 1 바이트로 계산됩니다.


1

파이썬 3.5, 101 98

lambda x:'${:,.2f}'.format(int(x[1:].translate({44:'',46:''}))*{'€':110,'£':137,'¥':15}[x[0]]/1e4)

챌린지 규칙에 따라 유로, 파운드 및 엔 기호는 각각 1 바이트 / 문자로 계산됩니다.

천 단위와 소수점 구분 기호를 변환하거나 해석하는 대신 일반 숫자 문자열을 제공하기 위해 제거됩니다.

통화 기호 뒤의 숫자 문자열은 정수로 변환됩니다.

통화 기호는 전환율 사전에 대한 색인으로 사용됩니다. 변환율을 곱하고 10000으로 나눔으로써 변환이 수행된다.

결과는 선행 달러 기호, 소수점 이하 두 자리, 그룹화를위한 쉼표로 형식이 지정됩니다.


1 바이트를 저장하기 위해 1.10에서 0을 삭제하지 않는 이유는 무엇입니까?
다니엘

을 건너 뛸 수 있습니다. 비율과 1e4로 나누기
agtoever

0

파이썬 3, 112 바이트가 작동하지 않습니다

def c(x):x=x.translate(None,",.");print“$”+‘{:,.2f}’.format([1.1,1.37,0.15][“€£¥”.index(x[0])]*int(x[1:])/100,2)

나는 내 자신의 질문에 대답 할 수 있다고 생각하지 않기 때문에 경쟁하지 않습니다.

또한, 나는 아직 컴퓨터에서 이것을 실행할 기회가 없었지만 그것이 작동하는 것처럼 보입니다. 기회가 생기면 바로 컴퓨터에서 실행하겠습니다.


4
당신은 당신 자신의 질문에 대답하는 것이 좋습니다. 어떤 사람들은 질문을하기 전에 대답을 내기도합니다. 보통 그들은 여전히 ​​Jelly, Pyth, Pyke 등과 같은 골프 언어에 구타를 당합니다. ;)
Kevin Cruijssen 2016 년

0

PHP, 117 바이트

function f($s){return'$'.number_format(ereg_replace('[^0-9]','',substr($s,1))*[E=>.011,P=>.0137,Y=>.0015][$s[0]],2);}

이것은 더 이상 사용되지 않는 함수를 사용합니다. 교체 ereg_replace('[^0-9]'preg_replace('%[^\d]%'코드가 완전히 현대적인 만드는; 1 바이트를 추가합니다.


0

CJam, 54 바이트

'$q(\",."-de-2\"€£¥"#[1.1 1.37 .15]=*2mOs'./~\3/',*'.@

여기 사용해보십시오!


좋은 답변, 사이트에 오신 것을 환영합니다! 그냥 알다시피, 온라인 CJam 인터프리터가 여기에 당신은 / 실행에 독자 쉽도록 게시물에 그 링크 답변을 테스트 할 수 있습니다.
James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.