Ok, I'm having trouble with another exercise in this book. It has asked me to write a program that will calculate the old school roman numeral value for a given modern number (up to the thousands). To clarify, old school roman numerals didn't do the subtraction thing, so 4 is IIII, nine is VIIII, etc. I've played around with a few options using division, loops and modulus, but can't seem to get my brain around the problem...any suggestions? Shiloh

on 2007-01-02 22:36

on 2007-01-02 22:44

[Shiloh Madsen <shiloh.madsen@gmail.com>, 2007-01-02 22.35 CET] > Ok, I'm having trouble with another exercise in this book. It has > asked me to write a program that will calculate the old school roman > numeral value for a given modern number (up to the thousands). To > clarify, old school roman numerals didn't do the subtraction thing, so > 4 is IIII, nine is VIIII, etc. I've played around with a few options > using division, loops and modulus, but can't seem to get my brain > around the problem...any suggestions? A hint: Try loops and subtractions. Good luck.

on 2007-01-02 22:58

Thank you. That gave me an entirely new way to look at this. I am working on one solution now, but I will try that next. If they both work I'll post both as I am curious which will be more efficient.

on 2007-01-02 23:30

Shiloh Madsen wrote: > -- > It is better to rule in hell than serve in heaven. class Integer def to_roman "I =1 V =5 X = 10 L = 50 C = 100 D = 500 M = 1000". scan( / ([A-Z]) \s *= \s* (\d+) /x ). map{|letter,val| [ letter, val.to_i ] }. sort_by{|a| -a.last}. inject( [ "", self ] ){|roman, pair| [ roman.first + pair.first * (roman.last / pair.last), roman.last % pair.last ] }. first end end

on 2007-01-03 13:46

On Wed, Jan 03, 2007 at 06:35:02AM +0900, Shiloh Madsen wrote: } Ok, I'm having trouble with another exercise in this book. It has } asked me to write a program that will calculate the old school roman } numeral value for a given modern number (up to the thousands). To } clarify, old school roman numerals didn't do the subtraction thing, so } 4 is IIII, nine is VIIII, etc. I've played around with a few options } using division, loops and modulus, but can't seem to get my brain } around the problem...any suggestions? We recently had a golfing competition at work on going the other direction (i.e. roman numeral to arabic). Our best solution: def x s p=t=0 s.scan(/./){|r| i=' IVXLCDM'.index r c=10**(i/2)/(2-i%2) t+= p<c ?-p:p p=c } t+p end } Shiloh --Greg

on 2007-01-04 13:36

Gregory Seidman wrote: > (i.e. roman numeral to arabic). Our best solution: > end > > } Shiloh > --Greg Another way: require 'enumerator' def y s t=0 (s.split("").map{|c| n=' IVXLCDM'.index c;10**(n/2)/(2-n%2)}<<0). each_cons(2){|a,b| t+= a<b ?-a:a} t end

on 2007-01-05 03:58

```
Shiloh Madsen wrote:
> Ok, I'm having trouble with another exercise in this book. It has
Which book?
JB
```

on 2007-01-06 19:30

On 1/2/07, Shiloh Madsen <shiloh.madsen@gmail.com> wrote: > Ok, I'm having trouble with another exercise in this book. It has > asked me to write a program that will calculate the old school roman > numeral value for a given modern number (up to the thousands). To > clarify, old school roman numerals didn't do the subtraction thing, so > 4 is IIII, nine is VIIII, etc. I've played around with a few options > using division, loops and modulus, but can't seem to get my brain > around the problem...any suggestions? > > Shiloh Look for older thread "Need help with a program".

on 2007-01-06 19:31

On 1/2/07, Shiloh Madsen <shiloh.madsen@gmail.com> wrote: > Ok, I'm having trouble with another exercise in this book. It has > asked me to write a program that will calculate the old school roman > numeral value for a given modern number (up to the thousands). To > clarify, old school roman numerals didn't do the subtraction thing, so > 4 is IIII, nine is VIIII, etc. I've played around with a few options > using division, loops and modulus, but can't seem to get my brain > around the problem...any suggestions? > Lest we all forget about the code snippets on RubyForge ... http://rubyforge.org/snippet/detail.php?type=snipp... Should do all you need (and more) Blessings, TwP

on 2007-01-08 08:25

On Wed, 03 Jan 2007 06:35:02 +0900, Shiloh Madsen wrote: > Ok, I'm having trouble with another exercise in this book. It has > asked me to write a program that will calculate the old school roman > numeral value for a given modern number (up to the thousands). To > clarify, old school roman numerals didn't do the subtraction thing, so > 4 is IIII, nine is VIIII, etc. I've played around with a few options > using division, loops and modulus, but can't seem to get my brain > around the problem...any suggestions? > > Shiloh Many people have answered, but since I'm a beginner I would like to have some comments on the following. Which I think is pretty ruby-esque ans=0 roman="XVIII" {"X"=>10,"V"=>5,"I"=>1}.each_pair do |letter, number|ans+=roman.count(letter)*number end;ans Kind regards, Gerald

on 2007-01-08 08:45

Gerald Ebberink wrote: > > Shiloh > Gerald The original poster asked for a way to translate from modern numerals to roman numerals. You're doing the opposite. Your method will convert old-school roman numerals, but it won't work for "XIV".

on 2007-01-19 16:30

```
On 1/4/07, Tim Pease <tim.pease@gmail.com> wrote:
> Lest we all forget about the code snippets on RubyForge ...
The code snippets thing is super cool, if only it was better
organized. Not sure if we can do much with it, since it's mostly up
to GForge...
I just wish it was easier to navigate, search, etc.
```