fundo
Esse desafio é inspirado neste site, que publicou o seguinte diagrama:
Este diagrama mostra-nos que a expressão mais longa do numeral romano abaixo de 250 é a do 188, que requer 9 números para ser expressa.
Desafio
Os símbolos padrão utilizados para expressar numerais mais romanos são os seguintes: { I
, V
, X
, L
, C
, D
, M
}, em que os valores numéricos dos personagens são M
= 1.000, D
= 500, C
= 100, L
= 50, X
= 10, V
= 5, I
= 1.
Nesse desafio, seu objetivo é, dado um número inteiro positivo n , calcular o número de representações válidas de números romanos que podem ser compostas através da concatenação de n dos símbolos padrão.
Então, seu programa deve gerar o resultado desse cálculo!
Entrada : Um número inteiro positivo n .
Saída : O número de expressões numéricas romanas válidas de comprimento n .
Regras para expressões numéricas romanas
Os algarismos romanos originalmente tinham apenas pareamento "aditivo", o que significa que os números sempre eram escritos em ordem decrescente, e a soma dos valores de todos os números era o valor do número.
Posteriormente, o emparelhamento subtrativo, o uso de colocar um número menor na frente de um maior para subtrair o menor do maior, tornou-se comum para encurtar as expressões do numeral romano. Pares subtrativos não pode ser acorrentado, como na seguinte expressão inválida: IXL
.
A seguir, estão as regras modernas para o emparelhamento aditivo e subtrativo.
- Somente um I, X e C podem ser usados como o número inicial em parte de um par subtrativo.
- Só posso ser colocado antes de V ou X em um par subtrativo.
- X só pode ser colocado antes de L ou C em um par subtrativo.
- C só pode ser colocado antes de D ou M em um par subtrativo.
- Além dos pares subtrativos, os números devem estar em ordem decrescente (o que significa que, se você soltar o número inicial de cada par subtrativo, os números estarão em ordem decrescente).
- M, C e X não podem ser igualados ou excedidos por denominações menores.
- D, L e V podem aparecer apenas uma vez.
- Somente M pode ser repetido 4 ou mais vezes.
Notas adicionais
Não usaremos a notação de barra ; em vez disso, basta adicionar mais M s para expressar qualquer número.
Estas são as únicas regras que seguiremos para os nossos algarismos romanos. Isso significa que expressões estranhas, como
IVI
, também serão consideradas válidas em nosso sistema.Lembre-se também de que não estamos contando o número de números que têm expressões de comprimento n , pois alguns números têm várias expressões. Em vez disso, estamos contando apenas o número de expressões válidas.
Casos de teste
1
→ 7
2
→ 31
3
→ 105
Eu verifiquei o item à mão, por isso, verifique os casos de teste e adicione mais se puder!
Critérios Vencedores
Este é um desafio de código-golfe , então divirta-se! Só aceitarei soluções que possam lidar com pelo menos entradas de 1 a 9. Mais um bônus!
Editar
Conforme solicitado pelos comentaristas, encontre abaixo, ou neste link para colar, os 105 combos que eu contei para n = 3
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 CCL CDL CDV CDX 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 MLX MCI MCV MCX MCL MCC MCD MCD MCD MDL MMX MML MMC MMD MMM
Edição 2:
Use o código a seguir , como cortesia de Jonathan Allan, para verificar seus resultados.
Edição 3:
Peço desculpas por todos os erros deste desafio. Vou fazer um trabalho melhor da próxima vez!