Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
with frozenset solution in Clear category for Seven Segment by rafal.pawlowski
import itertools
data = {frozenset(['b','c']) : 1, frozenset(['a','b','g','e','d']) : 2, frozenset(['a','b','g','c','d']) : 3,
frozenset(['f','g','b','c']) : 4, frozenset(['a','f','g','c','d']) : 5, frozenset(['a','f','g','c','d','e']) : 6,
frozenset(['a','b','c']) : 7, frozenset(['a','b','c','d','e','f','g']) : 8, frozenset(['a','b','c','d','f','g']) : 9,
frozenset(['a','b','c','d','e','f']):0}
validNumber = lambda seg : frozenset(seg) in data
findAllSubsets = lambda s: set([frozenset(i) for n in range(len(s) + 1) for i in itertools.combinations(s, n)])
def findPossibleNum(Flit : set, tempSubSets : set) -> int:
pos = set()
for subSet in tempSubSets:
tempSet = frozenset(Flit | subSet)
if validNumber(tempSet):
pos.add(data[tempSet])
return len(pos)
def seven_segment(lit_seg, broken_seg):
Flit, Fbroken, Slit, Sbroken = set(), set(), set(), set()
[Flit.add(el.lower()) if el.isupper() else Slit.add(el) for el in lit_seg]
[Fbroken.add(el.lower()) if el.isupper() else Sbroken.add(el) for el in broken_seg]
firstNumPosibilities = findPossibleNum(Flit, findAllSubsets(Fbroken))
secondNumPosibilities = findPossibleNum(Slit, findAllSubsets(Sbroken))
return firstNumPosibilities * secondNumPosibilities
July 10, 2019