Compare commits

...

90 Commits

Author SHA1 Message Date
Konrad Pierzyński
6bbbcbc343 Dodano raporty z metod pythonowych 2019-06-12 10:38:31 +02:00
Konrad Pierzyński
f9a7a69d16 Poprawiono zapis ruchow do pliku 2019-05-22 10:55:13 +02:00
Konrad Pierzyński
6289ce99b1 Usunieto przypadkowego VENV 2019-05-22 10:44:04 +02:00
Konrad Pierzyński
51396183ef Merge branch 'master' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi 2019-05-22 10:40:57 +02:00
Konrad Pierzyński
e9c93a2b9f Zapis ruchow do pliku 2019-05-22 10:40:30 +02:00
Konrad Pierzyński
2473104b65 Zapis ruchow do pliku 2019-05-22 10:39:56 +02:00
Magdalena Wilczyńska
9567999454 Merge branch 'master' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi 2019-05-22 10:09:20 +02:00
28d38d7589 windows update 2019-05-21 23:51:03 +02:00
Magdalena Wilczyńska
67e86029bb Merge branch 'master' into map_generator 2019-05-21 22:01:54 +02:00
Magdalena Wilczyńska
06de0e681f Cleaned up a bit 2019-05-21 21:51:10 +02:00
Magdalena Wilczyńska
e9d7f25bbe Added better solution for road modification 2019-05-21 21:24:57 +02:00
Michał Starski
7181bb133a implemented dumping moveset to the file 2019-05-21 11:53:29 +02:00
Magdalena Wilczyńska
0fdb9ce843 Disabled road modification for time being 2019-05-19 18:22:46 +02:00
Magdalena Wilczyńska
b567eec536 Added placing objects 2019-05-19 18:15:25 +02:00
Magdalena Wilczyńska
7664888597 Added saving to file 2019-05-19 17:28:46 +02:00
Magdalena Wilczyńska
36ff47fe3d Added route generating 2019-05-19 17:11:08 +02:00
4c9b2e95c5 Started road generator 2019-05-19 14:42:12 +02:00
b6bcb8be46 Zaktualizuj 'Raports/SI_Raport_3.md' 2019-05-15 08:09:00 +00:00
b999fd4df6 Zaktualizuj 'Raports/SI_Raport_2.md' 2019-05-14 22:18:55 +00:00
c6ab3a51df Zaktualizuj 'Raports/SI_Raport_3.md' 2019-05-14 22:10:25 +00:00
b4c7536e7f Zaktualizuj 'Raports/SI_Raport_3.md' 2019-05-14 22:08:05 +00:00
8890d95a07 Zaktualizuj 'Raports/SI_Raport_3.md' 2019-05-14 22:03:31 +00:00
Magdalena Wilczyńska
9259de3af6 Merge branch 'master' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi 2019-05-14 23:54:40 +02:00
Magdalena Wilczyńska
d56e137803 Removed old file 2019-05-14 23:54:23 +02:00
bfc31b59f8 Update 'Raports/SI_Raport_3.md' 2019-05-14 21:53:46 +00:00
19e7b98c87 Update 'Raports/SI_Raport_3.md' 2019-05-14 21:52:43 +00:00
Michał Starski
433a8b1ec9 added raport 3 and restored raport 1 2019-05-14 23:50:47 +02:00
Magdalena Wilczyńska
431d130379 Merged with master 2019-05-14 23:45:35 +02:00
Magdalena Wilczyńska
4c598f5af2 Removed debug messages 2019-05-14 23:41:48 +02:00
Magdalena Wilczyńska
f358e3c86a Working version 2019-05-14 23:29:19 +02:00
2ccc2b41b3 Update 'Raports/SI_Raport_2.md' 2019-05-14 21:20:40 +00:00
36b8bf702a naprawiono bug z DFS 2019-05-14 22:31:30 +02:00
a605f7a87e Poprawiono liczenie krokow, usunieto bug z powtarzaniem algorytmu 2019-05-14 22:18:38 +02:00
Magdalena Wilczyńska
b7d463f0ec Added patch to allow app to even start 2019-05-14 21:32:56 +02:00
Magdalena Wilczyńska
265668fa47 Tried really hard to make recursion work 2019-05-14 12:38:49 +02:00
5790a923f0 Why u do da bestfs with bugz 2019-05-13 22:01:33 +02:00
5c50c54e46 Dodano BFS 2019-05-13 13:16:36 +02:00
e39b82b4a8 Merged with master 2019-05-13 10:32:03 +02:00
d4cbe19f6e Added missing files 2019-05-13 10:29:34 +02:00
0981dcb8cc Added distance calculating and selecting directions 2019-05-13 10:27:39 +02:00
fa8cb46852 Smieciarz wywala smieci na koniec 2019-05-13 09:45:09 +02:00
1963068dd6 Naprawiono bug z DFS 2019-05-13 09:09:48 +02:00
Magdalena Wilczyńska
9b22d4a166 Added DFS support 2019-05-12 19:38:11 +02:00
Magdalena Wilczyńska
0652da713d Merged branch master to move_counter 2019-05-12 19:33:54 +02:00
Magdalena Wilczyńska
ae270bc833 Added move coounter 2019-05-12 10:24:43 +02:00
b8aaf2d78e Zmieniono DFS na rekurencyjny 2019-04-24 07:34:01 +02:00
Michał Starski
7cd150fa90 Added Raport #2 2019-04-24 02:27:58 +02:00
c5ed2423d6 Dzialajacy DFS 2019-04-23 23:05:34 +02:00
3b6fc6a446 Naprawiono algorytm, dfs do poprawy 2019-04-23 21:45:16 +02:00
Magdalena Wilczyńska
e2e09e4537 GC now recognizes houses as he passes 2019-04-23 20:48:14 +02:00
b93d49fa96 Dodano surowego DFS(sam algorytm do mocnej poprawy) 2019-04-23 17:15:05 +02:00
05eaa8f396 checkpoint 2019-04-10 11:18:22 +02:00
5257a3ec30 Funkcja zwracajaca mozliwe ruchy 2019-04-10 11:01:20 +02:00
Magdalena Wilczyńska
3ce89a6f2d Merge branch 'master' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi 2019-04-03 10:50:41 +02:00
Magdalena Wilczyńska
20fe038dc5 Added simple test map 2019-04-03 10:50:13 +02:00
Adnovac
643ddc28c1 Usunieto zbedne foldery 2019-04-03 10:16:13 +02:00
833707841e Update 'README.md' 2019-04-03 08:13:21 +00:00
Adnovac
949f53b985 Usunieto zbedny print 2019-04-02 09:48:46 +02:00
Adnovac
ac0ca70b35 Naprawiono zbieranie z domkow, dodano mozliwosc oddawania smieci 2019-04-02 09:47:00 +02:00
Michal Starski
e2f76d06a5 Merge branch 'master' of https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi 2019-04-01 15:47:12 +02:00
Michal Starski
206a101d17 Dodano zbieranie smieci 2019-04-01 15:45:48 +02:00
Magdalena Wilczyńska
734e3681c9 New images for GC, house, road and grass 2019-04-01 15:36:20 +02:00
Michal Starski
6168a2ed8f removed env 2019-04-01 14:42:17 +02:00
Michal Starski
716420b35b merge into maste 2019-04-01 14:39:08 +02:00
Adnovac
5e7d2e9111 Naprawiono ostatnia mape 2019-04-01 14:37:14 +02:00
Michal Starski
958c7ec271 Added working movement 2019-04-01 14:36:27 +02:00
Adnovac
8542676d15 naprawiono mapy 2019-04-01 14:34:53 +02:00
Konrad Pierzyński
ccb752c751 Poprawiono problem z generowaniem map 2019-04-01 14:32:24 +02:00
Michal Starski
17847fc58a removed trashes added movement added requirements 2019-04-01 14:10:14 +02:00
Konrad Pierzyński
7cf49721a5 Wersja z problemem generowania prostokatnych map 2019-04-01 14:07:27 +02:00
Konrad Pierzyński
e7bede9f5f Czyszczenie repo 2019-04-01 13:32:08 +02:00
Konrad Pierzyński
86fdd1543f Male bugfixy 2019-04-01 13:29:13 +02:00
Magdalena Wilczyńska
7c88f065eb Updated images 2019-04-01 12:52:45 +02:00
Konrad Pierzyński
65b5c8074b Dodano generowanie obiektow na siatce z plikow map 2019-04-01 12:48:11 +02:00
madziara89
316f80387f Added images and fixed maps 2019-04-01 11:14:25 +02:00
Magdalena Wilczyńska
91d34ad043 Add more maps 2019-04-01 10:58:30 +02:00
Magdalena Wilczyńska
0efe92bee1 Add first maps 2019-04-01 10:41:11 +02:00
Konrad Pierzyński
f538b2ffbf Struktura folderow 2019-04-01 10:38:43 +02:00
Konrad Pierzyński
974e5d3e8d Utworzenie struktury folderow 2019-04-01 10:36:41 +02:00
Konrad Pierzyński
e680636923 Inicjalizacja nowej wersji projektu 2019-04-01 10:33:32 +02:00
Magdalena Wilczyńska
04ee4fc1da Added house stats, removed hud display 2019-03-27 10:20:22 +01:00
Magdalena Wilczyńska
5454710e15 Cleaned up, updated report 2019-03-27 08:43:24 +01:00
Magdalena Wilczyńska
adde0b2286 Added importing stats to csv file 2019-03-27 08:37:51 +01:00
f5bc39f5ab fixed bug with collecting garbage 2019-03-27 00:37:54 +01:00
8244372044 Zaktualizuj 'raports/SI_Raport_1.md' 2019-03-26 23:23:52 +00:00
3603ee088b Update 'raports/SI_Raport_1.md' 2019-03-26 23:13:05 +00:00
42a825be42 Merge branch 'raports' of s440556/SZI2019SmieciarzWmi into master 2019-03-26 23:12:03 +00:00
6e7ef092cb Merge branch 'raports' of s440556/SZI2019SmieciarzWmi into master 2019-03-26 23:09:42 +00:00
Magdalena Wilczyńska
5c12f8acdc Logs, interaction and bug
Improved logs *stats are displayed every 2 seconds, *debug logs are visible; Added interaction between GC, house and landfill; Collecting trash bug;
2019-03-26 23:13:34 +01:00
Konrad
8d5febd918 Zmiejszono ilosc copy-paste ifow 2019-03-26 21:26:20 +01:00
86 changed files with 2395 additions and 421 deletions

5
.gitignore vendored
View File

@ -1,5 +1,8 @@
VENV
WENV
env
**/__pycache__
linux_env
.vscode
*.swp
linux_env
moveset_data.json

0
DataModels/.gitkeep Normal file
View File

26
DataModels/Cell.py Normal file
View File

@ -0,0 +1,26 @@
import pygame, random
from DataModels.Container import Container
from PIL import Image,ImageDraw
from config import CELL_SIZE
class Cell( pygame.sprite.Sprite ):
def __init__( self, x, y, max_rubbish, yellow = 0, green = 0, blue = 0, image_name = None):
pygame.sprite.Sprite.__init__( self )
self.image_name = image_name or type(self).__name__
self.update_rect( x,y )
self.container = Container( max_rubbish, yellow, green, blue )
self.update_image()
def update_rect( self, x, y ):
self.x, self.y = x,y
self.rect = pygame.Rect( x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE )
def update_image( self ):
image = Image.open("Resources/Images/Image_" + self.image_name + ".png" )
draw = ImageDraw.Draw(image)
draw.text( (5,5), str( self.container.status() ) )
mode, size, data = image.mode, image.size, image.tobytes()
self.image = pygame.image.frombuffer( data, size, mode )

41
DataModels/Container.py Normal file
View File

@ -0,0 +1,41 @@
class Container():
def __init__(self, max, y=0, g=0, b=0):
self.yellow, self.green, self.blue = y, g, b
self.max = max
def empty(self, trash_type=None, trash=None):
if trash_type == None:
self.yellow, self.green, self.blue = 0, 0, 0
elif trash_type == "yellow":
trash[0] += self.yellow
self.yellow = 0
elif trash_type == "green":
trash[1] += self.green
self.green = 0
elif trash_type == "blue":
trash[2] += self.blue
self.blue = 0
return trash
def status(self):
return [self.yellow, self.green, self.blue]
def is_full(self):
if self.yellow>0 or self.green>0 or self.blue>0:
return 1
return 0
def add(self, trash):
my_trash = [self.yellow, self.green, self.blue]
leftovers = [0, 0, 0]
for i in range(0, len(trash)):
while(my_trash[i] < self.max and trash[i] > 0):
my_trash[i] += 1
trash[i] -= 1
self.yellow, self.green, self.blue = my_trash
result = [0, 0, 0]
for i in range(0, len(trash)):
result[i] = trash[i] - leftovers[i]
return result

14
DataModels/Dump.py Normal file
View File

@ -0,0 +1,14 @@
import pygame
from DataModels.Cell import Cell
class Dump( Cell ):
def __init__( self, x, y, max_rubbish, dump_type, yellow = 0, green = 0, blue = 0 ):
Cell.__init__( self, x, y, max_rubbish, yellow, green, blue, dump_type )
self.dump_type = dump_type
self.unvisited = True
def return_trash(self, collector):
dump_type = self.dump_type.lower()[5:]
self.container.yellow, self.container.green, self.container.blue = collector.container.empty(dump_type,
[self.container.yellow, self.container.green, self.container.blue])
self.update_image()

120
DataModels/GC.py Normal file
View File

@ -0,0 +1,120 @@
from DataModels.Cell import Cell
from DataModels.Road import Road
from DataModels.House import House
from DataModels.Dump import Dump
from config import GRID_WIDTH, GRID_HEIGHT, DELAY
from utilities import movement, check_moves, save_moveset
from Traversal.DFS import DFS
from Traversal.BestFS import BestFS
from Traversal.BFS import BFS
import pygame
class GC(Cell):
moves_made = 0
def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0):
Cell.__init__(self, x, y, max_rubbish, yellow, green, blue)
self.moves = []
self.old_time = pygame.time.get_ticks()
def move(self, direction, environment):
self.x, self.y = movement(environment, self.x, self.y)[0][direction]
self.update_rect(self.x, self.y)
self.moves_made = self.moves_made + 1 #moves counter
print(check_moves(environment, self.x, self.y,direction))
def collect(self, enviromnent):
x, y = [self.x, self.y]
coordinates = [(x, y - 1), (x, y + 1), (x - 1, y), (x + 1, y)]
for coordinate in coordinates:
if coordinate[0]<0 or coordinate[1]<0:
continue
try:
item = enviromnent[coordinate[0]][coordinate[1]]
except:
continue
if(type(item) == House or type(item) == Dump):
item.return_trash(self)
self.update_image()
def get_moves_count(self):
return self.moves_made
def find_houses(self,enviromnent, house_count,dump_count, mode):
x = self.x
y = self.y
result = []
element_list=[]
house_count_after_search=house_count
for home in range(house_count):
avalible_moves = check_moves(enviromnent, x,y)
if mode == "DFS":
house,[x,y],result = DFS(enviromnent,avalible_moves,[[x,y]],House)
elif mode == "BFS":
house,[x,y],result = BFS(enviromnent,avalible_moves,[[x,y]],House)
result = result[1::]
self.moves.extend(result)
element_list.append(house)
for dump in range(dump_count):
avalible_moves = check_moves(enviromnent, x,y)
if mode == "DFS":
dump,[x,y],result = DFS(enviromnent,avalible_moves,[[x,y]],Dump)
elif mode == "BFS":
dump,[x,y],result = BFS(enviromnent,avalible_moves,[[x,y]],Dump)
self.moves.extend(result)
element_list.append(dump)
for x in element_list:
x.unvisited = True
self.moves.reverse()
save_moveset(self.moves)
def find_houses_BestFS(self, environment):
x = self.x
y = self.y
result = [[x,y]]
houses_list = []
dump_list = []
a = 0
for row in environment:
b = 0
for col in row:
if (type(col) is House):
houses_list.append([col,[a,b]])
if (type(col) is Dump):
dump_list.append([col,[a,b]])
b += 1
a += 1
x, y = self.x, self.y
for i in range(len(houses_list)):
available_movement = check_moves(environment, x, y)
output = BestFS(environment, available_movement, [[x,y]], houses_list)
if(output != None):
[x,y],result,houses_list = output[0], output[1], output[2]
self.moves.extend(result[1:])
for i in range(len(dump_list)):
available_movement = check_moves(environment, x, y)
output = BestFS(environment, available_movement, [[x,y]], dump_list)
if(output != None):
[x,y],result,dump_list = output[0], output[1], output[2]
self.moves.extend(result[1:])
self.moves.reverse()
save_moveset(self.moves)
def make_actions_from_list(self,environment):
now = pygame.time.get_ticks()
if len(self.moves)==0 or now - self.old_time <= DELAY:
return
self.old_time = pygame.time.get_ticks()
if self.moves[-1] == "pick_garbage":
self.collect(environment)
self.moves.pop()
return
self.x, self.y = self.moves.pop()
self.moves_made = self.moves_made + 1 #moves counter
self.update_rect(self.x,self.y)

8
DataModels/Grass.py Normal file
View File

@ -0,0 +1,8 @@
import pygame
from config import CELL_SIZE
class Grass( pygame.sprite.Sprite ):
def __init__( self, x, y ):
pygame.sprite.Sprite.__init__( self )
self.rect = pygame.Rect( x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE )
self.image = pygame.image.load("Resources/Images/Image_Grass.png")

12
DataModels/House.py Normal file
View File

@ -0,0 +1,12 @@
from DataModels.Cell import Cell
class House(Cell):
def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0):
Cell.__init__(self, x, y, max_rubbish, yellow, green, blue)
self.unvisited = True
def return_trash(self, collector):
self.container.yellow, self.container.green, self.container.blue = collector.container.add(
[self.container.yellow, self.container.green, self.container.blue])
self.update_image()

8
DataModels/Road.py Normal file
View File

@ -0,0 +1,8 @@
import pygame
from config import CELL_SIZE
class Road( pygame.sprite.Sprite ):
def __init__( self, x, y ):
pygame.sprite.Sprite.__init__( self )
self.rect = pygame.Rect( x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE )
self.image = pygame.image.load("Resources/Images/Image_Road.png")

View File

@ -1,13 +0,0 @@
.PHONY: init install start
init-linux:
python3 -m venv env
install:
env/bin/pip3 install -r requirements.txt
start:
env/bin/python3 ./game.py --home-count=5

153
MapGenerator.py Normal file
View File

@ -0,0 +1,153 @@
import random, datetime, itertools
def GenerateMap():
#generate random empty map
width = random.randint(5,15) #up to 15
height = random.randint(5,10) #up to 10
grid = []
row = []
for i in range(width):
row.append('E')
for i in range(height):
grid.append(row.copy())
#define number of roads for each axis
x_roads_count = random.randint(2, max(width//3,2))
y_roads_count = random.randint(2, max(height//3,2))
#select coords of roads for x
x_roads_coordinates = [] #output coords
possible_coordiantes = [i for i in range(width)] #coords to choose from
for i in range(x_roads_count):
coordinate = random.choice(possible_coordiantes)
road_area = [coordinate-1, coordinate, coordinate+1]
possible_coordiantes = [i for i in possible_coordiantes if i not in road_area] #removes road and surrounding coords (total 3 coords) from possible coords
x_roads_coordinates.append(coordinate)
#select coords of roads for y
y_roads_coordinates = [] #output coords
possible_coordiantes = [i for i in range(height)] #coords to choose from
for i in range(y_roads_count):
coordinate = random.choice(possible_coordiantes)
road_area = [coordinate-1, coordinate, coordinate+1]
possible_coordiantes = [i for i in possible_coordiantes if i not in road_area] #removes road and surrounding coords (total 3 coords) from possible coords
y_roads_coordinates.append(coordinate)
#create list of road coordinates
roads = []
for x in x_roads_coordinates:
for y in range(height):
roads.append([x,y])
for y in y_roads_coordinates:
for x in range(width):
roads.append([x,y])
"""AH SHIT HERE WE GO AGAIN"""
#create list of path coords that can become new intersections by removing intersections and 8 adjacent tiles from roads
intersections_area = []
for x in x_roads_coordinates:
for y in y_roads_coordinates:
intersection_area = []
for i in range (-1,2,1):
for j in range (-1,2,1):
intersection_area.append([x+i,y+j])
intersections_area.extend(intersection_area)
possible_roads_to_modify = [i for i in roads if i not in intersections_area]
roads_to_modify = []
for i in range(1,len(possible_roads_to_modify)//3):
choice = random.choice(possible_roads_to_modify)
possible_roads_to_modify.remove(choice)
roads_to_modify.append(choice)
"""CREATION TIME"""
#perform modification based on road
for r in roads_to_modify:
#select possible directions for modification
x, y = r
direction = random.choice([1,-1])
if([x+1, y] in roads or [x-1, y] in roads):
#modify y, as there is road on x coordinates
route = []
current_tile = [x,y+direction]
while(True):
if(current_tile[1]<0 or current_tile[1]>=height or current_tile in roads):
break
else:
route.append(current_tile)
current_tile = [current_tile[0],current_tile[1]+direction]
else:
#modify x, as there is road on y coordinates
route = []
current_tile = [x+direction,y]
while(True):
if(current_tile[0]<0 or current_tile[0]>=width or current_tile in roads):
break
else:
route.append(current_tile)
current_tile = [current_tile[0]+direction,current_tile[1]]
#choose if the route should be complete or not
if(len(route)>1):
if(random.randint(1,100)<=65): #40% chance for route not to be full length
#route.reverse()
route_len = random.randint(1,len(route)-1)
route = route[0:route_len]
#add new route to roads
roads.extend(route)
#insert roads into the grid
for coord in roads:
grid[coord[1]][coord[0]] = "R"
"""OBJECTS BE HERE"""
#Select area that possibly could hold objects
objects_area = []
for r in roads:
objects_area.extend(([r[0]+1,r[1]],[r[0]-1,r[1]],[r[0],r[1]+1],[r[0],r[1]-1]))
objects_area = [c for c in objects_area if c not in roads] #remove coords that contain roads
objects_area.sort()
objects_area = [objects_area[i] for i in range(len(objects_area)) if i == 0 or objects_area[i] != objects_area[i-1]] #remove duplicates
houses_area = [i.copy() for i in objects_area]
for o in objects_area:
if(o[0] < 0 or o[1] < 0 or o[0] >= width or o[1] >= height):
houses_area.remove(o) #remove coords outside borders
#place dumps
dumps_to_place = ["B","Y","G"]
while(len(dumps_to_place) > 0):
dump_coords = random.choice(houses_area)
houses_area.remove(dump_coords)
grid[dump_coords[1]][dump_coords[0]] = dumps_to_place[0]
dumps_to_place.remove(dumps_to_place[0])
#leave random coordinates
houses_to_leave_count = len(houses_area)//4
while(len(houses_area) > houses_to_leave_count):
houses_area.remove(random.choice(houses_area))
#insert houses into the grid
for coord in houses_area:
grid[coord[1]][coord[0]] = "H"
#Select position for GC
GC_position = random.choice(roads)
#Save map to file
name = ".\\Resources\\Maps\\map"+str(datetime.datetime.now().strftime("%Y%m%d%H%M%S"))+"_auto.txt"
map_file = open(name, "w+")
map_file.write(str(width)+" "+str(height)+"\n")
map_file.write(str(GC_position[0])+" "+str(GC_position[1])+"\n")
for row in grid:
map_file.write(" ".join(row)+"\n")
map_file.close()
print(name)
return(name)

View File

@ -1,6 +1,6 @@
# Smieciarka WMI
## Lekki notateczki
## Lekkie notateczki
```yaml
Modele:

View File

@ -66,29 +66,29 @@ Na ten moment na planszy pojawiają się instancje klas:
**Struktura plików projektu**
--enums     => Klasy dziedziczące po klasie *Enum*, ułatwiające parsowanie informacji
--enums => Klasy dziedziczące po klasie *Enum*, ułatwiające parsowanie informacji
--fonts     => Czcionki
--fonts => Czcionki
--images    => Obrazy i ikony używane w aplikacji
--images => Obrazy i ikony używane w aplikacji
--raports    => Raporty
--raports => Raporty
--sprites     => Klasy reprezentujące obiekty na mapie
--sprites => Klasy reprezentujące obiekty na mapie
    .gitignore
.gitignore
    config.py    => Plik przechowujący funkcję zarządzające konfiguracją aplikacji    
config.py => Plik przechowujący funkcję zarządzające konfiguracją aplikacji
    game.py    => Plik rozruchowy programu
game.py => Plik rozruchowy programu
    utils.py    => Funkcje pomocnicze
utils.py => Funkcje pomocnicze
    README.md     => Informacje o aplikacji
README.md => Informacje o aplikacji
    requirements.txt    => Przechowuje informacje na temat używanych bibliotek
requirements.txt => Przechowuje informacje na temat używanych bibliotek
    to_do.txt    => Lista przyszłych zadań do zrobienia
to_do.txt => Lista przyszłych zadań do zrobienia
@ -136,4 +136,3 @@ env\Scripts\pip.exe install -r requirements.txt
env\Scripts\python.exe ./game.py --home-count=amount
```

71
Raports/SI_Raport_2.md Normal file
View File

@ -0,0 +1,71 @@
# Sztuczna inteligencja 2019 - Raport 2
**Czas trwania opisywanych prac:** 06.03.2019 - 26.03.2019
**Członkowie zespołu:** Anna Nowak, Magdalena Wilczyńska, Konrad Pierzyński, Michał Starski
**Wybrany temat:** Inteligentna śmieciarka
**Link do repozytorium projektu:** https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi
## Pierwszy algorytm przeszukiwania mapy - DFS
#### Implementacja
Pierwszym podejściem naszej grupy do rozwiązania problemu była implementacja
algorytmu przeszukiwania drzewa w głąb - DFS (Wersja rekurencyjna).
Aby zaimplementować ten algorytm, niezbędne było przygotowanie dla niego kilku
struktur pomocniczych dzięki którym będziemy mogli jasno zdefiniować warunki stopu i uzyskać satysfakcjonujące nas rozwiązanie.
Do użytych struktur należą:
- **Lista dwuwymiarowa przedstawiająca mapę w formie siatki po której można łatwo iterować** - Jeden stan takiej listy traktowaliśmy jako wierzchołek grafu
- **Lista możliwych ruchów do wykonania przez agenta przy konkretnym stanie mapy**
- **Licznik głębokości na którą zszedł algorytm** - Zapobiega zajściu za głęboko w przypadku braku rozwiązania
**Przebieg algorytmu**:
1. Sprawdź czy w pobliżu śmieciarki znajduje się nieopróżnioony domek
2. Jeżeli możliwa jest jakaś akcja (zebranie/oddanie smieci) wykonaj ją
- Jeżeli akcja została wykonana, zakończ algorytm
- Jeżeli nie, sprawdź czy głębokość przekroczyła 30
1. Jeżeli tak, zakończ algorytm informacją o braku rozwiązania
2. Jeżeli nie, kontynuuj algorytm
3. Dla każdego możliwego kierunku wykonaj algorytm od punktu 1
Rozwiązanie następuje wtedy, gdy domek zostaje opróżniony. Algorytm zostaje wywołany tyle samo razy, ile jest domków. Agent nie zna położenia domków na mapie podczas działania algorytmu.
#### Obserwacje
Przede wszystkim, algorytm przeszukiwania w głąb działa dla tego problemu
**zdecydowanie wolniej niż powinien**, przy jego działaniu łatwo wchodzić w głąb złej ścieżki, która nie doprowadzi nas do rozwiązania. Co prawda przy małej mapie algorytm radzi sobie z problemem, jednak z każdą kolejną większą
jest co raz gorzej.
Problem można pokazać na przykładzie:
Załóżmy, że hipotetyczne drzewo T wygląda w taki sposób:
```
a -- e
|
b
|
c
|
d
.
. - 100 wierzchołków
.
x
```
Naszym rozwiązaniem będzie doprowadzenie agenta z wierzchołka startowego **a** do wierzchołka końcowego **b**. DFS odwiedzi najpierw wierzchołki po kolei od a aż do x i dopiero później przyjdzie do e. Naturalnie można stwierdzić, że to nie jest sposób którego szukamy. Oczywiście 100 wierzchołków to mała liczba dla komputera, ale co jak będzie ich 1000, 10 000, lub 1 000 000 ?
#### Podsumowanie
Szukanie w głąb miałoby sens w innych przypadkach, na przykład gdybyśmy chcieli znaleźć możliwe wyniki w grze gdzie każda akcja pociąga za sobą kolejną, tworząc dość głęboki graf.
Do szukania ścieżki po której ma poruszać się agent lepiej byłoby jednak przeszukiwać graf wszerz.
#### Uruchamianie
Aby uruchomić DFS na mapie Śmieciarza WMI, należy kliknąć **0**.

64
Raports/SI_Raport_3.md Normal file
View File

@ -0,0 +1,64 @@
# Sztuczna inteligencja 2019 - Raport 3
**Czas trwania opisywanych prac:** 03.04.2019 - 14.04.2019
**Członkowie zespołu:** Anna Nowak, Magdalena Wilczyńska, Konrad Pierzyński, Michał Starski
**Wybrany temat:** Inteligentna śmieciarka
**Link do repozytorium projektu:** https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi
## Planowanie ruchu - Algorytmy BFS i Best-first search
#### Implementacja
##### BFS (Iteracyjnie)
Algorytm przeszukiwania drzewa w głąb.
Algorytm jest niepoinformowany.
W przypadku BFS użyte struktury pozostają w gruncie rzeczy te same (z tym, że tym razem zamiast stosu do przechowywania stanu używamy kolejki), zmienia się tylko kolejność wykonywanych instrukcji:
**Przebieg algorytmu**:
- Dodaj do kolejki pierwszy krok
- Dopóki kolejka nie jest pusta:
1. Zdejmij z kolejki następny nieodwiedzony wierzchołek grafu
2. Jeżeli możliwa jest jakaś akcja (zebranie/oddanie smieci) wykonaj ją
3. Sprawdź wszystkie sąsiednie wierzchołki wybranego wierzchołka, które jeszcze nie zostały odwiedzone
##### Best-first search
Agent idzie w kierunku celu do którego jest najbliżej w linii prostej w danym momencie.
Algorytm jest poinformowany.
**Przebieg algorytmu**
1. Ustaw pozycję początkową
2. Znajdź obiekt w znajdujący się najbliżej w linii prostej
3. Jeżeli odległość od obiektu wynosi 1, wykonaj interakcję i usuń obiekt z listy celów, zwróć ścieżkę do obiektu
4. Jeżeli przekroczono limit rekursji lub nie można wykonać kroku zakończ
5. Na podstawie pozycji nowoobranego celu wybierz preferowane oraz niechciane kierunki poruszania się
6. Posortuj dozwolone ruchy zgodnie z preferencjami
7. Dla każdego kierunku na liście przeszukuj dostępne ścieżki dopóki jakakolwiek nie zostanie znaleziona
-----------
Ponadto, dołożyliśmy śmieciarzowi możliwość oddawania śmieci na wysypisko w ten sposób kompletując założenia planszy.
#### Obserwacje
W porównaniu do poprzednio zaimplementowanego DFS oba algorytmy sprawują się zdecydowanie szybciej. Przez to, że szukanie drogi nie odbywa się w głąb, agent nie traci czasu na przeszukiwanie wierzchołków z góry skazanych na porażkę. Poniżej przedstawiamy tabelę mierzącą liczbę kroków, która była potrzebna do wykonania przez agenta przy użyciu DFS, BFS i Best-first search na 5 przygotowanych do testów mapach:
| Algorytm / Kroki | Mapa 1 | Mapa 2 | Mapa 3 | Mapa 4 | Mapa 5 |
| --- | --- | --- | --- | --- | --- |
| DFS | 134 | 45 | 67 | 191 | 12 |
| BFS | 62 | 23 | 57 | 101 | 12 |
| Best-first | 55 | 20 | 58 | 99 | 12 |
Po wykonaniu testów możemy stwierdzić, że najlepszym z tych 3 algorytmów okazał się Best-first search. Warto jednak zauważyć, że różnica kroków jest mała.
Co widać bez jakichkolwiek wątpliwości DFS okazał się najgorszy (zgodnie z uzasadnieniem znajdującym się w raporcie nr. 2). Liczba kroków jest prawie dwukrotnie większa od tej w konkurujących algorytmach.
(Mapa 5 posiadała tylko jedną możliwe przejście posiadające 12 kroków ten wynik można pominąć.)

89
Raports/SVM.md Normal file
View File

@ -0,0 +1,89 @@
---
# SVM raport
##### Konrad Pierzyński
###### Śmieciarz
12.06.2019
---
**SVM** - **S**upport-**V**ector **M**achine - zestaw metod uczenia stosowanych głównie do klasyfikacji, której nauka ma na celu wyznaczenie płaszczyzn rozdzielających dane wejściowe na klasy.
![5d00b5469956838867](https://i.loli.net/2019/06/12/5d00b5469956838867.png)
---
### Przygotowanie danych
Dane uczące zostały wygenerowane w następujący sposób:
+ Program generuje losową mapę o określonych wymiarach
+ Uruchamiany jest jeden z algorytmów (*BestFirstSearch*), który generuje listę ruchów.
+ Do zestawu uczącego dopisywana jest para składająca się na ruch i otoczenie gracza.
- Ruch odpowiada kierunkom: góra, prawo, dół, lewo i akcji zebrania/oddania śmieci - odpowienio liczbowo 1, 2, 3, 4, 99
- Otocznie to tablica dwuwymiarowa 7x7, gdzie element środkowy to pozycja gracza. Tablica ta następnie spłaszczana jest do tablicy jednowymiarowej
- Każdy 'domek', na którym została wykonana już akcja zebrania i jest opróżniony, widoczny jest na mapie tak samo jak element otoczenia, z którym gracz nie może wejść w żadną interakcję (stanąć, zebrać)
- Jeśli siatka 7x7 wykracza swoim zakresem za mapę, siatka uzupełniana jest przez trawę, czyli obiekt, z którym gracz nie wchodzi w interakcję
+ Po przejściu całej mapy algorytmem i zebraniu danych proces jest powtarzany tak długo, by zgromadzić około tysiąc rozwiązanych map
Pojedynczy zestaw danych jest zapisywany jako json postaci:
```json
{
"maps": [
[Int, Int, ...],
[Int, Int, ...],
...
],
"moves":
[
Int, Int, ...
]
}
```
I dopisywany do głównej struktury:
```json
{
"moveset": [
Zestaw, Zestaw, ...
]
}
```
---
### Uczenie
Do przeprowadzenia procesu uczenia dane uczące zostały podzielone na dwie listy:
- Pierwsza lista X zawiera wszystkie mapy częściowe (otoczenia)
```X = [ [Int, Int, ...], [Int, Int, ...], ... ]```
- Druga lista y zawiera odpowiadające mapom ruchy (1,2,3,4,99), które wykonał algorytm (*BestFirstSearch*) na danych otoczeniach.
```y = [ Int, Int, ... ]```
Wyżej wymienione dwie listy zostały podane jako argument metodzie ```fit(X,y)```, która odpowiada za uczenie się SVM. Natomiast utworzenie samego obiektu polega na zaimportowaniu biblioteki *scikit-learn*:
```from sklearn import svm```
a następnie już same utworzenia obiektu svm:
```clf = svm.SVC(gamma='scale')```
Wyuczony obiekt jest zapisywany do pliku, dzięki modułowi ```pickle```, aby nie przeprowadzać procesu uczenia za każdym uruchomieniem programu.
---
### Wykonywanie ruchów
Do przewidywania ruchów wystarczy użyć metody ```predict([ [otoczenie] ])``` , które przyjmuje mapę częściową, a jej wynik jest akcją, którą powinien wykonać gracz. Wynik metody przekazywany jest graczowi, który wykonuje ruch.

92
Raports/TREE.md Normal file
View File

@ -0,0 +1,92 @@
# Sztuczna Inteligencja 2019 - Raport Indywidualny
**Czas trwania opisywanych prac:** 09.05.2019 - 11.06.2019
**Autor:** Michał Starski
**Wybrany temat:** Inteligentna śmieciarka
**Link do repozytorium projektu:** https://git.wmi.amu.edu.pl/s440556/SZI2019SmieciarzWmi
## Wybrany algorytm uczenia - drzewa decyzyjne
### Przygotowane dane
Aby zapewnić smieciarce jak najlepszy wynik, do przygotowania danych do uczenia wybrałem algorytm szukania najkrótszej ścieżki, który dawał najlepsze wyniki podczas projektu grupowego - **BestFS**.
Podczas każdego jednorazowego przebiegu algorytmu BestFS patrzyłem na to jaki krok śmieciarka wykonuje w danej sytuacji, a następnie dane kroki zapisywałem do pliku w formacie json, tworząc próbki do późniejszej nauki.
Przykładowa próbka w formacie json:
```json
{
"moveset": [
{
"maps": [[1, 1, 3, 4, 2, 2, 2, 2, 1], [2, 1, 1, 3, 1, 4, 1, 1, 1]],
"moves": [1, 2]
}
]
}
```
`moveset` to tablica wszystkich próbek wykorzystywanych do nauki.
Każdy element tablicy to obiekt posiadający dwa pola:
`maps` - otoczenie śmieciarki w danym kroku,
`moves` - ruch śmieciarki przy danym otoczeniu
W powyższym przykładzie dla czytelności, zostały przedstawione otoczenia 3x3 wokół śmieciarki. W implementacji obszar ten został powiększony do 7x7 w celu poprawienia dokładności algorytmu.
#### Maps
Spłaszczona tablicę dwuwymiarową przedstawiająca otoczenie śmieciarki w konkretnym momencie działania algorytmu. Każda z cyfr przedstawia inny obiekt na mapie:
- 1 - Trawa (Grass)
- 2 - Droga (Road)
- 3 - Wysypisko (Dump)
- 4 - Dom (House)
Dla powyższego przykładu pierwsza sytuacja (`moveset[0].maps[0]`) przedstawia następujące otoczenie na mapie
```
G G D
H R R
R R G
```
#### Moves
Tablica ruchów śmieciarki. i-ty ruch w tablicy odpowiada i-temu otoczeniu. Wyróżnimay 5 różnych ruchów agenta:
- 1 - Lewo
- 2 - Prawo
- 3 - Dół
- 4 - Góra
- 99 - Zbierz śmieci
Tak więc dla powyższego otoczenia `1` będzie oznaczać, że agent ruszył się w lewo.
---
### Implementacja
Do implementacji uczenia poprzez drzewo decyzyjny wykorzystałem bibliotekę [scikit learn](https://scikit-learn.org) do języka **python**. Podając odpowiednie dane, biblioteka przygotuje nam model zdolny do samodzielnego poruszania się na mapie.
```python
#Trenowanie modelu
from sklearn import tree
X = [Kolejne otoczenia 7x7 w danym kroku]
Y = [Kolejne kroki odpowiednie dla danego otoczenia]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
#Samodzielny ruch wytrenowanego modelu
clf.predict([Otoczenie agenta])
```
`clf.predict` zwróci nam 1 z 5 ruchów, które ma wykonać agent.
---
### Obserwacje
W idealnym przypadku wytrenowany model powinien odzwierciedlać algorytm BestFS, jako iż to na podstawie jego był trenowany i to jego decyzje starał się naśladować. W rzeczywistości jednak po przygotowaniu ok. 1000 próbek agent radził sobie różnorako. Na jednych mapach poruszał się dość sprawnie, jednak na wielu nie wiedział co ma robić. Przyczyny mogą być różne, jednak w mojej opinii, przygotowanych danych było jednak trochę za mało i gdyby dać o wiele więcej danych do wytrenowania modelu, rezultat byłby o wiele lepszy.

0
Resources/.gitkeep Normal file
View File

View File

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

0
Resources/Maps/.gitkeep Normal file
View File

View File

@ -0,0 +1,11 @@
9 9
2 1
E E E H E E E E E
E Y R R E H E E E
E R E R E R E G E
H R E R R R R R E
H R E E R H E R E
R R R R R E R R E
E B R H E R R H E
E E R R R R E E E
E E H E H R R R H

View File

@ -0,0 +1,7 @@
6 5
1 0
Y R R R E H
E R B R R R
H R E R E R
E R R R R G
E H E H R H

View File

@ -0,0 +1,6 @@
13 4
3 0
E Y R R R H H R R H E E E
H R R E R R R R R R R H E
E E R E H E R H R E R R G
H R R H E B R R R H E R H

View File

@ -0,0 +1,12 @@
12 10
1 0
Y R R R E H R R R R R E
E R E R R E R E H E R H
H R R H R R R R R R R E
E E R E E E E R E E R H
E E R R H E H R E E R E
E E H R E E R R E H R E
E R R R R R R H E R R R
H R E E R H E E E R E G
E R E H R E R R R R R R
E R B R R R R E H E E H

View File

@ -0,0 +1,9 @@
7 7
3 0
E E E R E E E
E E E R E E E
E R R R R R E
E R E E E R E
E R E E E R E
E R E E E R E
H R R R R R H

View File

52
Traversal/BFS.py Normal file
View File

@ -0,0 +1,52 @@
from utilities import movement,check_moves
from DataModels.House import House
from DataModels.Dump import Dump
from DataModels.Container import Container
from config import GRID_WIDTH, GRID_HEIGHT
from collections import deque
def BFS(grid, available_movement, gc_moveset, mode):
queue = deque()
visited_nodes=[]
for x in range(GRID_WIDTH):
visited_nodes.append([])
for y in range(GRID_HEIGHT):
visited_nodes[-1].append(0)
visited_nodes[gc_moveset[-1][0]][gc_moveset[-1][1]] = 1
queue.append([available_movement, gc_moveset, visited_nodes])
while queue:
possible_goals = []
state = queue.popleft()
avalible_movement_state = state[0]
gc_moveset_state = state[1]
visited_nodes_state = state[2]
a = gc_moveset_state[-1][0]
b = gc_moveset_state[-1][1]
possible_goals.append([a+1,b])
possible_goals.append([a-1,b])
possible_goals.append([a,b+1])
possible_goals.append([a,b-1])
object_in_area = False
for location in possible_goals:
if GRID_WIDTH>location[0]>=0 and GRID_HEIGHT>location[1]>=0:
cell = grid[location[0]][location[1]]
if(type(cell) == mode and cell.unvisited):
cell.unvisited = False
object_in_area = True
break
x,y = gc_moveset_state[-1]
if(object_in_area):
gc_moveset_state.append("pick_garbage")
return (cell,[x,y], gc_moveset_state)
for direction in avalible_movement_state:
x_next, y_next = movement(grid,x,y)[0][direction]
if visited_nodes_state[x_next][y_next]==0:
available_movement_next = check_moves(grid, x_next,y_next,direction)
gc_moveset_next = gc_moveset_state.copy()
gc_moveset_next.append([x_next,y_next])
visited_nodes_state[x_next][y_next]=1
queue.append([available_movement_next, gc_moveset_next,visited_nodes_state])

68
Traversal/BestFS.py Normal file
View File

@ -0,0 +1,68 @@
from utilities import movement,check_moves
from DataModels.House import House
from DataModels.Container import Container
from config import GRID_WIDTH, GRID_HEIGHT
from math import sqrt
INF = float('Inf')
def CalculateDistance(gc, object_list):
min_distance_goal = ['-',INF]
for h in object_list:
distance = sqrt(pow(h[1][0]-gc[0],2)+pow(h[1][1]-gc[1],2))
if(min_distance_goal[1] > distance):
min_distance_goal = [h[1], distance]
return min_distance_goal
def BestFS(grid, available_movement, gc_moveset, object_list, depth = 0):
x, y = gc_moveset[-1][0], gc_moveset[-1][1]
#calculate distance to the nearest object
min_distance_goal = CalculateDistance([x,y], object_list)
if(min_distance_goal[1] == 1):
gc_moveset.append("pick_garbage")
cell = grid[min_distance_goal[0][0]][min_distance_goal[0][1]]
object_list.remove([cell,min_distance_goal[0]])
return([x, y], gc_moveset, object_list)
#if depth exceeded, return
if(depth > 15 or len(available_movement) == 0):
return
#set preffered directions based on the closest object
preffered_directions = []
discouraged_directions = []
if(min_distance_goal[0][0] > x):
preffered_directions.append("right")
if(min_distance_goal[0][0] < x):
preffered_directions.append("left")
if(min_distance_goal[0][1] > y):
preffered_directions.append("down")
if(min_distance_goal[0][1] < y):
preffered_directions.append("up")
if(len(preffered_directions) == 1):
discouraged_directions.append(movement(grid, x, y)[1][preffered_directions[0]])
#sort available moves according to preferences
sorted = [o for o in preffered_directions if o in available_movement]
for o in sorted:
available_movement.remove(o)
sorted.extend([o for o in available_movement if o not in discouraged_directions])
for o in sorted:
if(o in available_movement):
available_movement.remove(o)
sorted.extend(available_movement)
available_movement = sorted.copy()
for direction in available_movement:
x_next, y_next = movement(grid,x,y)[0][direction]
available_movement_next = check_moves(grid, x_next,y_next,direction)
gc_moveset_next = gc_moveset.copy()
gc_moveset_next.append([x_next,y_next])
result = BestFS(grid, available_movement_next, gc_moveset_next, object_list, depth + 1)
if result!= None:
return result

39
Traversal/DFS.py Normal file
View File

@ -0,0 +1,39 @@
from utilities import movement,check_moves
from DataModels.House import House
from DataModels.Dump import Dump
from DataModels.Container import Container
from config import GRID_WIDTH, GRID_HEIGHT
def DFS(grid, available_movement, gc_moveset, mode,depth=0):
possible_goals = []
a = gc_moveset[-1][0]
b = gc_moveset[-1][1]
possible_goals.append([a+1,b])
possible_goals.append([a-1,b])
possible_goals.append([a,b+1])
possible_goals.append([a,b-1])
object_in_area = False
for location in possible_goals:
if GRID_WIDTH>location[0]>=0 and GRID_HEIGHT>location[1]>=0:
cell = grid[location[0]][location[1]]
if(type(cell) == mode and cell.unvisited):
cell.unvisited = False
object_in_area = True
break
x,y = gc_moveset[-1]
if(object_in_area):
gc_moveset.append("pick_garbage")
return [cell,[x,y], gc_moveset]
if len(available_movement) == 0 or depth>30:
return
for direction in available_movement:
x_next, y_next = movement(grid,x,y)[0][direction]
available_movement_next = check_moves(grid, x_next,y_next,direction)
gc_moveset_next = gc_moveset.copy()
gc_moveset_next.append([x_next,y_next])
result = DFS(grid, available_movement_next, gc_moveset_next,mode, depth+1)
if result!= None:
return result

View File

@ -1,27 +1,22 @@
import sys
import getopt
from sprites.cell import CELL_SIZE
def set_home_amount():
arguments = sys.argv[1:]
try:
optlist, args = getopt.getopt(arguments, '', ['home-count='])
for o, amount in optlist:
if o == '--home-count':
if int(amount) < 2:
print('Home count too low - must be higher than 2')
sys.exit(2)
return int(amount)
print('Missing argument: --home-count <amount>')
sys.exit(2)
except getopt.GetoptError as err:
print(err)
sys.exit(2)
home_amount = set_home_amount()
PLAY_WIDTH = (home_amount + 4)*CELL_SIZE
PLAY_HEIGHT = PLAY_WIDTH
HUD_HEIGHT = int(home_amount*CELL_SIZE/4)
import sys, random
from MapGenerator import GenerateMap
CELL_SIZE = 64
FPS = 60
DELAY = 50
try:
MAP_NAME = sys.argv[1]
except:
MAP_NAME = GenerateMap()
map = open( MAP_NAME, 'r' )
GRID_WIDTH, GRID_HEIGHT = [int(x) for x in map.readline().split()]
GC_X, GC_Y = [int(x) for x in map.readline().split()]
WINDOW_HEIGHT = GRID_HEIGHT * CELL_SIZE
WINDOW_WIDTH = GRID_WIDTH * CELL_SIZE
HOUSE_CAPACITY = random.randint(1, 11)

View File

@ -1,10 +0,0 @@
from enum import Enum
class House_image(Enum):
house = "images/house.png"
plastic = "images/house_plastic.png"
metal = "images/house_metal.png"
glass = "images/house_glass.png"
plastic_glass = "images/house_plastic_glass.png"
plastic_metal = "images/house_plastic_metal.png"
glass_metal = "images/house_glass_metal.png"
full = "images/house_full.png"

Binary file not shown.

68
game.py
View File

@ -1,68 +0,0 @@
from pygame import *
import sys
import random
from config import PLAY_WIDTH, PLAY_HEIGHT, HUD_HEIGHT, home_amount
from sprites.house import House
from sprites.hud import Hud
from pygame.locals import *
import utils
##INITIALIZE STATIC VARIABLES#########
FPS = 20
all_sprites = sprite.Group()
fps_clock = time.Clock()
######################################
interactables = {
"homes": [],
"landfills": []
}
##GAMEWINDOW##########################
WINDOW_WIDTH = PLAY_WIDTH
WINDOW_HEIGHT = PLAY_HEIGHT + HUD_HEIGHT
GAMEWINDOW = display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), 0, 32)
hud = Hud(home_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW)
display.set_caption('Smieciarz WMI')
icon = image.load('images/icon.png')
display.set_icon(icon)
######################################
##
# Generate level
utils.generate_grass(all_sprites)
utils.generate_landfills(all_sprites, interactables)
utils.generate_houses(all_sprites, interactables)
gc = utils.generate_garbage_collector(all_sprites, interactables)
##
##GAME LOOP#######################################################################
while(1):
for e in event.get():
if e.type == QUIT:
quit()
sys.exit()
if e.type == KEYUP:
if e.key == K_UP:
gc.move('up', interactables["homes"] + interactables["landfills"])
if e.key == K_DOWN:
gc.move('down', interactables["homes"] + interactables["landfills"])
if e.key == K_RIGHT:
gc.move('right', interactables["homes"] + interactables["landfills"])
if e.key == K_LEFT:
gc.move('left', interactables["homes"] + interactables["landfills"])
all_sprites.update()
all_sprites.draw(GAMEWINDOW)
for item in all_sprites:
if(type(item) == House):
item.generate_rubbish()
hud.get_statistics(all_sprites)
display.flip()
fps_clock.tick(FPS)
##################################################################################

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,63 @@
House 1 plastic,House 1 glass,House 1 metal,House 2 plastic,House 2 glass,House 2 metal,House 3 plastic,House 3 glass,House 3 metal,House 4 plastic,House 4 glass,House 4 metal,House 5 plastic,House 5 glass,House 5 metal,House 6 plastic,House 6 glass,House 6 metal
8,4,10,0,0,1,8,9,10,1,7,7,8,5,7,8,2,1
10,4,10,0,2,1,8,10,10,1,8,7,8,6,7,8,2,2
10,4,10,0,3,2,10,10,10,1,9,8,10,6,7,9,3,4
10,5,10,0,4,2,10,10,10,2,9,8,10,7,7,9,3,4
10,5,10,0,4,3,10,10,10,2,10,8,10,7,9,9,3,4
10,5,10,0,4,3,10,10,10,2,10,9,10,7,9,9,3,4
10,5,10,0,4,4,10,10,10,2,10,9,10,7,10,9,4,5
10,5,10,0,4,4,10,10,10,2,10,9,10,7,10,10,5,5
10,5,10,2,5,4,10,10,10,3,10,9,10,7,10,10,5,6
10,5,10,3,5,4,10,10,10,4,10,9,10,7,10,10,5,7
10,5,10,3,6,4,10,10,10,6,10,9,10,10,10,10,6,7
10,6,10,3,6,4,10,10,10,7,10,9,10,10,10,10,8,8
10,7,10,3,8,5,10,10,10,8,10,10,10,10,10,10,8,9
10,7,10,5,9,6,10,10,10,8,10,10,10,10,10,10,8,10
10,7,10,6,9,6,10,10,10,9,10,10,10,10,10,10,8,10
10,8,10,7,9,8,10,10,10,10,10,10,10,10,10,10,8,10
10,9,10,8,9,10,10,10,10,10,10,10,10,10,10,10,8,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,8,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,8,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,9,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10
1 House 1 plastic House 1 glass House 1 metal House 2 plastic House 2 glass House 2 metal House 3 plastic House 3 glass House 3 metal House 4 plastic House 4 glass House 4 metal House 5 plastic House 5 glass House 5 metal House 6 plastic House 6 glass House 6 metal
2 8 4 10 0 0 1 8 9 10 1 7 7 8 5 7 8 2 1
3 10 4 10 0 2 1 8 10 10 1 8 7 8 6 7 8 2 2
4 10 4 10 0 3 2 10 10 10 1 9 8 10 6 7 9 3 4
5 10 5 10 0 4 2 10 10 10 2 9 8 10 7 7 9 3 4
6 10 5 10 0 4 3 10 10 10 2 10 8 10 7 9 9 3 4
7 10 5 10 0 4 3 10 10 10 2 10 9 10 7 9 9 3 4
8 10 5 10 0 4 4 10 10 10 2 10 9 10 7 10 9 4 5
9 10 5 10 0 4 4 10 10 10 2 10 9 10 7 10 10 5 5
10 10 5 10 2 5 4 10 10 10 3 10 9 10 7 10 10 5 6
11 10 5 10 3 5 4 10 10 10 4 10 9 10 7 10 10 5 7
12 10 5 10 3 6 4 10 10 10 6 10 9 10 10 10 10 6 7
13 10 6 10 3 6 4 10 10 10 7 10 9 10 10 10 10 8 8
14 10 7 10 3 8 5 10 10 10 8 10 10 10 10 10 10 8 9
15 10 7 10 5 9 6 10 10 10 8 10 10 10 10 10 10 8 10
16 10 7 10 6 9 6 10 10 10 9 10 10 10 10 10 10 8 10
17 10 8 10 7 9 8 10 10 10 10 10 10 10 10 10 10 8 10
18 10 9 10 8 9 10 10 10 10 10 10 10 10 10 10 10 8 10
19 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 8 10
20 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 8 10
21 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10
22 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
23 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
24 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
25 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
26 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
27 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
28 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
29 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
30 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
31 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
32 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
33 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
34 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
35 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
36 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
37 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
38 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
39 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
40 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
41 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
42 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
43 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
44 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
45 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
46 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
47 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
49 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
50 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
51 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
52 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
53 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
54 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
55 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
56 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
57 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
58 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
59 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
60 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
61 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
62 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
63 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

View File

@ -0,0 +1,28 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
18,27,26,0/10,0/10,0/10,0
22,28,29,0/10,0/10,0/10,0
23,33,33,0/10,0/10,0/10,0
25,36,36,0/10,0/10,0/10,0
27,39,37,0/10,0/10,0/10,0
31,41,41,0/10,0/10,0/10,0
36,43,41,0/10,0/10,0/10,0
40,47,45,0/10,0/10,0/10,0
41,51,45,0/10,0/10,0/10,0
41,52,46,0/10,0/10,0/10,0
43,54,48,0/10,0/10,0/10,0
45,54,49,0/10,0/10,0/10,0
48,57,50,0/10,0/10,0/10,0
49,58,54,0/10,0/10,0/10,0
51,59,54,0/10,0/10,0/10,0
52,59,54,0/10,0/10,0/10,0
54,59,55,0/10,0/10,0/10,0
56,60,57,0/10,0/10,0/10,0
57,60,58,0/10,0/10,0/10,0
57,60,58,0/10,0/10,0/10,0
57,60,58,0/10,0/10,0/10,0
57,60,58,0/10,0/10,0/10,0
57,60,59,0/10,0/10,0/10,0
59,60,59,0/10,0/10,0/10,0
59,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 18 27 26 0/10 0/10 0/10 0
3 22 28 29 0/10 0/10 0/10 0
4 23 33 33 0/10 0/10 0/10 0
5 25 36 36 0/10 0/10 0/10 0
6 27 39 37 0/10 0/10 0/10 0
7 31 41 41 0/10 0/10 0/10 0
8 36 43 41 0/10 0/10 0/10 0
9 40 47 45 0/10 0/10 0/10 0
10 41 51 45 0/10 0/10 0/10 0
11 41 52 46 0/10 0/10 0/10 0
12 43 54 48 0/10 0/10 0/10 0
13 45 54 49 0/10 0/10 0/10 0
14 48 57 50 0/10 0/10 0/10 0
15 49 58 54 0/10 0/10 0/10 0
16 51 59 54 0/10 0/10 0/10 0
17 52 59 54 0/10 0/10 0/10 0
18 54 59 55 0/10 0/10 0/10 0
19 56 60 57 0/10 0/10 0/10 0
20 57 60 58 0/10 0/10 0/10 0
21 57 60 58 0/10 0/10 0/10 0
22 57 60 58 0/10 0/10 0/10 0
23 57 60 58 0/10 0/10 0/10 0
24 57 60 59 0/10 0/10 0/10 0
25 59 60 59 0/10 0/10 0/10 0
26 59 60 60 0/10 0/10 0/10 0
27 60 60 60 0/10 0/10 0/10 0
28 60 60 60 0/10 0/10 0/10 0

View File

@ -0,0 +1,13 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
20,33,20,0/10,0/10,0/10,0
26,34,22,0/10,0/10,0/10,0
27,37,27,0/10,0/10,0/10,0
28,37,30,0/10,0/10,0/10,0
30,40,33,0/10,0/10,0/10,0
32,41,36,0/10,0/10,0/10,0
35,42,38,0/10,0/10,0/10,0
37,44,40,0/10,0/10,0/10,0
39,45,41,0/10,0/10,0/10,0
40,47,43,0/10,0/10,0/10,0
42,47,45,0/10,0/10,0/10,0
48,48,47,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 20 33 20 0/10 0/10 0/10 0
3 26 34 22 0/10 0/10 0/10 0
4 27 37 27 0/10 0/10 0/10 0
5 28 37 30 0/10 0/10 0/10 0
6 30 40 33 0/10 0/10 0/10 0
7 32 41 36 0/10 0/10 0/10 0
8 35 42 38 0/10 0/10 0/10 0
9 37 44 40 0/10 0/10 0/10 0
10 39 45 41 0/10 0/10 0/10 0
11 40 47 43 0/10 0/10 0/10 0
12 42 47 45 0/10 0/10 0/10 0
13 48 48 47 0/10 0/10 0/10 0

View File

@ -0,0 +1,9 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
30,37,26,0/10,0/10,0/10,0
34,39,27,0/10,0/10,0/10,0
36,41,27,0/10,0/10,0/10,0
40,43,29,0/10,0/10,0/10,0
40,44,33,0/10,0/10,0/10,0
40,45,34,0/10,0/10,0/10,0
42,45,36,0/10,0/10,0/10,0
43,46,38,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 30 37 26 0/10 0/10 0/10 0
3 34 39 27 0/10 0/10 0/10 0
4 36 41 27 0/10 0/10 0/10 0
5 40 43 29 0/10 0/10 0/10 0
6 40 44 33 0/10 0/10 0/10 0
7 40 45 34 0/10 0/10 0/10 0
8 42 45 36 0/10 0/10 0/10 0
9 43 46 38 0/10 0/10 0/10 0

View File

@ -0,0 +1,4 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
21,37,28,0/10,0/10,0/10,0
23,39,30,0/10,0/10,0/10,0
25,40,30,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 21 37 28 0/10 0/10 0/10 0
3 23 39 30 0/10 0/10 0/10 0
4 25 40 30 0/10 0/10 0/10 0

View File

@ -0,0 +1,5 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
32,32,30,0/10,0/10,0/10,0
33,34,33,0/10,0/10,0/10,0
34,36,34,0/10,0/10,0/10,0
37,39,35,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 32 32 30 0/10 0/10 0/10 0
3 33 34 33 0/10 0/10 0/10 0
4 34 36 34 0/10 0/10 0/10 0
5 37 39 35 0/10 0/10 0/10 0

View File

@ -0,0 +1,144 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
30,22,27,0/10,0/10,0/10,0
33,27,29,0/10,0/10,0/10,0
35,29,30,0/10,0/10,0/10,0
35,34,32,0/10,0/10,0/10,0
38,38,33,0/10,0/10,0/10,0
40,41,33,0/10,0/10,0/10,0
41,41,34,0/10,0/10,0/10,0
43,43,36,0/10,0/10,0/10,0
44,44,39,0/10,0/10,0/10,0
47,45,41,0/10,0/10,0/10,0
47,48,42,0/10,0/10,0/10,0
47,48,45,0/10,0/10,0/10,0
48,49,46,0/10,0/10,0/10,0
49,49,46,0/10,0/10,0/10,0
50,49,47,0/10,0/10,0/10,0
50,49,47,0/10,0/10,0/10,0
50,49,47,0/10,0/10,0/10,0
50,50,48,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 30 22 27 0/10 0/10 0/10 0
3 33 27 29 0/10 0/10 0/10 0
4 35 29 30 0/10 0/10 0/10 0
5 35 34 32 0/10 0/10 0/10 0
6 38 38 33 0/10 0/10 0/10 0
7 40 41 33 0/10 0/10 0/10 0
8 41 41 34 0/10 0/10 0/10 0
9 43 43 36 0/10 0/10 0/10 0
10 44 44 39 0/10 0/10 0/10 0
11 47 45 41 0/10 0/10 0/10 0
12 47 48 42 0/10 0/10 0/10 0
13 47 48 45 0/10 0/10 0/10 0
14 48 49 46 0/10 0/10 0/10 0
15 49 49 46 0/10 0/10 0/10 0
16 50 49 47 0/10 0/10 0/10 0
17 50 49 47 0/10 0/10 0/10 0
18 50 49 47 0/10 0/10 0/10 0
19 50 50 48 0/10 0/10 0/10 0
20 50 50 49 0/10 0/10 0/10 0
21 50 50 49 0/10 0/10 0/10 0
22 50 50 49 0/10 0/10 0/10 0
23 50 50 50 0/10 0/10 0/10 0
24 50 50 50 0/10 0/10 0/10 0
25 50 50 50 0/10 0/10 0/10 0
26 50 50 50 0/10 0/10 0/10 0
27 50 50 50 0/10 0/10 0/10 0
28 50 50 50 0/10 0/10 0/10 0
29 50 50 50 0/10 0/10 0/10 0
30 50 50 50 0/10 0/10 0/10 0
31 50 50 50 0/10 0/10 0/10 0
32 50 50 50 0/10 0/10 0/10 0
33 50 50 50 0/10 0/10 0/10 0
34 50 50 50 0/10 0/10 0/10 0
35 50 50 50 0/10 0/10 0/10 0
36 50 50 50 0/10 0/10 0/10 0
37 50 50 50 0/10 0/10 0/10 0
38 50 50 50 0/10 0/10 0/10 0
39 50 50 50 0/10 0/10 0/10 0
40 50 50 50 0/10 0/10 0/10 0
41 50 50 50 0/10 0/10 0/10 0
42 50 50 50 0/10 0/10 0/10 0
43 50 50 50 0/10 0/10 0/10 0
44 50 50 50 0/10 0/10 0/10 0
45 50 50 50 0/10 0/10 0/10 0
46 50 50 50 0/10 0/10 0/10 0
47 50 50 50 0/10 0/10 0/10 0
48 50 50 50 0/10 0/10 0/10 0
49 50 50 50 0/10 0/10 0/10 0
50 50 50 50 0/10 0/10 0/10 0
51 50 50 50 0/10 0/10 0/10 0
52 50 50 50 0/10 0/10 0/10 0
53 50 50 50 0/10 0/10 0/10 0
54 50 50 50 0/10 0/10 0/10 0
55 50 50 50 0/10 0/10 0/10 0
56 50 50 50 0/10 0/10 0/10 0
57 50 50 50 0/10 0/10 0/10 0
58 50 50 50 0/10 0/10 0/10 0
59 50 50 50 0/10 0/10 0/10 0
60 50 50 50 0/10 0/10 0/10 0
61 50 50 50 0/10 0/10 0/10 0
62 50 50 50 0/10 0/10 0/10 0
63 50 50 50 0/10 0/10 0/10 0
64 50 50 50 0/10 0/10 0/10 0
65 50 50 50 0/10 0/10 0/10 0
66 50 50 50 0/10 0/10 0/10 0
67 50 50 50 0/10 0/10 0/10 0
68 50 50 50 0/10 0/10 0/10 0
69 50 50 50 0/10 0/10 0/10 0
70 50 50 50 0/10 0/10 0/10 0
71 50 50 50 0/10 0/10 0/10 0
72 50 50 50 0/10 0/10 0/10 0
73 50 50 50 0/10 0/10 0/10 0
74 50 50 50 0/10 0/10 0/10 0
75 50 50 50 0/10 0/10 0/10 0
76 50 50 50 0/10 0/10 0/10 0
77 50 50 50 0/10 0/10 0/10 0
78 50 50 50 0/10 0/10 0/10 0
79 50 50 50 0/10 0/10 0/10 0
80 50 50 50 0/10 0/10 0/10 0
81 50 50 50 0/10 0/10 0/10 0
82 50 50 50 0/10 0/10 0/10 0
83 50 50 50 0/10 0/10 0/10 0
84 50 50 50 0/10 0/10 0/10 0
85 50 50 50 0/10 0/10 0/10 0
86 50 50 50 0/10 0/10 0/10 0
87 50 50 50 0/10 0/10 0/10 0
88 50 50 50 0/10 0/10 0/10 0
89 50 50 50 0/10 0/10 0/10 0
90 50 50 50 0/10 0/10 0/10 0
91 50 50 50 0/10 0/10 0/10 0
92 50 50 50 0/10 0/10 0/10 0
93 50 50 50 0/10 0/10 0/10 0
94 50 50 50 0/10 0/10 0/10 0
95 50 50 50 0/10 0/10 0/10 0
96 50 50 50 0/10 0/10 0/10 0
97 50 50 50 0/10 0/10 0/10 0
98 50 50 50 0/10 0/10 0/10 0
99 50 50 50 0/10 0/10 0/10 0
100 50 50 50 0/10 0/10 0/10 0
101 50 50 50 0/10 0/10 0/10 0
102 50 50 50 0/10 0/10 0/10 0
103 50 50 50 0/10 0/10 0/10 0
104 50 50 50 0/10 0/10 0/10 0
105 50 50 50 0/10 0/10 0/10 0
106 50 50 50 0/10 0/10 0/10 0
107 50 50 50 0/10 0/10 0/10 0
108 50 50 50 0/10 0/10 0/10 0
109 50 50 50 0/10 0/10 0/10 0
110 50 50 50 0/10 0/10 0/10 0
111 50 50 50 0/10 0/10 0/10 0
112 50 50 50 0/10 0/10 0/10 0
113 50 50 50 0/10 0/10 0/10 0
114 50 50 50 0/10 0/10 0/10 0
115 50 50 50 0/10 0/10 0/10 0
116 50 50 50 0/10 0/10 0/10 0
117 50 50 50 0/10 0/10 0/10 0
118 50 50 50 0/10 0/10 0/10 0
119 50 50 50 0/10 0/10 0/10 0
120 50 50 50 0/10 0/10 0/10 0
121 50 50 50 0/10 0/10 0/10 0
122 50 50 50 0/10 0/10 0/10 0
123 50 50 50 0/10 0/10 0/10 0
124 50 50 50 0/10 0/10 0/10 0
125 50 50 50 0/10 0/10 0/10 0
126 50 50 50 0/10 0/10 0/10 0
127 50 50 50 0/10 0/10 0/10 0
128 50 50 50 0/10 0/10 0/10 0
129 50 50 50 0/10 0/10 0/10 0
130 50 50 50 0/10 0/10 0/10 0
131 50 50 50 0/10 0/10 0/10 0
132 50 50 50 0/10 0/10 0/10 0
133 50 50 50 0/10 0/10 0/10 0
134 50 50 50 0/10 0/10 0/10 0
135 50 50 50 0/10 0/10 0/10 0
136 50 50 50 0/10 0/10 0/10 0
137 50 50 50 0/10 0/10 0/10 0
138 50 50 50 0/10 0/10 0/10 0
139 50 50 50 0/10 0/10 0/10 0
140 50 50 50 0/10 0/10 0/10 0
141 50 50 50 0/10 0/10 0/10 0
142 50 50 50 0/10 0/10 0/10 0
143 50 50 50 0/10 0/10 0/10 0
144 50 50 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,51 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
34,35,27,0/10,0/10,0/10,0
36,37,27,0/10,0/10,0/10,0
36,39,31,0/10,0/10,0/10,0
38,41,31,0/10,0/10,0/10,0
41,42,33,0/10,0/10,0/10,0
44,42,33,0/10,0/10,0/10,0
46,45,34,0/10,0/10,0/10,0
46,47,36,0/10,0/10,0/10,0
49,47,36,0/10,0/10,0/10,0
49,47,38,0/10,0/10,0/10,0
49,48,40,0/10,0/10,0/10,0
50,49,40,0/10,0/10,0/10,0
50,49,41,0/10,0/10,0/10,0
50,49,41,0/10,0/10,0/10,0
50,49,41,0/10,0/10,0/10,0
50,50,41,0/10,0/10,0/10,0
50,50,41,0/10,0/10,0/10,0
50,50,44,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,47,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 34 35 27 0/10 0/10 0/10 0
3 36 37 27 0/10 0/10 0/10 0
4 36 39 31 0/10 0/10 0/10 0
5 38 41 31 0/10 0/10 0/10 0
6 41 42 33 0/10 0/10 0/10 0
7 44 42 33 0/10 0/10 0/10 0
8 46 45 34 0/10 0/10 0/10 0
9 46 47 36 0/10 0/10 0/10 0
10 49 47 36 0/10 0/10 0/10 0
11 49 47 38 0/10 0/10 0/10 0
12 49 48 40 0/10 0/10 0/10 0
13 50 49 40 0/10 0/10 0/10 0
14 50 49 41 0/10 0/10 0/10 0
15 50 49 41 0/10 0/10 0/10 0
16 50 49 41 0/10 0/10 0/10 0
17 50 50 41 0/10 0/10 0/10 0
18 50 50 41 0/10 0/10 0/10 0
19 50 50 44 0/10 0/10 0/10 0
20 50 50 46 0/10 0/10 0/10 0
21 50 50 46 0/10 0/10 0/10 0
22 50 50 46 0/10 0/10 0/10 0
23 50 50 47 0/10 0/10 0/10 0
24 50 50 49 0/10 0/10 0/10 0
25 50 50 50 0/10 0/10 0/10 0
26 50 50 50 0/10 0/10 0/10 0
27 50 50 50 0/10 0/10 0/10 0
28 50 50 50 0/10 0/10 0/10 0
29 50 50 50 0/10 0/10 0/10 0
30 50 50 50 0/10 0/10 0/10 0
31 50 50 50 0/10 0/10 0/10 0
32 50 50 50 0/10 0/10 0/10 0
33 50 50 50 0/10 0/10 0/10 0
34 50 50 50 0/10 0/10 0/10 0
35 50 50 50 0/10 0/10 0/10 0
36 50 50 50 0/10 0/10 0/10 0
37 50 50 50 0/10 0/10 0/10 0
38 50 50 50 0/10 0/10 0/10 0
39 50 50 50 0/10 0/10 0/10 0
40 50 50 50 0/10 0/10 0/10 0
41 50 50 50 0/10 0/10 0/10 0
42 50 50 50 0/10 0/10 0/10 0
43 50 50 50 0/10 0/10 0/10 0
44 50 50 50 0/10 0/10 0/10 0
45 50 50 50 0/10 0/10 0/10 0
46 50 50 50 0/10 0/10 0/10 0
47 50 50 50 0/10 0/10 0/10 0
48 50 50 50 0/10 0/10 0/10 0
49 50 50 50 0/10 0/10 0/10 0
50 50 50 50 0/10 0/10 0/10 0
51 50 50 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,26 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
15,31,36,0/10,0/10,0/10,0
19,36,39,0/10,0/10,0/10,0
20,36,40,0/10,0/10,0/10,0
24,38,40,0/10,0/10,0/10,0
29,38,42,0/10,0/10,0/10,0
32,38,45,0/10,0/10,0/10,0
33,38,45,0/10,0/10,0/10,0
33,39,46,0/10,0/10,0/10,0
36,40,46,0/10,0/10,0/10,0
38,40,46,0/10,0/10,0/10,0
38,42,47,0/10,0/10,0/10,0
39,44,49,0/10,0/10,0/10,0
42,44,50,0/10,0/10,0/10,0
42,45,50,0/10,0/10,0/10,0
43,45,50,0/10,0/10,0/10,0
43,46,50,0/10,0/10,0/10,0
44,46,50,0/10,0/10,0/10,0
44,46,50,0/10,0/10,0/10,0
45,47,50,0/10,0/10,0/10,0
45,49,50,0/10,0/10,0/10,0
46,49,50,0/10,0/10,0/10,0
47,50,50,0/10,0/10,0/10,0
47,50,50,0/10,0/10,0/10,0
48,50,50,0/10,0/10,0/10,0
48,50,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 15 31 36 0/10 0/10 0/10 0
3 19 36 39 0/10 0/10 0/10 0
4 20 36 40 0/10 0/10 0/10 0
5 24 38 40 0/10 0/10 0/10 0
6 29 38 42 0/10 0/10 0/10 0
7 32 38 45 0/10 0/10 0/10 0
8 33 38 45 0/10 0/10 0/10 0
9 33 39 46 0/10 0/10 0/10 0
10 36 40 46 0/10 0/10 0/10 0
11 38 40 46 0/10 0/10 0/10 0
12 38 42 47 0/10 0/10 0/10 0
13 39 44 49 0/10 0/10 0/10 0
14 42 44 50 0/10 0/10 0/10 0
15 42 45 50 0/10 0/10 0/10 0
16 43 45 50 0/10 0/10 0/10 0
17 43 46 50 0/10 0/10 0/10 0
18 44 46 50 0/10 0/10 0/10 0
19 44 46 50 0/10 0/10 0/10 0
20 45 47 50 0/10 0/10 0/10 0
21 45 49 50 0/10 0/10 0/10 0
22 46 49 50 0/10 0/10 0/10 0
23 47 50 50 0/10 0/10 0/10 0
24 47 50 50 0/10 0/10 0/10 0
25 48 50 50 0/10 0/10 0/10 0
26 48 50 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,9 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
35,27,43,0/10,0/10,0/10,0
37,28,45,0/10,0/10,0/10,0
37,32,45,0/10,0/10,0/10,0
39,35,46,0/10,0/10,0/10,0
39,37,46,0/10,0/10,0/10,0
40,37,46,0/10,0/10,0/10,0
42,39,46,0/10,0/10,0/10,0
44,39,46,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 35 27 43 0/10 0/10 0/10 0
3 37 28 45 0/10 0/10 0/10 0
4 37 32 45 0/10 0/10 0/10 0
5 39 35 46 0/10 0/10 0/10 0
6 39 37 46 0/10 0/10 0/10 0
7 40 37 46 0/10 0/10 0/10 0
8 42 39 46 0/10 0/10 0/10 0
9 44 39 46 0/10 0/10 0/10 0

View File

@ -0,0 +1,35 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
25,15,21,0/10,0/10,0/10,0
27,19,23,0/10,0/10,0/10,0
29,22,28,0/10,0/10,0/10,0
29,25,28,0/10,0/10,0/10,0
36,29,30,0/10,0/10,0/10,0
37,35,31,0/10,0/10,0/10,0
38,38,33,0/10,0/10,0/10,0
38,38,34,0/10,0/10,0/10,0
38,39,36,0/10,0/10,0/10,0
41,43,36,0/10,0/10,0/10,0
43,44,37,0/10,0/10,0/10,0
45,46,39,0/10,0/10,0/10,0
45,48,39,0/10,0/10,0/10,0
46,49,42,0/10,0/10,0/10,0
47,49,45,0/10,0/10,0/10,0
48,49,45,0/10,0/10,0/10,0
49,50,46,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,46,0/10,0/10,0/10,0
50,50,47,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,49,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 25 15 21 0/10 0/10 0/10 0
3 27 19 23 0/10 0/10 0/10 0
4 29 22 28 0/10 0/10 0/10 0
5 29 25 28 0/10 0/10 0/10 0
6 36 29 30 0/10 0/10 0/10 0
7 37 35 31 0/10 0/10 0/10 0
8 38 38 33 0/10 0/10 0/10 0
9 38 38 34 0/10 0/10 0/10 0
10 38 39 36 0/10 0/10 0/10 0
11 41 43 36 0/10 0/10 0/10 0
12 43 44 37 0/10 0/10 0/10 0
13 45 46 39 0/10 0/10 0/10 0
14 45 48 39 0/10 0/10 0/10 0
15 46 49 42 0/10 0/10 0/10 0
16 47 49 45 0/10 0/10 0/10 0
17 48 49 45 0/10 0/10 0/10 0
18 49 50 46 0/10 0/10 0/10 0
19 50 50 46 0/10 0/10 0/10 0
20 50 50 46 0/10 0/10 0/10 0
21 50 50 46 0/10 0/10 0/10 0
22 50 50 47 0/10 0/10 0/10 0
23 50 50 49 0/10 0/10 0/10 0
24 50 50 49 0/10 0/10 0/10 0
25 50 50 50 0/10 0/10 0/10 0
26 50 50 50 0/10 0/10 0/10 0
27 50 50 50 0/10 0/10 0/10 0
28 50 50 50 0/10 0/10 0/10 0
29 50 50 50 0/10 0/10 0/10 0
30 50 50 50 0/10 0/10 0/10 0
31 50 50 50 0/10 0/10 0/10 0
32 50 50 50 0/10 0/10 0/10 0
33 50 50 50 0/10 0/10 0/10 0
34 50 50 50 0/10 0/10 0/10 0
35 50 50 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,17 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
35,23,40,0/10,0/10,0/10,0
36,28,40,0/10,0/10,0/10,0
41,30,40,0/10,0/10,0/10,0
43,31,42,0/10,0/10,0/10,0
44,34,42,0/10,0/10,0/10,0
45,36,46,0/10,0/10,0/10,0
48,36,47,0/10,0/10,0/10,0
48,38,47,0/10,0/10,0/10,0
48,39,49,0/10,0/10,0/10,0
48,42,49,0/10,0/10,0/10,0
49,44,49,0/10,0/10,0/10,0
50,46,49,0/10,0/10,0/10,0
50,47,49,0/10,0/10,0/10,0
50,48,50,0/10,0/10,0/10,0
50,49,50,0/10,0/10,0/10,0
50,49,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 35 23 40 0/10 0/10 0/10 0
3 36 28 40 0/10 0/10 0/10 0
4 41 30 40 0/10 0/10 0/10 0
5 43 31 42 0/10 0/10 0/10 0
6 44 34 42 0/10 0/10 0/10 0
7 45 36 46 0/10 0/10 0/10 0
8 48 36 47 0/10 0/10 0/10 0
9 48 38 47 0/10 0/10 0/10 0
10 48 39 49 0/10 0/10 0/10 0
11 48 42 49 0/10 0/10 0/10 0
12 49 44 49 0/10 0/10 0/10 0
13 50 46 49 0/10 0/10 0/10 0
14 50 47 49 0/10 0/10 0/10 0
15 50 48 50 0/10 0/10 0/10 0
16 50 49 50 0/10 0/10 0/10 0
17 50 49 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,10 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
27,34,21,0/10,0/10,0/10,0
29,35,21,0/10,0/10,0/10,0
31,36,22,0/10,0/10,0/10,0
33,39,22,0/10,0/10,0/10,0
34,44,23,0/10,0/10,0/10,0
37,45,26,0/10,0/10,0/10,0
38,45,27,0/10,0/10,0/10,0
42,46,30,0/10,0/10,0/10,0
42,47,33,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 27 34 21 0/10 0/10 0/10 0
3 29 35 21 0/10 0/10 0/10 0
4 31 36 22 0/10 0/10 0/10 0
5 33 39 22 0/10 0/10 0/10 0
6 34 44 23 0/10 0/10 0/10 0
7 37 45 26 0/10 0/10 0/10 0
8 38 45 27 0/10 0/10 0/10 0
9 42 46 30 0/10 0/10 0/10 0
10 42 47 33 0/10 0/10 0/10 0

View File

@ -0,0 +1,8 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
13,25,23,0/10,0/10,0/10,0
17,28,27,0/10,0/10,0/10,0
20,33,30,0/10,0/10,0/10,0
23,37,32,0/10,0/10,0/10,0
25,38,35,0/10,0/10,0/10,0
27,41,35,0/10,0/10,0/10,0
28,42,37,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 13 25 23 0/10 0/10 0/10 0
3 17 28 27 0/10 0/10 0/10 0
4 20 33 30 0/10 0/10 0/10 0
5 23 37 32 0/10 0/10 0/10 0
6 25 38 35 0/10 0/10 0/10 0
7 27 41 35 0/10 0/10 0/10 0
8 28 42 37 0/10 0/10 0/10 0

View File

@ -0,0 +1,8 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
25,8,17,0/10,0/10,0/10,0
28,9,18,0/10,0/10,0/10,0
32,10,18,0/10,0/10,0/10,0
35,12,21,0/10,0/10,0/10,0
37,13,23,0/10,0/10,0/10,0
39,16,24,0/10,0/10,0/10,0
40,20,26,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 25 8 17 0/10 0/10 0/10 0
3 28 9 18 0/10 0/10 0/10 0
4 32 10 18 0/10 0/10 0/10 0
5 35 12 21 0/10 0/10 0/10 0
6 37 13 23 0/10 0/10 0/10 0
7 39 16 24 0/10 0/10 0/10 0
8 40 20 26 0/10 0/10 0/10 0

View File

@ -0,0 +1,7 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
21,18,22,0/10,0/10,0/10,0
22,20,25,0/10,0/10,0/10,0
25,22,31,0/10,0/10,0/10,0
25,27,35,0/10,0/10,0/10,0
28,29,36,0/10,0/10,0/10,0
31,32,39,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 21 18 22 0/10 0/10 0/10 0
3 22 20 25 0/10 0/10 0/10 0
4 25 22 31 0/10 0/10 0/10 0
5 25 27 35 0/10 0/10 0/10 0
6 28 29 36 0/10 0/10 0/10 0
7 31 32 39 0/10 0/10 0/10 0

View File

@ -0,0 +1,6 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
39,20,30,0/10,0/10,0/10,0
41,21,30,0/10,0/10,0/10,0
42,22,32,0/10,0/10,0/10,0
43,23,35,0/10,0/10,0/10,0
45,25,37,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 39 20 30 0/10 0/10 0/10 0
3 41 21 30 0/10 0/10 0/10 0
4 42 22 32 0/10 0/10 0/10 0
5 43 23 35 0/10 0/10 0/10 0
6 45 25 37 0/10 0/10 0/10 0

View File

@ -0,0 +1,3 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
21,23,5,0/10,0/10,0/10,0
21,24,5,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 21 23 5 0/10 0/10 0/10 0
3 21 24 5 0/10 0/10 0/10 0

View File

@ -0,0 +1,31 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
33,26,21,0/10,0/10,0/10,0
35,28,23,0/10,0/10,0/10,0
39,28,27,0/10,0/10,0/10,0
40,28,32,0/10,0/10,0/10,0
41,31,34,0/10,0/10,0/10,0
42,32,35,0/10,0/10,0/10,0
45,32,35,0/10,0/10,0/10,0
47,34,36,0/10,0/10,0/10,0
47,34,37,0/10,0/10,0/10,0
47,34,40,0/10,0/10,0/10,0
48,36,41,0/10,0/10,0/10,0
48,37,43,0/10,0/10,0/10,0
49,39,46,0/10,0/10,0/10,0
49,40,47,0/10,0/10,0/10,0
49,40,48,0/10,0/10,0/10,0
50,40,49,0/10,0/10,0/10,0
50,42,50,0/10,0/10,0/10,0
50,42,50,0/10,0/10,0/10,0
50,44,50,0/10,0/10,0/10,0
50,45,50,0/10,0/10,0/10,0
50,45,50,0/10,0/10,0/10,0
50,45,50,0/10,0/10,0/10,0
50,45,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
50,46,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 33 26 21 0/10 0/10 0/10 0
3 35 28 23 0/10 0/10 0/10 0
4 39 28 27 0/10 0/10 0/10 0
5 40 28 32 0/10 0/10 0/10 0
6 41 31 34 0/10 0/10 0/10 0
7 42 32 35 0/10 0/10 0/10 0
8 45 32 35 0/10 0/10 0/10 0
9 47 34 36 0/10 0/10 0/10 0
10 47 34 37 0/10 0/10 0/10 0
11 47 34 40 0/10 0/10 0/10 0
12 48 36 41 0/10 0/10 0/10 0
13 48 37 43 0/10 0/10 0/10 0
14 49 39 46 0/10 0/10 0/10 0
15 49 40 47 0/10 0/10 0/10 0
16 49 40 48 0/10 0/10 0/10 0
17 50 40 49 0/10 0/10 0/10 0
18 50 42 50 0/10 0/10 0/10 0
19 50 42 50 0/10 0/10 0/10 0
20 50 44 50 0/10 0/10 0/10 0
21 50 45 50 0/10 0/10 0/10 0
22 50 45 50 0/10 0/10 0/10 0
23 50 45 50 0/10 0/10 0/10 0
24 50 45 50 0/10 0/10 0/10 0
25 50 46 50 0/10 0/10 0/10 0
26 50 46 50 0/10 0/10 0/10 0
27 50 46 50 0/10 0/10 0/10 0
28 50 46 50 0/10 0/10 0/10 0
29 50 46 50 0/10 0/10 0/10 0
30 50 46 50 0/10 0/10 0/10 0
31 50 46 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,14 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
29,15,46,0/10,0/10,0/10,0
31,20,46,0/10,0/10,0/10,0
33,20,46,0/10,0/10,0/10,0
35,23,47,0/10,0/10,0/10,0
37,25,47,0/10,0/10,0/10,0
38,27,47,0/10,0/10,0/10,0
39,31,47,0/10,0/10,0/10,0
40,31,47,0/10,0/10,0/10,0
41,32,47,0/10,0/10,0/10,0
42,34,47,0/10,0/10,0/10,0
45,38,48,0/10,0/10,0/10,0
48,41,48,0/10,0/10,0/10,0
48,42,49,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 29 15 46 0/10 0/10 0/10 0
3 31 20 46 0/10 0/10 0/10 0
4 33 20 46 0/10 0/10 0/10 0
5 35 23 47 0/10 0/10 0/10 0
6 37 25 47 0/10 0/10 0/10 0
7 38 27 47 0/10 0/10 0/10 0
8 39 31 47 0/10 0/10 0/10 0
9 40 31 47 0/10 0/10 0/10 0
10 41 32 47 0/10 0/10 0/10 0
11 42 34 47 0/10 0/10 0/10 0
12 45 38 48 0/10 0/10 0/10 0
13 48 41 48 0/10 0/10 0/10 0
14 48 42 49 0/10 0/10 0/10 0

View File

@ -0,0 +1,692 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
26,15,30,0/10,0/10,0/10,0
28,19,31,0/10,0/10,0/10,0
31,24,37,0/10,0/10,0/10,0
33,27,41,0/10,0/10,0/10,0
34,29,41,0/10,0/10,0/10,0
35,31,42,0/10,0/10,0/10,0
37,34,44,0/10,0/10,0/10,0
38,36,44,0/10,0/10,0/10,0
38,38,46,0/10,0/10,0/10,0
38,38,46,0/10,0/10,0/10,0
39,40,47,0/10,0/10,0/10,0
41,41,48,0/10,0/10,0/10,0
41,45,48,0/10,0/10,0/10,0
42,46,49,0/10,0/10,0/10,0
44,49,49,0/10,0/10,0/10,0
45,49,49,0/10,0/10,0/10,0
47,49,49,0/10,0/10,0/10,0
48,49,49,0/10,0/10,0/10,0
49,49,50,0/10,0/10,0/10,0
50,49,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
50,50,50,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 26 15 30 0/10 0/10 0/10 0
3 28 19 31 0/10 0/10 0/10 0
4 31 24 37 0/10 0/10 0/10 0
5 33 27 41 0/10 0/10 0/10 0
6 34 29 41 0/10 0/10 0/10 0
7 35 31 42 0/10 0/10 0/10 0
8 37 34 44 0/10 0/10 0/10 0
9 38 36 44 0/10 0/10 0/10 0
10 38 38 46 0/10 0/10 0/10 0
11 38 38 46 0/10 0/10 0/10 0
12 39 40 47 0/10 0/10 0/10 0
13 41 41 48 0/10 0/10 0/10 0
14 41 45 48 0/10 0/10 0/10 0
15 42 46 49 0/10 0/10 0/10 0
16 44 49 49 0/10 0/10 0/10 0
17 45 49 49 0/10 0/10 0/10 0
18 47 49 49 0/10 0/10 0/10 0
19 48 49 49 0/10 0/10 0/10 0
20 49 49 50 0/10 0/10 0/10 0
21 50 49 50 0/10 0/10 0/10 0
22 50 50 50 0/10 0/10 0/10 0
23 50 50 50 0/10 0/10 0/10 0
24 50 50 50 0/10 0/10 0/10 0
25 50 50 50 0/10 0/10 0/10 0
26 50 50 50 0/10 0/10 0/10 0
27 50 50 50 0/10 0/10 0/10 0
28 50 50 50 0/10 0/10 0/10 0
29 50 50 50 0/10 0/10 0/10 0
30 50 50 50 0/10 0/10 0/10 0
31 50 50 50 0/10 0/10 0/10 0
32 50 50 50 0/10 0/10 0/10 0
33 50 50 50 0/10 0/10 0/10 0
34 50 50 50 0/10 0/10 0/10 0
35 50 50 50 0/10 0/10 0/10 0
36 50 50 50 0/10 0/10 0/10 0
37 50 50 50 0/10 0/10 0/10 0
38 50 50 50 0/10 0/10 0/10 0
39 50 50 50 0/10 0/10 0/10 0
40 50 50 50 0/10 0/10 0/10 0
41 50 50 50 0/10 0/10 0/10 0
42 50 50 50 0/10 0/10 0/10 0
43 50 50 50 0/10 0/10 0/10 0
44 50 50 50 0/10 0/10 0/10 0
45 50 50 50 0/10 0/10 0/10 0
46 50 50 50 0/10 0/10 0/10 0
47 50 50 50 0/10 0/10 0/10 0
48 50 50 50 0/10 0/10 0/10 0
49 50 50 50 0/10 0/10 0/10 0
50 50 50 50 0/10 0/10 0/10 0
51 50 50 50 0/10 0/10 0/10 0
52 50 50 50 0/10 0/10 0/10 0
53 50 50 50 0/10 0/10 0/10 0
54 50 50 50 0/10 0/10 0/10 0
55 50 50 50 0/10 0/10 0/10 0
56 50 50 50 0/10 0/10 0/10 0
57 50 50 50 0/10 0/10 0/10 0
58 50 50 50 0/10 0/10 0/10 0
59 50 50 50 0/10 0/10 0/10 0
60 50 50 50 0/10 0/10 0/10 0
61 50 50 50 0/10 0/10 0/10 0
62 50 50 50 0/10 0/10 0/10 0
63 50 50 50 0/10 0/10 0/10 0
64 50 50 50 0/10 0/10 0/10 0
65 50 50 50 0/10 0/10 0/10 0
66 50 50 50 0/10 0/10 0/10 0
67 50 50 50 0/10 0/10 0/10 0
68 50 50 50 0/10 0/10 0/10 0
69 50 50 50 0/10 0/10 0/10 0
70 50 50 50 0/10 0/10 0/10 0
71 50 50 50 0/10 0/10 0/10 0
72 50 50 50 0/10 0/10 0/10 0
73 50 50 50 0/10 0/10 0/10 0
74 50 50 50 0/10 0/10 0/10 0
75 50 50 50 0/10 0/10 0/10 0
76 50 50 50 0/10 0/10 0/10 0
77 50 50 50 0/10 0/10 0/10 0
78 50 50 50 0/10 0/10 0/10 0
79 50 50 50 0/10 0/10 0/10 0
80 50 50 50 0/10 0/10 0/10 0
81 50 50 50 0/10 0/10 0/10 0
82 50 50 50 0/10 0/10 0/10 0
83 50 50 50 0/10 0/10 0/10 0
84 50 50 50 0/10 0/10 0/10 0
85 50 50 50 0/10 0/10 0/10 0
86 50 50 50 0/10 0/10 0/10 0
87 50 50 50 0/10 0/10 0/10 0
88 50 50 50 0/10 0/10 0/10 0
89 50 50 50 0/10 0/10 0/10 0
90 50 50 50 0/10 0/10 0/10 0
91 50 50 50 0/10 0/10 0/10 0
92 50 50 50 0/10 0/10 0/10 0
93 50 50 50 0/10 0/10 0/10 0
94 50 50 50 0/10 0/10 0/10 0
95 50 50 50 0/10 0/10 0/10 0
96 50 50 50 0/10 0/10 0/10 0
97 50 50 50 0/10 0/10 0/10 0
98 50 50 50 0/10 0/10 0/10 0
99 50 50 50 0/10 0/10 0/10 0
100 50 50 50 0/10 0/10 0/10 0
101 50 50 50 0/10 0/10 0/10 0
102 50 50 50 0/10 0/10 0/10 0
103 50 50 50 0/10 0/10 0/10 0
104 50 50 50 0/10 0/10 0/10 0
105 50 50 50 0/10 0/10 0/10 0
106 50 50 50 0/10 0/10 0/10 0
107 50 50 50 0/10 0/10 0/10 0
108 50 50 50 0/10 0/10 0/10 0
109 50 50 50 0/10 0/10 0/10 0
110 50 50 50 0/10 0/10 0/10 0
111 50 50 50 0/10 0/10 0/10 0
112 50 50 50 0/10 0/10 0/10 0
113 50 50 50 0/10 0/10 0/10 0
114 50 50 50 0/10 0/10 0/10 0
115 50 50 50 0/10 0/10 0/10 0
116 50 50 50 0/10 0/10 0/10 0
117 50 50 50 0/10 0/10 0/10 0
118 50 50 50 0/10 0/10 0/10 0
119 50 50 50 0/10 0/10 0/10 0
120 50 50 50 0/10 0/10 0/10 0
121 50 50 50 0/10 0/10 0/10 0
122 50 50 50 0/10 0/10 0/10 0
123 50 50 50 0/10 0/10 0/10 0
124 50 50 50 0/10 0/10 0/10 0
125 50 50 50 0/10 0/10 0/10 0
126 50 50 50 0/10 0/10 0/10 0
127 50 50 50 0/10 0/10 0/10 0
128 50 50 50 0/10 0/10 0/10 0
129 50 50 50 0/10 0/10 0/10 0
130 50 50 50 0/10 0/10 0/10 0
131 50 50 50 0/10 0/10 0/10 0
132 50 50 50 0/10 0/10 0/10 0
133 50 50 50 0/10 0/10 0/10 0
134 50 50 50 0/10 0/10 0/10 0
135 50 50 50 0/10 0/10 0/10 0
136 50 50 50 0/10 0/10 0/10 0
137 50 50 50 0/10 0/10 0/10 0
138 50 50 50 0/10 0/10 0/10 0
139 50 50 50 0/10 0/10 0/10 0
140 50 50 50 0/10 0/10 0/10 0
141 50 50 50 0/10 0/10 0/10 0
142 50 50 50 0/10 0/10 0/10 0
143 50 50 50 0/10 0/10 0/10 0
144 50 50 50 0/10 0/10 0/10 0
145 50 50 50 0/10 0/10 0/10 0
146 50 50 50 0/10 0/10 0/10 0
147 50 50 50 0/10 0/10 0/10 0
148 50 50 50 0/10 0/10 0/10 0
149 50 50 50 0/10 0/10 0/10 0
150 50 50 50 0/10 0/10 0/10 0
151 50 50 50 0/10 0/10 0/10 0
152 50 50 50 0/10 0/10 0/10 0
153 50 50 50 0/10 0/10 0/10 0
154 50 50 50 0/10 0/10 0/10 0
155 50 50 50 0/10 0/10 0/10 0
156 50 50 50 0/10 0/10 0/10 0
157 50 50 50 0/10 0/10 0/10 0
158 50 50 50 0/10 0/10 0/10 0
159 50 50 50 0/10 0/10 0/10 0
160 50 50 50 0/10 0/10 0/10 0
161 50 50 50 0/10 0/10 0/10 0
162 50 50 50 0/10 0/10 0/10 0
163 50 50 50 0/10 0/10 0/10 0
164 50 50 50 0/10 0/10 0/10 0
165 50 50 50 0/10 0/10 0/10 0
166 50 50 50 0/10 0/10 0/10 0
167 50 50 50 0/10 0/10 0/10 0
168 50 50 50 0/10 0/10 0/10 0
169 50 50 50 0/10 0/10 0/10 0
170 50 50 50 0/10 0/10 0/10 0
171 50 50 50 0/10 0/10 0/10 0
172 50 50 50 0/10 0/10 0/10 0
173 50 50 50 0/10 0/10 0/10 0
174 50 50 50 0/10 0/10 0/10 0
175 50 50 50 0/10 0/10 0/10 0
176 50 50 50 0/10 0/10 0/10 0
177 50 50 50 0/10 0/10 0/10 0
178 50 50 50 0/10 0/10 0/10 0
179 50 50 50 0/10 0/10 0/10 0
180 50 50 50 0/10 0/10 0/10 0
181 50 50 50 0/10 0/10 0/10 0
182 50 50 50 0/10 0/10 0/10 0
183 50 50 50 0/10 0/10 0/10 0
184 50 50 50 0/10 0/10 0/10 0
185 50 50 50 0/10 0/10 0/10 0
186 50 50 50 0/10 0/10 0/10 0
187 50 50 50 0/10 0/10 0/10 0
188 50 50 50 0/10 0/10 0/10 0
189 50 50 50 0/10 0/10 0/10 0
190 50 50 50 0/10 0/10 0/10 0
191 50 50 50 0/10 0/10 0/10 0
192 50 50 50 0/10 0/10 0/10 0
193 50 50 50 0/10 0/10 0/10 0
194 50 50 50 0/10 0/10 0/10 0
195 50 50 50 0/10 0/10 0/10 0
196 50 50 50 0/10 0/10 0/10 0
197 50 50 50 0/10 0/10 0/10 0
198 50 50 50 0/10 0/10 0/10 0
199 50 50 50 0/10 0/10 0/10 0
200 50 50 50 0/10 0/10 0/10 0
201 50 50 50 0/10 0/10 0/10 0
202 50 50 50 0/10 0/10 0/10 0
203 50 50 50 0/10 0/10 0/10 0
204 50 50 50 0/10 0/10 0/10 0
205 50 50 50 0/10 0/10 0/10 0
206 50 50 50 0/10 0/10 0/10 0
207 50 50 50 0/10 0/10 0/10 0
208 50 50 50 0/10 0/10 0/10 0
209 50 50 50 0/10 0/10 0/10 0
210 50 50 50 0/10 0/10 0/10 0
211 50 50 50 0/10 0/10 0/10 0
212 50 50 50 0/10 0/10 0/10 0
213 50 50 50 0/10 0/10 0/10 0
214 50 50 50 0/10 0/10 0/10 0
215 50 50 50 0/10 0/10 0/10 0
216 50 50 50 0/10 0/10 0/10 0
217 50 50 50 0/10 0/10 0/10 0
218 50 50 50 0/10 0/10 0/10 0
219 50 50 50 0/10 0/10 0/10 0
220 50 50 50 0/10 0/10 0/10 0
221 50 50 50 0/10 0/10 0/10 0
222 50 50 50 0/10 0/10 0/10 0
223 50 50 50 0/10 0/10 0/10 0
224 50 50 50 0/10 0/10 0/10 0
225 50 50 50 0/10 0/10 0/10 0
226 50 50 50 0/10 0/10 0/10 0
227 50 50 50 0/10 0/10 0/10 0
228 50 50 50 0/10 0/10 0/10 0
229 50 50 50 0/10 0/10 0/10 0
230 50 50 50 0/10 0/10 0/10 0
231 50 50 50 0/10 0/10 0/10 0
232 50 50 50 0/10 0/10 0/10 0
233 50 50 50 0/10 0/10 0/10 0
234 50 50 50 0/10 0/10 0/10 0
235 50 50 50 0/10 0/10 0/10 0
236 50 50 50 0/10 0/10 0/10 0
237 50 50 50 0/10 0/10 0/10 0
238 50 50 50 0/10 0/10 0/10 0
239 50 50 50 0/10 0/10 0/10 0
240 50 50 50 0/10 0/10 0/10 0
241 50 50 50 0/10 0/10 0/10 0
242 50 50 50 0/10 0/10 0/10 0
243 50 50 50 0/10 0/10 0/10 0
244 50 50 50 0/10 0/10 0/10 0
245 50 50 50 0/10 0/10 0/10 0
246 50 50 50 0/10 0/10 0/10 0
247 50 50 50 0/10 0/10 0/10 0
248 50 50 50 0/10 0/10 0/10 0
249 50 50 50 0/10 0/10 0/10 0
250 50 50 50 0/10 0/10 0/10 0
251 50 50 50 0/10 0/10 0/10 0
252 50 50 50 0/10 0/10 0/10 0
253 50 50 50 0/10 0/10 0/10 0
254 50 50 50 0/10 0/10 0/10 0
255 50 50 50 0/10 0/10 0/10 0
256 50 50 50 0/10 0/10 0/10 0
257 50 50 50 0/10 0/10 0/10 0
258 50 50 50 0/10 0/10 0/10 0
259 50 50 50 0/10 0/10 0/10 0
260 50 50 50 0/10 0/10 0/10 0
261 50 50 50 0/10 0/10 0/10 0
262 50 50 50 0/10 0/10 0/10 0
263 50 50 50 0/10 0/10 0/10 0
264 50 50 50 0/10 0/10 0/10 0
265 50 50 50 0/10 0/10 0/10 0
266 50 50 50 0/10 0/10 0/10 0
267 50 50 50 0/10 0/10 0/10 0
268 50 50 50 0/10 0/10 0/10 0
269 50 50 50 0/10 0/10 0/10 0
270 50 50 50 0/10 0/10 0/10 0
271 50 50 50 0/10 0/10 0/10 0
272 50 50 50 0/10 0/10 0/10 0
273 50 50 50 0/10 0/10 0/10 0
274 50 50 50 0/10 0/10 0/10 0
275 50 50 50 0/10 0/10 0/10 0
276 50 50 50 0/10 0/10 0/10 0
277 50 50 50 0/10 0/10 0/10 0
278 50 50 50 0/10 0/10 0/10 0
279 50 50 50 0/10 0/10 0/10 0
280 50 50 50 0/10 0/10 0/10 0
281 50 50 50 0/10 0/10 0/10 0
282 50 50 50 0/10 0/10 0/10 0
283 50 50 50 0/10 0/10 0/10 0
284 50 50 50 0/10 0/10 0/10 0
285 50 50 50 0/10 0/10 0/10 0
286 50 50 50 0/10 0/10 0/10 0
287 50 50 50 0/10 0/10 0/10 0
288 50 50 50 0/10 0/10 0/10 0
289 50 50 50 0/10 0/10 0/10 0
290 50 50 50 0/10 0/10 0/10 0
291 50 50 50 0/10 0/10 0/10 0
292 50 50 50 0/10 0/10 0/10 0
293 50 50 50 0/10 0/10 0/10 0
294 50 50 50 0/10 0/10 0/10 0
295 50 50 50 0/10 0/10 0/10 0
296 50 50 50 0/10 0/10 0/10 0
297 50 50 50 0/10 0/10 0/10 0
298 50 50 50 0/10 0/10 0/10 0
299 50 50 50 0/10 0/10 0/10 0
300 50 50 50 0/10 0/10 0/10 0
301 50 50 50 0/10 0/10 0/10 0
302 50 50 50 0/10 0/10 0/10 0
303 50 50 50 0/10 0/10 0/10 0
304 50 50 50 0/10 0/10 0/10 0
305 50 50 50 0/10 0/10 0/10 0
306 50 50 50 0/10 0/10 0/10 0
307 50 50 50 0/10 0/10 0/10 0
308 50 50 50 0/10 0/10 0/10 0
309 50 50 50 0/10 0/10 0/10 0
310 50 50 50 0/10 0/10 0/10 0
311 50 50 50 0/10 0/10 0/10 0
312 50 50 50 0/10 0/10 0/10 0
313 50 50 50 0/10 0/10 0/10 0
314 50 50 50 0/10 0/10 0/10 0
315 50 50 50 0/10 0/10 0/10 0
316 50 50 50 0/10 0/10 0/10 0
317 50 50 50 0/10 0/10 0/10 0
318 50 50 50 0/10 0/10 0/10 0
319 50 50 50 0/10 0/10 0/10 0
320 50 50 50 0/10 0/10 0/10 0
321 50 50 50 0/10 0/10 0/10 0
322 50 50 50 0/10 0/10 0/10 0
323 50 50 50 0/10 0/10 0/10 0
324 50 50 50 0/10 0/10 0/10 0
325 50 50 50 0/10 0/10 0/10 0
326 50 50 50 0/10 0/10 0/10 0
327 50 50 50 0/10 0/10 0/10 0
328 50 50 50 0/10 0/10 0/10 0
329 50 50 50 0/10 0/10 0/10 0
330 50 50 50 0/10 0/10 0/10 0
331 50 50 50 0/10 0/10 0/10 0
332 50 50 50 0/10 0/10 0/10 0
333 50 50 50 0/10 0/10 0/10 0
334 50 50 50 0/10 0/10 0/10 0
335 50 50 50 0/10 0/10 0/10 0
336 50 50 50 0/10 0/10 0/10 0
337 50 50 50 0/10 0/10 0/10 0
338 50 50 50 0/10 0/10 0/10 0
339 50 50 50 0/10 0/10 0/10 0
340 50 50 50 0/10 0/10 0/10 0
341 50 50 50 0/10 0/10 0/10 0
342 50 50 50 0/10 0/10 0/10 0
343 50 50 50 0/10 0/10 0/10 0
344 50 50 50 0/10 0/10 0/10 0
345 50 50 50 0/10 0/10 0/10 0
346 50 50 50 0/10 0/10 0/10 0
347 50 50 50 0/10 0/10 0/10 0
348 50 50 50 0/10 0/10 0/10 0
349 50 50 50 0/10 0/10 0/10 0
350 50 50 50 0/10 0/10 0/10 0
351 50 50 50 0/10 0/10 0/10 0
352 50 50 50 0/10 0/10 0/10 0
353 50 50 50 0/10 0/10 0/10 0
354 50 50 50 0/10 0/10 0/10 0
355 50 50 50 0/10 0/10 0/10 0
356 50 50 50 0/10 0/10 0/10 0
357 50 50 50 0/10 0/10 0/10 0
358 50 50 50 0/10 0/10 0/10 0
359 50 50 50 0/10 0/10 0/10 0
360 50 50 50 0/10 0/10 0/10 0
361 50 50 50 0/10 0/10 0/10 0
362 50 50 50 0/10 0/10 0/10 0
363 50 50 50 0/10 0/10 0/10 0
364 50 50 50 0/10 0/10 0/10 0
365 50 50 50 0/10 0/10 0/10 0
366 50 50 50 0/10 0/10 0/10 0
367 50 50 50 0/10 0/10 0/10 0
368 50 50 50 0/10 0/10 0/10 0
369 50 50 50 0/10 0/10 0/10 0
370 50 50 50 0/10 0/10 0/10 0
371 50 50 50 0/10 0/10 0/10 0
372 50 50 50 0/10 0/10 0/10 0
373 50 50 50 0/10 0/10 0/10 0
374 50 50 50 0/10 0/10 0/10 0
375 50 50 50 0/10 0/10 0/10 0
376 50 50 50 0/10 0/10 0/10 0
377 50 50 50 0/10 0/10 0/10 0
378 50 50 50 0/10 0/10 0/10 0
379 50 50 50 0/10 0/10 0/10 0
380 50 50 50 0/10 0/10 0/10 0
381 50 50 50 0/10 0/10 0/10 0
382 50 50 50 0/10 0/10 0/10 0
383 50 50 50 0/10 0/10 0/10 0
384 50 50 50 0/10 0/10 0/10 0
385 50 50 50 0/10 0/10 0/10 0
386 50 50 50 0/10 0/10 0/10 0
387 50 50 50 0/10 0/10 0/10 0
388 50 50 50 0/10 0/10 0/10 0
389 50 50 50 0/10 0/10 0/10 0
390 50 50 50 0/10 0/10 0/10 0
391 50 50 50 0/10 0/10 0/10 0
392 50 50 50 0/10 0/10 0/10 0
393 50 50 50 0/10 0/10 0/10 0
394 50 50 50 0/10 0/10 0/10 0
395 50 50 50 0/10 0/10 0/10 0
396 50 50 50 0/10 0/10 0/10 0
397 50 50 50 0/10 0/10 0/10 0
398 50 50 50 0/10 0/10 0/10 0
399 50 50 50 0/10 0/10 0/10 0
400 50 50 50 0/10 0/10 0/10 0
401 50 50 50 0/10 0/10 0/10 0
402 50 50 50 0/10 0/10 0/10 0
403 50 50 50 0/10 0/10 0/10 0
404 50 50 50 0/10 0/10 0/10 0
405 50 50 50 0/10 0/10 0/10 0
406 50 50 50 0/10 0/10 0/10 0
407 50 50 50 0/10 0/10 0/10 0
408 50 50 50 0/10 0/10 0/10 0
409 50 50 50 0/10 0/10 0/10 0
410 50 50 50 0/10 0/10 0/10 0
411 50 50 50 0/10 0/10 0/10 0
412 50 50 50 0/10 0/10 0/10 0
413 50 50 50 0/10 0/10 0/10 0
414 50 50 50 0/10 0/10 0/10 0
415 50 50 50 0/10 0/10 0/10 0
416 50 50 50 0/10 0/10 0/10 0
417 50 50 50 0/10 0/10 0/10 0
418 50 50 50 0/10 0/10 0/10 0
419 50 50 50 0/10 0/10 0/10 0
420 50 50 50 0/10 0/10 0/10 0
421 50 50 50 0/10 0/10 0/10 0
422 50 50 50 0/10 0/10 0/10 0
423 50 50 50 0/10 0/10 0/10 0
424 50 50 50 0/10 0/10 0/10 0
425 50 50 50 0/10 0/10 0/10 0
426 50 50 50 0/10 0/10 0/10 0
427 50 50 50 0/10 0/10 0/10 0
428 50 50 50 0/10 0/10 0/10 0
429 50 50 50 0/10 0/10 0/10 0
430 50 50 50 0/10 0/10 0/10 0
431 50 50 50 0/10 0/10 0/10 0
432 50 50 50 0/10 0/10 0/10 0
433 50 50 50 0/10 0/10 0/10 0
434 50 50 50 0/10 0/10 0/10 0
435 50 50 50 0/10 0/10 0/10 0
436 50 50 50 0/10 0/10 0/10 0
437 50 50 50 0/10 0/10 0/10 0
438 50 50 50 0/10 0/10 0/10 0
439 50 50 50 0/10 0/10 0/10 0
440 50 50 50 0/10 0/10 0/10 0
441 50 50 50 0/10 0/10 0/10 0
442 50 50 50 0/10 0/10 0/10 0
443 50 50 50 0/10 0/10 0/10 0
444 50 50 50 0/10 0/10 0/10 0
445 50 50 50 0/10 0/10 0/10 0
446 50 50 50 0/10 0/10 0/10 0
447 50 50 50 0/10 0/10 0/10 0
448 50 50 50 0/10 0/10 0/10 0
449 50 50 50 0/10 0/10 0/10 0
450 50 50 50 0/10 0/10 0/10 0
451 50 50 50 0/10 0/10 0/10 0
452 50 50 50 0/10 0/10 0/10 0
453 50 50 50 0/10 0/10 0/10 0
454 50 50 50 0/10 0/10 0/10 0
455 50 50 50 0/10 0/10 0/10 0
456 50 50 50 0/10 0/10 0/10 0
457 50 50 50 0/10 0/10 0/10 0
458 50 50 50 0/10 0/10 0/10 0
459 50 50 50 0/10 0/10 0/10 0
460 50 50 50 0/10 0/10 0/10 0
461 50 50 50 0/10 0/10 0/10 0
462 50 50 50 0/10 0/10 0/10 0
463 50 50 50 0/10 0/10 0/10 0
464 50 50 50 0/10 0/10 0/10 0
465 50 50 50 0/10 0/10 0/10 0
466 50 50 50 0/10 0/10 0/10 0
467 50 50 50 0/10 0/10 0/10 0
468 50 50 50 0/10 0/10 0/10 0
469 50 50 50 0/10 0/10 0/10 0
470 50 50 50 0/10 0/10 0/10 0
471 50 50 50 0/10 0/10 0/10 0
472 50 50 50 0/10 0/10 0/10 0
473 50 50 50 0/10 0/10 0/10 0
474 50 50 50 0/10 0/10 0/10 0
475 50 50 50 0/10 0/10 0/10 0
476 50 50 50 0/10 0/10 0/10 0
477 50 50 50 0/10 0/10 0/10 0
478 50 50 50 0/10 0/10 0/10 0
479 50 50 50 0/10 0/10 0/10 0
480 50 50 50 0/10 0/10 0/10 0
481 50 50 50 0/10 0/10 0/10 0
482 50 50 50 0/10 0/10 0/10 0
483 50 50 50 0/10 0/10 0/10 0
484 50 50 50 0/10 0/10 0/10 0
485 50 50 50 0/10 0/10 0/10 0
486 50 50 50 0/10 0/10 0/10 0
487 50 50 50 0/10 0/10 0/10 0
488 50 50 50 0/10 0/10 0/10 0
489 50 50 50 0/10 0/10 0/10 0
490 50 50 50 0/10 0/10 0/10 0
491 50 50 50 0/10 0/10 0/10 0
492 50 50 50 0/10 0/10 0/10 0
493 50 50 50 0/10 0/10 0/10 0
494 50 50 50 0/10 0/10 0/10 0
495 50 50 50 0/10 0/10 0/10 0
496 50 50 50 0/10 0/10 0/10 0
497 50 50 50 0/10 0/10 0/10 0
498 50 50 50 0/10 0/10 0/10 0
499 50 50 50 0/10 0/10 0/10 0
500 50 50 50 0/10 0/10 0/10 0
501 50 50 50 0/10 0/10 0/10 0
502 50 50 50 0/10 0/10 0/10 0
503 50 50 50 0/10 0/10 0/10 0
504 50 50 50 0/10 0/10 0/10 0
505 50 50 50 0/10 0/10 0/10 0
506 50 50 50 0/10 0/10 0/10 0
507 50 50 50 0/10 0/10 0/10 0
508 50 50 50 0/10 0/10 0/10 0
509 50 50 50 0/10 0/10 0/10 0
510 50 50 50 0/10 0/10 0/10 0
511 50 50 50 0/10 0/10 0/10 0
512 50 50 50 0/10 0/10 0/10 0
513 50 50 50 0/10 0/10 0/10 0
514 50 50 50 0/10 0/10 0/10 0
515 50 50 50 0/10 0/10 0/10 0
516 50 50 50 0/10 0/10 0/10 0
517 50 50 50 0/10 0/10 0/10 0
518 50 50 50 0/10 0/10 0/10 0
519 50 50 50 0/10 0/10 0/10 0
520 50 50 50 0/10 0/10 0/10 0
521 50 50 50 0/10 0/10 0/10 0
522 50 50 50 0/10 0/10 0/10 0
523 50 50 50 0/10 0/10 0/10 0
524 50 50 50 0/10 0/10 0/10 0
525 50 50 50 0/10 0/10 0/10 0
526 50 50 50 0/10 0/10 0/10 0
527 50 50 50 0/10 0/10 0/10 0
528 50 50 50 0/10 0/10 0/10 0
529 50 50 50 0/10 0/10 0/10 0
530 50 50 50 0/10 0/10 0/10 0
531 50 50 50 0/10 0/10 0/10 0
532 50 50 50 0/10 0/10 0/10 0
533 50 50 50 0/10 0/10 0/10 0
534 50 50 50 0/10 0/10 0/10 0
535 50 50 50 0/10 0/10 0/10 0
536 50 50 50 0/10 0/10 0/10 0
537 50 50 50 0/10 0/10 0/10 0
538 50 50 50 0/10 0/10 0/10 0
539 50 50 50 0/10 0/10 0/10 0
540 50 50 50 0/10 0/10 0/10 0
541 50 50 50 0/10 0/10 0/10 0
542 50 50 50 0/10 0/10 0/10 0
543 50 50 50 0/10 0/10 0/10 0
544 50 50 50 0/10 0/10 0/10 0
545 50 50 50 0/10 0/10 0/10 0
546 50 50 50 0/10 0/10 0/10 0
547 50 50 50 0/10 0/10 0/10 0
548 50 50 50 0/10 0/10 0/10 0
549 50 50 50 0/10 0/10 0/10 0
550 50 50 50 0/10 0/10 0/10 0
551 50 50 50 0/10 0/10 0/10 0
552 50 50 50 0/10 0/10 0/10 0
553 50 50 50 0/10 0/10 0/10 0
554 50 50 50 0/10 0/10 0/10 0
555 50 50 50 0/10 0/10 0/10 0
556 50 50 50 0/10 0/10 0/10 0
557 50 50 50 0/10 0/10 0/10 0
558 50 50 50 0/10 0/10 0/10 0
559 50 50 50 0/10 0/10 0/10 0
560 50 50 50 0/10 0/10 0/10 0
561 50 50 50 0/10 0/10 0/10 0
562 50 50 50 0/10 0/10 0/10 0
563 50 50 50 0/10 0/10 0/10 0
564 50 50 50 0/10 0/10 0/10 0
565 50 50 50 0/10 0/10 0/10 0
566 50 50 50 0/10 0/10 0/10 0
567 50 50 50 0/10 0/10 0/10 0
568 50 50 50 0/10 0/10 0/10 0
569 50 50 50 0/10 0/10 0/10 0
570 50 50 50 0/10 0/10 0/10 0
571 50 50 50 0/10 0/10 0/10 0
572 50 50 50 0/10 0/10 0/10 0
573 50 50 50 0/10 0/10 0/10 0
574 50 50 50 0/10 0/10 0/10 0
575 50 50 50 0/10 0/10 0/10 0
576 50 50 50 0/10 0/10 0/10 0
577 50 50 50 0/10 0/10 0/10 0
578 50 50 50 0/10 0/10 0/10 0
579 50 50 50 0/10 0/10 0/10 0
580 50 50 50 0/10 0/10 0/10 0
581 50 50 50 0/10 0/10 0/10 0
582 50 50 50 0/10 0/10 0/10 0
583 50 50 50 0/10 0/10 0/10 0
584 50 50 50 0/10 0/10 0/10 0
585 50 50 50 0/10 0/10 0/10 0
586 50 50 50 0/10 0/10 0/10 0
587 50 50 50 0/10 0/10 0/10 0
588 50 50 50 0/10 0/10 0/10 0
589 50 50 50 0/10 0/10 0/10 0
590 50 50 50 0/10 0/10 0/10 0
591 50 50 50 0/10 0/10 0/10 0
592 50 50 50 0/10 0/10 0/10 0
593 50 50 50 0/10 0/10 0/10 0
594 50 50 50 0/10 0/10 0/10 0
595 50 50 50 0/10 0/10 0/10 0
596 50 50 50 0/10 0/10 0/10 0
597 50 50 50 0/10 0/10 0/10 0
598 50 50 50 0/10 0/10 0/10 0
599 50 50 50 0/10 0/10 0/10 0
600 50 50 50 0/10 0/10 0/10 0
601 50 50 50 0/10 0/10 0/10 0
602 50 50 50 0/10 0/10 0/10 0
603 50 50 50 0/10 0/10 0/10 0
604 50 50 50 0/10 0/10 0/10 0
605 50 50 50 0/10 0/10 0/10 0
606 50 50 50 0/10 0/10 0/10 0
607 50 50 50 0/10 0/10 0/10 0
608 50 50 50 0/10 0/10 0/10 0
609 50 50 50 0/10 0/10 0/10 0
610 50 50 50 0/10 0/10 0/10 0
611 50 50 50 0/10 0/10 0/10 0
612 50 50 50 0/10 0/10 0/10 0
613 50 50 50 0/10 0/10 0/10 0
614 50 50 50 0/10 0/10 0/10 0
615 50 50 50 0/10 0/10 0/10 0
616 50 50 50 0/10 0/10 0/10 0
617 50 50 50 0/10 0/10 0/10 0
618 50 50 50 0/10 0/10 0/10 0
619 50 50 50 0/10 0/10 0/10 0
620 50 50 50 0/10 0/10 0/10 0
621 50 50 50 0/10 0/10 0/10 0
622 50 50 50 0/10 0/10 0/10 0
623 50 50 50 0/10 0/10 0/10 0
624 50 50 50 0/10 0/10 0/10 0
625 50 50 50 0/10 0/10 0/10 0
626 50 50 50 0/10 0/10 0/10 0
627 50 50 50 0/10 0/10 0/10 0
628 50 50 50 0/10 0/10 0/10 0
629 50 50 50 0/10 0/10 0/10 0
630 50 50 50 0/10 0/10 0/10 0
631 50 50 50 0/10 0/10 0/10 0
632 50 50 50 0/10 0/10 0/10 0
633 50 50 50 0/10 0/10 0/10 0
634 50 50 50 0/10 0/10 0/10 0
635 50 50 50 0/10 0/10 0/10 0
636 50 50 50 0/10 0/10 0/10 0
637 50 50 50 0/10 0/10 0/10 0
638 50 50 50 0/10 0/10 0/10 0
639 50 50 50 0/10 0/10 0/10 0
640 50 50 50 0/10 0/10 0/10 0
641 50 50 50 0/10 0/10 0/10 0
642 50 50 50 0/10 0/10 0/10 0
643 50 50 50 0/10 0/10 0/10 0
644 50 50 50 0/10 0/10 0/10 0
645 50 50 50 0/10 0/10 0/10 0
646 50 50 50 0/10 0/10 0/10 0
647 50 50 50 0/10 0/10 0/10 0
648 50 50 50 0/10 0/10 0/10 0
649 50 50 50 0/10 0/10 0/10 0
650 50 50 50 0/10 0/10 0/10 0
651 50 50 50 0/10 0/10 0/10 0
652 50 50 50 0/10 0/10 0/10 0
653 50 50 50 0/10 0/10 0/10 0
654 50 50 50 0/10 0/10 0/10 0
655 50 50 50 0/10 0/10 0/10 0
656 50 50 50 0/10 0/10 0/10 0
657 50 50 50 0/10 0/10 0/10 0
658 50 50 50 0/10 0/10 0/10 0
659 50 50 50 0/10 0/10 0/10 0
660 50 50 50 0/10 0/10 0/10 0
661 50 50 50 0/10 0/10 0/10 0
662 50 50 50 0/10 0/10 0/10 0
663 50 50 50 0/10 0/10 0/10 0
664 50 50 50 0/10 0/10 0/10 0
665 50 50 50 0/10 0/10 0/10 0
666 50 50 50 0/10 0/10 0/10 0
667 50 50 50 0/10 0/10 0/10 0
668 50 50 50 0/10 0/10 0/10 0
669 50 50 50 0/10 0/10 0/10 0
670 50 50 50 0/10 0/10 0/10 0
671 50 50 50 0/10 0/10 0/10 0
672 50 50 50 0/10 0/10 0/10 0
673 50 50 50 0/10 0/10 0/10 0
674 50 50 50 0/10 0/10 0/10 0
675 50 50 50 0/10 0/10 0/10 0
676 50 50 50 0/10 0/10 0/10 0
677 50 50 50 0/10 0/10 0/10 0
678 50 50 50 0/10 0/10 0/10 0
679 50 50 50 0/10 0/10 0/10 0
680 50 50 50 0/10 0/10 0/10 0
681 50 50 50 0/10 0/10 0/10 0
682 50 50 50 0/10 0/10 0/10 0
683 50 50 50 0/10 0/10 0/10 0
684 50 50 50 0/10 0/10 0/10 0
685 50 50 50 0/10 0/10 0/10 0
686 50 50 50 0/10 0/10 0/10 0
687 50 50 50 0/10 0/10 0/10 0
688 50 50 50 0/10 0/10 0/10 0
689 50 50 50 0/10 0/10 0/10 0
690 50 50 50 0/10 0/10 0/10 0
691 50 50 50 0/10 0/10 0/10 0
692 50 50 50 0/10 0/10 0/10 0

View File

@ -0,0 +1,63 @@
Plastic left,Glass left,Metal left,GC plastic,GC glass,GC metal,Total collected
33,27,36,0/10,0/10,0/10,0
35,32,37,0/10,0/10,0/10,0
40,35,41,0/10,0/10,0/10,0
41,38,41,0/10,0/10,0/10,0
41,39,44,0/10,0/10,0/10,0
41,39,45,0/10,0/10,0/10,0
41,40,48,0/10,0/10,0/10,0
42,41,48,0/10,0/10,0/10,0
45,42,49,0/10,0/10,0/10,0
47,42,50,0/10,0/10,0/10,0
49,47,50,0/10,0/10,0/10,0
50,50,51,0/10,0/10,0/10,0
51,53,54,0/10,0/10,0/10,0
53,54,56,0/10,0/10,0/10,0
55,54,56,0/10,0/10,0/10,0
57,55,58,0/10,0/10,0/10,0
58,56,60,0/10,0/10,0/10,0
60,58,60,0/10,0/10,0/10,0
60,58,60,0/10,0/10,0/10,0
60,59,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
60,60,60,0/10,0/10,0/10,0
1 Plastic left Glass left Metal left GC plastic GC glass GC metal Total collected
2 33 27 36 0/10 0/10 0/10 0
3 35 32 37 0/10 0/10 0/10 0
4 40 35 41 0/10 0/10 0/10 0
5 41 38 41 0/10 0/10 0/10 0
6 41 39 44 0/10 0/10 0/10 0
7 41 39 45 0/10 0/10 0/10 0
8 41 40 48 0/10 0/10 0/10 0
9 42 41 48 0/10 0/10 0/10 0
10 45 42 49 0/10 0/10 0/10 0
11 47 42 50 0/10 0/10 0/10 0
12 49 47 50 0/10 0/10 0/10 0
13 50 50 51 0/10 0/10 0/10 0
14 51 53 54 0/10 0/10 0/10 0
15 53 54 56 0/10 0/10 0/10 0
16 55 54 56 0/10 0/10 0/10 0
17 57 55 58 0/10 0/10 0/10 0
18 58 56 60 0/10 0/10 0/10 0
19 60 58 60 0/10 0/10 0/10 0
20 60 58 60 0/10 0/10 0/10 0
21 60 59 60 0/10 0/10 0/10 0
22 60 60 60 0/10 0/10 0/10 0
23 60 60 60 0/10 0/10 0/10 0
24 60 60 60 0/10 0/10 0/10 0
25 60 60 60 0/10 0/10 0/10 0
26 60 60 60 0/10 0/10 0/10 0
27 60 60 60 0/10 0/10 0/10 0
28 60 60 60 0/10 0/10 0/10 0
29 60 60 60 0/10 0/10 0/10 0
30 60 60 60 0/10 0/10 0/10 0
31 60 60 60 0/10 0/10 0/10 0
32 60 60 60 0/10 0/10 0/10 0
33 60 60 60 0/10 0/10 0/10 0
34 60 60 60 0/10 0/10 0/10 0
35 60 60 60 0/10 0/10 0/10 0
36 60 60 60 0/10 0/10 0/10 0
37 60 60 60 0/10 0/10 0/10 0
38 60 60 60 0/10 0/10 0/10 0
39 60 60 60 0/10 0/10 0/10 0
40 60 60 60 0/10 0/10 0/10 0
41 60 60 60 0/10 0/10 0/10 0
42 60 60 60 0/10 0/10 0/10 0
43 60 60 60 0/10 0/10 0/10 0
44 60 60 60 0/10 0/10 0/10 0
45 60 60 60 0/10 0/10 0/10 0
46 60 60 60 0/10 0/10 0/10 0
47 60 60 60 0/10 0/10 0/10 0
48 60 60 60 0/10 0/10 0/10 0
49 60 60 60 0/10 0/10 0/10 0
50 60 60 60 0/10 0/10 0/10 0
51 60 60 60 0/10 0/10 0/10 0
52 60 60 60 0/10 0/10 0/10 0
53 60 60 60 0/10 0/10 0/10 0
54 60 60 60 0/10 0/10 0/10 0
55 60 60 60 0/10 0/10 0/10 0
56 60 60 60 0/10 0/10 0/10 0
57 60 60 60 0/10 0/10 0/10 0
58 60 60 60 0/10 0/10 0/10 0
59 60 60 60 0/10 0/10 0/10 0
60 60 60 60 0/10 0/10 0/10 0
61 60 60 60 0/10 0/10 0/10 0
62 60 60 60 0/10 0/10 0/10 0
63 60 60 60 0/10 0/10 0/10 0

122
main.py Normal file
View File

@ -0,0 +1,122 @@
#!linux_env/bin/python3
import pygame
import sys
from random import randint
from config import WINDOW_HEIGHT, WINDOW_WIDTH, GRID_HEIGHT, GRID_WIDTH, HOUSE_CAPACITY, FPS, GC_X, GC_Y, MAP_NAME
from PIL import Image,ImageDraw
from DataModels.Grass import Grass
from DataModels.House import House
from DataModels.Dump import Dump
from DataModels.Road import Road
from DataModels.GC import GC
pygame.init()
pygame_sprites = pygame.sprite.Group()
house_count=0
dump_count=0
FPS_CLOCK = pygame.time.Clock()
GAME_WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), 0, 32)
map = open(MAP_NAME, 'r')
map.readline()
map.readline()
map_objects = [[None for y in range(0, GRID_HEIGHT)]
for x in range(0, GRID_WIDTH)]
def generate(letter):
key = 'D' if letter in ['B', 'G', 'Y'] else letter
letter_mapping = {
'E': lambda x, y: Grass(x, y),
'H': lambda x, y, max_rubbish, yellow, green, blue: House(x, y, max_rubbish, yellow, green, blue),
'D': lambda x, y, max_rubbish, dump_type: Dump(x, y, max_rubbish, dump_type),
'R': lambda x, y: Road(x, y)
}
return letter_mapping[key]
i = 0
for y in map.readlines():
for x in y.split():
x_coord = i % GRID_WIDTH
y_coord = (i-x_coord)//GRID_WIDTH
yellow, green, blue = [randint(0, HOUSE_CAPACITY // 2), randint(
0, HOUSE_CAPACITY // 2), randint(0, HOUSE_CAPACITY // 2)]
if x is 'E':
map_objects[x_coord][y_coord] = generate(x)(x_coord, y_coord)
elif x is 'H':
map_objects[x_coord][y_coord] = generate(x)(
x_coord, y_coord, HOUSE_CAPACITY, yellow, green, blue)
house_count+=1
elif x is 'B':
map_objects[x_coord][y_coord] = generate(
x)(x_coord, y_coord, 100, "Dump_Blue")
dump_count+=1
elif x is 'G':
map_objects[x_coord][y_coord] = generate(
x)(x_coord, y_coord, 100, "Dump_Green")
dump_count+=1
elif x is 'Y':
map_objects[x_coord][y_coord] = generate(
x)(x_coord, y_coord, 100, "Dump_Yellow")
dump_count+=1
elif x is 'R':
map_objects[x_coord][y_coord] = generate(x)(x_coord, y_coord)
i += 1
for line in map_objects:
for item in line:
pygame_sprites.add(item)
gc = GC(GC_X, GC_Y, 200)
print("GC: " + str(GC_X) + str(GC_Y))
pygame_sprites.add(gc)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP:
gc.move("up", map_objects)
elif event.key == pygame.K_DOWN:
gc.move("down", map_objects)
elif event.key == pygame.K_LEFT:
gc.move("left", map_objects)
elif event.key == pygame.K_RIGHT:
gc.move("right", map_objects)
elif event.key == pygame.K_SPACE:
gc.collect(map_objects)
elif event.key == pygame.K_0:
gc.find_houses(map_objects,house_count,dump_count, "DFS")
elif event.key == pygame.K_9:
gc.find_houses_BestFS(map_objects)
elif event.key == pygame.K_8:
gc.find_houses(map_objects,house_count,dump_count, "BFS")
gc.make_actions_from_list(map_objects)
pygame_sprites.update()
pygame_sprites.draw(GAME_WINDOW)
#draw GC moves
bg_rect = pygame.Surface((105,30), pygame.SRCALPHA)
bg_rect.fill((0,0,0,160))
GAME_WINDOW.blit(bg_rect, (0, WINDOW_HEIGHT-30))
font = pygame.font.SysFont("monospace", 15)
gc_moves = font.render("Moves: " + str(gc.get_moves_count()), 1, (255,255,255))
GAME_WINDOW.blit(gc_moves, (10, WINDOW_HEIGHT - 25))
pygame.display.flip()
FPS_CLOCK.tick(FPS)

22
prolog/basic_rules.pl Normal file
View File

@ -0,0 +1,22 @@
:- [house_positions].
check_position(X, Y):-
collectable_object(Z,X,Y),
write(Z),nl.
full(Collectable_object, Material) :-
contains(Collectable_object, Material,10).
contains(Collectable_object, Material):-
contains(Collectable_object,Material,Y),
Y>0.
contains(Collectable_object) :-
contains(Collectable_object, paper);
contains(Collectable_object, glass);
contains(Collectable_object, metal).
full(Collectable_object) :-
full(Collectable_object, paper),
full(Collectable_object, metal),
full(Collectable_object, glass).

View File

@ -0,0 +1,9 @@
collectable_object(landfill, 0, 0).
collectable_object(landfill, 1, 0).
collectable_object(landfill, 2, 0).
collectable_object(house, 8, 6).
collectable_object(house, 6, 8).
collectable_object(house, 2, 6).
collectable_object(house, 8, 8).
collectable_object(house, 9, 2).
collectable_object(house, 5, 3).

View File

@ -1 +1,2 @@
pygame==1.9.4
Pillow==5.4.1
pygame==1.9.5

View File

@ -1,18 +0,0 @@
# -*- coding: utf-8 -*-
import pygame
import sys
from pygame.locals import *
CELL_SIZE = 64
class Cell(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.update()
def update(self):
self.rect = pygame.Rect(
self.x*CELL_SIZE, self.y*CELL_SIZE, CELL_SIZE, CELL_SIZE)

View File

@ -1,58 +0,0 @@
import pygame
from sprites.cell import Cell, CELL_SIZE
from sprites.house import House
from config import PLAY_HEIGHT, PLAY_WIDTH
class Garbage_collector(Cell):
def __init__(self, x, y):
GC_CAPACITY = 10
Cell.__init__(self, x, y)
self.image = pygame.image.load("images/garbage_collector.png")
self.move_options = {
"up": lambda forbidden: ('y', self.y - 1) if (self.x, self.y - 1) not in forbidden and self.y - 1 >= 0 else ('y', self.y),
"down": lambda forbidden: ('y', self.y + 1) if (self.x, self.y + 1) not in forbidden and self.y + 1 < PLAY_HEIGHT // CELL_SIZE else ('y', self.y),
"left": lambda forbidden: ('x', self.x - 1) if (self.x - 1, self.y) not in forbidden and self.x - 1 >= 0 else ('x', self.x),
"right": lambda forbidden: ('x', self.x + 1) if (self.x + 1, self.y) not in forbidden and self.x + 1 < PLAY_WIDTH // CELL_SIZE else ('x', self.x)
}
self.trash_space_taken = {
"plastic": 0,
"glass": 0,
"metal": 0
}
self.trash_collected = 0
def move(self, direction, forbidden):
(destination, value) = self.move_options[direction](forbidden)
if(destination is 'x'):
self.x = value
elif(destination is 'y'):
self.y = value
self.update()
def collect_trash(self, house):
rubbish = house.get_rubbish_data()
to_collect = rubbish
if(rubbish[0] > GC_CAPACITY - self.trash_space_taken.get("plastic")):
to_collect[0] = self.trash_space_taken.get("plastic")
self.trash_space_taken['plastic'] += to_collect[0]
self.trash_collected += to_collect[0]
if(rubbish[1] > GC_CAPACITY - self.trash_space_taken.get("glass")):
to_collect[1] = self.trash_space_taken.get("glass")
self.trash_space_taken['glass'] += to_collect[1]
self.trash_collected += to_collect[1]
if(rubbish[2] > GC_CAPACITY - self.trash_space_taken.get("metal")):
to_collect[2] = self.trash_space_taken.get("metal")
self.trash_space_taken['metal'] += to_collect[2]
self.trash_collected += to_collect[2]
house.give_away_rubbish(to_collect[0], to_collect[1], to_collect[2])
def get_collect_data(self):
return self.trash_collected
def get_space_data(self):
return self.trash_space_taken

View File

@ -1,9 +0,0 @@
import pygame
import sys
from sprites.cell import Cell
class Grass(Cell):
def __init__(self, x, y):
Cell.__init__(self, x, y)
self.image = pygame.image.load("images/grass.png")

View File

@ -1,58 +0,0 @@
import pygame
import sys
import random
from enum import Enum
from sprites.cell import Cell
from enums.house_image import House_image
PLASTIC = 0 # blue
GLASS = 1 # green
METAL = 2 # yellow
class House(Cell):
def __init__(self, x, y, max_plastic, max_glass, max_metal):
Cell.__init__(self, x, y)
self.image = pygame.image.load(House_image.house.value)
self.rubbish = [random.randint(0, max_plastic), random.randint(
0, max_glass), random.randint(0, max_metal)] # plastic, glass, metal
self.max_plastic = max_plastic
self.max_glass = max_glass
self.max_metal = max_metal
def generate_rubbish(self):
if(random.randint(0, 25) == 1): # 1/25 szansa na wyrzucenie śmiecia w klatce
thrash_type = random.randint(0, 2)
self.rubbish[thrash_type] = self.rubbish[thrash_type] + 1
#mozna ladniej?
if(self.rubbish[PLASTIC] > self.max_plastic):
if(self.rubbish[GLASS] > self.max_glass):
if(self.rubbish[METAL] > self.max_metal):
self.image = pygame.image.load(House_image.full.value) #plastik, szklo, metal
else:
self.image = pygame.image.load(House_image.plastic_glass.value) #plastik, szklo
elif(self.rubbish[METAL] > self.max_metal):
self.image = pygame.image.load(House_image.plastic_metal.value) #plastik, metal
else:
self.image = pygame.image.load(House_image.plastic.value) #plastik
elif(self.rubbish[GLASS] > self.max_glass):
if(self.rubbish[METAL] > self.max_metal):
self.image = pygame.image.load(House_image.glass_metal.value) #szklo, metal
else:
self.image = pygame.image.load(House_image.glass.value) #szklo
elif(self.rubbish[METAL] > self.max_metal):
self.image = pygame.image.load(House_image.metal.value) #metal
def give_away_rubbish(self, plastic, glass, metal):
self.rubbish[PLASTIC] -= plastic
self.rubbish[GLASS] -= glass
self.rubbish[METAL] -= metal
def check_rubbish_status(self):
print("plastic: " + str(self.rubbish[PLASTIC]) + " glass: " + str(
self.rubbish[GLASS]) + " metal: " + str(self.rubbish[METAL]))
def get_rubbish_data(self):
return self.rubbish

View File

@ -1,56 +0,0 @@
import pygame
from sprites.house import House
from sprites.garbage_collector import Garbage_collector
from config import HUD_HEIGHT
HUD_COLOR = (51,21,4)
WHITE = (255,255,255)
class Hud():
texts = []
def __init__(self,house_amount,WINDOW_WIDTH, WINDOW_HEIGHT,GAMEWINDOW):
pygame.init()
hud_upper = WINDOW_WIDTH - HUD_HEIGHT
hud_lower = WINDOW_WIDTH
height = hud_upper - hud_lower
font_type = 'fonts/Bazgroly.ttf'
font_size = house_amount * 2
GAMEWINDOW.fill(HUD_COLOR)
font = pygame.font.Font(font_type, font_size)
gc_plastic_text = font.render("Plastic: 0/0",True,WHITE)
gc_metal_text = font.render("Metal: 0/0",True,WHITE)
gc_glass_text = font.render("Glass: 0/0",True,WHITE)
map_plastic_text = font.render("Plastic: 0",True,WHITE)
map_metal_text = font.render("Metal: 0",True,WHITE)
map_glass_text = font.render("Glass: 0",True,WHITE)
overall_text = font.render("Garbage thrown away: 0",True,WHITE)
GAMEWINDOW.blit(overall_text,(20, 20))
def get_statistics(self, all_sprites):
###Garbage collector stats###
gc_taken_space_plastic = 0
gc_taken_space_metal = 0
gc_taken_space_glass = 0
gc_trash_space = 10
###Board stats###############
plastic_left = 0
metal_left = 0
glass_left = 0
total_gathered = 0
for item in all_sprites:
if(type(item) == House):
rubbish = item.get_rubbish_data()
plastic_left += rubbish[0]
glass_left += rubbish[1]
metal_left += rubbish[2]
if(type(item) == Garbage_collector):
space_taken = item.get_space_data()
gc_taken_space_plastic += space_taken.get("plastic")
gc_taken_space_glass += space_taken.get("glass")
gc_taken_space_metal += space_taken.get("metal")
total_gathered += item.get_collect_data()
print("plastic left: "+str(plastic_left)+" | glass left: "+str(glass_left)+" | metal left: "+str(metal_left))
print(" plastic: "+str(gc_taken_space_plastic)+"/"+str(gc_trash_space)+" | glass: "+str(gc_taken_space_glass)+"/"+str(gc_trash_space)+" | metal: "+str(gc_taken_space_metal)+"/"+str(gc_trash_space))
print("### TOTAL COLLECTED: "+str(total_gathered)+" ###")

View File

@ -1,11 +0,0 @@
import pygame
import sys
from sprites.cell import Cell
class Landfill(Cell):
def __init__(self, x, y, type):
Cell.__init__(self, x, y)
types = ["plastic", "glass", "metal"]
self.type = types[type]
self.image = pygame.image.load("images/landfill_%s.png" % (self.type))

View File

@ -1,6 +0,0 @@
+Przy losowaniu domku: Sprawdzić, czy pole które wylosowaliśmy jest typu Grass (bo nie można go postawić na wysypisku ani na innym domku)
+Dodanie metody od zapełniania śmietników która updatuje się co klatkę (Jeżeli zapełnienie == 100 to zmienia się sprite i trzeba zabrać czy coś takiego)
-Dodanie hudu
+Wpisywanie na początku gry liczby domków
+Umieszczenie na mapie wysypisk(I dodanie ich klasy)
-W JAKI SPOSÓB MOŻNA PREZENTOWAĆ KILKA RÓŻNYCH ŚMIECI NA DOMKU?

53
utilities.py Normal file
View File

@ -0,0 +1,53 @@
from config import GRID_WIDTH, GRID_HEIGHT
from DataModels.Road import Road
import json, os, platform
def movement(environment, x ,y):
movement = {
"right": (x + 1, y) if x + 1 < GRID_WIDTH and type(environment[x + 1][y]) == Road else (x, y),
"left": (x - 1, y) if x - 1 >= 0 and type(environment[x - 1][y]) == Road else (x, y),
"down": (x, y + 1) if y + 1 < GRID_HEIGHT and type(environment[x][y + 1]) == Road else (x, y),
"up": (x, y - 1) if y - 1 >= 0 and type(environment[x][y - 1]) == Road else (x, y)
}
forbidden_movement = {
"right": "left",
"left": "right",
"up": "down",
"down": "up"
}
return (movement, forbidden_movement)
def check_moves(environment, x,y,direction=None):
if direction == None:
return ([dir for dir in movement(environment, x, y)[0] if movement(environment, x,y)[0][dir] != (x,y)])
return ([dir for dir in movement(environment, x, y)[0] if movement(environment, x,y)[0][dir] != (x,y) and dir != movement(environment,x,y)[1][direction]])
def save_moveset(moveset):
if platform.system() == 'Windows':
path = '\moveset_data.json'
else:
path = '/moveset_data.json'
output_file = os.path.normpath(os.getcwd()) + path
results = {}
try:
f = open(output_file, 'r+')
except:
open(output_file, 'a').close()
finally:
f = open(output_file, 'r+')
try:
results = json.load(f)
except:
pass
finally:
if "moveset" not in results:
results = { "moveset": [] }
results["moveset"].append(moveset)
f.seek(0)
json.dump(results, f, indent=1)
f.close()

View File

@ -1,71 +0,0 @@
import sys
import getopt
import random
from config import PLAY_WIDTH, PLAY_HEIGHT, home_amount
from sprites.cell import CELL_SIZE
from sprites.grass import Grass
from sprites.house import House
from sprites.landfill import Landfill
from sprites.garbage_collector import Garbage_collector
def generate_rand_coordinates(max_x, max_y):
return (random.randint(0, max_x), random.randint(0, (max_y)))
##GENERATE GRASS##################################################################
def generate_grass(all_sprites):
grass = []
for k in range(0, (PLAY_WIDTH//CELL_SIZE)*(PLAY_HEIGHT//CELL_SIZE)):
x, y = (int(k % (PLAY_WIDTH//CELL_SIZE)),
int(k/(PLAY_WIDTH//CELL_SIZE)))
grass.append(Grass(x, y))
for item in grass:
all_sprites.add(item)
##################################################################################
##GENERATE HOUSES#################################################################
def generate_houses(all_sprites, obstacles_coords):
houses = []
home_counter = home_amount
while(home_counter != 0):
x, y = generate_rand_coordinates(
(PLAY_WIDTH//CELL_SIZE)-1, (PLAY_HEIGHT//CELL_SIZE)-1)
if(((x, y)) not in obstacles_coords["homes"] and ((x, y)) not in obstacles_coords["landfills"] and ((x, y-1)) not in obstacles_coords["landfills"]):
houses.append(House(x, y, 10, 10, 10))
obstacles_coords["homes"].append((x, y))
home_counter = home_counter - 1
for item in houses:
all_sprites.add(item)
##################################################################################
##GENERATE LANDFILLS##############################################################
def generate_landfills(all_sprites, obstacles_coords):
landfills = []
landfill_counter = 3
y=0
for x in range(landfill_counter):
landfills.append(Landfill(x,y,x))
obstacles_coords["landfills"].append((x,y))
for item in landfills:
all_sprites.add(item)
##################################################################################
##GENERATE GARBAGE COLLECTOR######################################################
def generate_garbage_collector(all_sprites, obstacles_coords):
while(True):
x, y = generate_rand_coordinates(
(PLAY_WIDTH//CELL_SIZE)-1, (PLAY_HEIGHT//CELL_SIZE)-1)
if((x, y) not in obstacles_coords["landfills"] and (x, y) not in obstacles_coords["homes"]):
gc = Garbage_collector(x, y)
break
all_sprites.add(gc)
return gc
##################################################################################