Agents (reproduction with and without borders)
This commit is contained in:
parent
ce0cb0a56c
commit
99713c7799
|
|
@ -1 +1 @@
|
||||||
10,10;11,11;9,11;12,10
|
1,10;11,11;9,11;12
|
||||||
|
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
1,48;40,49;40,49;42,49;41,48;41,48;42,50;40,50;41,50;42,50;39,49;39,48;39,47;39,47;40,47;41,47;42,62;27,48;23,44;25,42;30,39;37,37;39,31;33,38;52,47;61,57;58,69;47,72;21,64;18,58;19,61;29,60;41,66;39,63;50,
|
||||||
|
2,54;34,44;33,44;44,54;45,49;34,49;45,
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
2;3
|
||||||
|
3
|
||||||
|
|
|
@ -0,0 +1,100 @@
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;
|
||||||
|
|
|
@ -2,16 +2,45 @@ package backend;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
public abstract class Agent {
|
public abstract class Agent {
|
||||||
protected int x;
|
protected int x;
|
||||||
protected int y;
|
protected int y;
|
||||||
protected Color color;
|
protected Color color;
|
||||||
|
protected boolean hasReproducedFlag = false;
|
||||||
|
Random rand;
|
||||||
|
|
||||||
protected Agent(int x, int y, Color color) {
|
protected boolean fertileFlag = false;
|
||||||
|
protected int fertility = 5;
|
||||||
|
protected int maxFertility;
|
||||||
|
|
||||||
|
protected Agent(int x, int y, Color color, int maxFertility) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
|
this.maxFertility = maxFertility;
|
||||||
|
rand = new Random();
|
||||||
|
|
||||||
|
if (fertility == maxFertility) {
|
||||||
|
fertileFlag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxFertility() {
|
||||||
|
return maxFertility;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getHasReproduced() {
|
||||||
|
return hasReproducedFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canReproduce() {
|
||||||
|
return fertileFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHasReproduced(boolean flag) {
|
||||||
|
this.hasReproducedFlag = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color getDisplayColor() {
|
public Color getDisplayColor() {
|
||||||
|
|
@ -23,7 +52,25 @@ public abstract class Agent {
|
||||||
public int getY() {
|
public int getY() {
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
public boolean isInArea(int x, int y, int radius) {
|
public boolean isInArea(int x, int y, int radius, World world, boolean borderLoopFlag) {
|
||||||
|
int width = world.getWidth();
|
||||||
|
int height = world.getHeight();
|
||||||
|
if(borderLoopFlag) {
|
||||||
|
if (x >= width || x < 0 || y >= height || y < 0) {
|
||||||
|
if (x >= width) {
|
||||||
|
x = 0;
|
||||||
|
}
|
||||||
|
else if(x < 0) {
|
||||||
|
x = width-1;
|
||||||
|
}
|
||||||
|
if(y >= height) {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
else if(y < 0) {
|
||||||
|
y = height-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
int diffX = this.x-x;
|
int diffX = this.x-x;
|
||||||
int diffY = this.y-y;
|
int diffY = this.y-y;
|
||||||
int dist = (int) Math.floor(Math.sqrt(diffX*diffX+diffY*diffY));
|
int dist = (int) Math.floor(Math.sqrt(diffX*diffX+diffY*diffY));
|
||||||
|
|
@ -34,7 +81,81 @@ public abstract class Agent {
|
||||||
// then returns a boolean
|
// then returns a boolean
|
||||||
// if false, agent dies at end of turn
|
// if false, agent dies at end of turn
|
||||||
// see step function in Simulator
|
// see step function in Simulator
|
||||||
public abstract boolean liveTurn(ArrayList<Agent> neighbors, World world);
|
|
||||||
|
public void moveRandom(ArrayList<Agent> neighbors, World world, boolean borderLoopFlag) {
|
||||||
|
int direction = rand.nextInt(4);
|
||||||
|
int width = world.getWidth();
|
||||||
|
int height = world.getHeight();
|
||||||
|
int xNew = x;
|
||||||
|
int yNew = y;
|
||||||
|
if(direction == 0) {
|
||||||
|
xNew = xNew + 1;
|
||||||
|
}
|
||||||
|
if(direction == 1) {
|
||||||
|
yNew = yNew + 1;
|
||||||
|
}
|
||||||
|
if(direction == 2) {
|
||||||
|
xNew = xNew - 1;
|
||||||
|
}
|
||||||
|
if(direction == 3) {
|
||||||
|
yNew = yNew - 1;
|
||||||
|
}
|
||||||
|
boolean agentInNewCell = false;
|
||||||
|
for (Agent agent : neighbors) {
|
||||||
|
if (agent.agentInCell(xNew, yNew)) {
|
||||||
|
agentInNewCell = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!agentInNewCell) {
|
||||||
|
if (xNew < width && xNew >=0 && yNew < height && yNew >= 0) {
|
||||||
|
x = xNew;
|
||||||
|
y = yNew;
|
||||||
|
}
|
||||||
|
else if(borderLoopFlag) {
|
||||||
|
if (xNew >= width) {
|
||||||
|
xNew = 0;
|
||||||
|
}
|
||||||
|
else if(xNew < 0) {
|
||||||
|
xNew = width-1;
|
||||||
|
}
|
||||||
|
if(yNew >= height) {
|
||||||
|
yNew = 0;
|
||||||
|
}
|
||||||
|
else if(yNew < 0) {
|
||||||
|
yNew = height-1;
|
||||||
|
}
|
||||||
|
x = xNew;
|
||||||
|
y = yNew;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean agentInCell(int x, int y) {
|
||||||
|
boolean flag = false;
|
||||||
|
if (this.x == x && this.y == y) {
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reproduced() {
|
||||||
|
fertileFlag = false;
|
||||||
|
fertility = 0;
|
||||||
|
this.setHasReproduced(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tickFertility()
|
||||||
|
{
|
||||||
|
if (fertility < maxFertility) {
|
||||||
|
fertility ++;
|
||||||
|
}
|
||||||
|
if (fertility == maxFertility) {
|
||||||
|
fertileFlag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public abstract boolean liveTurn(ArrayList<Agent> neighbors, World world, boolean borderLoopFlag);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package backend;
|
||||||
|
|
||||||
|
public class BasicFunctions {
|
||||||
|
|
||||||
|
public BasicFunctions()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public String intArrayToCSVString(int[] array) {
|
||||||
|
String line = "";
|
||||||
|
for(int x=0; x<array.length;x++) {
|
||||||
|
line = line + Integer.toString(array[x]) + ";";
|
||||||
|
}
|
||||||
|
return line;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isIntInArray(int[] array, int numToFind) {
|
||||||
|
boolean flag = false;
|
||||||
|
for (int i = 0; i < array.length; i++) {
|
||||||
|
if (numToFind == array[i]) {
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package backend;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class Rule {
|
||||||
|
|
||||||
|
private int[] surviveArray;
|
||||||
|
private int[] birthArray;
|
||||||
|
private BasicFunctions functions;
|
||||||
|
|
||||||
|
public Rule() {
|
||||||
|
functions = new BasicFunctions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getSurviveArray()
|
||||||
|
{
|
||||||
|
return this.surviveArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] getBirthArray()
|
||||||
|
{
|
||||||
|
return this.birthArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getRuleDataLines() {
|
||||||
|
ArrayList<String> dataLines = new ArrayList<String>();
|
||||||
|
dataLines.add(functions.intArrayToCSVString(this.surviveArray));
|
||||||
|
dataLines.add(functions.intArrayToCSVString(this.birthArray));
|
||||||
|
return dataLines;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadRule(ArrayList<String> lines) {
|
||||||
|
if(lines.size()<=0) {
|
||||||
|
System.out.println("empty rule file");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String surviveLine = lines.get(0);
|
||||||
|
String birthLine = lines.get(1);
|
||||||
|
String[] surviveElements = surviveLine.split(";");
|
||||||
|
this.surviveArray = new int[surviveElements.length];
|
||||||
|
for(int x=0; x<surviveElements.length;x++) {
|
||||||
|
String elem = surviveElements[x];
|
||||||
|
int value = Integer.parseInt(elem);
|
||||||
|
this.surviveArray[x] = value;
|
||||||
|
//TODO : add value to possible survive values
|
||||||
|
}
|
||||||
|
String[] birthElements = birthLine.split(";");
|
||||||
|
this.birthArray = new int[birthElements.length];
|
||||||
|
for(int x=0; x<birthElements.length;x++) {
|
||||||
|
String elem = birthElements[x];
|
||||||
|
int value = Integer.parseInt(elem);
|
||||||
|
this.birthArray[x] = value;
|
||||||
|
//TODO : add value to possible birth values
|
||||||
|
|
||||||
|
}
|
||||||
|
if (lines.size() > 2) {
|
||||||
|
String possibleEntites = lines.get(2).split(";")[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,6 @@ package backend;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
// example of basic animal.
|
// example of basic animal.
|
||||||
// do not hesitate to make it more complex
|
// do not hesitate to make it more complex
|
||||||
|
|
@ -10,18 +9,19 @@ import java.util.Random;
|
||||||
// for example wolves that eat Sheep
|
// for example wolves that eat Sheep
|
||||||
public class Sheep extends Agent {
|
public class Sheep extends Agent {
|
||||||
|
|
||||||
int hunger;
|
private int hunger;
|
||||||
Random rand;
|
private int maxHunger;
|
||||||
|
|
||||||
|
private int maxFertility = 5;
|
||||||
|
|
||||||
Sheep(int x,int y){
|
Sheep(int x,int y){
|
||||||
//first we call the constructor of the superClass(Animal)
|
//first we call the constructor of the superClass(Animal)
|
||||||
//with the values we want.
|
//with the values we want.
|
||||||
// here we decide that a Sheep is initially white using this constructor
|
// here we decide that a Sheep is initially white using this constructor
|
||||||
super(x,y,Color.white);
|
super(x,y,Color.white, 5);
|
||||||
// we give our sheep a hunger value of zero at birth
|
// we give our sheep a hunger value of zero at birth
|
||||||
hunger = 0;
|
hunger = 0;
|
||||||
//we initialize the random number generator we will use to move randomly
|
maxHunger = 10;
|
||||||
rand = new Random();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -29,31 +29,27 @@ public class Sheep extends Agent {
|
||||||
* it can interact with the cells or with other animals
|
* it can interact with the cells or with other animals
|
||||||
* as you wish
|
* as you wish
|
||||||
*/
|
*/
|
||||||
public boolean liveTurn(ArrayList<Agent> neighbors, World world) {
|
public int getMaxHunger()
|
||||||
if(world.getCell(x, y)==1) {
|
{
|
||||||
world.setCell(x, y, 0);
|
return maxHunger;
|
||||||
} else {
|
|
||||||
hunger++;
|
|
||||||
}
|
|
||||||
this.moveRandom();
|
|
||||||
return hunger>10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void moveRandom() {
|
public int getMaxFertility() {
|
||||||
int direction = rand.nextInt(4);
|
return maxFertility;
|
||||||
if(direction == 0) {
|
}
|
||||||
x+=1;
|
|
||||||
}
|
@Override
|
||||||
if(direction == 1) {
|
public boolean liveTurn(ArrayList<Agent> neighbors, World world, boolean borderLoopFlag) {
|
||||||
y+=1;
|
if(x >= 0 && y >=0 && x < world.getWidth() && y < world.getHeight()) {
|
||||||
}
|
if(world.getCell(x, y)==1) {
|
||||||
if(direction == 2) {
|
world.setCell(x, y, 0);
|
||||||
x-=1;
|
} else {
|
||||||
}
|
this.hunger++;
|
||||||
if(direction == 3) {
|
}
|
||||||
y-=1;
|
this.moveRandom(neighbors, world, borderLoopFlag);
|
||||||
}
|
|
||||||
|
}
|
||||||
|
return this.hunger<this.maxHunger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,12 @@ public class Simulator extends Thread {
|
||||||
private boolean stopFlag;
|
private boolean stopFlag;
|
||||||
private boolean pauseFlag;
|
private boolean pauseFlag;
|
||||||
private boolean loopingBorderFlag;
|
private boolean loopingBorderFlag;
|
||||||
private boolean clickActionFlag;
|
|
||||||
private int loopDelay = 150;
|
private int loopDelay = 150;
|
||||||
private int[][] tempWorld;
|
private int[][] tempWorld;
|
||||||
private int iteration;
|
private int iteration;
|
||||||
|
|
||||||
|
private ArrayList<String> clickNames;
|
||||||
|
private int clickActionSlot;
|
||||||
|
|
||||||
//TODO : add missing attribute(s)
|
//TODO : add missing attribute(s)
|
||||||
|
|
||||||
|
|
@ -40,7 +42,12 @@ public class Simulator extends Thread {
|
||||||
stopFlag=false;
|
stopFlag=false;
|
||||||
pauseFlag=false;
|
pauseFlag=false;
|
||||||
loopingBorderFlag=false;
|
loopingBorderFlag=false;
|
||||||
clickActionFlag=false;
|
|
||||||
|
clickNames = new ArrayList<String>();
|
||||||
|
clickNames.add("cell");
|
||||||
|
clickNames.add("sheep");
|
||||||
|
clickNames.add("wolf");
|
||||||
|
clickActionSlot = 0;
|
||||||
|
|
||||||
iteration = 0;
|
iteration = 0;
|
||||||
|
|
||||||
|
|
@ -108,19 +115,41 @@ public class Simulator extends Thread {
|
||||||
// agent behaviors first
|
// agent behaviors first
|
||||||
// only modify if sure of what you do
|
// only modify if sure of what you do
|
||||||
// to modify agent behavior, see liveTurn method
|
// to modify agent behavior, see liveTurn method
|
||||||
// in agent classes
|
// in agent classes
|
||||||
|
ArrayList<Agent> bufferBirthAgents = new ArrayList<Agent>();
|
||||||
for(Agent agent : agents) {
|
for(Agent agent : agents) {
|
||||||
|
agent.setHasReproduced(false);
|
||||||
ArrayList<Agent> neighbors =
|
ArrayList<Agent> neighbors =
|
||||||
this.getNeighboringAnimals(
|
this.getNeighboringAnimals(
|
||||||
agent.getX(),
|
agent.getX(),
|
||||||
agent.getY(),
|
agent.getY(),
|
||||||
ANIMAL_AREA_RADIUS);
|
ANIMAL_AREA_RADIUS);
|
||||||
|
agent.tickFertility();
|
||||||
|
if (agent.canReproduce()) {
|
||||||
|
for (Agent nearAgent : neighbors) {
|
||||||
|
if (nearAgent.getClass() == agent.getClass() && nearAgent.canReproduce() && nearAgent != agent) {
|
||||||
|
this.agentReproduction(agent, neighbors, bufferBirthAgents);
|
||||||
|
agent.reproduced();
|
||||||
|
nearAgent.reproduced();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!agent.liveTurn(
|
if(!agent.liveTurn(
|
||||||
neighbors,
|
neighbors,
|
||||||
this.world)) {
|
this.world,
|
||||||
agents.remove(agent);
|
this.loopingBorderFlag)) {
|
||||||
|
removeAgentFromArray(agent);
|
||||||
|
}
|
||||||
|
if(agent instanceof Wolf) {
|
||||||
|
this.removeAgentFromArray(((Wolf) agent).getSheepEaten());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (Agent newAgent : bufferBirthAgents) {
|
||||||
|
agents.add(newAgent);
|
||||||
|
}
|
||||||
|
|
||||||
int[][] worldItr = world.getWorld();
|
int[][] worldItr = world.getWorld();
|
||||||
for(int x=0; x<width;x++) {
|
for(int x=0; x<width;x++) {
|
||||||
for (int y=0; y<height; y++) {
|
for (int y=0; y<height; y++) {
|
||||||
|
|
@ -188,16 +217,94 @@ public class Simulator extends Thread {
|
||||||
*/
|
*/
|
||||||
public void clickCell(int x, int y) {
|
public void clickCell(int x, int y) {
|
||||||
int clickedCell = world.getCell(x, y);
|
int clickedCell = world.getCell(x, y);
|
||||||
if (clickedCell==1) {
|
Agent clickedCellAgent = agentInCell(x, y);
|
||||||
|
if (clickActionSlot == 0)
|
||||||
|
{
|
||||||
|
toggleWorldCell(x, y, clickedCell);
|
||||||
|
}
|
||||||
|
if (clickActionSlot == 1) {
|
||||||
|
toggleCellSheep(x, y, clickedCellAgent);
|
||||||
|
}
|
||||||
|
if (clickActionSlot == 2) {
|
||||||
|
toggleCellWolf(x, y, clickedCellAgent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleWorldCell(int x, int y, int cellValue) {
|
||||||
|
if (cellValue==1) {
|
||||||
world.setCell(x, y, 0);
|
world.setCell(x, y, 0);
|
||||||
}
|
}
|
||||||
if (clickedCell==0) {
|
if (cellValue==0) {
|
||||||
world.setCell(x, y, 1);
|
world.setCell(x, y, 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleCellSheep(int x, int y, Agent agent) {
|
||||||
|
if(agent != null) {
|
||||||
|
removeAgentFromArray(agent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Sheep sheep = new Sheep(x, y);
|
||||||
|
agents.add(sheep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void toggleCellWolf(int x, int y, Agent agent) {
|
||||||
|
if(agent != null) {
|
||||||
|
removeAgentFromArray(agent);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Wolf wolf = new Wolf(x, y);
|
||||||
|
agents.add(wolf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeAgentFromArray(Agent agentToRemove) {
|
||||||
|
//create a temp list duplicate of the agent list to remove dead agents without
|
||||||
|
//interrupting the sequencing of the main agent list
|
||||||
|
ArrayList<Agent> tempAgents = new ArrayList<Agent>();
|
||||||
|
for(Agent agent : agents) {
|
||||||
|
tempAgents.add(agent);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Agent agent : agents) {
|
||||||
//TODO : complete method
|
if(agent == agentToRemove) {
|
||||||
|
tempAgents.remove(agent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.agents = tempAgents;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void agentReproduction(Agent agent, ArrayList<Agent> neighbors, ArrayList<Agent> bufferAgents) {
|
||||||
|
int x = agent.getX();
|
||||||
|
int y = agent.getY();
|
||||||
|
scan:
|
||||||
|
for (int i = -1; i <= 1; i++) {
|
||||||
|
for(int j = -1; j <= 1; j++) {
|
||||||
|
boolean agentInCell = true;
|
||||||
|
for (Agent nearAgent : neighbors) {
|
||||||
|
int nearX = nearAgent.getX();
|
||||||
|
int nearY = nearAgent.getY();
|
||||||
|
if (nearX != (x + i) && nearY != (y + j) && (x + i) != x && (y + j) != y) {
|
||||||
|
agentInCell = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!agentInCell) {
|
||||||
|
|
||||||
|
if (agent instanceof Sheep) {
|
||||||
|
Sheep sheep = new Sheep((x + i), (y + j));
|
||||||
|
bufferAgents.add(sheep);
|
||||||
|
}
|
||||||
|
else if(agent instanceof Wolf) {
|
||||||
|
Wolf wolf = new Wolf((x + i), (y + j));
|
||||||
|
bufferAgents.add(wolf);
|
||||||
|
}
|
||||||
|
break scan;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -207,6 +314,17 @@ public class Simulator extends Thread {
|
||||||
public ArrayList<Agent> getAnimals(){
|
public ArrayList<Agent> getAnimals(){
|
||||||
return agents;
|
return agents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Agent agentInCell(int x, int y) {
|
||||||
|
Agent cellAgent = null;
|
||||||
|
for (Agent agent : agents) {
|
||||||
|
if (agent.agentInCell(x, y)) {
|
||||||
|
cellAgent = agent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cellAgent;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* selects Animals in a circular area of simulated world
|
* selects Animals in a circular area of simulated world
|
||||||
* @param x center
|
* @param x center
|
||||||
|
|
@ -218,7 +336,7 @@ public class Simulator extends Thread {
|
||||||
ArrayList<Agent> inArea = new ArrayList<Agent>();
|
ArrayList<Agent> inArea = new ArrayList<Agent>();
|
||||||
for(int i=0;i<agents.size();i++) {
|
for(int i=0;i<agents.size();i++) {
|
||||||
Agent agent = agents.get(i);
|
Agent agent = agents.get(i);
|
||||||
if(agent.isInArea(x,y,radius)) {
|
if(agent.isInArea(x,y,radius, world, loopingBorderFlag) && agent.getX() != x && agent.getY() != y) {
|
||||||
inArea.add(agent);
|
inArea.add(agent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -282,7 +400,12 @@ public class Simulator extends Thread {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void toggleClickAction() {
|
public void toggleClickAction() {
|
||||||
//TODO : complete method
|
if (clickActionSlot != 2) {
|
||||||
|
clickActionSlot ++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clickActionSlot = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -304,13 +427,45 @@ public class Simulator extends Thread {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> getAgentsSave() {
|
public ArrayList<String> getAgentsSave() {
|
||||||
//TODO : Same idea as the other save method, but for agents
|
ArrayList<String> agentsList = new ArrayList<String>();
|
||||||
return null;
|
String sheepLine = "1,";
|
||||||
|
String wolfLine = "2,";
|
||||||
|
for (Agent agent : agents) {
|
||||||
|
int x = agent.getX();
|
||||||
|
int y = agent.getY();
|
||||||
|
if (agent instanceof Sheep)
|
||||||
|
{
|
||||||
|
sheepLine = sheepLine + x + ";" + y + ",";
|
||||||
|
}
|
||||||
|
else if (agent instanceof Wolf)
|
||||||
|
{
|
||||||
|
wolfLine = wolfLine + x + ";" + y + ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
agentsList.add(sheepLine);
|
||||||
|
agentsList.add(wolfLine);
|
||||||
|
return agentsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadAgents(ArrayList<String> stringArray) {
|
public void loadAgents(ArrayList<String> stringArray) {
|
||||||
//TODO : Same idea as other load methods, but for agent list
|
for(int y =0; y<stringArray.size();y++) {
|
||||||
|
String line = stringArray.get(y);
|
||||||
|
String[] lineElements = line.split(",");
|
||||||
|
int agentType = Integer.parseInt(lineElements[0]);
|
||||||
|
for(int x=1; x<lineElements.length;x++) {
|
||||||
|
String[] coordinates = lineElements[x].split(";");
|
||||||
|
int i = Integer.parseInt(coordinates[0]);
|
||||||
|
int j = Integer.parseInt(coordinates[1]);
|
||||||
|
if (agentType == 1) {
|
||||||
|
Sheep newSheep = new Sheep(i, j);
|
||||||
|
agents.add(newSheep);
|
||||||
|
}
|
||||||
|
if (agentType == 2) {
|
||||||
|
Wolf newWolf = new Wolf(i, j);
|
||||||
|
agents.add(newWolf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -318,9 +473,7 @@ public class Simulator extends Thread {
|
||||||
* @return String representation of click action
|
* @return String representation of click action
|
||||||
*/
|
*/
|
||||||
public String clickActionName() {
|
public String clickActionName() {
|
||||||
// TODO : initially return "sheep" or "cell"
|
return clickNames.get(clickActionSlot);
|
||||||
// depending on clickActionFlag
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
package backend;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
public class Wolf extends Agent {
|
||||||
|
|
||||||
|
int hunger;
|
||||||
|
int maxHunger;
|
||||||
|
int sheepEatenWeight;
|
||||||
|
Sheep sheepEaten;
|
||||||
|
|
||||||
|
int maxFertility = 10;
|
||||||
|
|
||||||
|
Wolf(int x, int y){
|
||||||
|
super(x,y,Color.red, 10);
|
||||||
|
hunger = 0;
|
||||||
|
maxHunger = 20;
|
||||||
|
sheepEatenWeight = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sheep getSheepEaten() {
|
||||||
|
return sheepEaten;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxFertility() {
|
||||||
|
return maxFertility;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean liveTurn(ArrayList<Agent> neighbors, World world, boolean borderLoopFlag) {
|
||||||
|
sheepEaten = null;
|
||||||
|
for(Agent agent : neighbors) {
|
||||||
|
if (agent instanceof Sheep)
|
||||||
|
{
|
||||||
|
if (hunger > 0) {
|
||||||
|
this.eatSheep((Sheep) agent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (sheepEaten == null) {
|
||||||
|
hunger ++;
|
||||||
|
}
|
||||||
|
this.moveRandom(neighbors, world, borderLoopFlag);
|
||||||
|
|
||||||
|
return hunger<maxHunger;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void eatSheep(Sheep sheep) {
|
||||||
|
this.hunger = hunger - sheepEatenWeight;
|
||||||
|
sheepEaten = sheep;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -317,7 +317,7 @@ public class MyInterface extends JFrame {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clicLoadAgentsFileButton() {
|
public void clicLoadAgentsFileButton() {
|
||||||
String fileName=SelectFile("Agent");
|
String fileName=SelectFile("Agents");
|
||||||
ArrayList<String> stringArray = new ArrayList<String>();
|
ArrayList<String> stringArray = new ArrayList<String>();
|
||||||
if (fileName.length()>0) {
|
if (fileName.length()>0) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -331,6 +331,7 @@ public class MyInterface extends JFrame {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
mySimu.loadAgents(stringArray);
|
mySimu.loadAgents(stringArray);
|
||||||
this.repaint();
|
this.repaint();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue