Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Seven Segment by Askanio234
import itertools
NUMS = [
{'B', 'C'}, #1,
{'A', 'B', 'G', 'E', 'D'}, #2,
{'A', 'B', 'G', 'C', 'D'}, #3,
{'F', 'G', 'B', 'C'}, #4,
{'A', 'F', 'G', 'C', 'D'}, #5,
{'A', 'F', 'G', 'C', 'D', 'E'},#6,
{'A', 'B', 'C'},#7,
{'A', 'B', 'C', 'D', 'E', 'F', 'G'},#8,
{'A', 'B', 'C', 'G', 'D', 'F'},#9,
{'A', 'B', 'C', 'D', 'E', 'F'}#0
]
def split_left_right(segments):
left_seg = []
right_seg = []
for letter in segments:
if letter.isupper():
left_seg.append(letter)
else:
right_seg.append(letter)
return set(left_seg), set(right_seg)
def is_valid_num(left_seg, right_seg):
if left_seg and right_seg in NUMS:
return True
def capitalise(segment):
result = []
for letter in segment:
result.append(letter.upper())
return set(result)
def get_all_combos(working_seg, broken_seg):
result = []
max_length = len(working_seg) + len(broken_seg)
for step in range(0, max_length+1):
for subset in itertools.combinations(broken_seg, step):
result.append(working_seg.union(subset))
return result
def get_only_correct_combos(left_combos, right_combos):
correct_left_combos = []
correct_right_combos = []
for combo in left_combos:
if combo in NUMS:
correct_left_combos.append(combo)
for combo in right_combos:
if capitalise(combo) in NUMS:
correct_right_combos.append(combo)
return correct_left_combos, correct_right_combos
def seven_segment(lit_seg, broken_seg):
left_seg, right_seg = split_left_right(lit_seg)
left_broken_seg, right_broken_seg = split_left_right(broken_seg)
left_combos = get_all_combos(left_seg, left_broken_seg)
right_combos = get_all_combos(right_seg, right_broken_seg)
correct_left_combos, correct_right_combos = get_only_correct_combos(left_combos, right_combos)
return len(correct_left_combos) * len(correct_right_combos)
if __name__ == '__main__':
assert seven_segment({'B', 'C', 'b', 'c'}, {'A'}) == 2, '11, 71'
assert seven_segment({'B', 'C', 'a', 'f', 'g', 'c', 'd'}, {'A', 'G', 'D', 'e'}) == 6, '15, 16, 35, 36, 75, 76'
assert seven_segment({'B', 'C', 'a', 'f', 'g', 'c', 'd'}, {'A', 'G', 'D', 'F', 'b', 'e'}) == 20, '15...98'
print('"Run" is good. How is "Check"?')
Aug. 1, 2018
Comments: