28 lines
945 B
Java
28 lines
945 B
Java
package precomp;
|
|
|
|
import puzzle.Masker.Slot;
|
|
public sealed interface Mask
|
|
permits Const9x8.Cell, Const3x4.Cell, Mask.Masker {
|
|
|
|
record Masker(long lo, long hi, int index, int r, int c, int place, byte d)
|
|
implements precomp.Mask { }
|
|
default Mask or(Mask o) { return new Masker(o.lo() | lo(), o.hi() | hi(), 0, 0, 0, 0, (byte) 0); }
|
|
default Mask and(Mask o) { return new Masker(o.lo() & lo(), o.hi() & hi(), 0, 0, 0, 0, (byte) 0); }
|
|
|
|
long hi();
|
|
long lo();
|
|
int index();
|
|
int r();
|
|
int c();
|
|
int place();
|
|
byte d();
|
|
default byte letter() { return (byte) (d() | 64); }
|
|
default void letter(byte[] template, int minR, int minC, int height, int width) {
|
|
int rr = r() - minR;
|
|
int cc = c() - minC;
|
|
if (rr >= 0 && rr < height && cc >= 0 && cc < width) {
|
|
template[rr * (width + 1) + cc] = letter();
|
|
}
|
|
}
|
|
default byte clueChar() { return (byte) (d() | 48); }
|
|
} |