Унылый х-бр
Случайно заглянул на один айтишный сайт на букву х и увидел там ссылку на другой сайт, где люди делятся своими код сниппетами, облайкивают друг друга и гадят в карму. Типичный филиал х-ра, в общем.
Один высоко оцененный сниппет на том сайте меня зацепил. Да это же ява какая-то, а не руби! Сначала намеревался откоментить на том сайте, но передумал - зачем срач разжигать. Но так как свербит, решил поспорить с вооброжаемым оппонентом тут.
Вот как надо это делать:
### API
seq = Sequence.new(1)
seq.first
# => "1"
seq.take(7)
# => ["1", "11", "21", "1211", "111221", "312211", "13112221"]
seq.detect { |x| x.length >= 15 }
# => "13211311123113112211"
### Implementation
class Sequence
include Enumerable
def initialize(from = 1)
@from = from.to_s
end
def each
return to_enum unless block_given?
elt = @from
loop do
yield elt
elt = next_element(elt)
end
end
private
def next_element(elt)
elt.gsub(/(\d)\1*/) { |x| "#{x.size}#{x[0]}" }
end
end
Читай стандартную библиотеку, мой несуществующий собеседник, и учи идиоматический руби! И знание альтернативных языков вредным не будет (например (кло(жа))). Тех, кто апвоутнул сниппет, это тоже касается.
Простите.