Re: [QUIZ] Modular Arithmetic (#179)
- From: Andrea Fazzi <andrea.fazzi@xxxxxxxxxx>
- Date: Sun, 12 Oct 2008 16:26:41 -0500
Matthew Moss ha scritto:
## Modular Arithmetic (#179)
_Quiz idea provided by Jakub Kuźma_
[Modular][1] [arithmetic][2] is integer-based arithmetic in which the
operands and results are constrained to a limited range, from zero to
one less than the modulus. Take, for example, the 24-hour clock. Hours
on the clock start at 0 and increase up to (and include) 23. But above
that, we must use the appropriate congruent value modulo 24. For
example, if I wanted to know what time it would be seven hours after
10pm, I would add 22 and 7 to get 29. As that is outside the range
`[0, 24)`, I take the congruent value mod 24, which is 5. So seven
hours after 10pm is 5am.
Your task this week is to write a class `Modulo` that behaves in
almost all ways like an `Integer`. It should support all basic
operations: addition, subtraction, multiplication, exponentiation,
conversion to string, etc. The significant difference, of course, is
that an instance of `Modulo` should act modularly.
For example:
# The default modulus is 26.
> a = Modulo.new(15)
> b = Modulo.new(19)
> puts (a + b)
8
> puts (a - b)
22
> puts (b * 3)
5
As noted in the example, you should use a modulus of 26 if none is
specified in the initializer.
While most operations will be straightforward, modular division is a
bit trickier. [Here is one article][3] that explains how it can be
done, but I will leave division as extra credit.
Hi,
here's my solution:
class Modulo
include Comparable
[:+, :-, :*].each do |meth|
define_method(meth) { |other_n| Modulo.new(@n.send(meth,
other_n.to_i), @m) }
end
def initialize(n = 0, m = 26)
@m = m
@n = modularize(n)
end
def <=>(other_n)
@n <=> other_n.to_i
end
def to_i
@n
end
private
def coerce(numeric)
[@n, numeric]
end
def modularize(n)
return (n > 0 ? n % @m : (n - @m) % @m) if (n - @m) >= 0 or n < 0
n
end
end
Please, refer to the git repository below for updated revisions of this
solution.
http://github.com/remogatto/quizzes/tree/master/179/lib/modulo.rb
Bye.
Andrea
.
- References:
- [QUIZ] Modular Arithmetic (#179)
- From: Matthew Moss
- [QUIZ] Modular Arithmetic (#179)
- Prev by Date: Re: Procedure vs method
- Next by Date: Re: Procedure vs method
- Previous by thread: Re: Modular Arithmetic (#179)
- Next by thread: Re: [QUIZ] Modular Arithmetic (#179)
- Index(es):
Relevant Pages
|