Comment detail

全ての組み合わせ (Nested Flatten)
再帰的に
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def cross_product(*args)
	raise ArgumentError if args.size <= 1

	if args.size == 2
		r = []
		args.first.each{ |v|
			args.last.each{ |vv|
				r << [v, vv]
			}
		}
		return r
	end

	cross_product(args.first, cross_product(*args[1..-1])).map{ |rr|
		[rr.first] + rr.last
	}
end

def cross_product_wrap(*args)
	args.map!{ |arg|
		case 
		when arg.kind_of?(String)
			arg.scan(/./)
		when arg.kind_of?(Array)
			arg
		else
			[arg]
		end
	} 
	cross_product(*args)
end

Index

Feed

Other

Link

Pathtraq

loading...