Warning: session_start(): open(/var/lib/php/sessions/sess_sg0vhvv89kvhd36q0i2isu76kr, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass OnePath {
new ByteBuffer steps;
static final Pt[] directions = {
pt(0, 0),
pt(-1, -1),
pt(0, -1),
pt(1, -1),
pt(1, 0),
pt(1, 1),
pt(0, 1),
pt(-1, 1),
pt(-1, 0)
};
*() {}
*(S path) {
int n = l(path);
steps.allocate(n);
for i to n:
steps.add(parseDigit(path, i));
}
int size aka length() { ret steps.size(); }
toString {
ret singleDigitBytesToString(steps);
}
// includes first point, so returns length()+1 points in total
ItIt pointIterator(Pt startPt default origin()) {
ret new ItIt {
int i = 0, n = length();
Pt p = startPt;
public bool hasNext() { ret i <= n; }
public Pt next() {
var p = this.p;
if (i < n) this.p = translatePt(this.p, getStepAsPt(i));
++i;
ret p;
}
};
}
Pt getStepAsPt(int i) {
ret directions[steps.get(i)];
}
}