## Problem

Determine whether a positive integer number is **colorful** or not.

`263` is a colorful number because `[2, 6, 3, 2*6, 6*3, 2*6*3]` are all different; whereas `236` is not colorful, because `[2, 3, 6, 2*3, 3*6, 2*3*6]` have `6` twice.

So take all consecutive subsets of digits, take their product and ensure all the products are different.

## Examples
```pyhton
263  -->  true
236  -->  false
```

Source: codewars | Difficulty: EASY

Starter code: def colorful(number):
	

Solutions:
def colorful(number):
	base_result = []
	for x in str(number):
		base_result.append(int(x))
	for y in range(len(base_result) - 1):
		temp = base_result[y] * base_result[y + 1]
		base_result.append(temp)
	return len(set(base_result)) == len(base_result)


from functools import reduce
from collections import Counter

def colorful(n):
	s = list(map(int, str(n)))
	cnt = Counter((reduce(int.__mul__, s[i:i + x]) for x in range(1, len(s) + 1) for i in range(len(s) - x + 1)))
	return cnt.most_common(1)[0][1] == 1


from functools import reduce

def colorful(n):
	ld = [int(d) for d in str(n)]
	l = len(ld)
	p = [reduce(int.__mul__, ld[i:i + k]) for k in range(1, l + 1) for i in range(l - k + 1)]
	return len(p) == len(set(p))


REGEX = __import__('re').compile('(.).*\\1|[01].+|.+[01]|(23|32).*6|6.*(23|32)|(24|42).*8|8.*(24|42)|(26|62).*(34|43)|(34|43).*(26|62)|(29|92).*(36|63)|(36|63).*(29|92)|(38|83).*(46|64)|(46|64).*(38|83)|(49|94).*(236|263|326|362|623|632)|(236|263|326|362|623|632).*(49|94)|(89|98).*(346|364|436|463|634|643)|(346|364|436|463|634|643).*(89|98)').search

def colorful(number):
	return not REGEX(str(number))


def colorful(number):
	lst = [int(d) for d in str(number)]
	if number > 9:
		if 0 in lst or 1 in lst:
			return False
		(all, previous) = (lst, -1)
		for digit in str(number):
			if previous != -1:
				lst.append(int(digit) * previous)
			previous = int(digit)
		if number > 99:
			total = 1
			for d in all:
				total *= d
			lst.append(total)
	return len(lst) == len(set(lst))


def colorful(number):
	if len(str(number)) == 1:
		return True
	else:
		output = list(str(number))
		for (n, x) in enumerate(list(str(number))):
			if n + 1 < len(str(number)):
				tmp = list(str(number))[n + 1]
				output.append(str(int(x) * int(tmp)))
		if len(output) == len(set(output)):
			return True
		else:
			return False


from functools import reduce
from operator import mul

def colorful(number):
	digits = [int(d) for d in str(number)]
	prods = []
	for size in range(1, len(digits) + 1):
		for start in range(len(digits) - size + 1):
			prods.append(reduce(mul, digits[start:start + size]))
	return len(prods) == len(set(prods))


from functools import reduce

def colorful(n):
	s = list(map(int, str(n)))
	return len(s) * (len(s) + 1) // 2 == len({reduce(int.__mul__, s[i:i + x]) for x in range(1, len(s) + 1) for i in range(len(s) - x + 1)})


from functools import reduce

def colorful(n):
	p = list(get_sub_mul(n))
	return len(p) == len(set(p))

def get_sub_mul(n):
	s = [int(d) for d in str(n)]
	l = len(s)
	for k in range(1, l + 1):
		for i in range(l - k + 1):
			yield reduce(int.__mul__, s[i:i + k])


from functools import reduce
from math import ceil

def colorful(n):
	li = [reduce(lambda x, y: x * y, map(int, str(n)[i:i + j])) for j in range(1, ceil(len(str(n)) / 2) + 2) for i in range(0, len(str(n)) - j + 1)]
	return all((li.count(i) == 1 for i in li))