6 votes

Le code de ce convertisseur de nombres romains en nombres entiers peut-il être plus court ?

95 octets actuellement en python

I,V,X,L,C,D,M,R,r=1,5,10,50,100,500,1000,vars(),lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)

Voici quelques résultats de tests, cela devrait fonctionner pour 1 à 3999 (en supposant que l'entrée est uniquement un caractère valide).

>>> r("I")
1
>>> r("MCXI")
1111
>>> r("MMCCXXII")
2222
>>> r("MMMCCCXXXIII")
3333
>>> r("MMMDCCCLXXXVIII")
3888
>>> r("MMMCMXCIX")
3999

Et cela ne fait pas double emploi avec cette , celui-ci est inversé.

Est-il donc possible de faire plus court en Python, ou d'autres langages comme ruby peuvent-ils être plus courts ?

3voto

gnibbler Points 103484

Python - 94 caractères

coup bas :)

I,V,X,L,C,D=1,5,10,50,100,500
M,R,r=D+D,vars(),lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)

1voto

barkmadley Points 3526

En fait, la définition de ma propre fromJust est plus petite, un total de 98

r=foldl(\t c->t+y c-t`mod`y c*2)0 --34
y x=f$lookup x$zip"IVXLCDM"[1,5,10,50,100,500,1000] --52
f(Just x)=x --12
  -- assumes correct input

Haskell se rapproche.

import Data.Maybe --18
r=foldl(\t c->t+y c-t`mod`y c*2)0 --34
y x=fromJust$lookup x$zip"IVXLCDM"[1,5,10,50,100,500,1000] --59

nombre total d'octets = 111

Ce serait 93 si je n'avais pas besoin de l'import pour fromJust

0voto

ammoQ Points 17866

Adopter une réponse de Jon Skeet à une question similaire posée précédemment :

Dans mon langage de programmation personnalisé "CPL1839079", il s'agit de 3 octets :

r=f

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X