LINUX.ORG.RU

История изменений

Исправление 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"]