#-*- coding: utf-8 -*-
"""
learnstock.pyプログラム
単純な帰納的学習の例題プログラム
パターン学習器
100個の学習データを読み込んで、
適合する10桁の2進数パターンを答えます
使い方 c:\>python learnstock.py < ldata.txt
"""
#モジュールのインポート
import math
import random
 
#グローバル変数
SETSIZE=100 #学習データセットの大きさ
CNO=10 #学習でデータの桁数（10社分）
GENMAX=10000 #解候補生成回数
SEED=7 #乱数のシード
 
#下請け関数の定義
#readdata()関数
def readdata(data,teacher):
	"""学習データセットの読み込み"""
	for i in range(SETSIZE):
		line=input()
		data[i]=[int(num) for num in line.split()]
		teacher[i]=data[i][CNO]
	return
#readdata()関数の終わり

#calcscore()関数
def calcscore(data,teacher,answer):
	"""解候補パターンのスコア(0~SETSIZE点)の計算"""
	score=0 #スコア(0=SETSIZE点)
	for i in range(SETSIZE):
		#一致度計算
		point=0
		for j in range(CNO):
			if answer[j]==2:
				point+=1 #ワイルドカード
			elif answer[j]==data[i][j]:
				point+=1 #一致
		#スコアの計算
		if(point==CNO)and(teacher[i]==1):
			score+=1
		elif(point!=CNO)and(teacher[i]==0):
			score+=1
	return score
#calcscore()関数の終わり

#メイン実行部
score=0 #スコア(0~SETSIZE点)
answer=[0 for i in range(CNO)] #解候補
data=[[]for i in range(SETSIZE)] #学習データセット
teacher=[0 for i in range(SETSIZE)] #教師データ
bestscore=0 #スコアの最良値
bestanswer=[0 for i in range(CNO)] #探索途中での最良解

#乱数の初期化
random.seed(SEED)

#学習データセットの読み込み
readdata(data,teacher)

#解候補生成と検査
for i in range(GENMAX):
	#解候補生成
	for j in range(CNO):
		answer[j]=random.randint(0,2)
	
	#検査
	score=calcscore(data,teacher,answer)
	
	#最良スコアの更新
	if(score>bestscore):
		bestanswer=answer.copy()
		bestscore=score
		print(bestanswer,":score=",bestscore)

#最良解の出力
print("最良解")
print(bestanswer,":score=",bestscore)
#learnstock.pyの終わり