first_duplicate()
click to toggle source
def first_duplicate
sa = sort
(1 .. sa.length).argfind { |i| (sa[i] == sa[i - 1]) && sa[i] }
end
flatten_one_level()
click to toggle source
def flatten_one_level
inject([]) do |ret, e|
case e
when Array
ret + e
else
ret << e
end
end
end
listify(prefix="")
click to toggle source
def listify prefix=""
return "" if empty?
"\n" +
map_with_index { |x, i| x.to_s.gsub(/^/, "#{prefix}#{i + 1}. ") }.
join("\n")
end
to_h()
click to toggle source
def to_h
Hash[*flatten]
end
uniq_by()
click to toggle source
def uniq_by; inject({}) { |h, o| h[yield(o)] = o; h }.values end