From: "David A. Black" Date: 2008-07-31T21:45:43+09:00 Subject: Re: Help me with this Numerology code please... Hi -- On Thu, 31 Jul 2008, jazzez ravi wrote: > Web Reservoir wrote: >> Hi, >> >> I am planning to implement a Numerology code like this. >> >> Every alphabet in Numerology is given a number like this... >> >> -------------------------------------------------------------- >> 1 2 3 4 5 6 7 8 9 >> >> A B C D E F G H I >> >> J K L M N O P Q R >> >> S T U V W X Y Z >> ---------------------------------------------------------- >> >> Or you can even say that >> >> 1 = A, J, S >> 2 = B, K, T >> 3 = C, L, U >> 4 = D, M, V >> 5 = E, N, W >> 6 = F, O, X >> 7 = G, P, Y >> 8 = H, Q, Z >> 9 = I, R >> >> Now when you type RUBY you should get the total as 9+3+2+7 = (21) 2+1 = >> 3 >> where R = 9, U = 3, B = 2 and y = 7 ( as shown above ) >> >> Have a look at the working example here... >> >> http://www.numerology.googlepages.com/Numerology_nameNumberdetails.htm >> >> and >> >> http://www.numerology.googlepages.com/Numerology_nameNumber.htm >> >> I would like to code this in Ruby. Pl. help me with this code. >> > > Hi Reservoir, > > i think this code satisfy your need... > > > class Reservoir > def main > > a="mahalingam" # your name > > val={"a"=>1,"j"=>1,"s"=>1, > "b"=>2,"k"=>2,"t"=>2, > "c"=>3,"l"=>3,"u"=>3, > "d"=>4,"m"=>4,"v"=>4, > "e"=>5,"n"=>5,"w"=>5, > "f"=>6,"o"=>6,"x"=>6, > "g"=>7,"p"=>7,"y"=>7, > "h"=>8,"q"=>8,"z"=>8, > "i"=>9,"r"=>9} > > > num=[] > i=0 > while i < a.length do > num << val[a[i,1]] > i+=1 > end > mind(num) > end > > > def mind(num) > no=[] > no=num > j=0 > > final=0 > while j < no.length > final +=num[j].to_i > j+=1 > end > output= final.to_s > if output.length !=1 > output2=output.split(//) > mind(output2) > else > puts final > end > end > end > > res=Reservoir.new > res.main You're working waaaaay too hard :-) Let Ruby do the heavy lifting. class Reservoir # This technique is a little odd at first, but it's actually a # pretty common idiom. MAP = Hash[*('a'..'z').zip(1..26).flatten] # Convert "abc" or 123 to [1,2,3] # This is fairly terse code, but it's just a utility method that # will be called from higher-level logic. def numbers_from(obj) obj.to_s.split(//).map {|letter| MAP[letter] || letter.to_i } end # The classic Ruby way to add up an array. See Array#sum in # ActiveSupport too. def add_up(numbers) numbers.inject(0) {|acc,n| acc + n } end def numberize(object) final = add_up(numbers_from(object)) if final > 9 numberize(final) else final end end end r = Reservoir.new p r.numberize("david") p r.numberize(1234) # extra functionality :-) The inclusion of numberizing numbers may or may not be desired, but if not, it should be pretty easy to get rid of. David -- Rails training from David A. Black and Ruby Power and Light: * Advancing With Rails August 18-21 Edison, NJ * Co-taught by D.A. Black and Erik Kastner See http://www.rubypal.com for details and updates!