Нужна помощь с петлями - PullRequest
       5

Нужна помощь с петлями

1 голос
/ 22 августа 2010

Мне нужен цикл в этом шаблоне. Мне нужен бесконечный цикл, производящий число, которое начинается с 1.

1,10,11,12..19,100,101,102..199,1000,1001.......

Ответы [ 5 ]

5 голосов
/ 23 августа 2010
def numbers_that_start_with_1
  return enum_for(:numbers_that_start_with_1) unless block_given?

  infty = 1.0 / 0.0
  (0..infty).each do |i|
    (0 .. 10**i - 1).each do |j|
      yield(10**i + j)
    end
  end
end

numbers_that_start_with_1.first(20)
#=>  [1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 100, 101, 102, 103, 104, 105, 106, 107, 108]
2 голосов
/ 23 августа 2010
INFINITY = 1.0 / 0.0
0.upto(INFINITY) do |i|
  ((10**i)...(2*10**i)).each{|e| puts e }
end

Конечно, я бы не стал запускать этот код.

1 голос
/ 23 августа 2010
i = 1
loop do
    for j in 0...i
        puts i+j
    end
    i *= 10
end
0 голосов
/ 23 августа 2010

Не лучше, просто другое ...

def nbrs_starting_with_one(nbr=1)
   (nbr...2*nbr).each {|i| puts i}
   nbrs_starting_with_one(10*nbr)
end
0 голосов
/ 23 августа 2010

Счетчики хороши для таких вещей. Хотя я был ленив и просто решил посмотреть, начинается ли строковое представление с 1, и перебирать 1 за раз. Это означает, что он будет медленным, и у него будут огромные паузы, пока он прыгает с таких вещей, как 1 999 999 на 10 000 000.

#!/usr/bin/env ruby

start_with_1 = Enumerator.new do|y|
  number = 1
  loop do
    while number.to_s[0] != '1'
      number += 1
    end

    y.yield number
    number += 1
  end
end

start_with_1.each do|n|
  puts n
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...