Forum: Ruby how to translate base 10 number into base 2 number

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Li C. (Guest)
on 2007-01-19 17:30
(Received via mailing list)
Hi all,

I want to write a method to tranlate base 10 number
into base 2 number. I want to call the method within
itself. But it doesn't work. What is the right way
to do something like this?

Thanks,

Li

#####
def ten_to_two(num1)
    @array=[]
     if num1>2
          first,second=num1.divmod(2)
          @array<<second

        #call the method itself
        ten_to_two(first)

     else
          @array<<second<<first
     end
    return @array.reverse
end

puts ten_to_two(5)

##output
>ruby assembly1.rb
nil
nil
unknown (Guest)
on 2007-01-19 17:31
(Received via mailing list)
On Mon, 15 Jan 2007, chen li wrote:

> Hi all,
>
> I want to write a method to tranlate base 10 number
> into base 2 number. I want to call the method within
> itself. But it doesn't work. What is the right way
> to do something like this?

This doesn't answer your question, but in case you were not aware, Ruby
will do this conversion for you:


a = 125
puts a.to_s(2)
1111101


Kirk H.
Jacob, Raymond A Jr (Guest)
on 2007-01-19 17:31
(Received via mailing list)
Is there a way to pad the result with leading zeros
i.e. 4.to_s(2)
"100"
What I am trying to do is sort ip addresses
i.e. "192.61.14.30"
When I try to convert "192.61.14.30"
 a ="192.61.14.30".split(/\./)
 b = a.collect{|i| i.to_i.to_s(2) }
 p b
 ["11000000","111101", "1110", "11110"]
 p b.join
 "11000000111101111011110".to_i

How would you pad the results of .to_s(2) to come up with a byte?

Thank you,
raymond
Eric I. (Guest)
on 2007-01-19 17:31
(Received via mailing list)
Hi Li,

First, here's a solution:

def ten_to_two(num1)
  return [] if num1 <= 0
  first,second=num1.divmod(2)
  ten_to_two(first) << second
end

And note that you can change the << into a call to unshift if you want
the bits in the reverse order.

As for why your solution didn't work, let me offer two things.  First,
you never do anything with the result of your recursive call to
ten_to_two.  Somehow you need to combine it with the partial result you
calculated immediately beforehand.  Second, you're using instance
variables (tagged with the @).  That's generally done in methods
defined within a class to hold the state of the instance.  For a
"naked" method, you generally stick to local variables (no @).

Eric

================
Interested in hands-on, on-site Ruby training?  See www.LearnRuby.com
for information about a well-reviewed class.
Robert K. (Guest)
on 2007-01-19 17:31
(Received via mailing list)
On 15.01.2007 12:54, Jacob, Raymond A Jr wrote:
> Is there a way to pad the result with leading zeros
> i.e. 4.to_s(2)
> "100"

irb(main):004:0> "%08b" % 4
=> "00000100"
irb(main):005:0> sprintf "%08b", 4
=> "00000100"

  robert
Jacob, Raymond A Jr (Guest)
on 2007-09-26 00:29
(Received via mailing list)
Thank you,
Raymond
Giles B. (Guest)
on 2007-09-26 00:32
(Received via mailing list)
On 1/23/07, Roland M. <removed_email_address@domain.invalid> wrote:
> I wonder why there isn't support for negative radix; even though the
> solutions might not be unique... who cares?

Come on, that's like asking why fractional dimension isn't a primitive
type in Java.
unknown (Guest)
on 2007-09-26 00:32
(Received via mailing list)
On Mon, 15 Jan 2007, chen li wrote:

>> a = 125
>> puts a.to_s(2)
>> 1111101
>>
>>
>> Kirk H.
>
> Thanks. But is is possible do the opposite, from
> 111101 to 125 change?

puts '1111101'.to_i(2)
125


Kirk H.
Li C. (Guest)
on 2007-09-26 00:34
(Received via mailing list)
> Kirk H.
Thanks. But is is possible do the opposite, from
111101 to 125 change?

Li
Carlos (Guest)
on 2007-09-26 00:37
(Received via mailing list)
Jacob, Raymond A Jr wrote:
(speaking of strings...)

> Is there a way to pad the result with leading zeros

$ ri String#rjust

----------------------------------------------------------- String#rjust
      str.rjust(integer, padstr=' ')   => new_str
------------------------------------------------------------------------
      If _integer_ is greater than the length of _str_, returns a new
      +String+ of length _integer_ with _str_ right justified and padded
      with _padstr_; otherwise, returns _str_.

         "hello".rjust(4)            #=> "hello"
         "hello".rjust(20)           #=> "               hello"
         "hello".rjust(20, '1234')   #=> "123412341234123hello"

HTH
Roland M. (Guest)
on 2007-09-26 00:37
(Received via mailing list)
I wonder why there isn't support for negative radix; even though the
solutions might not be unique... who cares?
Robert K. (Guest)
on 2007-09-26 00:43
(Received via mailing list)
On 14.01.2007 19:25, Uma G. wrote:
> TAWLWTDIT
>
> [0xFF].pack("c").unpack("b8")
>
> there's a whole lotta ways to do it :-)

Since we start collecting solutions...

irb(main):001:0> "%b" % 16
=> "10000"

:-)

  robert
Jeremy T. (Guest)
on 2007-09-26 00:44
(Received via mailing list)
On 14-Jan-07, at 12:19 PM, chen li wrote:

>>
>> Kirk H.
>
> Thanks. But is is possible do the opposite, from
> 111101 to 125 change?

"111101".to_i(2)
=> 125
Uma G. (Guest)
on 2007-09-26 00:44
(Received via mailing list)
TAWLWTDIT

 [0xFF].pack("c").unpack("b8")

there's a whole lotta ways to do it :-)
Li C. (Guest)
on 2007-09-26 00:48
(Received via mailing list)
--- "Eric I." <removed_email_address@domain.invalid> wrote:

> And note that you can change the << into a call to
> using instance
> variables (tagged with the @).  That's generally
> done in methods
> defined within a class to hold the state of the
> instance.  For a
> "naked" method, you generally stick to local
> variables (no @).
>
> Eric


Hi Eric,

Thanks for the explanations. It helps me out.

Li
Uma G. (Guest)
on 2007-09-26 00:52
(Received via mailing list)
> Since we start collecting solutions...
>
> irb(main):001:0> "%b" % 16
> => "10000"

readable and concise
beautiful !

                        UG
---
Uma G.
http://umageller.wordpress.com
This topic is locked and can not be replied to.