목표 :
숫자를 입력으로 사용하고 해당 숫자의 짧은 로마 숫자를 출력으로 반환하는 함수를 작성하십시오.
로마 숫자 기호 :
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
"짧은 로마 숫자"라고 할 때의 의미에 대한 예를 들어, 1983 년을 나타내는 로마 숫자를 찾는 것을 고려해 봅시다. 왜냐하면 그것이 내가 태어난 해이기 때문입니다. 한 가지 옵션은 일반적인 방법으로 10자를 입력하는 것입니다.
1983 = MCMLXXXIII = ( 1000-100 + 1000 + 50 + 30 + 3)
다른 옵션은 간단한 방법 (6 자)입니다.
1983 년 = MXVIIM = (1000-(10 + 10) + 1000 + 3)
이것이 무엇을 의미하는지 아십니까?!? !! ?? 로마인이라면 생년월일을 쓸 때마다 4자를 저장할 수있었습니다! Woot Woot !!
그러나 흥분을 극복하기 전에 글을 써야 할 질문이 있으므로 로마 숫자 규칙을 정의해야 할 것이므로 모두 같은 페이지에 있습니다.
속기 로마 숫자 규칙 :
- 더 이상 고려할 문자가 없을 때까지 항상 왼쪽에서 오른쪽으로 기호를 고려하십시오.
- 현재 심볼 오른쪽에 더 높은 값의 심볼이없는 경우 :
- 이 로마 숫자의 누계에 현재 기호의 값을 더하십시오.
- 기호 오른쪽에 더 높은 값의 기호가있는 경우 다음을 고려합니다.
- 현재 기호의 가장 오른쪽에있는 가장 높은 값의 기호를 찾습니다
- 해당 기호까지의 모든 문자를 로마 숫자로 간주하십시오.
- 이 단계를 사용하여 로마 숫자의 값을 계산하십시오.
- 이 로마 숫자의 누계에서 로마 숫자의 값을 뺍니다.
- 방금 고려한 그룹 다음에있는 다음 기호로 이동
- 각 로마 숫자에는 적어도 하나의 기호가 있어야합니다.
- 그게 다야! 이 규칙을 따르는 것은 허용됩니다!
예 :
IIIIV = (-(1+1+1+1)+5) = 1 //Don't ask me why you'd want to do this!
VVX = (-(5+5) + 10) = 0 //Who said you couldn't represent 0 with roman numerals?!!?
VVXM = (-(-(5+5) + 10) + 1000) = 1000 //Again...don't ask me why you'd want to do this!
MXIIXMI = (1000-(10-(1+1)+10)+1000+1) = 1983 //Ahhh...such a great year :)
질문 규칙 :
위의 규칙을 사용하여 단일 숫자를 입력으로 사용하고 해당 숫자의 로마 숫자를 출력으로 반환하는 함수를 만듭니다. 이 함수 의 codeGolfScore 를 계산하십시오 .
example input: 2011 example possible output: MMXI another possible output: MMVVIVV //(2000 + 10 - 4 + 5)
규칙 1의 함수를 사용하여 -1000 (즉, NEGATIVE 1000)과 3000 사이의 로마 숫자를 생성합니다. 그런 다음 로마 숫자의 문자 길이를 합하여 totalCharacterCount 를 얻 습니다 . 명확히하는 의사 코드는 다음과 같습니다.
totalCharacterCount = 0; for(currentNumber = -1000; currentNumber <= 3000; currentNumber++){ totalCharacterCount += getRomanNumeral(currentNumber).length; } return totalCharacterCount;
finalScore = codeGolfScore + totalCharacterCount
- 가장 낮은 finalScore가 승리합니다!
참고 : totalCharacter 수는 10 만 + 이상이므로 문자 길이 알고리즘이 최우선 순위 여야합니다. 코드 골프 점수는 여러 사용자가 서로 가까이있는 최적의 알고리즘을 찾은 경우를 대비 한 평가 기준입니다.
행운을 빌어 내일 밤 MMXII 축제에서 즐거운 시간을 보내십시오!
""
허용 VVX
됩니까, 아니면 사용해야 합니까?
IXV = -(-1 + 10) + 5 = -4
(가장 오른쪽 승리) 또는 IXV = -1 + 10 + 5 = 14
(가치가 높은 승리)입니까?
DDDDM
에 대한 서-1000
?