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

231
main.py
View File

@ -1,23 +1,27 @@
import pygame
import random
import time
import pandas as pd
import math
import matplotlib.pyplot as plt
kuchnia_xy = 0
pozycja_startowa = 0
losuj_uklad = False #Gdy True, losuje uklad stolikow oraz przeszkod
losuj_uklad = False # Gdy True, losuje uklad stolikow oraz przeszkod
#------------Ustawienia siatki
# ------------Ustawienia siatki
blockSize = 60
rows = 14
columns = 24
#-----------------------------Inicjacja klas
# -----------------------------Inicjacja klas
class Kelner:
def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 80 # od 0 do 100, preferowane 80
self.stanPrzestrzeni = [0,0,0]
self.stanPrzestrzeni = [0, 0, 0]
self.stan = "stoi" # Stan kelnera: stoi, odbiera lub wraca
self.stolik_docelowy = None # Stolik, do którego idzie kelner
self.chodzi = True
@ -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,13 +88,14 @@ 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
self.y = y
self.typ = typ
#ocena kosztu przeszkody
# ocena kosztu przeszkody
if self.typ == "sliska podloga":
self.cena = 2
@ -104,10 +108,12 @@ class Przeszkoda:
elif self.typ == "dywan":
screen.blit(dywanImg, (self.x * blockSize, self.y * blockSize))
#-----------------Przeszukiwanie przestrzeni stanów
# -----------------Przeszukiwanie przestrzeni stanów
import heapq
def a_star(start, cel, stoliki, przeszkody):
queue = [] # Kolejka priorytetowa
heapq.heappush(queue, (0, start)) # (koszt, stan)
@ -123,7 +129,7 @@ def a_star(start, cel, stoliki, przeszkody):
for nastepnik, ruch, koszt_ruchu in generuj_nastepniki_i_ruchy(obecny, stoliki, przeszkody):
nowy_koszt = poprzednicy[obecny][2] + koszt_ruchu # Obliczanie nowego kosztu dojscia do nastepnika
#nastepnik nie był odwiedzony lub znaleziono tansza sciezke do niego
# nastepnik nie był odwiedzony lub znaleziono tansza sciezke do niego
if nastepnik not in odwiedzone or nowy_koszt < poprzednicy.get(nastepnik, (None, None, float('inf')))[2]:
heapq.heappush(queue, (nowy_koszt + heurystyka(nastepnik, cel), nastepnik))
poprzednicy[nastepnik] = (obecny, ruch, nowy_koszt)
@ -136,7 +142,7 @@ def heurystyka(nastepnik, cel):
return abs(nastepnik[0] - cel[0]) + abs(nastepnik[1] - cel[1])
#----------Funkcja generowania następników dla poszczególnych stanów
# ----------Funkcja generowania następników dla poszczególnych stanów
def generuj_nastepniki_i_ruchy(stan, stoliki, przeszkody):
x, y, kierunek = stan
ruchy = []
@ -159,17 +165,18 @@ def generuj_nastepniki_i_ruchy(stan, stoliki, przeszkody):
elif kierunek == 3:
nowy_x, nowy_y = x - 1, y
#sprawdzamy, czy następny stan jest w granicach planszy
# sprawdzamy, czy następny stan jest w granicach planszy
if 0 <= nowy_x < columns and 0 <= nowy_y < rows:
#sprawdzamy, czy następny stan nie wchodzi w stolik
# 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)
ruchy.append( ((nowy_x, nowy_y, kierunek), 'F', koszt) )
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
#-----Funkcja tworząca listę kroków potrzebnych do uzyskania celu
# -----Funkcja tworząca listę kroków potrzebnych do uzyskania celu
def odtworz_ruchy(poprzednicy, cel):
ruchy = []
krok = cel
@ -179,22 +186,94 @@ 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
#--------------Inicjacja obiektów
kelner = Kelner(pozycja_startowa,pozycja_startowa)
# --------------Inicjacja obiektów
kelner = Kelner(pozycja_startowa, pozycja_startowa)
#-----------wspolrzedne stolikow
# -----------wspolrzedne stolikow
coords = ["8 4", "16 4", "0 7", "23 7", "12 9", "8 10", "16 10", "4 12", "12 12", "20 12"]
#-----------wspolrzedne sliskich podlog
# -----------wspolrzedne sliskich podlog
coords2 = ["0 2", "0 3", "0 4", "0 5", "4 8", "4 9", "12 2", "12 3", "15 8", "16 8", "19 4", "20 4", "21 4"]
#-----------wspolrzedne dywanow
# -----------wspolrzedne dywanow
coords3 = ["6 0", "6 1", "2 2", "3 2", "4 2", "5 2", "1 5", "6 2", "8 6", "8 7", "20 2", "20 3", "19 9", "20 9", "21 9"]
#Tworzenie listy stolikow i przeszkod
# Tworzenie listy stolikow i przeszkod
stoliki = []
przeszkody = []
if not losuj_uklad:
@ -209,16 +288,16 @@ if not losuj_uklad:
przeszkody.append(Przeszkoda(x, y, "dywan"))
else:
juzbyly = []
for j in range(1,rows):
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)):
stoliki.append(Stolik(i,j))
juzbyly.append((i,j))
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:
przeszkody.append(Przeszkoda(i,j, "sliska podloga"))
przeszkody.append(Przeszkoda(i, j, "sliska podloga"))
elif random.randrange(12) == 0:
przeszkody.append(Przeszkoda(i,j, "dywan"))
przeszkody.append(Przeszkoda(i, j, "dywan"))
# stoliki = []
# for i in range(rows)
@ -226,7 +305,7 @@ else:
pygame.init()
pygame.display.set_caption("Automatyczny kelner")
#----------------wymiary okna
# ----------------wymiary okna
width = columns * blockSize
height = rows * blockSize
@ -245,19 +324,43 @@ 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):
for y in range(0, height, blockSize):
rect = pygame.Rect(x, y, blockSize, blockSize)
pygame.draw.rect(screen, (200, 200, 200), rect, 1) #-------------Wypisz kratę -TA
#pygame.draw.rect(screen, (0, 0, 0), rect, 1) #-------------Wypisz kratę -TA
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
@ -267,10 +370,48 @@ 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)
#print(f"{kelner.stanPrzestrzeni}, {cel2}, {kelner.indexRuchu} {kelner.stan}")
# print(f"{kelner.stanPrzestrzeni}, {cel2}, {kelner.indexRuchu} {kelner.stan}")
wypiszOkno()
kuchnia(kuchnia_xy, kuchnia_xy)
@ -287,7 +428,7 @@ while run:
licznik += 1
#------------weź zamowienie
# ------------weź zamowienie
for stolik in stoliki:
if stolik.zamowione == True:
menu(stolik.x, stolik.y)
@ -298,13 +439,14 @@ 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
# ----------Losuje stoliki, które dokonają zamówienia
if kelner.stan == "stoi":
for stolik in stoliki:
if stolik.zamowione == True:
@ -313,14 +455,14 @@ while run:
if random.randrange(2) == 1:
stoliki[i].zamowione = True
#print(kelner.stan)--------------------------Wypisuje stan kelnera
#print(f"{kelner.x} {kelner.y}")-------------Wypisuje wspolrzedne kelnera
# print(kelner.stan)--------------------------Wypisuje stan kelnera
# 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
# ----------------Zmiana pozycji kelnera
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