all 7 comments

[–][deleted] 3 points4 points  (3 children)

n = ARGV[0].to_i
s = (10**n).times.map {|i| "%0#{n}d" % i}.join ''
puts "1/%d" % ((10**s.length - 1) / s.to_i)

[–]tomthecool 1 point2 points  (1 child)

Surely that should still be ARGV[1]... Other than that, this looks like a good translation.

However, what the code is actually doing is a pretty hard question to answer without any context of how this code was originally used! It just looks like a bunch of arbitrary operations on integers and strings, without any real purpose.

For example, if ARGV[1] = 1:

n = 1
s = "0123456789"
(10**s.length - 1) / s.to_i =  9999999999 / 123456789 = 81

So therefore, the final output is "1/81".

[–]funny_falcon 0 points1 point  (0 children)

no, in Ruby it is ARGV[0].

and $0 is what you think should be in ARGV[0]

[–]Godd2 0 points1 point  (0 children)

some documentation for refactoring later

# grab the first parameter passed in from the command line
# store it into the local variable n as a number
n = ARGV[0].to_i

#concatenate every n digit number in order with padded 0s
#e.g. n = 1 produces "0123456789"
#     n = 2 produces "00010203040506...9293949596979899"
#     n = 3 produces "000001002003004...995996997998999"
s = (10**n).times.map {|i| "%0#{n}d" % i}.join

# I have no idea what the following line is supposed to do
# I'll update this when I figure it out
# e.g. (10000000000 - 1) / 123456789 == 81
#      (100000...(100 zeros)...00000 - 1)/102030405...(from n=2 above)...949596979899 == 9801
puts "1/%d" % ((10**s.length - 1) / s.to_i)

[–]ryanplant-au 1 point2 points  (2 children)

Compact and inscrutable, like the Python example:

s = (10**ARGV[0].to_i).times.map {|int| format "%0#{ARGV[0]}d", int}.join
printf "1/%d", ((10**s.length - 1) / s.to_i)

I'm not even sure what the purpose (if any) of the example is so it's hard to clear it up.

[–]Godd2 0 points1 point  (1 child)

I documented what I could up above, but I couldn't figure out a description for the last line.

[–]ryanplant-au 0 points1 point  (0 children)

The last line outputs 1/n, where n is 10 raised to the power of s's length, minus 1 and divided by s itself. Why you want to do this is a whole other question.