def Σ(*°w°)
first = °w°.shift
proc = block_given? ? Proc.new : ->(e) { e }
if first.kind_of?(Enumerable) && °w°.empty?
first.map(&proc).inject(:+)
else
°w°.inject(proc.(first)) {|a, e| a + proc.(e) }
end
end
alias ∑ Σ
∑ = Σ = method(:Σ)
sym2arr = ->(sym, *) { sym.to_s.chars.map(&:ord) }
Object.define_singleton_method(:const_missing, sym2arr)
define_singleton_method(:method_missing, sym2arr)
Σ(1, 2, 3) #=> 6
Σ[1, 2, 3] #=> 6
Σ(1..100) #=> 5050
Σ(1..100) {|i| i * i } #=> 338350
Σ(*°w°) #=> 471
Σ(´□`) #=> 75157
Σ(*°∀°) #=> 9056
def Σ(*°w°)
first = °w°.shift
proc = block_given? ? Proc.new : ->(e) { e }
if first.kind_of?(Enumerable) && °w°.empty?
first.map(&proc).inject(:+)
else
°w°.inject(proc.(first)) {|a, e| a + proc.(e) }
end
end
alias ∑ Σ
∑ = Σ = method(:Σ)
sym2arr = ->(sym, *) { sym.to_s.chars.map(&:ord) }
Object.define_singleton_method(:const_missing, sym2arr)
define_singleton_method(:method_missing, sym2arr)
Σ(1, 2, 3) #=> 6
Σ[1, 2, 3] #=> 6
Σ(1..100) #=> 5050
Σ(1..100) {|i| i * i } #=> 338350
Σ(*°w°) #=> 471
Σ(´□`) #=> 75157
Σ(*°∀°) #=> 9056