fork download
  1. import random
  2.  
  3. PIECES = 'PDQ'
  4.  
  5.  
  6. def generate_side_str():
  7. side_pieces = [random.choice(PIECES) for i in range(random.randint(1, 3))]
  8. side_str = ''.join(side_pieces) + '.' * (16 - len(side_pieces))
  9. return shuffle_str(side_str)
  10.  
  11.  
  12. def generate_random_endgame():
  13. return generate_side_str() + generate_side_str()
  14.  
  15.  
  16. def shuffle_str(s):
  17. x = list(s)
  18. random.shuffle(x)
  19. return ''.join(x)
  20.  
  21.  
  22. def is_valid_endgame(endgame_str):
  23. left = endgame_str[:16]
  24. right = endgame_str[16:]
  25. left_pieces = [c for c in left if c != '.']
  26. right_pieces = [c for c in right if c != '.']
  27.  
  28. left_total = sum(PIECES.index(c) + 1 for c in left_pieces)
  29. right_total = sum(PIECES.index(c) + 1 for c in right_pieces)
  30. return abs(left_total - right_total) <= 2 and len(left_pieces) >= 2 and len(right_pieces) >= 2
  31.  
  32.  
  33. def render_endgame(endgame_str):
  34. assert len(endgame_str) == 32
  35. for i in range(0, 32, 4):
  36. print(endgame_str[i:i+4])
  37.  
  38.  
  39. def generate_endgame():
  40. endgame_str = generate_random_endgame()
  41. while not is_valid_endgame(endgame_str):
  42. endgame_str = generate_random_endgame()
  43. return endgame_str
  44.  
  45.  
  46. def main():
  47. for i in range(10):
  48. render_endgame(generate_endgame())
  49. print('---------')
  50.  
  51. if __name__ == '__main__':
  52. main()
Success #stdin #stdout 0.03s 11740KB
stdin
Standard input is empty
stdout
....
...P
...D
....
....
.P.D
....
....
---------
.P..
..D.
....
.P..
....
....
..Q.
...D
---------
...D
...P
.Q..
....
.D..
D...
....
....
---------
....
D...
...Q
....
....
P...
D...
....
---------
.Q..
....
....
..P.
.P..
P...
....
....
---------
....
...Q
...Q
....
PP..
....
..D.
....
---------
....
...D
.P..
....
P...
....
....
.D..
---------
....
....
..P.
...P
....
..P.
.P..
.D..
---------
.Q.P
....
....
....
P...
...Q
....
....
---------
..P.
....
P.D.
....
...P
....
Q...
....
---------