/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
char[] moves = {'v','>','v','>','^','<','^','<'};
int x=0;
int y=0;
List<Point> visitedHouses = new ArrayList<Point>();
visitedHouses.add(init);
for (int i=0; i<moves.length; i++) {
char c = moves[i];
switch(c) {
case '^': y--; break;
case 'v': y++; break;
case '>': x++; break;
case '<': x--; break;
default : break; // quit
}
boolean found = false;
for (Point p
: visitedHouses
) { if ((p.getX() == x) && (p.getY() == y)) {
found = true;
break;
}
}
if (!found) {
visitedHouses.
add(new Point(x,y
)); }
}
System.
out.
println("Number of houses visited at least once : " + visitedHouses.
size()); }
private static class Point { private final int x, y;
public Point(int x,
int y
) { this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public boolean equals
(Object other
) { if (this == other) return true;
if (!(other
instanceof Point)) return false;
return otherPoint.x == x && otherPoint.y == y;
}
@Override
public int hashCode() {
return 71 * this.x + 37 * this.y + 17;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJICBjaGFyW10gbW92ZXMgPSB7J3YnLCc+JywndicsJz4nLCdeJywnPCcsJ14nLCc8J307CgkJCgkgIGludCB4PTA7CiAgICAgIGludCB5PTA7CiAgICAgIFBvaW50IGluaXQgPSBuZXcgUG9pbnQoeCx5KTsKCiAgICAgIExpc3Q8UG9pbnQ+IHZpc2l0ZWRIb3VzZXMgPSBuZXcgQXJyYXlMaXN0PFBvaW50PigpOwogICAgICB2aXNpdGVkSG91c2VzLmFkZChpbml0KTsKICAgICAgCiAgICAgIGZvciAoaW50IGk9MDsgaTxtb3Zlcy5sZW5ndGg7IGkrKykgewogICAgICAJY2hhciBjID0gbW92ZXNbaV07CiAgICAgIAlzd2l0Y2goYykgewogICAgICAJICBjYXNlICdeJzogeS0tOyBicmVhazsKICAgICAgCSAgY2FzZSAndic6IHkrKzsgYnJlYWs7CiAgICAgIAkgIGNhc2UgJz4nOiB4Kys7IGJyZWFrOwogICAgICAJICBjYXNlICc8JzogeC0tOyBicmVhazsKICAgICAgCSAgZGVmYXVsdCA6IGJyZWFrOyAvLyBxdWl0CiAgICAgIAl9CiAgICAgIAkKICAgICAgCWJvb2xlYW4gZm91bmQgPSBmYWxzZTsKICAJCWZvciAoUG9pbnQgcCA6IHZpc2l0ZWRIb3VzZXMpIHsKICAJCSAgaWYgKChwLmdldFgoKSA9PSB4KSAmJiAocC5nZXRZKCkgPT0geSkpIHsKICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9ICAgICAKCiAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgdmlzaXRlZEhvdXNlcy5hZGQobmV3IFBvaW50KHgseSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk51bWJlciBvZiBob3VzZXMgdmlzaXRlZCBhdCBsZWFzdCBvbmNlIDogIiArIHZpc2l0ZWRIb3VzZXMuc2l6ZSgpKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUG9pbnQgewoJICBwcml2YXRlIGZpbmFsIGludCB4LCB5OwoKICAgICAgcHVibGljIFBvaW50KGludCB4LCBpbnQgeSkgewogICAgICAgIHRoaXMueCA9IHg7CiAgICAgICAgdGhpcy55ID0geTsKICAgICAgfQoKICAgICAgcHVibGljIGludCBnZXRYKCkgewogICAgICAgIHJldHVybiB4OwogICAgICB9CgogICAgICBwdWJsaWMgaW50IGdldFkoKSB7CiAgICAgICAgcmV0dXJuIHk7CiAgICAgIH0KCiAgICAgIEBPdmVycmlkZQogICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgaWYgKHRoaXMgPT0gb3RoZXIpIHJldHVybiB0cnVlOwoKICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFBvaW50KSkgcmV0dXJuIGZhbHNlOwoKICAgICAgICBQb2ludCBvdGhlclBvaW50ID0gKFBvaW50KSBvdGhlcjsKICAgICAgICByZXR1cm4gb3RoZXJQb2ludC54ID09IHggJiYgb3RoZXJQb2ludC55ID09IHk7CiAgICAgIH0KICAgICAgCiAgICAgIEBPdmVycmlkZQogICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAJcmV0dXJuIDcxICogdGhpcy54ICsgMzcgKiB0aGlzLnkgKyAxNzsKICAgICAgfQoJfQp9