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?
- 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) quietly
produces ''.

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 M
n // 100 \\ 10 -- hundreds using M, D, C
n // 10 \\ 100 -- tens using     C, L, X
n \\ 10        -- units using    X, V, I

If 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 --- this
being an exercism task --- it would be a very good idea
to start by using #printStringRoman so that you know
what it's like to pass the tests.



On Fri, 18 Sep 2020 at 04:58, Roelof Wobben via Pharo-users <
pharo-users@lists.pharo.org> 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 <
> pharo-users@lists.pharo.org> 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
>
>
>

Reply via email to