Files
puzzle-generator/src/main/java/precomp/Mask.java
2026-01-24 01:43:41 +01:00

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); }
}