배경
이 과제는 다음 다이어그램을 게시 한이 웹 사이트에서 영감을 얻은 것입니다 .
이 다이어그램은 250 미만의 가장 긴 로마 숫자 표현이 188의 표현이므로 9 개의 숫자가 필요하다는 것을 보여줍니다.
도전
가장 로마 숫자를 표현하기 위해 사용되는 표준 기호는 다음과 같다 : { I
, V
, X
, L
, C
, D
, M
}, 문자 '수치는 어디 M
= 1000, D
= 500, C
= 100, L
= 50, X
= 10, V
= 5 I
= 1.
이 과제에서 목표는 양의 정수 n이 주어지면 n 개의 표준 심볼 을 연결하여 구성 할 수있는 유효한 로마 숫자 표현의 수를 계산하는 것 입니다.
그런 다음 프로그램에서이 계산 결과를 출력해야합니다!
입력 : 양의 정수 n .
출력 : 길이 n 의 유효한 로마 숫자 표현의 수 .
로마 숫자 표현 규칙
로마 숫자는 원래 "첨가"쌍만 있었으며 숫자는 항상 내림차순으로 작성되었으며 모든 숫자 값의 합은 숫자 값이었습니다.
나중에, 빼기 쌍화에서 더 작은 것을 더 크게 빼기 위해 더 큰 숫자 앞에 더 큰 숫자를 배치하는 것은 로마 숫자 표현을 단축하는 흔한 일이되었습니다. 다음과 같은 잘못된 식과 같이 빼기 쌍을 연결할 수 없습니다 IXL
.
다음은 가산 및 감산 페어링에 대한 최신 규칙입니다.
- 빼기 쌍의 일부에서 선행 숫자로 하나의 I, X 및 C 만 사용할 수 있습니다.
- 빼기 쌍으로 V 또는 X 앞에만 배치 할 수 있습니다.
- X는 빼기 쌍에서 L 또는 C 앞에만 배치 할 수 있습니다.
- C는 빼기 쌍에서 D 또는 M 앞에만 배치 할 수 있습니다.
- 빼기 쌍 이외의 숫자는 내림차순이어야합니다 (즉, 각 빼기 쌍의 선행 숫자를 삭제하면 숫자가 내림차순 임).
- M, C 및 X는 더 작은 단위로 같거나 초과 할 수 없습니다.
- D, L 및 V는 각각 한 번만 나타날 수 있습니다.
- M 만 4 번 이상 반복 할 수 있습니다.
추가 사항
우리는 막대 표기법을 사용하지 않을 것입니다 . 오히려, 우리는 단순히 숫자를 표현하기 위해 더 많은 M을 추가 할 것 입니다.
이것이 로마 숫자에 대해 따를 유일한 규칙입니다. 즉,와 같은 이상한 표현
IVI
도 시스템에서 유효한 것으로 간주됩니다.또한 일부 숫자는 여러 개의 표현식을 가지므로 길이 n의 표현식을 갖는 숫자의 수는 계산하지 않습니다 . 대신, 우리는 단지 유효한 표현의 수를 세고 있습니다.
테스트 사례
1
→ 7
2
→ 31
3
→ 105
위의 내용을 직접 확인 했으므로 테스트 사례를 다시 확인하고 가능한 경우 추가하십시오.
승리 기준
이것은 코드 골프 도전이므로 재미있게 보내십시오! 적어도 1에서 9까지의 입력을 처리 할 수있는 솔루션 만 허용합니다. 더 이상 보너스입니다!
편집하다
주석 작성자의 요청에 따라 아래 또는이 pastebin 링크에서 n = 3으로 계산 한 105 콤보를 찾으십시오.
III IVI IXI IXV IXX VII XII XIV XIX XVI XXI XXV XXX XLI XLV XLX XCI XCV XCX XCL XCC LII LIV LIX LVI LXI LXV LXX CII CIV CIX CVI CXI CXV CXX CXL CXC CLI CLV CLX CCI CCV CCX CCL CDCC CD CD CDC CD CD CDC CD CDC CD CDC CD CDC CD CD CDC CD CDC CD CDC CD CDC CD CDC CD CDC CD CMI CMV CMX CML CMC CMD CMM DII DIV DIX DVI DXI DXV DXX DXL DXC DLI DLV DLX DCI DCV DCX DCL DCC MII MIV MIX MVI MXI MXV MXX MXL MXC MLI MLV MLX MCI MCV MCX MCL MCC MCD MCM MDI MDV MDX MDL MDC MMX MML MMC MMD MMM
편집 2 :
Jonathan Allan이 제공 한 다음 골프 공 코드를 사용 하여 결과를 확인하십시오.
편집 3 :
이 과제의 모든 오류에 대해 사과드립니다. 다음에 더 나은 일을하도록하겠습니다!