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 <dblack / rubypal.com> 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