# UnitTestAnswer.py
###### tags: `UnitTest_FileProcess`
```
import os
import math
import MJ_tiletest_new
from re import T
from MJ_tiletest_new import hu_test
# C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn3_0327\\
# C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\enter\\Board\\Mahjong\\33test\\
#dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn3_0327\\'
#read_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\windows_MJ_new\\windows\\open\\Board\\Mahjong\\a1_vs_a3_vs_a4_vs_a2_2022_03_21_03_09_54\\'
#read_number = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn4_0330\\test_number.txt'
#out_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\turn3_0330\\'
read_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\a1\\'
read_number = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\test\\test_number.txt'
out_dir = 'C:\\Users\\chsta\\Desktop\\Majong_Project\\test\\2973r\\test\\'
'''
def check_chucker(txt_list):
player_game_wind = txt_list[2].split()[2]
for i in range(len(txt_list)-1, 0, -1):
if txt_list[i].find('/throw') != -1:
chucker_game_wind = txt_list[i].split()[1]
if player_game_wind == chucker_game_wind:
return True
else:
break
return False
'''
wind2id = {'E': 0, 'S': 1, 'W': 2, 'N': 3}
def print_info(txt_list, file, player_ID, last,player_card, answer_list, chucker):
print(" file_name = " + file)
#print(" txt_list = " + str(txt_list))
#print(" txt_list_len = " + str(len(txt_list)))
#print(player_ID.items())
print(' master = ' + master)
print(' chucker =', chucker)
print(' last-2 = ' + str(last-2))
print(' player_card[0] =', player_card[0])
print(' player_card[1] =', player_card[1])
print(' player_card[2] =', player_card[2])
print(' player_card[3] =', player_card[3])
#print(txt_list[6].split()[4])
print(' answer =', answer_list)
print('next----------------------------------------------------------------------------')
def read_file(file_fullpath):
f = open(file_fullpath, 'r', encoding = "utf-8")
txt_list = f.read()
txt_list = txt_list.split('\n')
f.close()
return txt_list
def read_test_number():
f1 = open(read_number, 'r', encoding = "utf-8")
test_number = f1.read()
test_number = test_number.split('\n')
f1.close()
return test_number
def modify_players_cards(player_card, txt_list, z, ID):
commmand_list = txt_list[z].split()
if (commmand_list[3] == 'HD') or (commmand_list[3] == 'MD'):
player_card[ID].remove(commmand_list[4])
elif (commmand_list[3] == 'M'):
player_card[ID].append(commmand_list[4])
elif (commmand_list[3] == 'EL') or (commmand_list[3] == 'EM') or (commmand_list[3] == 'ER'):
player_card[ID].remove(commmand_list[4])
player_card[ID].remove(commmand_list[6])
elif (commmand_list[3] == 'P'):
player_card[ID].remove(commmand_list[5])
player_card[ID].remove(commmand_list[6])
elif (commmand_list[3] == 'G'): #lite
player_card[ID].remove(commmand_list[5])
player_card[ID].remove(commmand_list[6])
player_card[ID].remove(commmand_list[7])
elif (commmand_list[3] == 'HG'): #dark
player_card[ID].remove(commmand_list[4])
player_card[ID].remove(commmand_list[5])
player_card[ID].remove(commmand_list[6])
player_card[ID].remove(commmand_list[7])
elif (commmand_list[3] == 'UG'): #plus ex.1002ifle
player_card[ID].remove(commmand_list[4])
return player_card[ID]
def get_card_title(card):
card_title = int(card)
if(card_title > 999):
print('[Warnig] - The card_id > 999')
return str(math.floor(card_title / 10))
def get_answer(player_card, chucker):
answer_list = []
id = wind2id[chucker]
player_card_int =[[],[],[],[]]
for i in range(4):
player_card_int[i] = [int(c) for c in player_card[i]]
#print('player_card_int = ', player_card_int)
for c in player_card_int[id]:
# if not ckuck to other players
b1 = hu_test(player_card_int[(id+1)%4], c)
b2 = hu_test(player_card_int[(id+2)%4], c)
b3 = hu_test(player_card_int[(id+3)%4], c)
if not ((b1) or (b2) or (b3)):
#print(hu_test(player_card_int[(id+1)%4], c), hu_test(player_card_int[(id+2)%4], c), hu_test(player_card_int[(id+3)%4], c), c)
#print('c =', c, (id+1)%4,' =', b1, (id+2)%4, ' =', b2, (id+3)%4, ' =', b3)
answer_list.append(str(c)[:2])
answer_list_sort = list(set(answer_list))
answer_list_sort.sort()
return answer_list_sort
'''
def is_ready_hand(player_card):
player_card_int = [int(c) for c in player_card]
for i in range(11, 48):
if i%10 == 0: continue
x = i*10 +1
if hu_test(player_card_int, x):
return True
return False
'''
def write_file(answer_list, out_file_fullpath, file):
f = open(out_file_fullpath, 'a')
# save the old file name at the top
#f.write('>>' + file + '\n')
f.write(' '.join(answer_list))
f.write('\n')
f.close()
# main
i = 0
test_number = read_test_number()
for file in os.listdir(read_dir):
if file.split()[0] == test_number[i]:
file_fullpath = read_dir+file
# check (is file) and (the filename have chucker) and (is .command)
if (os.path.isfile(file_fullpath)) and ('.txt' in file) and ('chucker' in file) and not('.command' in file):
#print("filename = " + file)
outfilename = 'answer.txt'
#print('out: ' + outfilename)
# read file to get txt_list(list of line)
file_fullpath = read_dir + file
txt_list = read_file(file_fullpath)
# save the players seats
player_ID = {'E': txt_list[1].split()[1], 'S': txt_list[1].split()[3], 'W': txt_list[1].split()[5], 'N': txt_list[1].split()[7]}
# save the players cards
master = txt_list[3].split()[3]
player_card = [[], [], [], []]
begin = 2
end = 18
player_card[wind2id[master]] = txt_list[5].split()[begin:end+1]
for j in range(wind2id[master]+1, wind2id[master]+4):
begin = end+1
end = begin+15
player_card[j%4] = txt_list[5].split()[begin:end+1]
# modify the players cards
j = 6
while True:
if txt_list[j].find('* Win') != -1:
last = j
break
else:
j = j + 1
for z in range(6, last-2):
ID = wind2id[txt_list[z].split()[2]]
player_card[ID] = modify_players_cards(player_card, txt_list, z, ID)
for z in range(4):
player_card[z].sort()
chucker = txt_list[last-2].split()[2]
# get cards whitch not chuck
answer_list = get_answer(player_card, chucker)
# write the answer the new place
out_file_fullpath = out_dir + outfilename
write_file(answer_list, out_file_fullpath, file)
# print_info for debug
print_info(txt_list, file, player_ID, last, player_card, answer_list, chucker)
i = i + 1