varsayalım bu aralığı vardır masif mesafeden n'inci öğeyi almak:Yakut
Ben el/her zaman önce tüm şey oluşturmadan aralığından N. öğeyi alacağı Nasıl("aaaaa".."zzzzz")
?
varsayalım bu aralığı vardır masif mesafeden n'inci öğeyi almak:Yakut
Ben el/her zaman önce tüm şey oluşturmadan aralığından N. öğeyi alacağı Nasıl("aaaaa".."zzzzz")
?
sadece n kadar Numaralandırma,
veya
yükseltme veya Ruby 1.8.7+ tahmin ediyorum (n) verir olası çözümler yelpazenizin nth öğesi. Sizin durumunuzda, aralığınızı, baz sayısı 26 olan bir sayı sistemi olarak değerlendirebilirsiniz. Bir sayıyı geri almak, iyi bilinen bir sorundur. Yakut (hatta bir meslektaşım tarafından yapılan) bir üste-10'dan taban-26'ya kadar bir sayıya (alfabeyle temsil edilen) gitmek için example on my site var. Bu algoritmanın bazı çeşitleri muhtemelen sizin için de çalışır.
Güncelleme Belki bu Cevabınız ki batmadı: D
İşte aralığının inci madde almak için yakut kod:
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
o zaman kullanabilirsiniz bunun gibi.
irb(main):030:0> rbase(789).rjust(10,'a')
=> "aaaaaaabej"
hızlı ve kolay yolu: nedense tekrar tekrar bunu yapmak zorunda, öncelikle N elemanları ara dizi bina kaçınmak gerekiyorsa
("aaaaa".."zzzzz").first(42).last # ==> "aaabp"
veya, bir şey yazabilirsiniz gibi:
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"
Not: Ben değil harflerin aralığı için, herhangi Enumerable için çalışan bir çözüm istiyor farz ediyorum (bu durumda doğrudan hesaplamak gerekir). Ben de başka türlü bir sayı n, f verilen bir fonksiyon geliştirin require "backports"
Ben ['list'] 'i bilmedim ilk (n) '... bu harika! – Pete
Tam olarak bunun için ne kullanmanız gerekiyor? Rastgele bir dizi oluşturmaya mı çalışıyorsunuz? –