Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 1x 1x 1x 1x 1x 481916x 481916x 481916x 1x 1x 152910x 152910x 1x 1x 133681x 133681x 1x 1x 6303x 6303x 1x 1x 6578x 6578x 1x 1x 5743x 5743x 1x 1x 5931x 5931x 1x 1x 1x 1x 1x 1x 1x 1x 213x 213x 213x 213x 1x 1x 7x 7x 7x 7x 1x | // first position is (1,1) export class Position { private readonly row: number; private readonly col: number; public constructor(row: number, col: number) { this.row = row; this.col = col; } public getCol(): number { return this.col; } public getRow(): number { return this.row; } public isAfter(p: Position): boolean { return this.row > p.row || (this.row === p.row && this.col >= p.col); } public equals(p: Position): boolean { return this.row === p.getRow() && this.col === p.getCol(); } public isBefore(p: Position): boolean { return this.row < p.row || (this.row === p.row && this.col < p.col); } public isBetween(p1: Position, p2: Position): boolean { return this.isAfter(p1) && this.isBefore(p2); } } /** used for macro calls */ export class VirtualPosition extends Position { public readonly vrow: number; public readonly vcol: number; public constructor(virtual: Position, row: number, col: number) { super(virtual.getRow(), virtual.getCol()); this.vrow = row; this.vcol = col; } public equals(p: Position): boolean { if (!(p instanceof VirtualPosition)) { return false; } const casted: VirtualPosition = p as VirtualPosition; return super.equals(this) && this.vrow === casted.vrow && this.vcol === casted.vcol; } } |