import random
PIECES = 'PDQ'
def generate_side_str():
side_pieces = [random.choice(PIECES) for i in range(random.randint(1, 3))]
side_str = ''.join(side_pieces) + '.' * (16 - len(side_pieces))
return shuffle_str(side_str)
def generate_random_endgame():
return generate_side_str() + generate_side_str()
def shuffle_str(s):
x = list(s)
random.shuffle(x)
return ''.join(x)
def is_valid_endgame(endgame_str):
left = endgame_str[:16]
right = endgame_str[16:]
left_pieces = [c for c in left if c != '.']
right_pieces = [c for c in right if c != '.']
left_total = sum(PIECES.index(c) + 1 for c in left_pieces)
right_total = sum(PIECES.index(c) + 1 for c in right_pieces)
return abs(left_total - right_total) <= 2 and len(left_pieces) >= 2 and len(right_pieces) >= 2
def render_endgame(endgame_str):
assert len(endgame_str) == 32
for i in range(0, 32, 4):
print(endgame_str[i:i+4])
def generate_endgame():
endgame_str = generate_random_endgame()
while not is_valid_endgame(endgame_str):
endgame_str = generate_random_endgame()
return endgame_str
def main():
for i in range(10):
render_endgame(generate_endgame())
print('---------')
if __name__ == '__main__':
main()