Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from utils.general import revealed_suits_tiles 

2 

3 

4class Kabe: 

5 STRONG_KABE = 0 

6 WEAK_KABE = 1 

7 PARTIAL_KABE = 2 

8 

9 def __init__(self, player): 

10 self.player = player 

11 

12 def find_all_kabe(self, tiles_34): 

13 # all indices shifted to -1 

14 kabe_matrix = [ 

15 {"indices": [1], "blocked_tiles": [0], "type": Kabe.STRONG_KABE}, 

16 {"indices": [2], "blocked_tiles": [0, 1], "type": Kabe.STRONG_KABE}, 

17 {"indices": [6], "blocked_tiles": [7, 8], "type": Kabe.STRONG_KABE}, 

18 {"indices": [7], "blocked_tiles": [8], "type": Kabe.STRONG_KABE}, 

19 {"indices": [0, 3], "blocked_tiles": [2, 3], "type": Kabe.STRONG_KABE}, 

20 {"indices": [1, 3], "blocked_tiles": [2], "type": Kabe.STRONG_KABE}, 

21 {"indices": [1, 4], "blocked_tiles": [2, 3], "type": Kabe.STRONG_KABE}, 

22 {"indices": [2, 4], "blocked_tiles": [3], "type": Kabe.STRONG_KABE}, 

23 {"indices": [2, 5], "blocked_tiles": [3, 4], "type": Kabe.STRONG_KABE}, 

24 {"indices": [3, 5], "blocked_tiles": [4], "type": Kabe.STRONG_KABE}, 

25 {"indices": [3, 6], "blocked_tiles": [4, 5], "type": Kabe.STRONG_KABE}, 

26 {"indices": [4, 6], "blocked_tiles": [5], "type": Kabe.STRONG_KABE}, 

27 {"indices": [4, 7], "blocked_tiles": [5, 6], "type": Kabe.STRONG_KABE}, 

28 {"indices": [5, 7], "blocked_tiles": [6], "type": Kabe.STRONG_KABE}, 

29 {"indices": [5, 8], "blocked_tiles": [6, 7], "type": Kabe.STRONG_KABE}, 

30 {"indices": [3], "blocked_tiles": [1, 2], "type": Kabe.WEAK_KABE}, 

31 {"indices": [4], "blocked_tiles": [2, 6], "type": Kabe.WEAK_KABE}, 

32 {"indices": [5], "blocked_tiles": [6, 7], "type": Kabe.WEAK_KABE}, 

33 {"indices": [1, 5], "blocked_tiles": [3], "type": Kabe.WEAK_KABE}, 

34 {"indices": [2, 6], "blocked_tiles": [4], "type": Kabe.WEAK_KABE}, 

35 {"indices": [3, 7], "blocked_tiles": [5], "type": Kabe.WEAK_KABE}, 

36 ] 

37 

38 kabe_tiles_strong = [] 

39 kabe_tiles_weak = [] 

40 kabe_tiles_partial = [] 

41 

42 suits = revealed_suits_tiles(self.player, tiles_34) 

43 for x in range(0, 3): 

44 suit = suits[x] 

45 

46 # "kabe" - 4 revealed tiles 

47 kabe_tiles = [] 

48 partial_kabe_tiles = [] 

49 for y in range(0, 9): 

50 suit_tile = suit[y] 

51 if suit_tile == 4: 

52 kabe_tiles.append(y) 

53 elif suit_tile == 3: 

54 partial_kabe_tiles.append(y) 

55 

56 for matrix_item in kabe_matrix: 

57 if len(list(set(matrix_item["indices"]) - set(kabe_tiles))) == 0: 

58 for tile in matrix_item["blocked_tiles"]: 

59 if matrix_item["type"] == Kabe.STRONG_KABE: 

60 kabe_tiles_strong.append(tile + x * 9) 

61 else: 

62 kabe_tiles_weak.append(tile + x * 9) 

63 

64 if len(list(set(matrix_item["indices"]) - set(partial_kabe_tiles))) == 0: 

65 for tile in matrix_item["blocked_tiles"]: 

66 kabe_tiles_partial.append(tile + x * 9) 

67 

68 kabe_tiles_unique = [] 

69 kabe_tiles_strong = list(set(kabe_tiles_strong)) 

70 kabe_tiles_weak = list(set(kabe_tiles_weak)) 

71 kabe_tiles_partial = list(set(kabe_tiles_partial)) 

72 

73 for tile in kabe_tiles_strong: 

74 kabe_tiles_unique.append({"tile": tile, "type": Kabe.STRONG_KABE}) 

75 

76 for tile in kabe_tiles_weak: 

77 if tile not in kabe_tiles_strong: 

78 kabe_tiles_unique.append({"tile": tile, "type": Kabe.WEAK_KABE}) 

79 

80 for tile in kabe_tiles_partial: 

81 if tile not in kabe_tiles_strong and tile not in kabe_tiles_weak: 

82 kabe_tiles_unique.append({"tile": tile, "type": Kabe.PARTIAL_KABE}) 

83 

84 return kabe_tiles_unique