Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
A little revised solution in Clear category for Determine the Order by Sillte
from itertools import groupby
from functools import reduce
def checkio(data):
def _init(word):
queue = list(map(lambda x: x[0], groupby(word)))
order_set = set(queue[1:]) if len(queue) > 1 else set()
return queue, order_set
def _update(elem, target):
queue, order_set = elem
if queue[0] != target:
return queue, order_set
if len(queue) == 1:
return [], {}
next_queue = queue[1:]
next_set = order_set - {queue[1]}
return next_queue, next_set
data = list(map(_init, data))
answer = ""
while True:
data = [elem for elem in data if elem[0]]
if not data:
break
cands = [elem[0][0] for elem in data]
exclude = reduce(set.union, [set(elem[1]) for elem in data])
cands = [cand for cand in cands if cand not in exclude]
s = min(cands)
answer += s
data = list(map(lambda elem:_update(elem, s), data))
return answer
April 2, 2018