# roman numbers

8 messages
Open this post in threaded view
|

## roman numbers

 Hello, Can someone help me with a good plan to convert numbers to roman numbers. I could make a dictionary with 1,4,5,9,10,99,100, 999, 1000 but that feels like a overkill. Regards, Roelof
Open this post in threaded view
|

## Re: roman numbers

 Hi Roelof,You will not believe!2 printStringRoman “II”Have fun!On Thu, 17 Sep 2020 at 18:20, Roelof Wobben via Pharo-users <[hidden email]> wrote:Hello,Can someone help me with a good plan to convert numbers to roman numbers.I could make a dictionary with 1,4,5,9,10,99,100, 999, 1000 but that feels like a overkill.Regards,Roelof-- Cheers,Alex
Open this post in threaded view
|

## Re: roman numbers

 Hello, The challenge is to do it manually. But I can take a look how that function is implented. Roelof Op 17-9-2020 om 18:13 schreef Aliaksei Syrel: Hi Roelof, You will not believe! 2 printStringRoman “II” Have fun! On Thu, 17 Sep 2020 at 18:20, Roelof Wobben via Pharo-users <[hidden email]> wrote: Hello, Can someone help me with a good plan to convert numbers to roman numbers. I could make a dictionary with 1,4,5,9,10,99,100, 999, 1000 but that feels like a overkill. Regards, Roelof -- Cheers, Alex
Open this post in threaded view
|

## Re: roman numbers

 Roman numerals are much more complicated and much less consistentthan most people realise.  The regular M DC LX VI system is bothmore modern and less capable than anything the Romans would haverecognised.  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 numeralsincluding216C L ROMAN NUMERAL FIFTY216D C ROMAN NUMERAL ONE HUNDRED216E D ROMAN NUMERAL FIVE HUNDRED216F M ROMAN NUMERAL ONE THOUSAND2181 ↁ ROMAN NUMERAL FIVE THOUSAND2182 ↂ ROMAN NUMERAL TEN THOUSAND2187 ↇ ROMAN NUMERAL FIFTY THOUSAND2188 ↈ 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 isSo the first thing is to make sure that you understand therequirements for the problem.- Are you required to produce ASCII characters, required to  produce Unicode ones, or allowed to produce either?- Are you required to support zero?- Are you required to support n/12 fractions (1<=n<=11)?- Are you allowed, required, or forbidden to use the "overline"  convention, where an overline means "multiply by 1000"?  =-------  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.I am not happy with the way that (0 printStringRoman) quietlyproduces ''.Assuming you're generating regular modern Roman numbers,you pretty much have to think of an integer as having 4 parts:n // 1000      -- this many copies of Mn // 100 \\ 10 -- hundreds using M, D, Cn // 10 \\ 100 -- tens using     C, L, Xn \\ 10        -- units using    X, V, IIf Squeak/Pharo's (0 printStringRoman) would answer 'N'instead of '' I'd be happier with it.While you really want to write your own code --- thisbeing an exercism task --- it would be a very good ideato start by using #printStringRoman so that you knowwhat it's like to pass the tests.On Fri, 18 Sep 2020 at 04:58, Roelof Wobben via Pharo-users <[hidden email]> wrote: Hello, The challenge is to do it manually. But I can take a look how that function is implented. Roelof Op 17-9-2020 om 18:13 schreef Aliaksei Syrel: Hi Roelof, You will not believe! 2 printStringRoman “II” Have fun! On Thu, 17 Sep 2020 at 18:20, Roelof Wobben via Pharo-users <[hidden email]> wrote: Hello, Can someone help me with a good plan to convert numbers to roman numbers. I could make a dictionary with 1,4,5,9,10,99,100, 999, 1000 but that feels like a overkill. Regards, Roelof -- Cheers, Alex
Open this post in threaded view
|

## Re: roman numbers

 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
Open this post in threaded view
|

## Re: roman numbers

 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 <[hidden email]>, 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