Upload files to "/"

Dodano drzewo decyzyjne
This commit is contained in:
s481847 2024-06-13 15:28:32 +02:00
parent 2e1edf91c4
commit c7e8b64c2f
2 changed files with 465 additions and 57 deletions

167
main.py
View File

@ -1,6 +1,9 @@
import pygame
import random
import time
import pandas as pd
import math
import matplotlib.pyplot as plt
kuchnia_xy = 0
pozycja_startowa = 0
@ -11,6 +14,7 @@ blockSize = 60
rows = 14
columns = 24
# -----------------------------Inicjacja klas
class Kelner:
def __init__(self, x, y):
@ -61,7 +65,6 @@ class Kelner:
self.x -= 1
self.stanPrzestrzeni[0] -= 1
def wykonajAkcje(self, ruchy):
if self.indexRuchu < len(ruchy):
akcja = ruchy[self.indexRuchu]
@ -85,6 +88,7 @@ class Stolik:
def wklej(self):
screen.blit(stolikImg, (self.x * blockSize, self.y * blockSize))
class Przeszkoda:
def __init__(self, x, y, typ):
self.x = x
@ -104,10 +108,12 @@ class Przeszkoda:
elif self.typ == "dywan":
screen.blit(dywanImg, (self.x * blockSize, self.y * blockSize))
# -----------------Przeszukiwanie przestrzeni stanów
import heapq
def a_star(start, cel, stoliki, przeszkody):
queue = [] # Kolejka priorytetowa
heapq.heappush(queue, (0, start)) # (koszt, stan)
@ -163,7 +169,8 @@ def generuj_nastepniki_i_ruchy(stan, stoliki, przeszkody):
if 0 <= nowy_x < columns and 0 <= nowy_y < rows:
# sprawdzamy, czy następny stan nie wchodzi w stolik
if not any(stolik.x == nowy_x and stolik.y == nowy_y for stolik in stoliki):
koszt = next((przeszkoda.cena for przeszkoda in przeszkody if przeszkoda.x == nowy_x and przeszkoda.y == nowy_y), 1)
koszt = next(
(przeszkoda.cena for przeszkoda in przeszkody if przeszkoda.x == nowy_x and przeszkoda.y == nowy_y), 1)
ruchy.append(((nowy_x, nowy_y, kierunek), 'F', koszt))
return ruchy
@ -179,6 +186,78 @@ def odtworz_ruchy(poprzednicy, cel):
ruchy.reverse()
return ruchy
def licz_entropie(data, target_column):
total_rows = len(data)
target_values = data[target_column].unique()
entropy = 0
for value in target_values:
value_count = len(data[data[target_column] == value])
proportion = value_count / total_rows
entropy -= proportion * math.log2(proportion)
return entropy
def licz_zysk(atrybut,korzen,data):
entropia_wazona = 0
unique_values = data[atrybut].unique()
for value in unique_values:
subset = data[data[atrybut] == value]
proportion = len(subset) / len(data)
entropia_wazona += proportion * licz_entropie(subset, data.columns[-1])
zysk = korzen - entropia_wazona
return zysk
def szukaj_split(z, atrybuty):
max = 0
max_atr = "None"
for atrybut in atrybuty:
if z[atrybut]>max:
max = z[atrybut]
max_atr = atrybut
return max_atr
def GenerujDane(ques):
k = [0,0,0,0,0,0,0,0]
for n in range(8):
k[n] = random.choice([0,1])
print(ques[n] + str(k[n]))
return k
def id3(data,mode,klient):
zysk = {}
korzen = licz_entropie(data,data.columns[-1])
lista = data.columns
for atrybut in lista[:-1]:
zysk[atrybut] = licz_zysk(atrybut,korzen,data)
split = szukaj_split(zysk, data.head(0).columns[:-1])
if split == "None":
wynik = data.iloc[0, -1]
if wynik == 1 and mode == "klient":
print("Klient zadowolony!")
elif wynik == 0 and mode == "klient":
print("Klient niezadowolony!")
print("---------------------------------------------------------------------------------------")
else:
#print("Split: " + str(split))
subset0 = data[data[split] == 0]
subset0 = subset0.drop([split], axis=1)
subset1 = data[data[split] == 1]
subset1 = subset1.drop([split], axis=1)
#print("Klient: " + str(klient))
if len(subset0) < len(data) and len(subset1) < len(data):
if mode == "klient":
if klient[split] == 0:
frames.append(subset0)
else:
frames.append(subset1)
elif mode == "full":
frames.append(subset0)
frames.append(subset1)
if len(frames) > 0:
newData = frames.pop()
id3(newData,mode, klient)
start = (0, 0, 0) # Początkowy stan
cel = (0, 0) # Docelowe współrzędne
@ -211,7 +290,8 @@ else:
juzbyly = []
for j in range(1, rows):
for i in range(columns):
if (random.randrange(7) == 0) and ((i,j-1) not in juzbyly) and (((i-1,j-1) not in juzbyly) or ((i+1,j-1) not in juzbyly)):
if (random.randrange(7) == 0) and ((i, j - 1) not in juzbyly) and (
((i - 1, j - 1) not in juzbyly) or ((i + 1, j - 1) not in juzbyly)):
stoliki.append(Stolik(i, j))
juzbyly.append((i, j))
elif random.randrange(9) == 0:
@ -219,7 +299,6 @@ else:
elif random.randrange(12) == 0:
przeszkody.append(Przeszkoda(i, j, "dywan"))
# stoliki = []
# for i in range(rows)
@ -245,12 +324,15 @@ sliskaPodlogaImg = pygame.transform.scale(sliskaPodlogaImg, (blockSize, blockSiz
dywanImg = pygame.image.load("dywan.png")
dywanImg = pygame.transform.scale(dywanImg, (blockSize, blockSize))
def kuchnia(x, y):
screen.blit(kitchenImg, (x * blockSize, y * blockSize))
def menu(x, y):
screen.blit(menuImg, (x * blockSize, y * blockSize))
def wypiszOkno():
screen.fill((0, 0, 0))
for x in range(0, width, blockSize):
@ -259,6 +341,27 @@ def wypiszOkno():
pygame.draw.rect(screen, (200, 200, 200), rect, 1) # -------------Wypisz kratę -TA
# pygame.draw.rect(screen, (0, 0, 0), rect, 1) #-------------Wypisz kratę -TA
def czyZadowolony():
data = pd.read_csv('zbior_uczacy.csv')
frames = []
frames.append(data)
ques = ["Czy klient sie usmiecha? ", "Czy zostawil napiwek? ", "Czy zachowywal sie grzecznie? ",
"Czy zjadl cala porcje? ", "Czy zlozyl dodatkowe zamowienia? ",
"Czy wyrazil zainteresowanie karta stalego klienta? ", "Czy zarezerwowal stolik na przyszlosc? ",
"Czy zabral wizytowke? "]
k = GenerujDane(ques)
atrybuty = []
for column in data.columns[:-1]:
atrybuty.append(column)
klient = {}
i = 0
for atr in atrybuty:
klient[atr] = k[i]
i = i + 1
while len(frames) > 0:
data = frames.pop()
id3(data, "klient", klient)
run = True
# czcionka = pygame.font.SysFont('Arial',50)
@ -267,6 +370,44 @@ licznik = 0
ruchy = []
cel2 = []
klient = {}
frames = []
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import plot_tree, DecisionTreeClassifier
data = pd.read_csv('zbior_uczacy.csv')
data.head()
#print(heart_data)
data_x = data.drop('Zadowolony', axis=1)
data_y = data['Zadowolony']
data_x_encoded = pd.get_dummies(data_x, drop_first = True)
data_x_encoded.head()
best_acc = 0
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(data_x_encoded, data_y, test_size=0.3)
dtree = DecisionTreeClassifier(max_depth=100)
dtree.fit(X_train, y_train)
fig = plt.figure(figsize=((25,20)))
plot_tree(dtree,
feature_names=data_x_encoded.columns,
class_names=['niezadowolony', 'zadowolony'],
impurity=False,
proportion=False,
filled=True)
fig.savefig('tree.png')
while run:
cel2 = list(cel)
@ -298,12 +439,13 @@ while run:
print("Szukam ścieżki do stolika...")
ruchy = a_star(tuple(kelner.stanPrzestrzeni), cel, stoliki, przeszkody)
kelner.stan = "odbiera"
if ruchy:
print("Znaleziono ścieżkę ruchów: ", ruchy)
czyZadowolony()
else:
print("Nie znaleziono ścieżki do celu.")
# ----------Losuje stoliki, które dokonają zamówienia
if kelner.stan == "stoi":
for stolik in stoliki:
@ -317,10 +459,10 @@ while run:
# print(f"{kelner.x} {kelner.y}")-------------Wypisuje wspolrzedne kelnera
# ----------------Zmiana pozycji kelnera
if kelner.chodzi == True and licznik % (101 - kelner.speed) == 0 and kelner.stanPrzestrzeni[:2] != cel2: #ograniczenie prędkości
if kelner.chodzi == True and licznik % (101 - kelner.speed) == 0 and kelner.stanPrzestrzeni[
:2] != cel2: # ograniczenie prędkości
kelner.wykonajAkcje(ruchy)
if kelner.stanPrzestrzeni[:2] == cel2:
if kelner.stan == "odbiera" and kelner.x == kelner.stolik_docelowy.x and kelner.y == kelner.stolik_docelowy.y - 1:
kelner.stolik_docelowy.zamowione = False
@ -335,7 +477,6 @@ while run:
elif kelner.stan == "wraca" and kelner.x == kuchnia_xy and kelner.y == kuchnia_xy:
kelner.stan = "stoi"
time.sleep(0.001)
key = pygame.key.get_pressed()
@ -343,4 +484,14 @@ while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
#------------------------------------------------------------------------------------------------------------------
'''
frames.clear()
frames.append(data)
while len(frames) > 0:
data = frames.pop()
id3(data,"full")
'''
pygame.quit()

257
zbior_uczacy.csv Normal file
View File

@ -0,0 +1,257 @@
Usmiech,Napiwek,Grzeczny,Zjadl,DodZam,Karta,Rezerwacja,Wizytowka,Zadowolony
0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,1,0
0,0,0,0,0,0,1,0,0
0,0,0,0,0,0,1,1,0
0,0,0,0,0,1,0,0,0
0,0,0,0,0,1,0,1,0
0,0,0,0,0,1,1,0,0
0,0,0,0,0,1,1,1,0
0,0,0,0,1,0,0,0,0
0,0,0,0,1,0,0,1,0
0,0,0,0,1,0,1,0,0
0,0,0,0,1,0,1,1,0
0,0,0,0,1,1,0,0,0
0,0,0,0,1,1,0,1,0
0,0,0,0,1,1,1,0,0
0,0,0,0,1,1,1,1,0
0,0,0,1,0,0,0,0,0
0,0,0,1,0,0,0,1,0
0,0,0,1,0,0,1,0,0
0,0,0,1,0,0,1,1,0
0,0,0,1,0,1,0,0,0
0,0,0,1,0,1,0,1,0
0,0,0,1,0,1,1,0,0
0,0,0,1,0,1,1,1,1
0,0,0,1,1,0,0,0,0
0,0,0,1,1,0,0,1,0
0,0,0,1,1,0,1,0,0
0,0,0,1,1,0,1,1,1
0,0,0,1,1,1,0,0,0
0,0,0,1,1,1,0,1,1
0,0,0,1,1,1,1,0,1
0,0,0,1,1,1,1,1,1
0,0,1,0,0,0,0,0,0
0,0,1,0,0,0,0,1,0
0,0,1,0,0,0,1,0,0
0,0,1,0,0,0,1,1,0
0,0,1,0,0,1,0,0,0
0,0,1,0,0,1,0,1,0
0,0,1,0,0,1,1,0,0
0,0,1,0,0,1,1,1,1
0,0,1,0,1,0,0,0,0
0,0,1,0,1,0,0,1,1
0,0,1,0,1,0,1,0,1
0,0,1,0,1,0,1,1,1
0,0,1,0,1,1,0,0,0
0,0,1,0,1,1,0,1,1
0,0,1,0,1,1,1,0,1
0,0,1,0,1,1,1,1,1
0,0,1,1,0,0,0,0,1
0,0,1,1,0,0,0,1,1
0,0,1,1,0,0,1,0,1
0,0,1,1,0,0,1,1,1
0,0,1,1,0,1,0,0,1
0,0,1,1,0,1,0,1,1
0,0,1,1,0,1,1,0,1
0,0,1,1,0,1,1,1,1
0,0,1,1,1,0,0,0,1
0,0,1,1,1,0,0,1,1
0,0,1,1,1,0,1,0,1
0,0,1,1,1,0,1,1,1
0,0,1,1,1,1,0,0,1
0,0,1,1,1,1,0,1,1
0,0,1,1,1,1,1,0,1
0,0,1,1,1,1,1,1,1
0,1,0,0,0,0,0,0,0
0,1,0,0,0,0,0,1,1
0,1,0,0,0,0,1,0,1
0,1,0,0,0,0,1,1,1
0,1,0,0,0,1,0,0,1
0,1,0,0,0,1,0,1,1
0,1,0,0,0,1,1,0,1
0,1,0,0,0,1,1,1,1
0,1,0,0,1,0,0,0,1
0,1,0,0,1,0,0,1,1
0,1,0,0,1,0,1,0,1
0,1,0,0,1,0,1,1,1
0,1,0,0,1,1,0,0,1
0,1,0,0,1,1,0,1,1
0,1,0,0,1,1,1,0,1
0,1,0,0,1,1,1,1,1
0,1,0,1,0,0,0,0,1
0,1,0,1,0,0,0,1,1
0,1,0,1,0,0,1,0,1
0,1,0,1,0,0,1,1,1
0,1,0,1,0,1,0,0,1
0,1,0,1,0,1,0,1,1
0,1,0,1,0,1,1,0,1
0,1,0,1,0,1,1,1,1
0,1,0,1,1,0,0,0,1
0,1,0,1,1,0,0,1,1
0,1,0,1,1,0,1,0,1
0,1,0,1,1,0,1,1,1
0,1,0,1,1,1,0,0,1
0,1,0,1,1,1,0,1,1
0,1,0,1,1,1,1,0,1
0,1,0,1,1,1,1,1,1
0,1,1,0,0,0,0,0,1
0,1,1,0,0,0,0,1,1
0,1,1,0,0,0,1,0,1
0,1,1,0,0,0,1,1,1
0,1,1,0,0,1,0,0,1
0,1,1,0,0,1,0,1,1
0,1,1,0,0,1,1,0,1
0,1,1,0,0,1,1,1,1
0,1,1,0,1,0,0,0,1
0,1,1,0,1,0,0,1,1
0,1,1,0,1,0,1,0,1
0,1,1,0,1,0,1,1,1
0,1,1,0,1,1,0,0,1
0,1,1,0,1,1,0,1,1
0,1,1,0,1,1,1,0,1
0,1,1,0,1,1,1,1,1
0,1,1,1,0,0,0,0,1
0,1,1,1,0,0,0,1,1
0,1,1,1,0,0,1,0,1
0,1,1,1,0,0,1,1,1
0,1,1,1,0,1,0,0,1
0,1,1,1,0,1,0,1,1
0,1,1,1,0,1,1,0,1
0,1,1,1,0,1,1,1,1
0,1,1,1,1,0,0,0,1
0,1,1,1,1,0,0,1,1
0,1,1,1,1,0,1,0,1
0,1,1,1,1,0,1,1,1
0,1,1,1,1,1,0,0,1
0,1,1,1,1,1,0,1,1
0,1,1,1,1,1,1,0,1
0,1,1,1,1,1,1,1,1
1,0,0,0,0,0,0,0,0
1,0,0,0,0,0,0,1,0
1,0,0,0,0,0,1,0,0
1,0,0,0,0,0,1,1,1
1,0,0,0,0,1,0,0,0
1,0,0,0,0,1,0,1,1
1,0,0,0,0,1,1,0,1
1,0,0,0,0,1,1,1,1
1,0,0,0,1,0,0,0,0
1,0,0,0,1,0,0,1,1
1,0,0,0,1,0,1,0,1
1,0,0,0,1,0,1,1,1
1,0,0,0,1,1,0,0,1
1,0,0,0,1,1,0,1,1
1,0,0,0,1,1,1,0,1
1,0,0,0,1,1,1,1,1
1,0,0,1,0,0,0,0,0
1,0,0,1,0,0,0,1,1
1,0,0,1,0,0,1,0,1
1,0,0,1,0,0,1,1,1
1,0,0,1,0,1,0,0,1
1,0,0,1,0,1,0,1,1
1,0,0,1,0,1,1,0,1
1,0,0,1,0,1,1,1,1
1,0,0,1,1,0,0,0,1
1,0,0,1,1,0,0,1,1
1,0,0,1,1,0,1,0,1
1,0,0,1,1,0,1,1,1
1,0,0,1,1,1,0,0,1
1,0,0,1,1,1,0,1,1
1,0,0,1,1,1,1,0,1
1,0,0,1,1,1,1,1,1
1,0,1,0,0,0,0,0,1
1,0,1,0,0,0,0,1,1
1,0,1,0,0,0,1,0,1
1,0,1,0,0,0,1,1,1
1,0,1,0,0,1,0,0,1
1,0,1,0,0,1,0,1,1
1,0,1,0,0,1,1,0,1
1,0,1,0,0,1,1,1,1
1,0,1,0,1,0,0,0,1
1,0,1,0,1,0,0,1,1
1,0,1,0,1,0,1,0,1
1,0,1,0,1,0,1,1,1
1,0,1,0,1,1,0,0,1
1,0,1,0,1,1,0,1,1
1,0,1,0,1,1,1,0,1
1,0,1,0,1,1,1,1,1
1,0,1,1,0,0,0,0,1
1,0,1,1,0,0,0,1,1
1,0,1,1,0,0,1,0,1
1,0,1,1,0,0,1,1,1
1,0,1,1,0,1,0,0,1
1,0,1,1,0,1,0,1,1
1,0,1,1,0,1,1,0,1
1,0,1,1,0,1,1,1,1
1,0,1,1,1,0,0,0,1
1,0,1,1,1,0,0,1,1
1,0,1,1,1,0,1,0,1
1,0,1,1,1,0,1,1,1
1,0,1,1,1,1,0,0,1
1,0,1,1,1,1,0,1,1
1,0,1,1,1,1,1,0,1
1,0,1,1,1,1,1,1,1
1,1,0,0,0,0,0,0,1
1,1,0,0,0,0,0,1,1
1,1,0,0,0,0,1,0,1
1,1,0,0,0,0,1,1,1
1,1,0,0,0,1,0,0,1
1,1,0,0,0,1,0,1,1
1,1,0,0,0,1,1,0,1
1,1,0,0,0,1,1,1,1
1,1,0,0,1,0,0,0,1
1,1,0,0,1,0,0,1,1
1,1,0,0,1,0,1,0,1
1,1,0,0,1,0,1,1,1
1,1,0,0,1,1,0,0,1
1,1,0,0,1,1,0,1,1
1,1,0,0,1,1,1,0,1
1,1,0,0,1,1,1,1,1
1,1,0,1,0,0,0,0,1
1,1,0,1,0,0,0,1,1
1,1,0,1,0,0,1,0,1
1,1,0,1,0,0,1,1,1
1,1,0,1,0,1,0,0,1
1,1,0,1,0,1,0,1,1
1,1,0,1,0,1,1,0,1
1,1,0,1,0,1,1,1,1
1,1,0,1,1,0,0,0,1
1,1,0,1,1,0,0,1,1
1,1,0,1,1,0,1,0,1
1,1,0,1,1,0,1,1,1
1,1,0,1,1,1,0,0,1
1,1,0,1,1,1,0,1,1
1,1,0,1,1,1,1,0,1
1,1,0,1,1,1,1,1,1
1,1,1,0,0,0,0,0,1
1,1,1,0,0,0,0,1,1
1,1,1,0,0,0,1,0,1
1,1,1,0,0,0,1,1,1
1,1,1,0,0,1,0,0,1
1,1,1,0,0,1,0,1,1
1,1,1,0,0,1,1,0,1
1,1,1,0,0,1,1,1,1
1,1,1,0,1,0,0,0,1
1,1,1,0,1,0,0,1,1
1,1,1,0,1,0,1,0,1
1,1,1,0,1,0,1,1,1
1,1,1,0,1,1,0,0,1
1,1,1,0,1,1,0,1,1
1,1,1,0,1,1,1,0,1
1,1,1,0,1,1,1,1,1
1,1,1,1,0,0,0,0,1
1,1,1,1,0,0,0,1,1
1,1,1,1,0,0,1,0,1
1,1,1,1,0,0,1,1,1
1,1,1,1,0,1,0,0,1
1,1,1,1,0,1,0,1,1
1,1,1,1,0,1,1,0,1
1,1,1,1,0,1,1,1,1
1,1,1,1,1,0,0,0,1
1,1,1,1,1,0,0,1,1
1,1,1,1,1,0,1,0,1
1,1,1,1,1,0,1,1,1
1,1,1,1,1,1,0,0,1
1,1,1,1,1,1,0,1,1
1,1,1,1,1,1,1,0,1
1,1,1,1,1,1,1,1,1
1 Usmiech Napiwek Grzeczny Zjadl DodZam Karta Rezerwacja Wizytowka Zadowolony
2 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 1 0
4 0 0 0 0 0 0 1 0 0
5 0 0 0 0 0 0 1 1 0
6 0 0 0 0 0 1 0 0 0
7 0 0 0 0 0 1 0 1 0
8 0 0 0 0 0 1 1 0 0
9 0 0 0 0 0 1 1 1 0
10 0 0 0 0 1 0 0 0 0
11 0 0 0 0 1 0 0 1 0
12 0 0 0 0 1 0 1 0 0
13 0 0 0 0 1 0 1 1 0
14 0 0 0 0 1 1 0 0 0
15 0 0 0 0 1 1 0 1 0
16 0 0 0 0 1 1 1 0 0
17 0 0 0 0 1 1 1 1 0
18 0 0 0 1 0 0 0 0 0
19 0 0 0 1 0 0 0 1 0
20 0 0 0 1 0 0 1 0 0
21 0 0 0 1 0 0 1 1 0
22 0 0 0 1 0 1 0 0 0
23 0 0 0 1 0 1 0 1 0
24 0 0 0 1 0 1 1 0 0
25 0 0 0 1 0 1 1 1 1
26 0 0 0 1 1 0 0 0 0
27 0 0 0 1 1 0 0 1 0
28 0 0 0 1 1 0 1 0 0
29 0 0 0 1 1 0 1 1 1
30 0 0 0 1 1 1 0 0 0
31 0 0 0 1 1 1 0 1 1
32 0 0 0 1 1 1 1 0 1
33 0 0 0 1 1 1 1 1 1
34 0 0 1 0 0 0 0 0 0
35 0 0 1 0 0 0 0 1 0
36 0 0 1 0 0 0 1 0 0
37 0 0 1 0 0 0 1 1 0
38 0 0 1 0 0 1 0 0 0
39 0 0 1 0 0 1 0 1 0
40 0 0 1 0 0 1 1 0 0
41 0 0 1 0 0 1 1 1 1
42 0 0 1 0 1 0 0 0 0
43 0 0 1 0 1 0 0 1 1
44 0 0 1 0 1 0 1 0 1
45 0 0 1 0 1 0 1 1 1
46 0 0 1 0 1 1 0 0 0
47 0 0 1 0 1 1 0 1 1
48 0 0 1 0 1 1 1 0 1
49 0 0 1 0 1 1 1 1 1
50 0 0 1 1 0 0 0 0 1
51 0 0 1 1 0 0 0 1 1
52 0 0 1 1 0 0 1 0 1
53 0 0 1 1 0 0 1 1 1
54 0 0 1 1 0 1 0 0 1
55 0 0 1 1 0 1 0 1 1
56 0 0 1 1 0 1 1 0 1
57 0 0 1 1 0 1 1 1 1
58 0 0 1 1 1 0 0 0 1
59 0 0 1 1 1 0 0 1 1
60 0 0 1 1 1 0 1 0 1
61 0 0 1 1 1 0 1 1 1
62 0 0 1 1 1 1 0 0 1
63 0 0 1 1 1 1 0 1 1
64 0 0 1 1 1 1 1 0 1
65 0 0 1 1 1 1 1 1 1
66 0 1 0 0 0 0 0 0 0
67 0 1 0 0 0 0 0 1 1
68 0 1 0 0 0 0 1 0 1
69 0 1 0 0 0 0 1 1 1
70 0 1 0 0 0 1 0 0 1
71 0 1 0 0 0 1 0 1 1
72 0 1 0 0 0 1 1 0 1
73 0 1 0 0 0 1 1 1 1
74 0 1 0 0 1 0 0 0 1
75 0 1 0 0 1 0 0 1 1
76 0 1 0 0 1 0 1 0 1
77 0 1 0 0 1 0 1 1 1
78 0 1 0 0 1 1 0 0 1
79 0 1 0 0 1 1 0 1 1
80 0 1 0 0 1 1 1 0 1
81 0 1 0 0 1 1 1 1 1
82 0 1 0 1 0 0 0 0 1
83 0 1 0 1 0 0 0 1 1
84 0 1 0 1 0 0 1 0 1
85 0 1 0 1 0 0 1 1 1
86 0 1 0 1 0 1 0 0 1
87 0 1 0 1 0 1 0 1 1
88 0 1 0 1 0 1 1 0 1
89 0 1 0 1 0 1 1 1 1
90 0 1 0 1 1 0 0 0 1
91 0 1 0 1 1 0 0 1 1
92 0 1 0 1 1 0 1 0 1
93 0 1 0 1 1 0 1 1 1
94 0 1 0 1 1 1 0 0 1
95 0 1 0 1 1 1 0 1 1
96 0 1 0 1 1 1 1 0 1
97 0 1 0 1 1 1 1 1 1
98 0 1 1 0 0 0 0 0 1
99 0 1 1 0 0 0 0 1 1
100 0 1 1 0 0 0 1 0 1
101 0 1 1 0 0 0 1 1 1
102 0 1 1 0 0 1 0 0 1
103 0 1 1 0 0 1 0 1 1
104 0 1 1 0 0 1 1 0 1
105 0 1 1 0 0 1 1 1 1
106 0 1 1 0 1 0 0 0 1
107 0 1 1 0 1 0 0 1 1
108 0 1 1 0 1 0 1 0 1
109 0 1 1 0 1 0 1 1 1
110 0 1 1 0 1 1 0 0 1
111 0 1 1 0 1 1 0 1 1
112 0 1 1 0 1 1 1 0 1
113 0 1 1 0 1 1 1 1 1
114 0 1 1 1 0 0 0 0 1
115 0 1 1 1 0 0 0 1 1
116 0 1 1 1 0 0 1 0 1
117 0 1 1 1 0 0 1 1 1
118 0 1 1 1 0 1 0 0 1
119 0 1 1 1 0 1 0 1 1
120 0 1 1 1 0 1 1 0 1
121 0 1 1 1 0 1 1 1 1
122 0 1 1 1 1 0 0 0 1
123 0 1 1 1 1 0 0 1 1
124 0 1 1 1 1 0 1 0 1
125 0 1 1 1 1 0 1 1 1
126 0 1 1 1 1 1 0 0 1
127 0 1 1 1 1 1 0 1 1
128 0 1 1 1 1 1 1 0 1
129 0 1 1 1 1 1 1 1 1
130 1 0 0 0 0 0 0 0 0
131 1 0 0 0 0 0 0 1 0
132 1 0 0 0 0 0 1 0 0
133 1 0 0 0 0 0 1 1 1
134 1 0 0 0 0 1 0 0 0
135 1 0 0 0 0 1 0 1 1
136 1 0 0 0 0 1 1 0 1
137 1 0 0 0 0 1 1 1 1
138 1 0 0 0 1 0 0 0 0
139 1 0 0 0 1 0 0 1 1
140 1 0 0 0 1 0 1 0 1
141 1 0 0 0 1 0 1 1 1
142 1 0 0 0 1 1 0 0 1
143 1 0 0 0 1 1 0 1 1
144 1 0 0 0 1 1 1 0 1
145 1 0 0 0 1 1 1 1 1
146 1 0 0 1 0 0 0 0 0
147 1 0 0 1 0 0 0 1 1
148 1 0 0 1 0 0 1 0 1
149 1 0 0 1 0 0 1 1 1
150 1 0 0 1 0 1 0 0 1
151 1 0 0 1 0 1 0 1 1
152 1 0 0 1 0 1 1 0 1
153 1 0 0 1 0 1 1 1 1
154 1 0 0 1 1 0 0 0 1
155 1 0 0 1 1 0 0 1 1
156 1 0 0 1 1 0 1 0 1
157 1 0 0 1 1 0 1 1 1
158 1 0 0 1 1 1 0 0 1
159 1 0 0 1 1 1 0 1 1
160 1 0 0 1 1 1 1 0 1
161 1 0 0 1 1 1 1 1 1
162 1 0 1 0 0 0 0 0 1
163 1 0 1 0 0 0 0 1 1
164 1 0 1 0 0 0 1 0 1
165 1 0 1 0 0 0 1 1 1
166 1 0 1 0 0 1 0 0 1
167 1 0 1 0 0 1 0 1 1
168 1 0 1 0 0 1 1 0 1
169 1 0 1 0 0 1 1 1 1
170 1 0 1 0 1 0 0 0 1
171 1 0 1 0 1 0 0 1 1
172 1 0 1 0 1 0 1 0 1
173 1 0 1 0 1 0 1 1 1
174 1 0 1 0 1 1 0 0 1
175 1 0 1 0 1 1 0 1 1
176 1 0 1 0 1 1 1 0 1
177 1 0 1 0 1 1 1 1 1
178 1 0 1 1 0 0 0 0 1
179 1 0 1 1 0 0 0 1 1
180 1 0 1 1 0 0 1 0 1
181 1 0 1 1 0 0 1 1 1
182 1 0 1 1 0 1 0 0 1
183 1 0 1 1 0 1 0 1 1
184 1 0 1 1 0 1 1 0 1
185 1 0 1 1 0 1 1 1 1
186 1 0 1 1 1 0 0 0 1
187 1 0 1 1 1 0 0 1 1
188 1 0 1 1 1 0 1 0 1
189 1 0 1 1 1 0 1 1 1
190 1 0 1 1 1 1 0 0 1
191 1 0 1 1 1 1 0 1 1
192 1 0 1 1 1 1 1 0 1
193 1 0 1 1 1 1 1 1 1
194 1 1 0 0 0 0 0 0 1
195 1 1 0 0 0 0 0 1 1
196 1 1 0 0 0 0 1 0 1
197 1 1 0 0 0 0 1 1 1
198 1 1 0 0 0 1 0 0 1
199 1 1 0 0 0 1 0 1 1
200 1 1 0 0 0 1 1 0 1
201 1 1 0 0 0 1 1 1 1
202 1 1 0 0 1 0 0 0 1
203 1 1 0 0 1 0 0 1 1
204 1 1 0 0 1 0 1 0 1
205 1 1 0 0 1 0 1 1 1
206 1 1 0 0 1 1 0 0 1
207 1 1 0 0 1 1 0 1 1
208 1 1 0 0 1 1 1 0 1
209 1 1 0 0 1 1 1 1 1
210 1 1 0 1 0 0 0 0 1
211 1 1 0 1 0 0 0 1 1
212 1 1 0 1 0 0 1 0 1
213 1 1 0 1 0 0 1 1 1
214 1 1 0 1 0 1 0 0 1
215 1 1 0 1 0 1 0 1 1
216 1 1 0 1 0 1 1 0 1
217 1 1 0 1 0 1 1 1 1
218 1 1 0 1 1 0 0 0 1
219 1 1 0 1 1 0 0 1 1
220 1 1 0 1 1 0 1 0 1
221 1 1 0 1 1 0 1 1 1
222 1 1 0 1 1 1 0 0 1
223 1 1 0 1 1 1 0 1 1
224 1 1 0 1 1 1 1 0 1
225 1 1 0 1 1 1 1 1 1
226 1 1 1 0 0 0 0 0 1
227 1 1 1 0 0 0 0 1 1
228 1 1 1 0 0 0 1 0 1
229 1 1 1 0 0 0 1 1 1
230 1 1 1 0 0 1 0 0 1
231 1 1 1 0 0 1 0 1 1
232 1 1 1 0 0 1 1 0 1
233 1 1 1 0 0 1 1 1 1
234 1 1 1 0 1 0 0 0 1
235 1 1 1 0 1 0 0 1 1
236 1 1 1 0 1 0 1 0 1
237 1 1 1 0 1 0 1 1 1
238 1 1 1 0 1 1 0 0 1
239 1 1 1 0 1 1 0 1 1
240 1 1 1 0 1 1 1 0 1
241 1 1 1 0 1 1 1 1 1
242 1 1 1 1 0 0 0 0 1
243 1 1 1 1 0 0 0 1 1
244 1 1 1 1 0 0 1 0 1
245 1 1 1 1 0 0 1 1 1
246 1 1 1 1 0 1 0 0 1
247 1 1 1 1 0 1 0 1 1
248 1 1 1 1 0 1 1 0 1
249 1 1 1 1 0 1 1 1 1
250 1 1 1 1 1 0 0 0 1
251 1 1 1 1 1 0 0 1 1
252 1 1 1 1 1 0 1 0 1
253 1 1 1 1 1 0 1 1 1
254 1 1 1 1 1 1 0 0 1
255 1 1 1 1 1 1 0 1 1
256 1 1 1 1 1 1 1 0 1
257 1 1 1 1 1 1 1 1 1