[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Calculating roman numerals

Shiloh Madsen

1/2/2007 9:35:00 PM

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

--
It is better to rule in hell than serve in heaven.

12 Answers

Carlos

1/2/2007 9:44:00 PM

0

[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.
--

Shiloh Madsen

1/2/2007 9:58:00 PM

0

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 1/2/07, Carlos <angus@quovadis.com.ar> wrote:
> [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.
> --
>
>


--
-I didn't know you could stop being a God.
-You can stop being anything.

William James

1/2/2007 10:28:00 PM

0

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
>
> --
> 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

Gregory Seidman

1/3/2007 12:46:00 PM

0

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


William James

1/4/2007 12:33:00 PM

0

Gregory Seidman wrote:
> 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

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

Jano Svitok

1/4/2007 6:42:00 PM

0

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".

Rodrigo Bermejo

1/4/2007 11:54:00 PM

0

There was a related ruby quiz:

http://rubyquiz.com/q...

-rb.

--
Posted via http://www.ruby-....

Tim Pease

1/5/2007 12:04:00 AM

0

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=snippet&...

Should do all you need (and more)

Blessings,
TwP

Jason Bornhoft

1/5/2007 2:59:00 AM

0

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


Which book?

JB

--
Posted via http://www.ruby-....

Gregory Brown

1/5/2007 4:07:00 AM

0

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.