60 lines
1.3 KiB
Text
60 lines
1.3 KiB
Text
|
|
struct Dog {
|
||
|
|
string name;
|
||
|
|
int food
|
||
|
|
}
|
||
|
|
|
||
|
|
struct TrainableDog {
|
||
|
|
Dog dog;
|
||
|
|
int intelligence;
|
||
|
|
(TrainableDog, int) -> int train
|
||
|
|
}
|
||
|
|
|
||
|
|
struct Person {
|
||
|
|
string name;
|
||
|
|
bool[][] areaMap;
|
||
|
|
((Person, int, int) -> void) visit
|
||
|
|
}
|
||
|
|
|
||
|
|
struct DogOwner {
|
||
|
|
Person person;
|
||
|
|
int numDogs;
|
||
|
|
Dog[] dogs;
|
||
|
|
(DogOwner, int) -> void feedDogs
|
||
|
|
}
|
||
|
|
|
||
|
|
int train(TrainableDog tdog, int food) {
|
||
|
|
tdog.intelligence = tdog.intelligence + 1;
|
||
|
|
tdog.dog.food = tdog.dog.food + food;
|
||
|
|
return tdog.dog.food;
|
||
|
|
}
|
||
|
|
|
||
|
|
void visit(Person p, int x, int y) { p.areaMap[x][y] = true; return; }
|
||
|
|
|
||
|
|
void feedDogs(DogOwner do, int numDogs) {
|
||
|
|
for (var i = 0; i < numDogs; i = i + 1;) {
|
||
|
|
do.dogs[i].food = do.dogs[i].food + 1;
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
int program(int argc, string[] argv) {
|
||
|
|
var dog = new Dog { name = "Holmes"; food = 10 };
|
||
|
|
var tdog = new TrainableDog { dog = dog; intelligence = 0; train = train };
|
||
|
|
var areaMap = new bool[][] { new bool[] {false, false}, new bool[] {false, true} };
|
||
|
|
var p = new Person { name = "Guy"; areaMap = areaMap; visit = visit };
|
||
|
|
var do = new DogOwner { feedDogs = feedDogs; numDogs = 1; person = p; dogs = new Dog[] { dog } };
|
||
|
|
|
||
|
|
var newFood = tdog.train(tdog, 5);
|
||
|
|
p.visit(p, 0, 0);
|
||
|
|
do.feedDogs(do, 1);
|
||
|
|
|
||
|
|
var numVisited = 0;
|
||
|
|
for (var i = 0; i < 2; i = i + 1;) {
|
||
|
|
for (var j = 0; j < 2; j = j + 1;) {
|
||
|
|
if (p.areaMap[i][j]) {
|
||
|
|
numVisited = numVisited + 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return dog.food + numVisited;
|
||
|
|
}
|