Code 69 : ruby brace expansion

Posté le , conservation toujours, coloration syntaxique : Ruby, télécharger.

1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
50
#!/usr/bin/env ruby
# encoding: utf-8 
def brace_expansion(str)    i, n = 0, 0
    strtc = str.dup    strtc.gsub!(/([\{\}])/o) do
        if $1 == "{" then            i += 1
            n = i if i > n             "<#{i}>"
        else            i -= 1
            "</#{i+1}>"        end 
    end     strtc = [strtc]
    n.times do |i|         loop do
            more = false            newlist = []
            strtc.each do |path|                unless path.sub!(/^(.*?)<(#{n-i})>(.*?)<\/#{n-i}>(.*?)$/) do
                    pre, mid, post = $1, $3, $4                    mid.gsub!(/\,$/,',-@_@-')
                    mid.gsub!(/^\,/,'-@_@-,')                    mid.split(',').each do |m| 
                        more = true                        if m == '-@_@-' then
                            newlist << "#{pre}#{post}"                        else
                            newlist << "#{pre}#{m}#{post}"                        end 
                    end                 end then
                    newlist << path                end 
            end             if more then
                strtc = [newlist].flatten            else
                break            end 
        end     end 
    return strtc.sort.uniqend
 puts brace_expansion(ARGV[0])
 

Durée de conservation :