Hi! Maybe you can use this algorithm:

Define a dictionary with these elements:

1000:'M',
900:'CM',
500: 'D',
400: 'CD',
100:"C",
90:'XC',
50:'L',
40:'XL',
10:'X',
9:'IX',
5:'V',
4:'IV',
1:'I'

Using this dictionary (romansDic), you define a recursive function:

toRomans(number){
        i = return the greatest key less than or equal to given key from 
‘romansDic'  .
        if (number == i ){
         return romansDic.get(number)
        }
        return string_concat(romansDic.get(i), toRomans(number-i))
}

Sorry for the pseudocode.

Saludos Pablo.


El 18 de sep. de 2020 10:46 -0300, Roelof Wobben via Pharo-users 
<pharo-users@lists.pharo.org>, escribió:
> Op 18-9-2020 om 06:45 schreef Richard O'Keefe:
> > Roman numerals are much more complicated and much less consistent
> > than most people realise.  The regular M DC LX VI system is both
> > more modern and less capable than anything the Romans would have
> > recognised.  In particular,
> >  - in the 8th century, N (short for "nulla") was adopted for zero
> >  - the Roman system always had fractions like S for 1/2, . for 1/12
> >  - there were numerals for much larger numbers.
> > Unicode code block [2150] has characters for the Roman numerals
> > including
> > 216C L ROMAN NUMERAL FIFTY
> > 216D C ROMAN NUMERAL ONE HUNDRED
> > 216E D ROMAN NUMERAL FIVE HUNDRED
> > 216F M ROMAN NUMERAL ONE THOUSAND
> > 2181 ↁ ROMAN NUMERAL FIVE THOUSAND
> > 2182 ↂ ROMAN NUMERAL TEN THOUSAND
> > 2187 ↇ ROMAN NUMERAL FIFTY THOUSAND
> > 2188 ↈ ROMAN NUMERAL ONE HUNDRED THOUSAND
> > (In fact these are ligated versions of forms using "apostrophic" brackets;
> > the pattern goes as high as you want, e.g., (((|))) for a million.
> > D and M were originally |) and (|).   There is
> >
> > So the first thing is to make sure that you understand the
> > requirements for the problem.
> > - Are you required to produce ASCII characters, required to
> >   produce Unicode ones, or allowed to produce either?
>
> as far as I can see from the tests only ASCI characters.
>
> > - Are you required to support zero?
>
> No
>
> > - Are you required to support n/12 fractions (1<=n<=11)?
>
> NO
>
> > - Are you allowed, required, or forbidden to use the "overline"
> >   convention, where an overline means "multiply by 1000"?
> >   =-------
>
> In the test that one is not used.
> >   ICCXXXIVDLXVII = 1,234,567
> > - Are you allowed, required, or forbidden to use "additive"
> >   form "IIII" as well as/instead of "subtractive" form "IV"?
> > - Are you to use upper case or lower case letters?
> > - And so on.
> >
> >
>
>
> the number 4 needs to be  "IV"
>
> Roelof
>

Reply via email to