История изменений
Исправление rtxtxtrx, (текущая версия) :
Одно из самых коротких решений вот:
def expand str
_, res, _ = str.each_char.reduce([[''], [''], []]) do |(pre, cur, acc), c|
case c
when '}'; [acc + cur, acc + cur, []]
when '{'; [cur, cur, acc]
when ','; [pre, pre, acc + cur]
else ; [pre, cur.map { |x| x + c }, acc]
end
end
res
end
irb(main):016:0> expand("enable_{foo,ba{r,z}}biz")
=> ["enable_foobiz", "enable_barbiz", "enable_bazbiz"]
Оно однопроходное по строке (списку символов). Что там выше вбрасывали розету, там говно-решения. Точнее там один примера на питоне есть, его взяли на все языки переписали, но он корявенький
Исходная версия rtxtxtrx, :
Одно из самых коротких решений вот:
def expand str
_, res, _ = str.each_char.reduce([[''], [''], []]) do |(pre, cur, acc), c|
case c
when '}'; [acc + cur, acc + cur, []]
when '{'; [cur, cur, acc]
when ','; [pre, pre, acc + cur]
else ; [pre, cur.map { |x| x + c }, acc]
end
end
res
end
irb(main):016:0> expand("enable_{foo,ba{r,z}}biz")
=> ["enable_foobiz", "enable_barbiz", "enable_bazbiz"]