Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
fixed labels solution in Clear category for R-mahjong Ⅰ: break hand into sets by tokiojapan55
def riichi_mahjong_sets(hand: list) -> list:
merge = lambda ts: [ts[0][0] + ''.join(t[1] for t in ts)]
stack = [([], sorted(hand), 0)]
while stack:
fixed, drawing, pair = stack.pop()
if len(drawing) == 0:
return sorted(fixed) # finish
if len(drawing) >= 2 and drawing[0] == drawing[1] and pair == 0:
stack.append((fixed + merge(drawing[:2]), drawing[2:], 1)) # same two(pair)
if len(drawing) >= 3:
if drawing[0] == drawing[2]:
stack.append((fixed + merge(drawing[:3]), drawing[3:], pair)) # same three
elif drawing[0][0] in 'mps':
sequence = [drawing[0][0] + str(int(drawing[0][1]) + i) for i in range(3)]
if set(sequence).issubset(set(drawing)):
for t in sequence:
drawing.remove(t) # drawing is destroyed
stack.append((fixed + merge(sequence), drawing, pair)) # sequence three
Jan. 4, 2024