sfondo
Questa sfida è ispirata a questo sito Web, che ha pubblicato il seguente diagramma:
Questo diagramma ci mostra che la più lunga espressione numerica romana inferiore a 250 è quella di 188, che richiede 9 numeri per esprimersi.
Sfida
I simboli standard utilizzati per esprimere numeri più romani sono i seguenti: { I
, V
, X
, L
, C
, D
, M
}, dove i valori numerici dei personaggi sono M
= 1000, D
= 500, C
= 100, L
= 50, X
= 10, V
= 5, I
= 1.
In questa sfida, il tuo obiettivo è, dato un numero intero positivo n , calcolare il numero di rappresentazioni numerali romane valide che possono essere composte concatenando n dei simboli standard.
Quindi, il tuo programma deve produrre il risultato di questo calcolo!
Input : un numero intero positivo n .
Output : il numero di espressioni numeriche romane valide di lunghezza n .
Regole per le espressioni numerali romane
I numeri romani originariamente avevano solo un accoppiamento "additivo", il che significa che i numeri erano sempre scritti in ordine decrescente, e la somma dei valori di tutti i numeri era il valore del numero.
In seguito, l'associazione sottrattiva, l'uso di posizionare un numero più piccolo davanti a un più grande per sottrarre il più piccolo dal più grande, divenne un luogo comune per abbreviare le espressioni numerali romane. Coppie sottrattivi non possono essere concatenati, come nel seguente espressione non valida: IXL
.
Di seguito sono riportate le regole moderne per l'accoppiamento additivo e sottrattivo.
- Solo un I, X e C può essere usato come numero iniziale in parte di una coppia sottrattiva.
- Posso essere piazzato solo prima di V o X in una coppia sottrattiva.
- X può essere posizionato solo prima di L o C in una coppia sottrattiva.
- C può essere posizionato solo prima di D o M in una coppia sottrattiva.
- Oltre alle coppie sottrattive, i numeri devono essere in ordine decrescente (il che significa che se si rilascia il numero iniziale di ciascuna coppia sottrattiva, i numeri saranno in ordine decrescente).
- M, C e X non possono essere eguagliati o superati con tagli più piccoli.
- D, L e V possono apparire solo una volta.
- Solo M può essere ripetuto 4 o più volte.
Ulteriori note
Non useremo la notazione a barre ; piuttosto, aggiungeremo semplicemente più M per esprimere qualsiasi numero.
Queste sono le uniche regole che seguiremo per i nostri numeri romani. Ciò significa che anche espressioni dispari, come quelle
IVI
, saranno considerate valide nel nostro sistema.Ricorda inoltre che non stiamo contando il numero di numeri che hanno espressioni di lunghezza n , poiché alcuni numeri hanno espressioni multiple. Invece, contiamo solo il numero di espressioni valide.
Casi test
1
→ 7
2
→ 31
3
→ 105
Ho controllato manualmente quanto sopra, quindi assicurati di ricontrollare i casi di test e aggiungerne altri se puoi!
Criteri vincenti
Questo è un codice-golf sfida di , quindi divertiti! Accetterò solo soluzioni in grado di gestire almeno input da 1 a 9. Un altro bonus!
modificare
Come richiesto dai commentatori, trova di seguito, o in questo link pastebin, le 105 combinazioni che ho contato per 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 CDC CDC CDC CMI CMV CMX CML CMC CMD CMM DII DIV DIX DIV 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 MDV MMX MML MMC MMD MMM
Modifica 2:
Utilizzare il seguente codice non golfato , per gentile concessione di Jonathan Allan per verificare i risultati.
Modifica 3:
Mi scuso per tutti gli errori in questa sfida. La prossima volta mi assicurerò di fare un lavoro migliore!