From: Shadowfirebird Date: 2008-07-31T23:49:53+09:00 Subject: Re: Help me with this Numerology code please... I think the original poster may be new to coding, in which case, can I recommend the first couple of chapters of "_Why's Poignant Guide to Ruby"? People tend to either find it really useful, or hate it, I think. http://poignantguide.net/ruby/ At the risk of adding even more meat to the pot: def numerologise(name) # turn name into an array of integers arr = name.upcase.unpack("C*").map{|x| (x - ?A) % 9 + 1} # keep going until there's only one integer in the array until (arr.size == 1) # add up all the integers tot = arr.inject{|c,x| c + x} # split the digits to make a new array arr = tot.to_s.split(//).map{|y| y.to_i} end return arr end puts numerologise("ruby") (This is basically Sebastian's original answer, although perhaps it's easier to understand like this.) On Thu, Jul 31, 2008 at 1:45 PM, David A. Black wrote: > 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! > > -- Me, I imagine places that I have never seen / The colored lights in fountains, blue and green / And I imagine places that I will never go / Behind these clouds that hang here dark and low But it's there when I'm holding you / There when I'm sleeping too / There when there's nothing left of me / Hanging out behind the burned-out factories / Out of reach but leading me / Into the beautiful sea