fork download
  1. @Mathematica
  2.  
  3. romanNumeralMax[n_]:=Module[{romanNumeral,lst,maxlength},
  4.  
  5. (* Function *)
  6. romanNumeral[nx_]:=Module[{nToRoman,nnToRoman,nnnToRoman,nnnnToRoman},
  7.  
  8. nToRoman[mx_]:=mx//
  9. Which[
  10. #==0,"",
  11. #==1,"I",
  12. #==2,"II",
  13. #==3,"III",
  14. #==4,"IV",
  15. #==5,"V",
  16. #==6,"VI",
  17. #==7,"VII",
  18. #==8,"VIII",
  19. #==9,"IX",
  20. True,""]&;
  21.  
  22. nnToRoman[mx_]:=mx//
  23. nToRoman//
  24. StringReplace[#,{"I"->"X","V"->"L","X"->"C"}]&;
  25.  
  26. nnnToRoman[mx_]:=mx//
  27. nToRoman//
  28. StringReplace[#,{"I"->"C","V"->"D","X"->"M"}]&;
  29.  
  30. nnnnToRoman[mx_]:=mx//
  31. nToRoman//
  32. StringReplace[#,{"I"->"M","V"->"*","X"->"*"}]&;
  33.  
  34. nx//
  35. IntegerDigits//
  36. PadLeft[#,4]&//
  37. {nnnnToRoman[#[[1]]],nnnToRoman[#[[2]]],nnToRoman[#[[3]]],nToRoman[#[[4]]]}&//
  38. StringJoin
  39. ];
  40.  
  41. (* Data & Parameter *)
  42. lst=n//
  43. Range//
  44. Map[{#,romanNumeral[#]}&,#]&//
  45. Map[{#[[1]],StringLength[#[[2]]]}&,#]&;
  46.  
  47. maxlength=lst//
  48. Map[#[[2]]&,#]&//
  49. Max;
  50.  
  51. (* Results *)
  52. lst//
  53. Select[#,#[[2]]==maxlength&]&//
  54. Map[#[[1]]&,#]&
  55. ];
  56.  
  57.  
  58. In[1] := romanNumeralMax[1887]
  59. Out[1] = {888, 1388, 1788, 1838, 1878, 1883, 1887}
  60.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty