2010-04-28 8 views

Odpowiedz

1

wyliczyć tylko do n,

lub

Develop funkcję daną liczbę n, F (n) daje n-ty z zakresu możliwych rozwiązań.

W twoim przypadku możesz traktować swój zasięg jako system liczbowy z podstawą 26. Przepisanie numeru jest dobrze znanym problemem. Jest example on my site, aby przejść od numeru base-10 do liczby bazowej-26 (reprezentowanej przez alfabet) nawet w rubinach (zrobionych przez mojego kolegę). Niektóre warianty tego algorytmu prawdopodobnie również będą działać dla ciebie.

Aktualizacja Może to nie zapadają się tym, że jest to odpowiedź: D

Oto kod Ruby, aby uzyskać n-ty element swojego zakresu:

def rbase(value) 
    a = ('a'..'z') 
    b = a.to_a 
    base = b.length 
    text = [] 
    begin 
    value, rest = value.divmod(base) 
    text << b[rest] 
    end until value.zero? 
    text.reverse.join 
end 

Następnie można użyć to tak.

irb(main):030:0> rbase(789).rjust(10,'a') 
=> "aaaaaaabej" 
8

Szybki i łatwy sposób:

("aaaaa".."zzzzz").first(42).last # ==> "aaabp" 

Jeśli z jakiegoś powodu trzeba to zrobić w kółko, albo jeśli chcesz uniknąć budowania pośredni tablicę dla pierwszych elementów n, można napisać coś jak:

module Enumerable 
    def skip(n) 
    return to_enum :skip, n unless block_given? 
    each_with_index do |item, index| 
     yield item unless index < n 
    end 
    self 
    end 
end 

("aaaaa".."zzzzz").skip(41).first # ==> "aaabp" 

Uwaga: Zakładam, że chcesz rozwiązanie, które działa na każdym przeliczalny, a nie dla zakresu liter (w tym przypadku należy obliczyć bezpośrednio). Ja też zakładając Ruby 1.8.7+, inaczej uaktualnić lub require "backports"

+0

Nie wiedziałem o '['liście']. First (n)' ... to jest niesamowite! – Pete