A~Fの男性6人と,P~Uの女性6人が集団でお見合いをした。
終了時に各人は気に入った相手を1人ずつ選び,それについて次のア~カのことがわかっている。
このとき,Aを選んだ女性がいたとすると,その女性として確実なのは誰か。
ア. 誰からも選ばれない女性はいなかったが,互いに相手を気に入った組合せはなく,カップルは1組も成立しなかった。
イ. Aが選んだ女性と,Fが選んだ女性は,いずれもDを選んだ。
ウ. Bが選んだ女性はPで,Pが選んだ男性はCであった。
エ. Cが選んだ女性はQで,Qが選んだ男性は他の女性からも選ばれていた。
オ. Dは3人の女性から選ばれたが,Dが選んだ女性はFを選んだ。
カ. EはTを選んだ。
1.Q 2.R 3.S 4.T 5.U
import copy import itertools def Couple_Count(men, wom): count = 0 for k, v in men.items(): if men[k] == wom[v]: count += 1 return count # 男性、女性の辞書作成 men = {k: None for k in 'ABCDEF'} wom = {k: None for k in 'PQRSTU'} # ウ. Bが選んだ女性はPで,Pが選んだ男性はCであった。 men['B'] = 'P' wom['P'] = 'C' # カ. EはTを選んだ。 men['E'] = 'T' # エ. Cが選んだ女性はQ men['C'] = 'Q' # 未決定の男性のリスト nmen = [k for k, v in sorted(men.items()) if not v] # 未決定の女性のリスト nwom = {i for i in wom.keys()} - {v for k, v in men.items() if v} # 表示用 print(' ' + 'ABCDEF' + ' ' + 'PQRSTU') for i, s in enumerate(itertools.permutations(nwom), 1): cmen = copy.deepcopy(men) cwom = copy.deepcopy(wom) for m, w in zip(nmen, s): cmen[m] = w # イ. Aが選んだ女性と,Fが選んだ女性は,いずれもDを選んだ。 cwom[cmen['A']] = 'D' cwom[cmen['F']] = 'D' # オ. Dが選んだ女性はFを選んだ。 cwom[cmen['D']] = 'F' # Tを選んでいる男性以外のリスト作成 pattern_t = {k for k, v in cmen.items() if v != 'T'} for t in pattern_t: cwom['T'] = t # エ. Qが選んだ男性は他の女性からも選ばれていた。 # 他の女性から選ばれている男性のリスト作成 pattern_q = {v for v in cwom.values() if v} for q in pattern_q: cwom['Q'] = q # オ. Dは3人の女性から選ばれた pattern_d = [v for v in cwom.values() if v == 'D'] if len(pattern_d) == 3: # ア. 誰からも選ばれない女性はいなかったが,互いに相手を気に入った組合せはなく,カップルは1組も成立しなかった。 if Couple_Count(cmen, cwom) == 0: ans_men = [v for k, v in sorted(cmen.items())] ans_wom = [v for k, v in sorted(cwom.items())] # Aが選ばれているもの if 'A' in ans_wom: print(i, ''.join(ans_men), ''.join(ans_wom))
import copy import itertools men = {k: None for k in 'ABCDEF'} wom = {k: None for k in 'PQRSTU'} # 男性確定 men['B'] = 'P' men['C'] = 'Q' men['E'] = 'T' # 女性確定 # Qが選んだ男性は他の女性からも選ばれていた # Dは3人の女性から選ばれた # TはRSUがDDFのどれかのためA以外になるとQはAになれないのでAで確定 # QはADFのどれかになるがAFになるとDが3人にならないのでQはDで確定 wom['P'] = 'C' wom['Q'] = 'D' wom['T'] = 'A' # 男性未確定 # nmen = [k for k, v in sorted(men.items()) if not v] nmen = ['A', 'D', 'F'] # 女性未確定 # nwom = {i for i in wom.keys()} - {v for k, v in men.items() if v} nwom = ['R', 'S', 'U'] # 表示用 print(' ' + 'ABCDEF' + ' ' + 'PQRSTU') # 女性未確定の組合せ作成 for i, s in enumerate(itertools.permutations(nwom), 1): cmen = copy.deepcopy(men) cwom = copy.deepcopy(wom) for m, w in zip(nmen, s): cmen[m] = w cwom[cmen['A']] = 'D' cwom[cmen['D']] = 'F' cwom[cmen['F']] = 'D' ans_men = [v for k, v in sorted(cmen.items())] ans_wom = [v for k, v in sorted(cwom.items())] print(i, ''.join(ans_men), ''.join(ans_wom))