introduce bitloops

This commit is contained in:
mike
2026-01-22 18:47:04 +01:00
parent a659bd5162
commit 2295a7d97c
71 changed files with 254 additions and 205151 deletions

View File

@@ -29,11 +29,13 @@
<groupId>org.postgresql</groupId> <groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>42.7.3</version> <version>42.7.3</version>
<scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.xerial</groupId> <groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId> <artifactId>sqlite-jdbc</artifactId>
<version>3.46.1.0</version> <version>3.46.1.0</version>
<scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>

View File

@@ -1,19 +0,0 @@
package puzzle.dict800;
public final class DictData {
private DictData() {}
public static final puzzle.SwedishGenerator.Dict DICT800 = build();
private static puzzle.SwedishGenerator.Dict build() {
puzzle.SwedishGenerator.DictEntry[] idx = new puzzle.SwedishGenerator.DictEntry[9];
idx[2] = DictDataL2.entry();
idx[3] = DictDataL3.entry();
idx[4] = DictDataL4.entry();
idx[5] = DictDataL5.entry();
idx[6] = DictDataL6.entry();
idx[7] = DictDataL7.entry();
idx[8] = DictDataL8.entry();
return new puzzle.SwedishGenerator.Dict(idx, 16445);
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict800;
public final class DictDataL2 {
private DictDataL2() {}
static final int LEN = 2;
static final int ROWS = 52;
static final int COLS = 2;
static final int WORDS_LEN = 72;
static final int POS_LEN = 104;
private static long[] words() {
return DictDataL2W0.get();
}
private static long[] posFlat() {
return DictDataL2P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

View File

@@ -1,113 +0,0 @@
package puzzle.dict800;
public final class DictDataL2P0 {
private DictDataL2P0() {}
public static long[] get() {
return new long[] {
0x2210a009040800L,
0x8L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2040000200000008L,
0x0L,
0x4084630080000003L,
0x0L,
0x0L,
0x0L,
0x100000000010000L,
0x0L,
0x8000000000004000L,
0x10L,
0x208000000081410L,
0x0L,
0x400100L,
0x0L,
0x400000000000000L,
0x20L,
0x800000402000000L,
0x1L,
0x804002000L,
0x42L,
0x800000008200L,
0x0L,
0x1000000060120080L,
0x0L,
0x10000000L,
0x80L,
0x0L,
0x0L,
0x44000000000L,
0x0L,
0x11080000000000L,
0x0L,
0x1000000004L,
0x0L,
0x100800000L,
0x0L,
0x0L,
0x4L,
0x20L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x200040L,
0x0L,
0x8401040016410200L,
0x4L,
0x4000000000000000L,
0x8L,
0x0L,
0x0L,
0x202200000000000L,
0x0L,
0x10008400008616cL,
0x0L,
0x140000L,
0x0L,
0x0L,
0x0L,
0x80000148000000L,
0x0L,
0x850000080000000L,
0x92L,
0x0L,
0x0L,
0x20000010L,
0x0L,
0x400000000800L,
0x0L,
0x24000000020000L,
0x0L,
0x2000000401L,
0x0L,
0x2000800000200000L,
0x61L,
0x80L,
0x0L,
0x0L,
0x0L,
0x8a00000002L,
0x0L,
0x1000010401001000L,
0x0L,
0x8120000000000L,
0x0L,
0x8000L,
0x0L,
0x1000000000L,
0x0L,
0x800000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L
};
}
}

View File

@@ -1,81 +0,0 @@
package puzzle.dict800;
public final class DictDataL2W0 {
private DictDataL2W0() {}
public static long[] get() {
return new long[] {
0x100000001c5L,
0x90000000245L,
0x1100000000b4L,
0x1900000000a4L,
0x210000000169L,
0x2900000000b7L,
0x3100000000baL,
0x39000000020fL,
0x4100000000aaL,
0x49000000002eL,
0x5100000001c9L,
0x590000000181L,
0x610000000269L,
0x6900000000adL,
0x7100000000a8L,
0x7900000002aeL,
0x810000000027L,
0x8900000001afL,
0x9100000000c1L,
0x9900000000a9L,
0xa100000000cfL,
0xa900000001faL,
0xb1000000002aL,
0xb900000002f5L,
0xc10000000261L,
0xc9000000002cL,
0xd1000000002dL,
0xd90000000101L,
0xe10000000030L,
0xe9000000016fL,
0xf1000000010fL,
0xf90000000125L,
0x1010000000115L,
0x1090000000244L,
0x111000000026cL,
0x119000000024dL,
0x12100000002d4L,
0x12900000001c1L,
0x13100000000b2L,
0x1390000000241L,
0x1410000000265L,
0x1490000000285L,
0x1510000000032L,
0x15900000000b3L,
0x1610000000281L,
0x1690000000085L,
0x1710000000185L,
0x17900000001eeL,
0x1810000000033L,
0x1890000000081L,
0x19100000001a5L,
0x1990000000289L,
0x1a10000000133L,
0x1a900000001a1L,
0x1b10000000124L,
0x1b90000000105L,
0x1c100000000a7L,
0x1c90000000089L,
0x1d1000000002bL,
0x1d9000000012cL,
0x1e1000000026fL,
0x1e900000001e4L,
0x1f10000000045L,
0x1f90000000028L,
0x20100000001ecL,
0x209000000012dL,
0x2110000000036L,
0x2190000000041L,
0x2210000000128L,
0x22900000001ebL,
0x23100000001edL,
0x2390000000130L
};
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict800;
public final class DictDataL3 {
private DictDataL3() {}
static final int LEN = 3;
static final int ROWS = 78;
static final int COLS = 8;
static final int WORDS_LEN = 490;
static final int POS_LEN = 624;
private static long[] words() {
return DictDataL3W0.get();
}
private static long[] posFlat() {
return DictDataL3P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

View File

@@ -1,633 +0,0 @@
package puzzle.dict800;
public final class DictDataL3P0 {
private DictDataL3P0() {}
public static long[] get() {
return new long[] {
0x2000000000001010L,
0x0L,
0x800300e020008000L,
0x2000000f800000L,
0x0L,
0x800000L,
0xeL,
0x0L,
0x2000002000L,
0x8003800018001000L,
0x2030001L,
0x40000000000000L,
0xe0000000c0000L,
0x3000000L,
0x180001e0000f0L,
0x4040080000L,
0x0L,
0x4000000000000L,
0x0L,
0x0L,
0x0L,
0xc000000L,
0x6000000000000L,
0x8002100000L,
0x20000020020182L,
0x80000e0002000L,
0x4010000000000L,
0x38000007000000fL,
0x10000000700000L,
0x10000000L,
0x8000000000000300L,
0x100L,
0x40400e0000000001L,
0x40L,
0x8060108000000L,
0x400000000000070L,
0x20000000800000L,
0x20000000L,
0x0L,
0x0L,
0x0L,
0x4000L,
0x0L,
0x80000000L,
0x40000000000000L,
0xc0000000L,
0x8000000000400L,
0x12400000001L,
0x0L,
0x100018000L,
0x40002L,
0x1800000000000080L,
0x80000001000000L,
0x300000000L,
0x70000060000000L,
0x4200002L,
0x80000841040004L,
0x10000600020000L,
0x10000000000400L,
0x6000000300000000L,
0xf00000000000000L,
0x1c00000000L,
0x80000380003800L,
0xe00L,
0x0L,
0x0L,
0x80200000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x4L,
0x11000000000L,
0x0L,
0x80800L,
0x0L,
0x1000000000000000L,
0x2000000000L,
0x100000400004000L,
0x10a8401000L,
0x1000080000200L,
0x800000180L,
0x100cL,
0x8000001c00000100L,
0xe000000002000000L,
0x1c000000000L,
0x38000L,
0x800000L,
0x300100000000000L,
0x70001c0000L,
0x60000000000010L,
0xe000000200L,
0x3c000003L,
0xfe0000000003L,
0x2000000000c0000L,
0x2000L,
0x8002000400004440L,
0x20008000200001L,
0x4000000L,
0x30000000400L,
0x4000000cL,
0x700000000003cL,
0x1800700000L,
0x800000018L,
0x4400000480028L,
0x0L,
0x180100400000000L,
0x40000001800L,
0x80000010L,
0x0L,
0x0L,
0x0L,
0x2008800L,
0xc0010000400202L,
0x200800000000L,
0x80000000000L,
0x0L,
0x40L,
0x0L,
0x4000L,
0x400000000000000L,
0x300020000800004L,
0x20L,
0x100000000000L,
0x1000000e0L,
0x38000000000f80L,
0xc00006000800000L,
0x1008000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100000000L,
0x8000000000000L,
0x408L,
0xe00400050100040L,
0x1e0000001e000L,
0x1e00000100L,
0x3c0000000003000L,
0x8000000000L,
0x0L,
0x800000000000000L,
0x0L,
0x1000000000000000L,
0x6000000060000L,
0xe000000200L,
0x40000000001c000L,
0x0L,
0x20L,
0x1010a00000100000L,
0x400000000000000L,
0x2000801080000000L,
0x8000000180000L,
0xf0000001c00L,
0xe0000L,
0x1000010001000000L,
0x10000040L,
0x800000L,
0x800000000000000L,
0x0L,
0x0L,
0x0L,
0x800000000100000L,
0x0L,
0x80L,
0x10000L,
0xc0000000810L,
0x4000000000000080L,
0x200000L,
0x300000006000L,
0x3000000000000000L,
0x2000020000000000L,
0x0L,
0x431c200000L,
0x1000000001000000L,
0x200000L,
0x10000000400000L,
0x1c00000018000L,
0xc000000000600000L,
0x40000c0000000000L,
0x10000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x300000000001L,
0x200020000L,
0x8000000000L,
0x6000700006000020L,
0x1c06300L,
0x0L,
0x20000L,
0x0L,
0x400000000000L,
0x40000L,
0x100840000c010692L,
0xa12186922081f080L,
0x2210024044c2120L,
0xe0c0316411822801L,
0x218651214c108d24L,
0x5001024c4c000085L,
0x402000802044810L,
0x2000601000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100000L,
0x0L,
0x0L,
0x8000L,
0x20000000000000L,
0x0L,
0x800000L,
0x0L,
0x4000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x8787bc015100606dL,
0x630011b060034L,
0x5c58291bd0004000L,
0x9104083a068d586L,
0x1200200001032041L,
0x18042081200008L,
0x140400000001L,
0x10020000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x400000000000000L,
0x0L,
0x0L,
0x0L,
0x800000L,
0x0L,
0x0L,
0x0L,
0x2000000L,
0x0L,
0x0L,
0x0L,
0x80L,
0x1ee00a20100L,
0x1000480044200800L,
0x2080824000100204L,
0x1200060800010218L,
0xcc50820232045080L,
0x8062198100165302L,
0x4008a22080801460L,
0x804002142L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000000000000L,
0x4L,
0x8000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000L,
0x40L,
0x8000000000L,
0x2000004000020L,
0x0L,
0x22000000L,
0x2L,
0x400000000L,
0x0L,
0x200L,
0x0L,
0x80000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40020000000800L,
0x0L,
0x4040000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x300010825c0000L,
0x464801248018050bL,
0x100500002a11c83L,
0x8801040140000L,
0x90c4c0028020aL,
0x208460101049a430L,
0xb9549112c39a380L,
0x1c0e0010209L,
0x0L,
0x400000L,
0x0L,
0x0L,
0x8000000000L,
0x0L,
0x20000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x6000000000000000L,
0x0L,
0x2000028000000L,
0x8000000L,
0x800000L,
0x800L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000L,
0x0L,
0x800000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000000L,
0x20000000L,
0x890004800000000L,
0x1020058L,
0x5000000000000L,
0x20001080400010L,
0x700800200000040L,
0xa04000c21142000cL,
0x130b0c8c30L,
0x0L,
0x0L,
0x8000000000000000L,
0x40L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000000000L,
0x400a00L,
0x4001000000000L,
0x2000002000048L,
0x8000000000L,
0x2000000L,
0x1000000000000000L,
0x100000000L,
0x40000000L,
0x0L,
0x2000000L,
0x0L,
0x0L,
0x80020000001000L,
0x40000000004L,
0x81800000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000000L,
0x0L,
0x80820208000000L,
0x400040100000002L,
0x2000L,
0x4000040010000000L,
0x200000L,
0x4000020L,
0x0L,
0x30120000248148L,
0x4000021L,
0xc010c080b8000800L,
0x24081080400000L,
0x1001000000080000L,
0x800000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000L,
0x0L,
0x800000L,
0x40040020000000L,
0x600010800040002L,
0x100000022aL,
0x4040000100400000L,
0x60001020040000L,
0x8000000404040L,
0x0L,
0x0L,
0x8080000022000L,
0x800000080100L,
0x80010L,
0x0L,
0x0L,
0x8000L,
0x800000L,
0x20000000000000L,
0x0L,
0x10000002000000L,
0x20004400L,
0x0L,
0x4402000000L,
0x40200000000000L,
0x2000000100000500L,
0x10000L,
0x0L,
0x10000000L,
0x0L,
0x1ec00000000L,
0x0L,
0x100000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x4002140L,
0x4000002000000L,
0x8102000140002040L,
0x2000L,
0x100040008004010L,
0x200020404000401L,
0x1102208410088006L,
0x9000121909000L,
0x1L,
0x210000000L,
0x5042090020400L,
0x801000000000190L,
0x80008020080000L,
0x81802840e1001000L,
0x4424000180100080L,
0x2044080008002040L,
0x40000L,
0x2000000081000000L,
0x8018000000000L,
0x10000L,
0x200000008800L,
0x2010000808100800L,
0x200010800010000L,
0x40200010L,
0x1080L,
0x483200000012691L,
0x4010400800004100L,
0x2020110840000000L,
0x1051120840340280L,
0x4880000046c088L,
0x2200400000L,
0x100200000004001L,
0x0L,
0x0L,
0x0L,
0x0L,
0x400000000000002L,
0x0L,
0x800L,
0x0L,
0x0L,
0x0L,
0x400000000000000L,
0x1024L,
0x400001001000L,
0x12200000100L,
0x11104000044009L,
0x4882023080000a00L,
0x202428800L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x840000000000L,
0x800000000001016L,
0x100004600000000L,
0x4008010600000001L,
0x400000000022L,
0x400L,
0x0L,
0x0L,
0x9100000024001800L,
0x180000a88000L,
0x2800220010a0009L,
0x8200802010020024L,
0x402001000000200L,
0xa000800004000110L,
0x20100000400000L,
0x8100004L,
0x208480008924026L,
0x3200200001110088L,
0x1002080000000200L,
0x800004004010000L,
0x804100102202054L,
0x1048800260L,
0x404600020480L,
0x0L,
0x1000080000L,
0x0L,
0xa00400L,
0x0L,
0x0L,
0x400001000000L,
0x10000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x8000008000000008L,
0x10000L,
0x0L,
0x0L,
0x4000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1e810000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x440200000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L
};
}
}

View File

@@ -1,499 +0,0 @@
package puzzle.dict800;
public final class DictDataL3W0 {
private DictDataL3W0() {}
public static long[] get() {
return new long[] {
0x200000038a5L,
0xa0000005024L,
0x1200000050a8L,
0x1a00000014aeL,
0x220000003821L,
0x2a00000050aeL,
0x3200000014adL,
0x3a0000003824L,
0x420000001524L,
0x4a000000382bL,
0x52000000382dL,
0x5a0000004dcfL,
0x620000004d81L,
0x6a00000038a2L,
0x7200000050adL,
0x7a000000156fL,
0x820000003836L,
0x8a0000005124L,
0x9200000015e8L,
0x9a00000055eeL,
0xa200000051f4L,
0xaa0000001537L,
0xb20000001deeL,
0xba0000005135L,
0xc200000034a8L,
0xca0000002defL,
0xd20000004c37L,
0xda0000005037L,
0xe200000030b7L,
0xea0000004ea4L,
0xf200000008a8L,
0xfa00000035ebL,
0x1020000001cb7L,
0x10a0000003137L,
0x112000000292dL,
0x11a0000002928L,
0x12200000055eaL,
0x12a0000002922L,
0x1320000002937L,
0x13a000000293aL,
0x142000000292aL,
0x14a00000015c5L,
0x15200000048a5L,
0x15a00000050a5L,
0x16200000014acL,
0x16a00000038b4L,
0x172000000502eL,
0x17a00000048b4L,
0x18200000038abL,
0x18a00000038adL,
0x1920000002caeL,
0x19a0000005032L,
0x1a200000015f4L,
0x1aa00000015e4L,
0x1b20000001dc5L,
0x1ba00000038a8L,
0x1c20000004cacL,
0x1ca00000050acL,
0x1d200000038b0L,
0x1da0000000693L,
0x1e20000004c34L,
0x1ea0000003641L,
0x1f20000001e45L,
0x1fa0000004cadL,
0x20200000015edL,
0x20a00000049efL,
0x21200000048b0L,
0x21a00000051f2L,
0x22200000048b6L,
0x22a00000014baL,
0x2320000002d85L,
0x23a000000502bL,
0x24200000039ebL,
0x24a00000005afL,
0x25200000031f2L,
0x25a0000000536L,
0x2620000004822L,
0x26a0000002c24L,
0x2720000003826L,
0x27a0000004c27L,
0x2820000005027L,
0x28a00000030a8L,
0x2920000001cacL,
0x29a0000004decL,
0x2a200000051ecL,
0x2aa0000004d2dL,
0x2b2000000060fL,
0x2ba0000004c30L,
0x2c200000050b7L,
0x2ca00000024baL,
0x2d2000000153aL,
0x2da00000010a2L,
0x2e200000030a2L,
0x2ea0000001c24L,
0x2f20000002d24L,
0x2fa00000031e4L,
0x3020000002ca7L,
0x30a0000001028L,
0x31200000025e8L,
0x31a0000003aabL,
0x3220000001c2cL,
0x32a00000031ecL,
0x33200000026acL,
0x33a000000342dL,
0x34200000035efL,
0x34a0000001030L,
0x3520000003036L,
0x35a0000004d36L,
0x3620000004cbaL,
0x36a00000050baL,
0x372000000393aL,
0x37a0000001022L,
0x3820000003022L,
0x38a0000002ca2L,
0x39200000030a3L,
0x39a00000035e4L,
0x3a20000003aa8L,
0x3aa0000001c2dL,
0x3b20000001defL,
0x3ba00000012afL,
0x3c20000002c30L,
0x3ca00000051f0L,
0x3d200000041f4L,
0x3da0000004ab5L,
0x3e20000005137L,
0x3ea000000503aL,
0x3f200000039faL,
0x3fa0000002c22L,
0x4020000004de2L,
0x40a00000011e7L,
0x412000000412bL,
0x41a0000004eabL,
0x42200000032acL,
0x42a0000004030L,
0x4320000001eb2L,
0x43a00000031f6L,
0x442000000303aL,
0x44a000000513aL,
0x45200000055e8L,
0x45a00000015eaL,
0x46200000041ebL,
0x46a0000002c3aL,
0x4720000001cbaL,
0x47a0000002061L,
0x48200000035e2L,
0x48a0000004ea2L,
0x4920000001827L,
0x49a0000004c2aL,
0x4a20000002932L,
0x4aa00000055f7L,
0x4b20000001c3aL,
0x4ba00000055faL,
0x4c20000004ebaL,
0x4ca00000009e2L,
0x4d2000000602dL,
0x4da0000001645L,
0x4e200000014b2L,
0x4ea0000001641L,
0x4f200000038b2L,
0x4fa00000014b4L,
0x50200000010a5L,
0x50a00000048a9L,
0x512000000482eL,
0x51a00000038afL,
0x52200000004b4L,
0x52a0000004c21L,
0x5320000004921L,
0x53a0000001581L,
0x54200000038a4L,
0x54a0000004d25L,
0x55200000011c5L,
0x55a00000050a9L,
0x56200000039eeL,
0x56a00000024afL,
0x57200000015f2L,
0x57a0000001534L,
0x5820000003021L,
0x58a0000005241L,
0x59200000005c4L,
0x59a0000001ca5L,
0x5a200000014a8L,
0x5aa000000382cL,
0x5b200000024acL,
0x5ba0000004d2eL,
0x5c200000049eeL,
0x5ca0000004c32L,
0x5d200000010b2L,
0x5da00000030b2L,
0x5e200000050b3L,
0x5ea0000003934L,
0x5f200000014b6L,
0x5fa00000016c1L,
0x6020000004824L,
0x60a0000003ca4L,
0x6120000004ca4L,
0x61a0000000524L,
0x6220000002d25L,
0x62a0000004d85L,
0x63200000006c5L,
0x63a00000038a7L,
0x64200000024abL,
0x64a000000392cL,
0x65200000024adL,
0x65a000000342eL,
0x66200000040aeL,
0x66a0000001032L,
0x6720000002cb2L,
0x67a00000034b2L,
0x6820000005132L,
0x68a0000004c33L,
0x69200000039f3L,
0x69a00000030b4L,
0x6a200000039f4L,
0x6aa00000038b6L,
0x6b200000014b7L,
0x6ba0000002021L,
0x6c20000004021L,
0x6ca0000000501L,
0x6d20000005181L,
0x6da0000002e41L,
0x6e20000004c24L,
0x6ea00000030a4L,
0x6f200000039e4L,
0x6fa00000014a6L,
0x70200000024a8L,
0x70a00000048a8L,
0x712000000482bL,
0x71a000000392bL,
0x72200000015ebL,
0x72a0000004c2cL,
0x732000000502cL,
0x73a00000030acL,
0x742000000482dL,
0x74a000000392dL,
0x7520000002d2eL,
0x75a00000015afL,
0x7620000003830L,
0x76a0000003432L,
0x77200000040b2L,
0x77a0000004df2L,
0x7820000003ab2L,
0x78a0000000593L,
0x79200000016b3L,
0x79a00000049f4L,
0x7a200000038b7L,
0x7aa0000001461L,
0x7b20000003822L,
0x7ba0000003024L,
0x7c20000002ca4L,
0x7ca0000004d24L,
0x7d20000003ce5L,
0x7da00000050a7L,
0x7e20000003927L,
0x7ea0000002428L,
0x7f20000004828L,
0x7fa0000004c2bL,
0x8020000002cacL,
0x80a00000049ecL,
0x812000000502dL,
0x81a00000039edL,
0x82200000052aeL,
0x82a0000004830L,
0x83200000050b0L,
0x83a0000003930L,
0x8420000004032L,
0x84a0000004df3L,
0x8520000002c34L,
0x85a0000003434L,
0x8620000003134L,
0x86a00000050b6L,
0x8720000003936L,
0x87a0000003837L,
0x88200000024b7L,
0x88a00000038baL,
0x8920000003922L,
0x89a00000015e2L,
0x8a20000003424L,
0x8aa00000051e4L,
0x8b20000003aa4L,
0x8ba0000001a45L,
0x8c200000030a7L,
0x8ca000000512bL,
0x8d20000002c2cL,
0x8da000000342cL,
0x8e2000000112cL,
0x8ea000000312cL,
0x8f2000000302dL,
0x8fa00000032aeL,
0x9020000005030L,
0x90a0000004132L,
0x9120000002df2L,
0x91a00000035f2L,
0x9220000004eb2L,
0x92a0000004033L,
0x93200000031f3L,
0x93a0000000613L,
0x9420000004034L,
0x94a0000002d34L,
0x95200000011f4L,
0x95a00000031f4L,
0x9620000005036L,
0x96a00000030b6L,
0x9720000004837L,
0x97a0000003937L,
0x98200000015f7L,
0x98a0000004c22L,
0x9920000005022L,
0x99a00000039e2L,
0x9a20000003524L,
0x9aa00000022a5L,
0x9b20000003926L,
0x9ba0000003027L,
0x9c20000003028L,
0x9ca0000002ca8L,
0x9d20000004d28L,
0x9da0000005128L,
0x9e200000014aaL,
0x9ea000000342bL,
0x9f2000000112bL,
0x9fa000000312bL,
0xa02000000402cL,
0xa0a0000002d2cL,
0xa120000002c2dL,
0xa1a00000040adL,
0xa220000004dedL,
0xa2a00000051edL,
0xa3200000052afL,
0xa3a0000003030L,
0xa420000004d30L,
0xa4a0000005130L,
0xa5200000049f0L,
0xa5a0000003e50L,
0xa620000000932L,
0xa6a0000001df2L,
0xa720000004133L,
0xa7a0000002df3L,
0xa8200000035f3L,
0xa8a0000001d34L,
0xa920000004134L,
0xa9a0000002df4L,
0xaa20000003135L,
0xaaa00000010b7L,
0xab200000039f7L,
0xaba0000005061L,
0xac200000054a2L,
0xaca0000000582L,
0xad20000004c23L,
0xada0000005023L,
0xae20000002de4L,
0xaea0000001985L,
0xaf20000005026L,
0xafa00000030a6L,
0xb020000003127L,
0xb0a0000003aa7L,
0xb120000002c28L,
0xb1a0000003428L,
0xb2200000051e8L,
0xb2a00000038aaL,
0xb32000000402bL,
0xb3a0000002d2bL,
0xb42000000352bL,
0xb4a000000082cL,
0xb5200000018acL,
0xb5a0000001d2cL,
0xb62000000412cL,
0xb6a0000002decL,
0xb7200000055ecL,
0xb7a0000004eacL,
0xb82000000402dL,
0xb8a0000002d2dL,
0xb9200000031edL,
0xb9a0000001cb0L,
0xba200000040b0L,
0xbaa0000003130L,
0xbb20000001932L,
0xbba00000009f2L,
0xbc20000002eb2L,
0xbca00000036b2L,
0xbd200000032b3L,
0xbda00000016f5L,
0xbe20000002c36L,
0xbea0000004df6L,
0xbf20000003037L,
0xbfa0000004d37L,
0xc0200000038b9L,
0xc0a0000001981L,
0xc120000000aa1L,
0xc1a0000005ea1L,
0xc220000003422L,
0xc2a0000001122L,
0xc320000003122L,
0xc3a00000051e2L,
0xc420000001de4L,
0xc4a00000041e4L,
0xc520000005126L,
0xc5a0000004028L,
0xc620000002d28L,
0xc6a00000031e8L,
0xc72000000382aL,
0xc7a0000002debL,
0xc8200000055ebL,
0xc8a00000052abL,
0xc92000000182cL,
0xc9a0000001decL,
0xca20000002dedL,
0xcaa00000035edL,
0xcb20000004eadL,
0xcba0000002d30L,
0xcc20000002eb4L,
0xcca0000002022L,
0xcd200000011e2L,
0xcda00000031e2L,
0xce200000026a2L,
0xcea0000002de7L,
0xcf20000003667L,
0xcfa0000004128L,
0xd020000002de8L,
0xd0a00000052a8L,
0xd1200000050aaL,
0xd1a000000182dL,
0xd2200000041edL,
0xd2a0000004130L,
0xd3200000052b0L,
0xd3a0000005eb2L,
0xd4200000019f4L,
0xd4a0000004136L,
0xd5200000008b7L,
0xd5a00000031f7L,
0xd620000004cb9L,
0xd6a0000003939L,
0xd7200000051faL,
0xd7a0000001d22L,
0xd820000002de2L,
0xd8a0000004023L,
0xd9200000031e3L,
0xd9a0000002d26L,
0xda200000021e7L,
0xdaa0000004e07L,
0xdb200000032a7L,
0xdba00000041e8L,
0xdc200000039eaL,
0xdca00000019ecL,
0xdd20000001830L,
0xdda00000041f0L,
0xde20000000554L,
0xdea00000032b6L,
0xdf20000004137L,
0xdfa0000005ea4L,
0xe020000002de6L,
0xe0a0000001927L,
0xe120000004d49L,
0xe1a00000019edL,
0xe220000001eadL,
0xe2a0000001ab3L,
0xe320000002934L,
0xe3a0000003515L,
0xe420000002924L,
0xe4a00000019e8L,
0xe5200000022a8L,
0xe5a00000042a8L,
0xe62000000342aL,
0xe6a000000292cL,
0xe72000000206fL,
0xe7a00000042b0L,
0xe820000005df7L,
0xe8a00000040b9L,
0xe9200000032baL,
0xe9a0000001ea2L,
0xea20000004c43L,
0xeaa0000006427L,
0xeb2000000402aL,
0xeba00000008ebL,
0xec20000000ab0L,
0xeca00000042a3L,
0xed20000002927L,
0xeda0000004eaaL,
0xee200000060b4L,
0xeea00000021eaL,
0xef200000065e2L,
0xefa00000009eaL,
0xf0200000006b1L,
0xf0a00000042b9L,
0xf120000006586L,
0xf1a000000612dL,
0xf220000001aaaL,
0xf2a0000006026L,
0xf3200000061e2L,
0xf3a00000061e3L,
0xf4200000061e6L,
0xf4a0000000e98L
};
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict800;
public final class DictDataL4 {
private DictDataL4() {}
static final int LEN = 4;
static final int ROWS = 104;
static final int COLS = 15;
static final int WORDS_LEN = 932;
static final int POS_LEN = 1560;
private static long[] words() {
return DictDataL4W0.get();
}
private static long[] posFlat() {
return DictDataL4P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,941 +0,0 @@
package puzzle.dict800;
public final class DictDataL4W0 {
private DictDataL4W0() {}
public static long[] get() {
return new long[] {
0x3000009042eL,
0xb00000a152eL,
0x1300000714a7L,
0x1b0000090424L,
0x2300000715e4L,
0x2b0000070427L,
0x33000009042dL,
0x3b0000090428L,
0x430000091528L,
0x4b00000916cfL,
0x530000090437L,
0x5b00000215e7L,
0x630000093df6L,
0x6b000007292dL,
0x73000007293aL,
0x7b00000914aeL,
0x83000009b8a5L,
0x8b0000071685L,
0x930000072645L,
0x9b00000a14b2L,
0xa300000694aeL,
0xab0000090432L,
0xb30000071534L,
0xbb00000716c5L,
0xc300000714a8L,
0xcb00000914abL,
0xd300000914adL,
0xdb000009a4b2L,
0xe300000715f4L,
0xeb00000614a4L,
0xf3000002a644L,
0xfb00000914a8L,
0x103000009d0a9L,
0x10b000007042dL,
0x113000006842eL,
0x11b000002b181L,
0x123000002ad85L,
0x12b00000a14a8L,
0x13300000a042cL,
0x13b00000684b4L,
0x14300000914b7L,
0x14b0000070422L,
0x15300000a15e4L,
0x15b00000614a8L,
0x163000002b0a8L,
0x16b00000a042dL,
0x173000007160fL,
0x17b0000090430L,
0x18300000296f4L,
0x18b00000614b6L,
0x1930000091536L,
0x19b00000a14b7L,
0x1a300000914baL,
0x1ab00000954a4L,
0x1b300000615e4L,
0x1bb0000083e45L,
0x1c300000a0427L,
0x1cb00000224adL,
0x1d300000a15edL,
0x1db000007153aL,
0x1e30000098422L,
0x1eb000002e8a4L,
0x1f30000093de4L,
0x1fb000005842dL,
0x203000000b42dL,
0x20b000002e9cfL,
0x21300000594b7L,
0x21b0000058436L,
0x22300000a153aL,
0x22b0000023de4L,
0x23300000314a7L,
0x23b0000093de8L,
0x2430000029489L,
0x24b000005d4acL,
0x253000003152cL,
0x25b000000c030L,
0x26300000595e2L,
0x26b000009042aL,
0x273000005843aL,
0x27b000005953aL,
0x2830000073dfaL,
0x28b000009a6a8L,
0x29300000a4cb2L,
0x29b00000615d3L,
0x2a30000091693L,
0x2ab000007d1e6L,
0x2b3000009b8adL,
0x2bb000005b8a4L,
0x2c3000009b82bL,
0x2cb00000a382bL,
0x2d3000002382cL,
0x2db00000239f2L,
0x2e300000a38b6L,
0x2eb00000956b6L,
0x2f300000a38a2L,
0x2fb000005b824L,
0x30300000a55e6L,
0x30b000009ad2eL,
0x31300000a25efL,
0x31b0000020693L,
0x323000007d2a1L,
0x32b0000023828L,
0x33300000a4828L,
0x33b000002392bL,
0x34300000a39ebL,
0x34b000003b82cL,
0x3530000070590L,
0x35b0000062693L,
0x36300000a3837L,
0x36b0000023822L,
0x373000003b924L,
0x37b0000024828L,
0x38300000239edL,
0x38b000004bdedL,
0x39300000a4eb2L,
0x39b0000061613L,
0x3a30000080693L,
0x3ab00000a4c36L,
0x3b30000023936L,
0x3bb00000248b7L,
0x3c3000005b822L,
0x3cb000003b827L,
0x3d300000230a7L,
0x3db00000239e8L,
0x3e300000a3aabL,
0x3eb000009b5f3L,
0x3f3000006be93L,
0x3fb000005c8b7L,
0x403000003b822L,
0x40b0000059590L,
0x41300000a4d37L,
0x41b000005d644L,
0x42300000a08a8L,
0x42b00000a35ebL,
0x433000005d693L,
0x43b000005b0b7L,
0x44300000a3137L,
0x44b00000a2065L,
0x45300000a1cbaL,
0x45b00000a2061L,
0x46300000bd5eaL,
0x46b000007292cL,
0x473000006b126L,
0x47b0000072930L,
0x483000005a932L,
0x48b0000022934L,
0x4930000040df4L,
0x49b00000330baL,
0x4a300000832a8L,
0x4ab000003b9eaL,
0x4b30000052656L,
0x4bb0000072937L,
0x4c30000072926L,
0x4cb000005a92bL,
0x4d30000052582L,
0x4db0000040d3aL,
0x4e30000058c2aL,
0x4eb00000c8822L,
0x4f30000032936L,
0x4fb00000714aeL,
0x5030000071645L,
0x50b000002b8b2L,
0x513000000ba45L,
0x51b00000295d3L,
0x52300000714b4L,
0x52b0000071485L,
0x53300000238a5L,
0x53b00000714acL,
0x543000009152eL,
0x54b000002c832L,
0x55300000724b2L,
0x55b00000914b4L,
0x56300000914acL,
0x56b00000714adL,
0x573000007164fL,
0x57b00000290b2L,
0x58300000214b2L,
0x58b00000724b3L,
0x5930000091481L,
0x59b00000715a1L,
0x5a30000071524L,
0x5ab0000023925L,
0x5b3000002b8a7L,
0x5bb000002b82bL,
0x5c3000007042cL,
0x5cb00000994acL,
0x5d3000002042eL,
0x5db00000a1532L,
0x5e300000915f2L,
0x5eb000000c833L,
0x5f3000002c933L,
0x5fb0000029593L,
0x6030000024821L,
0x60b0000071601L,
0x613000002b641L,
0x61b00000714a2L,
0x623000002d024L,
0x62b00000214a4L,
0x6330000091524L,
0x63b000002a5cbL,
0x643000002d02cL,
0x64b00000214acL,
0x65300000914b0L,
0x65b0000020432L,
0x66300000814b2L,
0x66b00000995f2L,
0x67300000a15f2L,
0x67b000002cdf2L,
0x683000002d133L,
0x68b00000a1534L,
0x69300000915f4L,
0x69b0000071655L,
0x6a300000914b6L,
0x6ab0000061481L,
0x6b3000002d161L,
0x6bb00000914a2L,
0x6c30000029642L,
0x6cb000002b024L,
0x6d3000000d024L,
0x6db00000604a4L,
0x6e3000003a5c5L,
0x6eb0000070428L,
0x6f3000002d0a8L,
0x6fb00000614abL,
0x703000002902cL,
0x70b00000594acL,
0x71300000a152cL,
0x71b00000915ecL,
0x723000002d02dL,
0x72b00000290adL,
0x73300000614adL,
0x73b000009152dL,
0x743000000b92dL,
0x74b00000314aeL,
0x753000009d4aeL,
0x75b00000695eeL,
0x763000002924fL,
0x76b0000058432L,
0x7730000068432L,
0x77b0000069532L,
0x78300000291f2L,
0x78b0000060434L,
0x7930000029514L,
0x79b0000069481L,
0x7a300000a14a2L,
0x7ab0000020424L,
0x7b3000002b424L,
0x7bb000006be45L,
0x7c30000090427L,
0x7cb000002d027L,
0x7d300000614a7L,
0x7db000002b0a7L,
0x7e3000009842bL,
0x7eb000002902bL,
0x7f300000594abL,
0x7fb000009952bL,
0x80300000394acL,
0x80b0000029cacL,
0x81300000224acL,
0x81b000002d8acL,
0x823000002152cL,
0x82b00000915edL,
0x83300000a3deeL,
0x83b00000714efL,
0x84300000716cfL,
0x84b0000091530L,
0x8530000029590L,
0x85b00000715f0L,
0x8630000080432L,
0x86b000009d4b2L,
0x8730000081532L,
0x87b00000695f2L,
0x883000002b5f2L,
0x88b0000058434L,
0x893000002c034L,
0x89b000002b534L,
0x8a30000073df4L,
0x8ab000002b0b6L,
0x8b30000070437L,
0x8bb000002c837L,
0x8c300000994b7L,
0x8cb0000068481L,
0x8d30000091522L,
0x8db00000291e4L,
0x8e3000002caa4L,
0x8eb0000030645L,
0x8f300000a24a7L,
0x8fb0000098428L,
0x90300000a0428L,
0x90b00000915e8L,
0x913000006042bL,
0x91b000004958bL,
0x9230000029c2cL,
0x92b0000073decL,
0x933000006042dL,
0x93b00000ab8adL,
0x94300000995edL,
0x94b000005d4aeL,
0x9530000028d2eL,
0x95b0000023deeL,
0x96300000a1530L,
0x96b0000028c32L,
0x97300000815f2L,
0x97b000009bdf2L,
0x98300000314b4L,
0x98b00000726b4L,
0x9930000098436L,
0x99b0000099536L,
0x9a300000915f6L,
0x9ab00000214b7L,
0x9b30000061441L,
0x9bb00000a0422L,
0x9c300000915e2L,
0x9cb0000038424L,
0x9d30000081524L,
0x9db00000595e4L,
0x9e30000061745L,
0x9eb000002cc26L,
0x9f30000091526L,
0x9fb000002b427L,
0xa0300000624a7L,
0xa0b0000060428L,
0xa1300000624a8L,
0xa1b000004b0a8L,
0xa23000005842bL,
0xa2b00000615ebL,
0xa33000003842cL,
0xa3b00000314acL,
0xa43000003952cL,
0xa4b000008152cL,
0xa53000002d92cL,
0xa5b000006242dL,
0xa6300000291edL,
0xa6b00000215edL,
0xa730000073dedL,
0xa7b000009144fL,
0xa8300000249efL,
0xa8b00000a4defL,
0xa930000060430L,
0xa9b0000073d30L,
0xaa300000995f0L,
0xaab0000023df2L,
0xab3000009a6b2L,
0xabb00000a26b2L,
0xac3000009d433L,
0xacb00000815f3L,
0xad3000007d1f4L,
0xadb000004d654L,
0xae30000061536L,
0xaeb00000a15f6L,
0xaf30000029037L,
0xafb00000a1537L,
0xb03000009153aL,
0xb0b00000715faL,
0xb13000002b9faL,
0xb1b0000021522L,
0xb23000009bde4L,
0xb2b00000616a4L,
0xb330000092426L,
0xb3b00000a24a6L,
0xb43000002d827L,
0xb4b00000954a7L,
0xb530000058428L,
0xb5b00000215e8L,
0xb63000009d4abL,
0xb6b00000595ebL,
0xb730000093debL,
0xb7b000009bdecL,
0xb83000002d9ecL,
0xb8b000003842dL,
0xb930000093dedL,
0xb9b0000059530L,
0xba3000005bdf2L,
0xbab000006bdf2L,
0xbb3000002e9f2L,
0xbbb00000626b2L,
0xbc3000007b1f3L,
0xbcb00000615f6L,
0xbd3000002ac37L,
0xbdb0000061537L,
0xbe300000615e2L,
0xbeb000002ac23L,
0xbf3000005d4a4L,
0xbfb0000031524L,
0xc03000002b126L,
0xc0b00000605e7L,
0xc130000093de7L,
0xc1b000009d4a8L,
0xc2300000595e8L,
0xc2b00000799c9L,
0xc33000007b12bL,
0xc3b000009bdebL,
0xc430000023decL,
0xc4b000009a6acL,
0xc530000029dedL,
0xc5b00000bd42eL,
0xc630000081530L,
0xc6b00000726b0L,
0xc7300000a38b2L,
0xc7b000005a6b2L,
0xc83000006a6b2L,
0xc8b0000038436L,
0xc930000058437L,
0xc9b0000073df7L,
0xca3000002043aL,
0xcab000006043aL,
0xcb300000814baL,
0xcbb0000029cbaL,
0xcc300000624baL,
0xccb000006153aL,
0xcd300000a15faL,
0xcdb00000695e2L,
0xce30000093de2L,
0xceb000002c023L,
0xcf300000291e3L,
0xcfb00000a3de7L,
0xd030000029de8L,
0xd0b000002c1e8L,
0xd130000063debL,
0xd1b000005bdecL,
0xd2300000226acL,
0xd2b000009a6adL,
0xd3300000248aeL,
0xd3b00000a4caeL,
0xd43000009d430L,
0xd4b00000815f0L,
0xd53000009bdf0L,
0xd5b00000a3df0L,
0xd6300000bd432L,
0xd6b000003a6b2L,
0xd730000048433L,
0xd7b0000048434L,
0xd8300000a38b4L,
0xd8b0000038437L,
0xd930000039537L,
0xd9b000005a4baL,
0xda300000395e2L,
0xdab000009bde2L,
0xdb300000a3de2L,
0xdbb000002ade3L,
0xdc3000000b1e3L,
0xdcb0000083de4L,
0xdd3000005a6a4L,
0xddb000006a6a4L,
0xde300000956a4L,
0xdeb0000030427L,
0xdf3000002902aL,
0xdfb00000748abL,
0xe03000009b8acL,
0xe0b000003bdecL,
0xe130000083decL,
0xe1b000005a6acL,
0xe23000002956fL,
0xe2b0000063df0L,
0xe330000023832L,
0xe3b0000033df2L,
0xe43000003a6b4L,
0xe4b000003843aL,
0xe5300000605faL,
0xe5b00000595faL,
0xe63000009d241L,
0xe6b0000023de2L,
0xe73000009a6a2L,
0xe7b00000a26a2L,
0xe830000029823L,
0xe8b000000b5e3L,
0xe93000009b824L,
0xe9b00000495e4L,
0xea3000007a065L,
0xeab00000315e8L,
0xeb3000007b5e8L,
0xebb00000a55e8L,
0xec300000226a8L,
0xecb00000626a8L,
0xed300000814aaL,
0xedb00000a38abL,
0xee30000083debL,
0xeeb00000255ebL,
0xef3000009b82cL,
0xefb00000956adL,
0xf03000002a58fL,
0xf0b00000a10b2L,
0xf1300000bd5f2L,
0xf1b0000093dd3L,
0xf230000090693L,
0xf2b0000023834L,
0xf3300000a4cb4L,
0xf3b00000626b6L,
0xf4300000315e2L,
0xf4b000006bde2L,
0xf53000002e9e2L,
0xf5b0000071642L,
0xf630000063de3L,
0xf6b0000033de4L,
0xf73000007caa5L,
0xf7b00000255e7L,
0xf830000048428L,
0xf8b000009b8a8L,
0xf93000003bde8L,
0xf9b0000083de8L,
0xfa300000255e8L,
0xfab00000956a8L,
0xfb300000615eaL,
0xfbb000009c8abL,
0xfc3000009d0acL,
0xfcb00000a392cL,
0xfd3000009b82dL,
0xfdb000000e42dL,
0xfe3000002eaadL,
0xfeb00000956b0L,
0xff3000003b832L,
0xffb000009d132L,
0x100300000a1593L,
0x100b0000061693L,
0x1013000005b834L,
0x101b00000a30b4L,
0x1023000006c8b4L,
0x102b00000bd5f4L,
0x10330000059654L,
0x103b0000048422L,
0x1043000003bde2L,
0x104b000005a6a2L,
0x105300000956a2L,
0x105b000009b827L,
0x106300000bd427L,
0x106b000009b828L,
0x107300000a48a8L,
0x107b00000a2dc9L,
0x1083000003842aL,
0x108b000004baaaL,
0x109300000605cbL,
0x109b00000a064bL,
0x10a300000a4c2cL,
0x10ab00000a39ecL,
0x10b3000002382dL,
0x10bb000009c82dL,
0x10c300000a4cadL,
0x10cb000009d0adL,
0x10d3000006c9eeL,
0x10db000009c8b0L,
0x10e300000a1650L,
0x10eb000003b932L,
0x10f3000009d1f2L,
0x10fb000009acb3L,
0x110300000a15b3L,
0x110b00000805d3L,
0x1113000005a5d3L,
0x111b0000070613L,
0x11230000060693L,
0x112b0000069693L,
0x1133000003b834L,
0x113b000009c8b6L,
0x1143000009b8b7L,
0x114b00000255f7L,
0x1153000006bdfaL,
0x115b00000a55faL,
0x116300000226baL,
0x116b00000a38a3L,
0x117300000bd4a5L,
0x117b0000098647L,
0x118300000a3928L,
0x118b00000a4c2bL,
0x1193000005c8abL,
0x119b000005b92cL,
0x11a300000a4d2cL,
0x11ab000005b82dL,
0x11b3000005c8adL,
0x11bb00000bd5edL,
0x11c300000c856fL,
0x11cb00000292afL,
0x11d30000023830L,
0x11db00000a4830L,
0x11e300000a4cb0L,
0x11eb0000072613L,
0x11f30000058693L,
0x11fb0000068693L,
0x12030000080654L,
0x120b00000a4cb6L,
0x121300000bd437L,
0x121b00000956baL,
0x122300000a4ca2L,
0x122b0000073e42L,
0x1233000009b826L,
0x123b00000a4c27L,
0x1243000005b828L,
0x124b0000023deaL,
0x125300000a4d2bL,
0x125b000009d12bL,
0x1263000009858bL,
0x126b00000805cbL,
0x1273000004bdebL,
0x127b00000a49ebL,
0x128300000a3e4bL,
0x128b00000a1cacL,
0x129300000249ecL,
0x129b00000a4decL,
0x12a3000005c82dL,
0x12ab00000230adL,
0x12b3000009cd2dL,
0x12bb00000a4d2dL,
0x12c3000009cc30L,
0x12cb00000a4c30L,
0x12d30000070473L,
0x12db0000058593L,
0x12e300000a3d93L,
0x12eb000003b9f3L,
0x12f3000003b9f4L,
0x12fb0000082654L,
0x1303000005be54L,
0x130b00000a5654L,
0x13130000023837L,
0x131b00000a4cb7L,
0x132300000a3937L,
0x132b0000009df9L,
0x133300000a30a2L,
0x133b0000023922L,
0x134300000a39e2L,
0x134b00000bd5e2L,
0x135300000a2642L,
0x135b0000070583L,
0x13630000098587L,
0x136b000004bde7L,
0x13730000068647L,
0x137b00000a3e47L,
0x1383000009b028L,
0x138b00000a3028L,
0x1393000003b828L,
0x139b000009aca8L,
0x13a300000230a8L,
0x13ab000004bde8L,
0x13b3000004b2aaL,
0x13bb000006958bL,
0x13c300000a4debL,
0x13cb000009d1ebL,
0x13d3000008064bL,
0x13db000003b9ecL,
0x13e3000009b42dL,
0x13eb000005b0adL,
0x13f300000a312dL,
0x13fb00000a3aadL,
0x1403000003b830L,
0x140b000005c830L,
0x1413000005b930L,
0x141b00000a4d30L,
0x14230000098590L,
0x142b00000a0590L,
0x143300000239f0L,
0x143b00000a49f0L,
0x14430000058650L,
0x144b0000083432L,
0x145300000a2513L,
0x145b0000038593L,
0x14630000080593L,
0x146b000006a593L,
0x14730000059613L,
0x147b00000a2613L,
0x1483000005be93L,
0x148b000004e034L,
0x1493000009b036L,
0x149b00000a3036L,
0x14a3000003b836L,
0x14ab00000230b6L,
0x14b300000239f6L,
0x14bb0000023937L,
0x14c3000002383aL,
0x14cb000003c8a2L,
0x14d3000005b922L,
0x14db00000239e2L,
0x14e30000058642L,
0x14eb0000062642L,
0x14f30000024823L,
0x14fb00000a4c23L,
0x150300000849e4L,
0x150b0000099586L,
0x1513000009a646L,
0x151b0000099127L,
0x1523000003b927L,
0x152b0000020587L,
0x15330000080647L,
0x153b000006b0a8L,
0x154300000234a8L,
0x154b000005b9e8L,
0x1553000006b02bL,
0x155b000008158bL,
0x1563000009bd8bL,
0x156b0000083dcbL,
0x157300000655cbL,
0x157b000006be4bL,
0x158300000a1d2cL,
0x158b00000a4eacL,
0x1593000002312dL,
0x159b000002deafL,
0x15a300000a2c30L,
0x15ab00000a4df0L,
0x15b3000005a650L,
0x15bb00000a3ab0L,
0x15c300000a3d13L,
0x15cb000005bd93L,
0x15d300000a3e13L,
0x15db0000030693L,
0x15e30000083e93L,
0x15eb000005b1f4L,
0x15f3000005cab4L,
0x15fb0000059596L,
0x1603000005b9f6L,
0x160b000009b037L,
0x161300000a3037L,
0x161b000003b837L,
0x1623000006c837L,
0x162b00000239f7L,
0x16330000058657L,
0x163b0000020582L,
0x164300000249e2L,
0x164b000005b1e4L,
0x165300000a0586L,
0x165b000004bde6L,
0x166300000a49e6L,
0x166b00000991e7L,
0x167300000830a8L,
0x167b000008058bL,
0x1683000005a58bL,
0x168b00000a4eabL,
0x1693000008342cL,
0x169b0000058590L,
0x16a300000a3d90L,
0x16ab000009b1f0L,
0x16b300000835f2L,
0x16bb00000348b6L,
0x16c30000058596L,
0x16cb0000068596L,
0x16d300000a3d96L,
0x16db000005c9f6L,
0x16e3000006c9f6L,
0x16eb00000249f7L,
0x16f3000004bdfaL,
0x16fb00000a1503L,
0x1703000003d644L,
0x170b0000030647L,
0x1713000008342bL,
0x171b000005bd8bL,
0x1723000009d58bL,
0x172b000005d64bL,
0x173300000a192cL,
0x173b00000a2eacL,
0x1743000002e2acL,
0x174b0000083e50L,
0x17530000033e93L,
0x175b0000038596L,
0x17630000023137L,
0x176b000006c9f7L,
0x1773000003b93aL,
0x177b000005a582L,
0x1783000003c9e2L,
0x178b0000044c23L,
0x179300000a31e3L,
0x179b000006be46L,
0x17a30000083d8bL,
0x17ab00000686ebL,
0x17b30000040deeL,
0x17bb000009d590L,
0x17c30000058df2L,
0x17cb0000065613L,
0x17d3000001d654L,
0x17db000005b1f6L,
0x17e300000849f7L,
0x17eb000005b839L,
0x17f3000006b03aL,
0x17fb000003b9faL,
0x1803000005bd82L,
0x180b00000a5582L,
0x181300000a32a2L,
0x181b0000034aa4L,
0x182300000a1927L,
0x182b0000033e47L,
0x18330000033028L,
0x183b0000040c2cL,
0x18430000033e50L,
0x184b0000022932L,
0x185300000bbd13L,
0x185b000003b1f6L,
0x1863000005b1f7L,
0x186b000003c9faL,
0x1873000003d642L,
0x187b00000c8647L,
0x18830000041d28L,
0x188b0000058d2bL,
0x189300000c902cL,
0x189b0000040cb0L,
0x18a300000835f0L,
0x18ab000002c334L,
0x18b300000a32baL,
0x18bb0000044ea2L,
0x18c30000083d86L,
0x18cb00000331e7L,
0x18d300000cb9f0L,
0x18db0000082932L,
0x18e3000003d596L,
0x18eb00000586faL,
0x18f30000031503L,
0x18fb0000082503L,
0x1903000009a928L,
0x190b000005baaaL,
0x1913000005a92cL,
0x191b000006292dL,
0x192300000331f7L,
0x192b000005b2baL,
0x193300000a2922L,
0x193b000005caaaL,
0x19430000062930L,
0x194b000009a937L,
0x19530000062922L,
0x195b00000cd123L,
0x19630000015583L,
0x196b0000022937L,
0x197300000a293aL,
0x197b000003292cL,
0x19830000082930L,
0x198b000005a937L,
0x19930000058ea6L,
0x199b00000ccaaaL,
0x19a300000d682aL,
0x19ab0000040deaL,
0x19b30000032937L,
0x19bb00000ce0b3L,
0x19c300000715c5L,
0x19cb000002b9c5L,
0x19d300000714b2L,
0x19db000002b9c9L,
0x19e3000002c82eL,
0x19eb00000a14aeL,
0x19f3000002d1c1L,
0x19fb0000071681L,
0x1a0300000714a4L,
0x1a0b00000a48a5L,
0x1a1300000291c5L,
0x1a1b0000091685L,
0x1a23000002b8acL,
0x1a2b0000073caeL,
0x1a3300000715eeL,
0x1a3b000002b9eeL,
0x1a4300000994b2L,
0x1a4b000002c8b4L,
0x1a530000029654L,
0x1a5b0000071581L,
0x1a630000099641L,
0x1a6b00000914a4L,
0x1a7300000a4ca5L,
0x1a7b0000070585L,
0x1a8300000714abL,
0x1a8b000002b4aeL,
0x1a93000007c8aeL,
0x1a9b000009952eL,
0x1aa3000000c832L,
0x1aab00000614b2L,
0x1ab3000000c8b3L,
0x1abb0000071533L,
0x1ac30000029693L,
0x1acb000000b834L,
0x1ad3000009c821L,
0x1adb0000071561L,
0x1ae3000004d1c1L,
0x1aeb0000073e41L,
0x1af3000002ce61L,
0x1afb00000a14a4L,
0x1b0300000a30a5L,
0x1b0b0000029dc5L,
0x1b13000009c8a9L,
0x1b1b00000291c9L,
0x1b2300000a14acL,
0x1b2b000002b92cL,
0x1b33000000902eL,
0x1b3b000002b42eL,
0x1b43000004cc2eL,
0x1b4b00000714b0L,
0x1b53000002b8b0L,
0x1b5b0000098432L,
0x1b6300000a0432L,
0x1b6b0000029032L,
0x1b7300000604b2L,
0x1b7b00000a24b2L,
0x1b83000002d132L,
0x1b8b0000090433L,
0x1b930000091533L,
0x1b9b000002b0b4L,
0x1ba3000002b9f4L,
0x1bab00000714b6L,
0x1bb300000a4c21L,
0x1bbb0000099581L,
0x1bc300000915a1L,
0x1bcb000002b8a2L,
0x1bd300000290a4L,
0x1bdb000002b0a4L,
0x1be3000000b924L,
0x1beb0000061485L,
0x1bf300000a4d25L,
0x1bfb0000029e45L,
0x1c03000009be45L,
0x1c0b00000916c5L,
0x1c1300000914a7L,
0x1c1b000002c8a8L,
0x1c2300000994abL,
0x1c2b00000a14abL,
0x1c33000007152bL,
0x1c3b000002b92bL,
0x1c43000009042cL,
0x1c4b00000290acL,
0x1c53000009152cL,
0x1c5b000002c92cL,
0x1c63000002b9ecL,
0x1c6b000000b82dL,
0x1c73000002c82dL,
0x1c7b00000994adL,
0x1c8300000a14adL,
0x1c8b000002d0adL,
0x1c93000007152dL,
0x1c9b000002b92dL,
0x1ca300000291eeL,
0x1cab00000615eeL,
0x1cb3000000d1eeL,
0x1cbb0000029650L,
0x1cc3000002ac32L,
0x1ccb0000029132L,
0x1cd3000002bab2L,
0x1cdb000004c833L,
0x1ce300000604b3L,
0x1ceb000000b0b3L,
0x1cf3000002b034L,
0x1cfb00000594b4L,
0x1d0300000694b4L,
0x1d0b000002ba55L,
0x1d130000029656L,
0x1d1b00000714b7L
};
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict800;
public final class DictDataL5 {
private DictDataL5() {}
static final int LEN = 5;
static final int ROWS = 130;
static final int COLS = 38;
static final int WORDS_LEN = 2399;
static final int POS_LEN = 4940;
private static long[] words() {
return DictDataL5W0.get();
}
private static long[] posFlat() {
return DictDataL5P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,41 +0,0 @@
package puzzle.dict800;
public final class DictDataL6 {
private DictDataL6() {}
static final int LEN = 6;
static final int ROWS = 156;
static final int COLS = 38;
static final int WORDS_LEN = 2382;
static final int POS_LEN = 5928;
private static long[] words() {
return DictDataL6W0.get();
}
private static long[] posFlat() {
return DictDataL6P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +0,0 @@
package puzzle.dict800;
public final class DictDataL7 {
private DictDataL7() {}
static final int LEN = 7;
static final int ROWS = 182;
static final int COLS = 99;
static final int WORDS_LEN = 6281;
static final int POS_LEN = 18018;
private static long[] words() {
return DictDataL7W0.get();
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL7P0.get());
k = copy(out, k, DictDataL7P1.get());
k = copy(out, k, DictDataL7P2.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,45 +0,0 @@
package puzzle.dict800;
public final class DictDataL8 {
private DictDataL8() {}
static final int LEN = 8;
static final int ROWS = 208;
static final int COLS = 61;
static final int WORDS_LEN = 3889;
static final int POS_LEN = 12688;
private static long[] words() {
return DictDataL8W0.get();
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL8P0.get());
k = copy(out, k, DictDataL8P1.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
package puzzle.dict900;
public final class DictData {
private DictData() {}
public static final puzzle.SwedishGenerator.Dict DICT900 = build();
private static puzzle.SwedishGenerator.Dict build() {
puzzle.SwedishGenerator.DictEntry[] idx = new puzzle.SwedishGenerator.DictEntry[9];
idx[2] = DictDataL2.entry();
idx[3] = DictDataL3.entry();
idx[4] = DictDataL4.entry();
idx[5] = DictDataL5.entry();
idx[6] = DictDataL6.entry();
idx[7] = DictDataL7.entry();
idx[8] = DictDataL8.entry();
return new puzzle.SwedishGenerator.Dict(idx, 38691);
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict900;
public final class DictDataL2 {
private DictDataL2() {}
static final int LEN = 2;
static final int ROWS = 52;
static final int COLS = 2;
static final int WORDS_LEN = 120;
static final int POS_LEN = 104;
private static long[] words() {
return DictDataL2W0.get();
}
private static long[] posFlat() {
return DictDataL2P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

View File

@@ -1,113 +0,0 @@
package puzzle.dict900;
public final class DictDataL2P0 {
private DictDataL2P0() {}
public static long[] get() {
return new long[] {
0x2210a009040800L,
0x8000004108008L,
0x0L,
0x108000010100L,
0x0L,
0x55000200200L,
0x2040000200000008L,
0x400L,
0x4084630080000003L,
0xe00080000000L,
0x0L,
0x20800L,
0x100000000010000L,
0x1000L,
0x8000000000004000L,
0x2000002010L,
0x208000000081410L,
0x40000002000000L,
0x400100L,
0x20008000000L,
0x400000000000000L,
0x10000000000020L,
0x800000402000000L,
0x1L,
0x804002000L,
0x810000042L,
0x800000008200L,
0x0L,
0x1000000060120080L,
0x21000000400000L,
0x10000000L,
0x2000100004080L,
0x0L,
0x0L,
0x44000000000L,
0x0L,
0x11080000000000L,
0x220000000L,
0x1000000004L,
0x0L,
0x100800000L,
0x80000040840000L,
0x0L,
0x4000401000004L,
0x20L,
0x80000080000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x200040L,
0x0L,
0x8401040016410200L,
0x8a04L,
0x4000000000000000L,
0x8L,
0x0L,
0x80000000000L,
0x202200000000000L,
0x20004000000000L,
0x10008400008616cL,
0x6000000400000L,
0x140000L,
0x0L,
0x0L,
0x400000000000L,
0x80000148000000L,
0x8000000000L,
0x850000080000000L,
0x10000040120192L,
0x0L,
0x2000000L,
0x20000010L,
0x200000000000L,
0x400000000800L,
0x0L,
0x24000000020000L,
0x12a00040000L,
0x2000000401L,
0x10000000L,
0x2000800000200000L,
0x8297061L,
0x80L,
0x40800000800000L,
0x0L,
0x0L,
0x8a00000002L,
0x20100000000L,
0x1000010401001000L,
0x400000000L,
0x8120000000000L,
0x81001020000000L,
0x8000L,
0x5000400L,
0x1000000000L,
0x8040000000000L,
0x800000L,
0x0L,
0x0L,
0x80000000L,
0x0L,
0x100000000000L,
0x0L,
0x0L
};
}
}

View File

@@ -1,129 +0,0 @@
package puzzle.dict900;
public final class DictDataL2W0 {
private DictDataL2W0() {}
public static long[] get() {
return new long[] {
0x100000001c5L,
0x90000000245L,
0x1100000000b4L,
0x1900000000a4L,
0x210000000169L,
0x2900000000b7L,
0x3100000000baL,
0x39000000020fL,
0x4100000000aaL,
0x49000000002eL,
0x5100000001c9L,
0x590000000181L,
0x610000000269L,
0x6900000000adL,
0x7100000000a8L,
0x7900000002aeL,
0x810000000027L,
0x8900000001afL,
0x9100000000c1L,
0x9900000000a9L,
0xa100000000cfL,
0xa900000001faL,
0xb1000000002aL,
0xb900000002f5L,
0xc10000000261L,
0xc9000000002cL,
0xd1000000002dL,
0xd90000000101L,
0xe10000000030L,
0xe9000000016fL,
0xf1000000010fL,
0xf90000000125L,
0x1010000000115L,
0x1090000000244L,
0x111000000026cL,
0x119000000024dL,
0x12100000002d4L,
0x12900000001c1L,
0x13100000000b2L,
0x1390000000241L,
0x1410000000265L,
0x1490000000285L,
0x1510000000032L,
0x15900000000b3L,
0x1610000000281L,
0x1690000000085L,
0x1710000000185L,
0x17900000001eeL,
0x1810000000033L,
0x1890000000081L,
0x19100000001a5L,
0x1990000000289L,
0x1a10000000133L,
0x1a900000001a1L,
0x1b10000000124L,
0x1b90000000105L,
0x1c100000000a7L,
0x1c90000000089L,
0x1d1000000002bL,
0x1d9000000012cL,
0x1e1000000026fL,
0x1e900000001e4L,
0x1f10000000045L,
0x1f90000000028L,
0x20100000001ecL,
0x209000000012dL,
0x2110000000036L,
0x2190000000041L,
0x2210000000128L,
0x22900000001ebL,
0x23100000001edL,
0x2390000000130L,
0x2410000000122L,
0x2490000000023L,
0x25100000002a4L,
0x2590000000026L,
0x26100000001e7L,
0x26900000001e8L,
0x27100000001f0L,
0x2790000000021L,
0x28100000001e2L,
0x2890000000126L,
0x29100000001b5L,
0x29900000001f7L,
0x2a10000000121L,
0x2a900000001e3L,
0x2b100000000afL,
0x2b90000000215L,
0x2c100000002b6L,
0x2c90000000149L,
0x2d100000002a1L,
0x2d900000001eaL,
0x2e100000001cdL,
0x2e90000000293L,
0x2f10000000135L,
0x2f90000000305L,
0x3010000000250L,
0x30900000001b3L,
0x3110000000276L,
0x31900000001adL,
0x3210000000283L,
0x32900000001a8L,
0x3310000000083L,
0x3390000000102L,
0x34100000001a3L,
0x349000000024aL,
0x35100000002c3L,
0x3590000000077L,
0x3610000000322L,
0x3690000000165L,
0x37100000000e5L,
0x3790000000205L,
0x381000000028fL,
0x38900000000b0L,
0x39100000000b6L,
0x39900000002c1L,
0x3a1000000012bL,
0x3a9000000008fL,
0x3b10000000209L,
0x3b90000000295L
};
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict900;
public final class DictDataL3 {
private DictDataL3() {}
static final int LEN = 3;
static final int ROWS = 78;
static final int COLS = 15;
static final int WORDS_LEN = 903;
static final int POS_LEN = 1170;
private static long[] words() {
return DictDataL3W0.get();
}
private static long[] posFlat() {
return DictDataL3P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,912 +0,0 @@
package puzzle.dict900;
public final class DictDataL3W0 {
private DictDataL3W0() {}
public static long[] get() {
return new long[] {
0x200000038a5L,
0xa0000005024L,
0x1200000050a8L,
0x1a00000014aeL,
0x220000003821L,
0x2a00000050aeL,
0x3200000014adL,
0x3a0000003824L,
0x420000001524L,
0x4a000000382bL,
0x52000000382dL,
0x5a0000004dcfL,
0x620000004d81L,
0x6a00000038a2L,
0x7200000050adL,
0x7a000000156fL,
0x820000003836L,
0x8a0000005124L,
0x9200000015e8L,
0x9a00000055eeL,
0xa200000051f4L,
0xaa0000001537L,
0xb20000001deeL,
0xba0000005135L,
0xc200000034a8L,
0xca0000002defL,
0xd20000004c37L,
0xda0000005037L,
0xe200000030b7L,
0xea0000004ea4L,
0xf200000008a8L,
0xfa00000035ebL,
0x1020000001cb7L,
0x10a0000003137L,
0x112000000292dL,
0x11a0000002928L,
0x12200000055eaL,
0x12a0000002922L,
0x1320000002937L,
0x13a000000293aL,
0x142000000292aL,
0x14a00000015c5L,
0x15200000048a5L,
0x15a00000050a5L,
0x16200000014acL,
0x16a00000038b4L,
0x172000000502eL,
0x17a00000048b4L,
0x18200000038abL,
0x18a00000038adL,
0x1920000002caeL,
0x19a0000005032L,
0x1a200000015f4L,
0x1aa00000015e4L,
0x1b20000001dc5L,
0x1ba00000038a8L,
0x1c20000004cacL,
0x1ca00000050acL,
0x1d200000038b0L,
0x1da0000000693L,
0x1e20000004c34L,
0x1ea0000003641L,
0x1f20000001e45L,
0x1fa0000004cadL,
0x20200000015edL,
0x20a00000049efL,
0x21200000048b0L,
0x21a00000051f2L,
0x22200000048b6L,
0x22a00000014baL,
0x2320000002d85L,
0x23a000000502bL,
0x24200000039ebL,
0x24a00000005afL,
0x25200000031f2L,
0x25a0000000536L,
0x2620000004822L,
0x26a0000002c24L,
0x2720000003826L,
0x27a0000004c27L,
0x2820000005027L,
0x28a00000030a8L,
0x2920000001cacL,
0x29a0000004decL,
0x2a200000051ecL,
0x2aa0000004d2dL,
0x2b2000000060fL,
0x2ba0000004c30L,
0x2c200000050b7L,
0x2ca00000024baL,
0x2d2000000153aL,
0x2da00000010a2L,
0x2e200000030a2L,
0x2ea0000001c24L,
0x2f20000002d24L,
0x2fa00000031e4L,
0x3020000002ca7L,
0x30a0000001028L,
0x31200000025e8L,
0x31a0000003aabL,
0x3220000001c2cL,
0x32a00000031ecL,
0x33200000026acL,
0x33a000000342dL,
0x34200000035efL,
0x34a0000001030L,
0x3520000003036L,
0x35a0000004d36L,
0x3620000004cbaL,
0x36a00000050baL,
0x372000000393aL,
0x37a0000001022L,
0x3820000003022L,
0x38a0000002ca2L,
0x39200000030a3L,
0x39a00000035e4L,
0x3a20000003aa8L,
0x3aa0000001c2dL,
0x3b20000001defL,
0x3ba00000012afL,
0x3c20000002c30L,
0x3ca00000051f0L,
0x3d200000041f4L,
0x3da0000004ab5L,
0x3e20000005137L,
0x3ea000000503aL,
0x3f200000039faL,
0x3fa0000002c22L,
0x4020000004de2L,
0x40a00000011e7L,
0x412000000412bL,
0x41a0000004eabL,
0x42200000032acL,
0x42a0000004030L,
0x4320000001eb2L,
0x43a00000031f6L,
0x442000000303aL,
0x44a000000513aL,
0x45200000055e8L,
0x45a00000015eaL,
0x46200000041ebL,
0x46a0000002c3aL,
0x4720000001cbaL,
0x47a0000002061L,
0x48200000035e2L,
0x48a0000004ea2L,
0x4920000001827L,
0x49a0000004c2aL,
0x4a20000002932L,
0x4aa00000055f7L,
0x4b20000001c3aL,
0x4ba00000055faL,
0x4c20000004ebaL,
0x4ca00000009e2L,
0x4d2000000602dL,
0x4da0000001645L,
0x4e200000014b2L,
0x4ea0000001641L,
0x4f200000038b2L,
0x4fa00000014b4L,
0x50200000010a5L,
0x50a00000048a9L,
0x512000000482eL,
0x51a00000038afL,
0x52200000004b4L,
0x52a0000004c21L,
0x5320000004921L,
0x53a0000001581L,
0x54200000038a4L,
0x54a0000004d25L,
0x55200000011c5L,
0x55a00000050a9L,
0x56200000039eeL,
0x56a00000024afL,
0x57200000015f2L,
0x57a0000001534L,
0x5820000003021L,
0x58a0000005241L,
0x59200000005c4L,
0x59a0000001ca5L,
0x5a200000014a8L,
0x5aa000000382cL,
0x5b200000024acL,
0x5ba0000004d2eL,
0x5c200000049eeL,
0x5ca0000004c32L,
0x5d200000010b2L,
0x5da00000030b2L,
0x5e200000050b3L,
0x5ea0000003934L,
0x5f200000014b6L,
0x5fa00000016c1L,
0x6020000004824L,
0x60a0000003ca4L,
0x6120000004ca4L,
0x61a0000000524L,
0x6220000002d25L,
0x62a0000004d85L,
0x63200000006c5L,
0x63a00000038a7L,
0x64200000024abL,
0x64a000000392cL,
0x65200000024adL,
0x65a000000342eL,
0x66200000040aeL,
0x66a0000001032L,
0x6720000002cb2L,
0x67a00000034b2L,
0x6820000005132L,
0x68a0000004c33L,
0x69200000039f3L,
0x69a00000030b4L,
0x6a200000039f4L,
0x6aa00000038b6L,
0x6b200000014b7L,
0x6ba0000002021L,
0x6c20000004021L,
0x6ca0000000501L,
0x6d20000005181L,
0x6da0000002e41L,
0x6e20000004c24L,
0x6ea00000030a4L,
0x6f200000039e4L,
0x6fa00000014a6L,
0x70200000024a8L,
0x70a00000048a8L,
0x712000000482bL,
0x71a000000392bL,
0x72200000015ebL,
0x72a0000004c2cL,
0x732000000502cL,
0x73a00000030acL,
0x742000000482dL,
0x74a000000392dL,
0x7520000002d2eL,
0x75a00000015afL,
0x7620000003830L,
0x76a0000003432L,
0x77200000040b2L,
0x77a0000004df2L,
0x7820000003ab2L,
0x78a0000000593L,
0x79200000016b3L,
0x79a00000049f4L,
0x7a200000038b7L,
0x7aa0000001461L,
0x7b20000003822L,
0x7ba0000003024L,
0x7c20000002ca4L,
0x7ca0000004d24L,
0x7d20000003ce5L,
0x7da00000050a7L,
0x7e20000003927L,
0x7ea0000002428L,
0x7f20000004828L,
0x7fa0000004c2bL,
0x8020000002cacL,
0x80a00000049ecL,
0x812000000502dL,
0x81a00000039edL,
0x82200000052aeL,
0x82a0000004830L,
0x83200000050b0L,
0x83a0000003930L,
0x8420000004032L,
0x84a0000004df3L,
0x8520000002c34L,
0x85a0000003434L,
0x8620000003134L,
0x86a00000050b6L,
0x8720000003936L,
0x87a0000003837L,
0x88200000024b7L,
0x88a00000038baL,
0x8920000003922L,
0x89a00000015e2L,
0x8a20000003424L,
0x8aa00000051e4L,
0x8b20000003aa4L,
0x8ba0000001a45L,
0x8c200000030a7L,
0x8ca000000512bL,
0x8d20000002c2cL,
0x8da000000342cL,
0x8e2000000112cL,
0x8ea000000312cL,
0x8f2000000302dL,
0x8fa00000032aeL,
0x9020000005030L,
0x90a0000004132L,
0x9120000002df2L,
0x91a00000035f2L,
0x9220000004eb2L,
0x92a0000004033L,
0x93200000031f3L,
0x93a0000000613L,
0x9420000004034L,
0x94a0000002d34L,
0x95200000011f4L,
0x95a00000031f4L,
0x9620000005036L,
0x96a00000030b6L,
0x9720000004837L,
0x97a0000003937L,
0x98200000015f7L,
0x98a0000004c22L,
0x9920000005022L,
0x99a00000039e2L,
0x9a20000003524L,
0x9aa00000022a5L,
0x9b20000003926L,
0x9ba0000003027L,
0x9c20000003028L,
0x9ca0000002ca8L,
0x9d20000004d28L,
0x9da0000005128L,
0x9e200000014aaL,
0x9ea000000342bL,
0x9f2000000112bL,
0x9fa000000312bL,
0xa02000000402cL,
0xa0a0000002d2cL,
0xa120000002c2dL,
0xa1a00000040adL,
0xa220000004dedL,
0xa2a00000051edL,
0xa3200000052afL,
0xa3a0000003030L,
0xa420000004d30L,
0xa4a0000005130L,
0xa5200000049f0L,
0xa5a0000003e50L,
0xa620000000932L,
0xa6a0000001df2L,
0xa720000004133L,
0xa7a0000002df3L,
0xa8200000035f3L,
0xa8a0000001d34L,
0xa920000004134L,
0xa9a0000002df4L,
0xaa20000003135L,
0xaaa00000010b7L,
0xab200000039f7L,
0xaba0000005061L,
0xac200000054a2L,
0xaca0000000582L,
0xad20000004c23L,
0xada0000005023L,
0xae20000002de4L,
0xaea0000001985L,
0xaf20000005026L,
0xafa00000030a6L,
0xb020000003127L,
0xb0a0000003aa7L,
0xb120000002c28L,
0xb1a0000003428L,
0xb2200000051e8L,
0xb2a00000038aaL,
0xb32000000402bL,
0xb3a0000002d2bL,
0xb42000000352bL,
0xb4a000000082cL,
0xb5200000018acL,
0xb5a0000001d2cL,
0xb62000000412cL,
0xb6a0000002decL,
0xb7200000055ecL,
0xb7a0000004eacL,
0xb82000000402dL,
0xb8a0000002d2dL,
0xb9200000031edL,
0xb9a0000001cb0L,
0xba200000040b0L,
0xbaa0000003130L,
0xbb20000001932L,
0xbba00000009f2L,
0xbc20000002eb2L,
0xbca00000036b2L,
0xbd200000032b3L,
0xbda00000016f5L,
0xbe20000002c36L,
0xbea0000004df6L,
0xbf20000003037L,
0xbfa0000004d37L,
0xc0200000038b9L,
0xc0a0000001981L,
0xc120000000aa1L,
0xc1a0000005ea1L,
0xc220000003422L,
0xc2a0000001122L,
0xc320000003122L,
0xc3a00000051e2L,
0xc420000001de4L,
0xc4a00000041e4L,
0xc520000005126L,
0xc5a0000004028L,
0xc620000002d28L,
0xc6a00000031e8L,
0xc72000000382aL,
0xc7a0000002debL,
0xc8200000055ebL,
0xc8a00000052abL,
0xc92000000182cL,
0xc9a0000001decL,
0xca20000002dedL,
0xcaa00000035edL,
0xcb20000004eadL,
0xcba0000002d30L,
0xcc20000002eb4L,
0xcca0000002022L,
0xcd200000011e2L,
0xcda00000031e2L,
0xce200000026a2L,
0xcea0000002de7L,
0xcf20000003667L,
0xcfa0000004128L,
0xd020000002de8L,
0xd0a00000052a8L,
0xd1200000050aaL,
0xd1a000000182dL,
0xd2200000041edL,
0xd2a0000004130L,
0xd3200000052b0L,
0xd3a0000005eb2L,
0xd4200000019f4L,
0xd4a0000004136L,
0xd5200000008b7L,
0xd5a00000031f7L,
0xd620000004cb9L,
0xd6a0000003939L,
0xd7200000051faL,
0xd7a0000001d22L,
0xd820000002de2L,
0xd8a0000004023L,
0xd9200000031e3L,
0xd9a0000002d26L,
0xda200000021e7L,
0xdaa0000004e07L,
0xdb200000032a7L,
0xdba00000041e8L,
0xdc200000039eaL,
0xdca00000019ecL,
0xdd20000001830L,
0xdda00000041f0L,
0xde20000000554L,
0xdea00000032b6L,
0xdf20000004137L,
0xdfa0000005ea4L,
0xe020000002de6L,
0xe0a0000001927L,
0xe120000004d49L,
0xe1a00000019edL,
0xe220000001eadL,
0xe2a0000001ab3L,
0xe320000002934L,
0xe3a0000003515L,
0xe420000002924L,
0xe4a00000019e8L,
0xe5200000022a8L,
0xe5a00000042a8L,
0xe62000000342aL,
0xe6a000000292cL,
0xe72000000206fL,
0xe7a00000042b0L,
0xe820000005df7L,
0xe8a00000040b9L,
0xe9200000032baL,
0xe9a0000001ea2L,
0xea20000004c43L,
0xeaa0000006427L,
0xeb2000000402aL,
0xeba00000008ebL,
0xec20000000ab0L,
0xeca00000042a3L,
0xed20000002927L,
0xeda0000004eaaL,
0xee200000060b4L,
0xeea00000021eaL,
0xef200000065e2L,
0xefa00000009eaL,
0xf0200000006b1L,
0xf0a00000042b9L,
0xf120000006586L,
0xf1a000000612dL,
0xf220000001aaaL,
0xf2a0000006026L,
0xf3200000061e2L,
0xf3a00000061e3L,
0xf4200000061e6L,
0xf4a0000000e98L,
0xf520000000645L,
0xf5a0000001685L,
0xf6200000004b2L,
0xf6a0000002421L,
0xf720000004821L,
0xf7a00000025c1L,
0xf820000000641L,
0xf8a0000001485L,
0xf9200000051c5L,
0xf9a00000039e5L,
0xfa20000000665L,
0xfaa0000000685L,
0xfb20000003caeL,
0xfba0000004caeL,
0xfc200000024b2L,
0xfca00000005d2L,
0xfd20000005021L,
0xfda0000004a41L,
0xfe20000000661L,
0xfea0000002ca5L,
0xff20000004c2eL,
0xffa00000030aeL,
0x100200000005eeL,
0x100a00000048afL,
0x1012000000164fL,
0x101a0000000532L,
0x10220000004d21L,
0x102a00000015a1L,
0x10320000001125L,
0x103a0000002dc5L,
0x10420000005265L,
0x104a0000004e85L,
0x105200000030a9L,
0x105a00000051c9L,
0x106200000039e9L,
0x106a00000004abL,
0x107200000004adL,
0x107a00000054aeL,
0x108200000050afL,
0x108a00000014b0L,
0x10920000002433L,
0x109a0000004833L,
0x10a20000004cb4L,
0x10aa00000050b4L,
0x10b20000000534L,
0x10ba0000000654L,
0x10c20000002c21L,
0x10ca0000003421L,
0x10d200000005a1L,
0x10da0000003e61L,
0x10e20000005261L,
0x10ea00000050a4L,
0x10f20000003924L,
0x10fa0000000644L,
0x1102000000152bL,
0x110a000000152dL,
0x11120000001caeL,
0x111a0000004deeL,
0x1122000000148fL,
0x112a000000158fL,
0x113200000004b0L,
0x113a0000003032L,
0x114200000054b2L,
0x114a0000004d32L,
0x11520000004dd3L,
0x115a00000005f3L,
0x11620000002654L,
0x116a0000001655L,
0x117200000004e1L,
0x117a0000002561L,
0x11820000003da5L,
0x118a0000004da5L,
0x11920000002605L,
0x119a00000024a7L,
0x11a200000048a7L,
0x11aa0000001528L,
0x11b200000040a9L,
0x11ba00000050abL,
0x11c200000010acL,
0x11ca0000001c2eL,
0x11d2000000402eL,
0x11da000000582eL,
0x11e200000008aeL,
0x11ea00000031eeL,
0x11f20000002cafL,
0x11fa000000058fL,
0x120200000011cfL,
0x120a00000025efL,
0x12120000001650L,
0x121a0000002c32L,
0x12220000003132L,
0x122a0000004d33L,
0x12320000003034L,
0x123a00000034b4L,
0x12420000004d34L,
0x124a00000025d5L,
0x12520000003a55L,
0x125a00000024b6L,
0x12620000000441L,
0x126a0000001081L,
0x12720000004d61L,
0x127a0000001e41L,
0x12820000004241L,
0x128a00000024a2L,
0x12920000001522L,
0x129a00000049e4L,
0x12a20000004e44L,
0x12aa00000069c5L,
0x12b20000004265L,
0x12ba0000004ca8L,
0x12c20000001dc9L,
0x12ca000000492bL,
0x12d2000000302cL,
0x12da00000054acL,
0x12e20000004d2cL,
0x12ea000000512cL,
0x12f2000000264dL,
0x12fa000000412eL,
0x13020000002deeL,
0x130a0000004e6fL,
0x13120000001c32L,
0x131a0000005832L,
0x132200000008b2L,
0x132a0000002d32L,
0x13320000003532L,
0x133a00000026b2L,
0x13420000002c33L,
0x134a00000040b3L,
0x13520000000573L,
0x135a0000005273L,
0x13620000005434L,
0x136a0000004df4L,
0x13720000002d81L,
0x137a0000000dc1L,
0x13820000003e01L,
0x138a0000004ca2L,
0x139200000050a2L,
0x139a0000003124L,
0x13a20000004de4L,
0x13aa0000005045L,
0x13b2000000302bL,
0x13ba0000002cabL,
0x13c200000054abL,
0x13ca00000025ebL,
0x13d200000049ebL,
0x13da00000040acL,
0x13e200000058acL,
0x13ea0000003e6cL,
0x13f20000003e8cL,
0x13fa00000034adL,
0x140200000049edL,
0x140a00000041eeL,
0x1412000000050fL,
0x141a0000003d8fL,
0x14220000002e4fL,
0x142a0000003c30L,
0x143200000030b0L,
0x143a00000039f0L,
0x144200000018b2L,
0x144a0000002d33L,
0x14520000003533L,
0x145a0000002573L,
0x146200000011f3L,
0x146a0000001c34L,
0x14720000000514L,
0x147a00000026b4L,
0x14820000004c41L,
0x148a0000005041L,
0x14920000001d81L,
0x149a0000004181L,
0x14a200000055a1L,
0x14aa0000000e41L,
0x14b200000005e2L,
0x14ba0000002423L,
0x14c20000003ca3L,
0x14ca0000000523L,
0x14d20000004aa4L,
0x14da0000004c65L,
0x14e20000005065L,
0x14ea0000003505L,
0x14f200000041a5L,
0x14fa0000000e85L,
0x150200000050a6L,
0x150a0000001686L,
0x15120000004d27L,
0x151a0000005127L,
0x152200000054a8L,
0x152a00000049e8L,
0x15320000002c2bL,
0x153a00000051ebL,
0x15420000001dccL,
0x154a000000126cL,
0x1552000000112dL,
0x155a000000312dL,
0x15620000002eaeL,
0x156a00000018afL,
0x1572000000516fL,
0x157a000000118fL,
0x158200000051afL,
0x158a0000000490L,
0x15920000002cb0L,
0x159a0000002670L,
0x15a200000032b2L,
0x15aa0000000833L,
0x15b20000000cb3L,
0x15ba0000004db3L,
0x15c200000055f3L,
0x15ca0000004eb3L,
0x15d20000000834L,
0x15da00000052b4L,
0x15e20000003255L,
0x15ea0000005136L,
0x15f20000000596L,
0x15fa0000003c37L,
0x1602000000243aL,
0x160a00000050c1L,
0x16120000001ea1L,
0x161a0000003d22L,
0x16220000004d22L,
0x162a0000005122L,
0x16320000003c23L,
0x163a0000000ca4L,
0x16420000004904L,
0x164a0000001d24L,
0x16520000004124L,
0x165a0000003ea4L,
0x166200000052a4L,
0x166a0000004c26L,
0x16720000002c27L,
0x167a0000001ca8L,
0x168200000031ebL,
0x168a0000004aabL,
0x169200000035ecL,
0x169a000000202dL,
0x16a200000026adL,
0x16aa00000064aeL,
0x16b2000000244fL,
0x16ba0000003d0fL,
0x16c2000000358fL,
0x16ca0000000a4fL,
0x16d20000005270L,
0x16da0000001df3L,
0x16e200000041f3L,
0x16ea0000001834L,
0x16f200000059f4L,
0x16fa00000032b4L,
0x17020000003136L,
0x170a0000001037L,
0x17120000002cb7L,
0x171a00000034b7L,
0x17220000005441L,
0x172a0000000721L,
0x173200000040a2L,
0x173a0000003aa2L,
0x17420000004d23L,
0x174a00000016a3L,
0x175200000032a4L,
0x175a0000005465L,
0x17620000004d26L,
0x176a0000000586L,
0x17720000001c27L,
0x177a0000004027L,
0x178200000008a7L,
0x178a0000003d87L,
0x17920000002028L,
0x179a00000026a8L,
0x17a20000001d2dL,
0x17aa000000598fL,
0x17b200000031f0L,
0x17ba00000026b0L,
0x17c20000004ab0L,
0x17ca0000000d33L,
0x17d200000036b3L,
0x17da0000000d34L,
0x17e200000009f4L,
0x17ea0000003d96L,
0x17f200000011f6L,
0x17fa0000002c37L,
0x18020000003437L,
0x180a0000002cc1L,
0x181200000034c1L,
0x181a0000001c22L,
0x18220000002d22L,
0x182a0000003d82L,
0x183200000012c4L,
0x183a0000003426L,
0x18420000003aa6L,
0x184a0000001d27L,
0x185200000035e7L,
0x185a00000052a7L,
0x186200000018a8L,
0x186a0000005928L,
0x187200000035e8L,
0x187a000000182bL,
0x1882000000358bL,
0x188a00000032abL,
0x18920000003c4cL,
0x189a00000009ecL,
0x18a20000002eacL,
0x18aa00000012adL,
0x18b200000032adL,
0x18ba000000350fL,
0x18c20000001dafL,
0x18ca0000002510L,
0x18d20000002df0L,
0x18da00000035f0L,
0x18e20000004eb0L,
0x18ea00000019f3L,
0x18f200000042b3L,
0x18fa0000004e15L,
0x190200000052b6L,
0x190a0000002d37L,
0x191200000040baL,
0x191a0000003dfaL,
0x192200000018a2L,
0x192a0000005643L,
0x193200000019e4L,
0x193a00000022a4L,
0x194200000011e6L,
0x194a0000001828L,
0x19520000002c69L,
0x195a000000502aL,
0x1962000000192bL,
0x196a0000000decL,
0x197200000035adL,
0x197a00000036adL,
0x19820000005590L,
0x198a00000032b0L,
0x19920000000ab3L,
0x199a0000004ef5L,
0x19a20000002755L,
0x19aa0000004d16L,
0x19b20000001d37L,
0x19ba0000002df7L,
0x19c20000004c39L,
0x19ca000000403aL,
0x19d20000000c41L,
0x19da0000000922L,
0x19e200000041e2L,
0x19ea00000032a2L,
0x19f20000002503L,
0x19fa0000004903L,
0x1a020000000aa4L,
0x1a0a00000068a6L,
0x1a1200000052a6L,
0x1a1a00000036a7L,
0x1a220000003c48L,
0x1a2a00000009e8L,
0x1a3200000036a8L,
0x1a3a000000102aL,
0x1a4200000054aaL,
0x1a4a00000019ebL,
0x1a520000000aacL,
0x1a5a0000002eb0L,
0x1a620000006654L,
0x1a6a0000003cd5L,
0x1a720000001837L,
0x1a7a0000003d17L,
0x1a82000000413aL,
0x1a8a0000000c61L,
0x1a920000005541L,
0x1a9a0000000d22L,
0x1aa20000002ea2L,
0x1aaa00000012c2L,
0x1ab20000006644L,
0x1aba0000001aa4L,
0x1ac20000002446L,
0x1aca00000041e6L,
0x1ad200000042a7L,
0x1ada0000001ea8L,
0x1ae20000003149L,
0x1aea0000002c2aL,
0x1af2000000112aL,
0x1afa0000003aaaL,
0x1b0200000019f0L,
0x1b0a0000001995L,
0x1b120000000df6L,
0x1b1a0000002c39L,
0x1b220000003439L,
0x1b2a0000001dfaL,
0x1b3200000019e2L,
0x1b3a0000001722L,
0x1b420000000aa8L,
0x1b4a0000005ea8L,
0x1b520000002d49L,
0x1b5a00000031eaL,
0x1b620000001aadL,
0x1b6a0000000c54L,
0x1b720000005da2L,
0x1b7a0000005503L,
0x1b820000000983L,
0x1b8a0000000907L,
0x1b92000000082aL,
0x1b9a00000035eaL,
0x1ba200000052aaL,
0x1baa0000002930L,
0x1bb20000001ab0L,
0x1bba0000001deaL,
0x1bc200000032aaL,
0x1bca0000005031L,
0x1bd200000010b1L,
0x1bda0000006033L,
0x1be20000004334L,
0x1bea0000004c38L,
0x1bf20000002eaaL,
0x1bfa0000000c42L,
0x1c020000003727L,
0x1c0a00000060a8L,
0x1c1200000018d0L,
0x1c1a0000000c66L,
0x1c220000006037L,
0x1c2a00000062acL,
0x1c320000006126L
};
}
}

View File

@@ -1,41 +0,0 @@
package puzzle.dict900;
public final class DictDataL4 {
private DictDataL4() {}
static final int LEN = 4;
static final int ROWS = 104;
static final int COLS = 35;
static final int WORDS_LEN = 2190;
static final int POS_LEN = 3640;
private static long[] words() {
return DictDataL4W0.get();
}
private static long[] posFlat() {
return DictDataL4P0.get();
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,45 +0,0 @@
package puzzle.dict900;
public final class DictDataL5 {
private DictDataL5() {}
static final int LEN = 5;
static final int ROWS = 130;
static final int COLS = 69;
static final int WORDS_LEN = 4403;
static final int POS_LEN = 8970;
private static long[] words() {
return DictDataL5W0.get();
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL5P0.get());
k = copy(out, k, DictDataL5P1.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,787 +0,0 @@
package puzzle.dict900;
public final class DictDataL5P1 {
private DictDataL5P1() {}
public static long[] get() {
return new long[] {
0x2000000020002L,
0x400000000000000L,
0x2000080000000000L,
0x200000000L,
0xa0041200000L,
0x800000000000L,
0x200201L,
0x20012040001L,
0x11010L,
0x0L,
0x32000400400L,
0x4000001000000L,
0x880000L,
0x0L,
0x1020000000L,
0x0L,
0x0L,
0x2000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2000000000020000L,
0x90000000L,
0x4000001000000L,
0x0L,
0x0L,
0x820000000000000L,
0x0L,
0x0L,
0x800000000000000L,
0x0L,
0x0L,
0x100L,
0x0L,
0x1000000000000L,
0x0L,
0x20004L,
0x0L,
0x0L,
0x40L,
0x400000L,
0x40L,
0x0L,
0x1012000L,
0x100L,
0x100000000000L,
0x1000040000000001L,
0x8000L,
0x200000L,
0x2000000000010000L,
0x200000000000000L,
0x6000000000L,
0x1000000080000080L,
0x2090004400000001L,
0x2100000040008000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x8000000000000000L,
0x100000000000L,
0x40800000L,
0x1000000000040008L,
0x2008000000000000L,
0x0L,
0x4000800000L,
0x800000000L,
0x200004400000000L,
0x2000008000L,
0x0L,
0x40000L,
0x80000L,
0x20L,
0x8100000000000000L,
0x140000000000000L,
0xc002000081000000L,
0x10100L,
0x100000080L,
0x200000800L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1280000000b80080L,
0x20110a1000400200L,
0x10b0010931L,
0x50880200c0008010L,
0x108c000200010120L,
0x2100081000000000L,
0x8800200c000800L,
0x0L,
0x0L,
0x18000a5460000L,
0x16c01008000c4012L,
0x44000400180a4100L,
0xa080201100044101L,
0x4808000200000000L,
0x800020000000004L,
0x8490000002800081L,
0x228b01000000140L,
0x4480108020404000L,
0x4000400020002400L,
0x281030100021000L,
0x800100260800200L,
0x8004000042000200L,
0x1010000044000200L,
0x100000108000200L,
0x5300000000080020L,
0x0L,
0x2000100000000L,
0x8000000000820000L,
0x1020020L,
0x120000020000400L,
0x40000000000000L,
0x800010000000000L,
0x4000000L,
0x800000L,
0x4000000000000L,
0x800000000L,
0x30000000L,
0x210000000000L,
0x40981800420c0004L,
0x1000002010800000L,
0x81800000005000a0L,
0x600000001000200L,
0x10400084L,
0x1700001400080L,
0x800400200020000L,
0x408000a00000000L,
0x40002004840080L,
0x2200008000080a0L,
0x400000000008L,
0x40082L,
0x800L,
0x1008082000L,
0x820000004L,
0x40000000100000L,
0x20000L,
0x800040000000000L,
0x1000000000000020L,
0x1000000000000000L,
0x0L,
0x4200000L,
0x0L,
0x100000L,
0x0L,
0x200000000000L,
0x80000000000L,
0x0L,
0x0L,
0x0L,
0x800000L,
0x10300001010L,
0x21000000L,
0x1002002000000000L,
0x400005000020L,
0x3a0000000004L,
0x200000018004080L,
0x100800400012000L,
0x800034041000L,
0x2800020022000L,
0x1000040000000000L,
0x80000000000L,
0x12010000000080a0L,
0x2100a26022000L,
0x90400100204L,
0x400000400000012L,
0x1000200000040L,
0x1000004003020000L,
0x2010a01000L,
0x120080000050000L,
0x3104000000000189L,
0x10002000000405L,
0x40008001222000L,
0x6000100a10080L,
0x808801000000002L,
0x40052000000408L,
0x10800a80000020L,
0x4000450082212440L,
0x1081004000001700L,
0x800000044080014L,
0x840111000030022L,
0x800000008102000L,
0x158c800000812L,
0x2d000309104400L,
0x41920811024022c0L,
0x89a0040041a25149L,
0x1010020a0274044L,
0x400004002000404L,
0x1400000000020002L,
0x1040010000020800L,
0x8200440042000082L,
0x841802013201L,
0x1048001210840402L,
0x6020140000060000L,
0x704604000a980008L,
0x210802448d103L,
0x4041200000804080L,
0x400024006a004400L,
0x844006413084040L,
0x6108110408244000L,
0x400000020114104L,
0x4004002240200114L,
0x4289434006020440L,
0x140010004818000L,
0x62080210040e401L,
0x510800034010201L,
0x130100401220L,
0x800084c0084084L,
0x8880000a90012L,
0x1000480008380040L,
0x400c08800401245L,
0x8004080001802010L,
0x88ab44800800600L,
0x82251052a040280dL,
0x1282482085a01c02L,
0xe40e004003000458L,
0x11833a54000510L,
0x885a90509808044cL,
0x7097e28001258448L,
0x40000002b0010L,
0x27024022002L,
0xa140000360000L,
0x180104602400246L,
0x820212400802082L,
0x40000000080e0400L,
0x4081048986440100L,
0x142520c963184100L,
0x112c668082132143L,
0x759c57ed5fa44da5L,
0x84000000000001eL,
0x801004000018004L,
0x2014020005010040L,
0x8000020L,
0x101800010088L,
0x242006210100000L,
0x4022048c00081020L,
0x4200010L,
0x2100004100aa1cL,
0x90160a00080000L,
0x28080000700002L,
0x26000008500802L,
0x420b134200910400L,
0xa00000a0020005L,
0x1000100050810089L,
0x8c00080101004016L,
0x280548044200201L,
0x29408a402c404004L,
0x2100d0200100020L,
0x418000200100200L,
0x500a2a0000000840L,
0xa280932080440000L,
0x800c00001010228cL,
0x199028d040008049L,
0x8200158a311a4435L,
0x2620b1e418624L,
0x982aa01102c00188L,
0x2e020480a83008L,
0x4000000000088014L,
0x8000220000400100L,
0x6103100004010700L,
0xa042840c0004112L,
0x41000c8104211000L,
0x81040c003115041L,
0x8800008020000800L,
0x6154a01808000220L,
0x8100802050000108L,
0x1800001200400202L,
0x65800a0020011004L,
0x8000a089101102a0L,
0x3410014004a0021L,
0x8923c01009c080L,
0x80109c200040500cL,
0x2420101101861L,
0x88000080a1220804L,
0xca00011400400142L,
0x2000009004240041L,
0x4a01e04105008000L,
0x44248808001040L,
0x2240a54232004000L,
0xfb881b0088040000L,
0x141505070005169L,
0x22114013920698a2L,
0x108e7a446139690L,
0x640d941f7a146339L,
0x1a31858844bccba2L,
0x23ac54c508bd98a5L,
0x31a028a061e6a8a3L,
0x4280c1eaa5a1007L,
0x42544542088L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000L,
0x0L,
0x0L,
0x40000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000000000000L,
0x0L,
0x0L,
0x0L,
0x20000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000L,
0x0L,
0x0L,
0x0L,
0x20000000800000L,
0x0L,
0x400000000000L,
0x1000200000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000000000L,
0x0L,
0x0L,
0x0L,
0x8000000000000000L,
0x1000000000000L,
0x400000080008L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100000L,
0x200L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000000000002L,
0x0L,
0x5000000000000000L,
0x2L,
0x400000L,
0x100000000000000L,
0x1000000L,
0x0L,
0x8000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000L,
0x100L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x8L,
0x0L,
0x0L,
0x0L,
0x1000020000000000L,
0x40000000010L,
0x0L,
0x400000000000000L,
0x0L,
0x20L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x3000000000000000L,
0x80000L,
0x4L,
0x800200000000008L,
0x4000000100000L,
0x2000L,
0x810000008000L,
0x8000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x200101000L,
0x101L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x400000000000000L,
0x0L,
0x0L,
0x0L,
0x8000000004L,
0x0L,
0x10000000000000L,
0x10000000L,
0x0L,
0x400000000L,
0x404180240000010L,
0x8000710001000a02L,
0x7bf07889L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x400000020000L,
0x0L,
0x4000000000000000L,
0x0L,
0x342d091000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x10L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x200000000L,
0x0L,
0x0L,
0x0L,
0x0L
};
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +0,0 @@
package puzzle.dict900;
public final class DictDataL6 {
private DictDataL6() {}
static final int LEN = 6;
static final int ROWS = 156;
static final int COLS = 111;
static final int WORDS_LEN = 7068;
static final int POS_LEN = 17316;
private static long[] words() {
return DictDataL6W0.get();
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL6P0.get());
k = copy(out, k, DictDataL6P1.get());
k = copy(out, k, DictDataL6P2.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,941 +0,0 @@
package puzzle.dict900;
public final class DictDataL6P2 {
private DictDataL6P2() {}
public static long[] get() {
return new long[] {
0x402001000002L,
0x8840002010200062L,
0x3002000080040020L,
0x20c0000001090000L,
0x1011003000080010L,
0x2e08000004800110L,
0x410012000a808L,
0x110400000020400L,
0x41001080000010L,
0x8434088110180000L,
0x6014042530800280L,
0x920000000008025L,
0x1002000000001400L,
0x2020204801001000L,
0xc00200124002010L,
0x80442800000008L,
0x8110080080028000L,
0x41000000000L,
0x2410830000200412L,
0xb000000010005040L,
0x4404800002900100L,
0x4000000L,
0x2014000000004L,
0x209004100005000L,
0x1090280000L,
0x810000008L,
0x9000120380000000L,
0x4280001000110L,
0x9100000060080L,
0x1060010401000801L,
0x80009010000000L,
0x2001300000442080L,
0x8010109800L,
0x280080008800000L,
0x8010000000140000L,
0x2000000000000008L,
0x880000000L,
0x9010000002002000L,
0x44000000L,
0x100000002L,
0x100000L,
0x8000L,
0x8000000020000000L,
0x0L,
0x1000000010000L,
0x2480210010000008L,
0x4080000L,
0x600108004000L,
0xc002202000430000L,
0x20400000002000L,
0x4000800000000000L,
0x1000100000000000L,
0x0L,
0x200400000004000L,
0x800000020000000L,
0x1000000000000040L,
0x800020L,
0xa000004L,
0x42000000400L,
0x2000200200001902L,
0x200208000004000L,
0x1080000840040L,
0x320000080L,
0x1232000802410080L,
0x400010000000000L,
0x200808000010c000L,
0x20000020022240L,
0x20c0800L,
0x9300000000200008L,
0x1002000004000000L,
0x600400080020002L,
0x104018800000420L,
0x802014L,
0x118000000000000L,
0x410L,
0x2008040020L,
0x20400800000428L,
0xc10000000022L,
0xc008080800a0004L,
0x60000b8000040L,
0x10008000000000L,
0x8980400000000000L,
0x200004000880040L,
0x1005200802000L,
0x40061400040100L,
0x24000040000L,
0x910000200L,
0x1020000000000L,
0x400008000L,
0x200000000a002000L,
0x4306208010008020L,
0x402000001000500L,
0x24000000000040L,
0x10022L,
0x2000002820000040L,
0x210001100004001L,
0x8006000000L,
0x104006352000020L,
0xa000191000001009L,
0x40008008a0L,
0x9282000e81000000L,
0xa40000000000200L,
0xd0000000080L,
0x400080100600L,
0x440180800544826L,
0x8000000009408L,
0x848020100100410L,
0x401601000085001L,
0x10010000000000L,
0x1001000a4008096L,
0x9041400003000820L,
0x800000824307001L,
0xc84d000002100L,
0x808000400000002L,
0x88028080b0048002L,
0x300800090000844L,
0x8120121010100000L,
0x34e0400200244200L,
0x4048020001000L,
0x2804800101200001L,
0x400820004L,
0xc0c2480801014fL,
0x4084020800000c80L,
0x20200a528200a000L,
0x2010001006001b5L,
0x902a04200804800bL,
0x100181000020280L,
0x404101210440000L,
0x880000850483280L,
0x10e080000400108L,
0x841000200100090L,
0x12000000000bL,
0x402380402000f04L,
0x1423110001a00L,
0x80025c00a0020000L,
0x1122224308008008L,
0x9e000000000302L,
0x308000001000520L,
0x91000220040002L,
0x9604626000484040L,
0x800d0004030d0L,
0x1001c044e004000cL,
0x402020000c100L,
0x480092a00080400L,
0x8008404401009d00L,
0x24000010008281L,
0x8004080d0020000L,
0x10c1e00224011948L,
0x2004c3240002d010L,
0x8000000020e030L,
0x30104d02601d500L,
0x2043008203000L,
0xa10040000d0800L,
0x801020010L,
0x8008L,
0x0L,
0x40000000000L,
0x108000000140202L,
0x8004001010410000L,
0x61800880100000L,
0x800000028000L,
0x800001008000000L,
0x8001000000020L,
0x810101400000020L,
0x83300000010L,
0x40000L,
0x882880000400L,
0x10180a000000L,
0x8000020008040aL,
0x184021020000L,
0x401000000000004L,
0x401000000010110L,
0x840400000000000L,
0x40000010080004L,
0x44000000080000L,
0x100001000001L,
0xda10030010400001L,
0x1a88000100004822L,
0x6c00001441005000L,
0x10401100050L,
0x450560140800282L,
0x80010e00924e820L,
0x24010002c110L,
0x911044900014100L,
0x43a080251c092L,
0x2040000081500000L,
0xa08600000604000L,
0x80002c000002200L,
0x80802001a0028000L,
0x9204504404802108L,
0x608020000a00830L,
0x102004248c8e0L,
0x0L,
0xc620800000000L,
0x80004020004L,
0x4002000000010L,
0x800000000400004L,
0x1000000001012000L,
0x1000000000102000L,
0x240b00080L,
0x10000040000200L,
0x0L,
0x80201800a0001001L,
0x30000000000L,
0x2000000001040048L,
0x4400200000400480L,
0x126040800002000L,
0x12208808004L,
0x88401200000L,
0x4800000080020L,
0x1088000240000L,
0x10100100600002L,
0x2002000000028L,
0x800011804L,
0x202001d024020020L,
0x800408004200000L,
0x9000080400000800L,
0x800L,
0x280L,
0x464002a811080062L,
0x8b800000020L,
0xa00008004010001L,
0x218c4080440408L,
0x1000030400008000L,
0xc2202078001010d0L,
0x1400501000100008L,
0x4004c0908040008L,
0x10006824a0000000L,
0x100814800000000L,
0x101110c082080L,
0x12000410021000L,
0x80000002002000L,
0x208008200326010L,
0x410a072050c2000L,
0x4088208550600384L,
0x8002400018208L,
0x6180190040184904L,
0x404300405dad3042L,
0x2080008440300301L,
0x23420040aea78000L,
0xc00010491e002200L,
0x400082f16e81a205L,
0xaf00c0004222820L,
0x4880000801966000L,
0xe700040200618421L,
0x400083000400065bL,
0xa8800c0000113832L,
0x582093c06368b0a4L,
0x4020000022208aL,
0x8000428400d87200L,
0x280008090c000008L,
0x4085400000848400L,
0x318000a01401c60L,
0x44020880e9a00801L,
0x26600004800258L,
0x10038010020a0010L,
0x2801040002200060L,
0xe002090418d110L,
0x4234100000584002L,
0x1000481a0000486L,
0x1a00420101010800L,
0x8ca0600481002000L,
0x4404080624810000L,
0x8040091020038L,
0x1024215250410008L,
0x2500L,
0x0L,
0x0L,
0x0L,
0x1000000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000000000L,
0x0L,
0x0L,
0x0L,
0x8000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100000L,
0x800000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x4000L,
0x0L,
0x0L,
0x0L,
0x8000000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x400000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x4000000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x1000000L,
0x0L,
0x0L,
0x0L,
0x100000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x80000L,
0x0L,
0x200L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x800000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2100000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x4L,
0x0L,
0x2000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000000L,
0x200L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x80000000000000L,
0x100000000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x100000000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x40000000000L,
0x2000000000000000L,
0x0L,
0x200088000000000L,
0x200000002000800L,
0x2815010L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x20000000L,
0x0L,
0x100001000000000L,
0x2000000010000L,
0x4010L,
0x0L,
0xa2c4000160000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x2L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x200000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x8000000000L,
0x0L,
0x0L,
0x10000000L,
0x0L,
0x100000L,
0x0L,
0x0L,
0x200020000000000L,
0x400020L,
0x0L,
0x4L,
0x0L,
0x20000000000020L,
0x0L,
0x0L,
0x40000000000102L,
0x1000000020100000L,
0x2000802004001000L,
0x1100000L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x0L,
0x80L,
0x0L,
0x0L,
0x0L,
0x0L
};
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +0,0 @@
package puzzle.dict900;
public final class DictDataL7 {
private DictDataL7() {}
static final int LEN = 7;
static final int ROWS = 182;
static final int COLS = 174;
static final int WORDS_LEN = 11121;
static final int POS_LEN = 31668;
private static long[] words() {
long[] out = new long[WORDS_LEN];
int k = 0;
k = copy(out, k, DictDataL7W0.get());
k = copy(out, k, DictDataL7W1.get());
return out;
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL7P0.get());
k = copy(out, k, DictDataL7P1.get());
k = copy(out, k, DictDataL7P2.get());
k = copy(out, k, DictDataL7P3.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,53 +0,0 @@
package puzzle.dict900;
public final class DictDataL8 {
private DictDataL8() {}
static final int LEN = 8;
static final int ROWS = 208;
static final int COLS = 202;
static final int WORDS_LEN = 12886;
static final int POS_LEN = 42016;
private static long[] words() {
long[] out = new long[WORDS_LEN];
int k = 0;
k = copy(out, k, DictDataL8W0.get());
k = copy(out, k, DictDataL8W1.get());
return out;
}
private static long[] posFlat() {
long[] out = new long[POS_LEN];
int k = 0;
k = copy(out, k, DictDataL8P0.get());
k = copy(out, k, DictDataL8P1.get());
k = copy(out, k, DictDataL8P2.get());
k = copy(out, k, DictDataL8P3.get());
k = copy(out, k, DictDataL8P4.get());
k = copy(out, k, DictDataL8P5.get());
return out;
}
public static puzzle.SwedishGenerator.DictEntry entry() {
long[] wds = words();
long[] flat = posFlat();
long[][] pos = reshape(flat, ROWS, COLS);
return new puzzle.SwedishGenerator.DictEntry(wds, pos, wds.length, (wds.length + 63) >>> 6);
}
private static int copy(long[] dst, int at, long[] src) {
System.arraycopy(src, 0, dst, at, src.length);
return at + src.length;
}
private static long[][] reshape(long[] flat, int rows, int cols) {
long[][] out = new long[rows][cols];
int k = 0;
for (int r = 0; r < rows; r++) {
System.arraycopy(flat, k, out[r], 0, cols);
k += cols;
}
return out;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,9 @@ import lombok.AllArgsConstructor;
import lombok.experimental.Delegate; import lombok.experimental.Delegate;
import lombok.val; import lombok.val;
import precomp.Const9x8.Cell; import precomp.Const9x8.Cell;
import puzzle.Export.Gridded.Replacar.Rell; import puzzle.Export.Puzzle.Replacar.Rell;
import puzzle.Masker.Clues; import puzzle.Masker.Clues;
import puzzle.Meta.ShardLem;
import puzzle.SwedishGenerator.Dict; import puzzle.SwedishGenerator.Dict;
import puzzle.SwedishGenerator.FillResult; import puzzle.SwedishGenerator.FillResult;
import puzzle.SwedishGenerator.Grid; import puzzle.SwedishGenerator.Grid;
@@ -19,7 +20,6 @@ import static puzzle.Masker.Clues.createEmpty;
import static puzzle.Masker.Slot; import static puzzle.Masker.Slot;
import static puzzle.Masker.C; import static puzzle.Masker.C;
import static puzzle.SwedishGenerator.Lemma; import static puzzle.SwedishGenerator.Lemma;
import static puzzle.SwedishGenerator.SIZE;
import static puzzle.SwedishGenerator.X; import static puzzle.SwedishGenerator.X;
/** /**
@@ -61,21 +61,16 @@ public record Export() {
public static Clue from(int dir) { return CLUES[dir]; } public static Clue from(int dir) { return CLUES[dir]; }
} }
record Strings() { public record Vestigium(int index, int clue) { }
static String padRight(String s, int n) { return s.length() >= n ? s : s + " ".repeat(n - s.length()); } public record Signa(@Delegate Clues c) {
}
public record ClueAt(int index, int clue) { } public static Signa of(Cell... cells) {
public record Clued(@Delegate Clues c) {
public static Clued of(Cell... cells) {
var c = createEmpty(); var c = createEmpty();
for (var cell : cells) c.setClue(cell); for (var cell : cells) c.setClue(cell);
return new Clued(c); return new Signa(c);
} }
public Clued deepCopyGrid() { return new Clued(new Clues(c.lo, c.hi, c.vlo, c.vhi, c.rlo, c.rhi, c.xlo, c.xhi)); } public Signa deepCopyGrid() { return new Signa(new Clues(c.lo, c.hi, c.vlo, c.vhi, c.rlo, c.rhi, c.xlo, c.xhi)); }
String gridToString() { String gridToString() {
var sb = new StringBuilder(INIT_GRID_OUTPUT); var sb = new StringBuilder(INIT_GRID_OUTPUT);
forEachSlot((s, _, _) -> { forEachSlot((s, _, _) -> {
@@ -85,21 +80,21 @@ public record Export() {
}); });
return sb.toString(); return sb.toString();
} }
public Stream<ClueAt> stream() { public Stream<Vestigium> stream() {
val stream = Stream.<ClueAt>builder(); val stream = Stream.<Vestigium>builder();
for (var l = c.lo & ~c.xlo & ~c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), RIGHT1.dir)); for (var l = c.lo & ~c.xlo & ~c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), RIGHT1.dir));
for (var l = c.lo & ~c.xlo & ~c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), DOWN0.dir)); for (var l = c.lo & ~c.xlo & ~c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), DOWN0.dir));
for (var l = c.lo & ~c.xlo & c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), CLUE_UP)); for (var l = c.lo & ~c.xlo & c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), CLUE_UP));
for (var l = c.lo & ~c.xlo & c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), CLUE_LEFT)); for (var l = c.lo & ~c.xlo & c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), CLUE_LEFT));
for (var l = c.lo & c.xlo & ~c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), CLUE_LEFT_TOP)); for (var l = c.lo & c.xlo & ~c.rlo & ~c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), CLUE_LEFT_TOP));
for (var l = c.lo & c.xlo & ~c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new ClueAt(Long.numberOfTrailingZeros(l), CLUE_RIGHT_TOP)); for (var l = c.lo & c.xlo & ~c.rlo & c.vlo; l != X; l &= l - 1) stream.accept(new Vestigium(Long.numberOfTrailingZeros(l), CLUE_RIGHT_TOP));
for (var h = c.hi & ~c.xhi & ~c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_RIGHT)); for (var h = c.hi & ~c.xhi & ~c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_RIGHT));
for (var h = c.hi & ~c.xhi & ~c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_DOWN)); for (var h = c.hi & ~c.xhi & ~c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_DOWN));
for (var h = c.hi & ~c.xhi & c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_UP)); for (var h = c.hi & ~c.xhi & c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_UP));
for (var h = c.hi & ~c.xhi & c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_LEFT)); for (var h = c.hi & ~c.xhi & c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_LEFT));
for (var h = c.hi & c.xhi & ~c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_LEFT_TOP)); for (var h = c.hi & c.xhi & ~c.rhi & ~c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_LEFT_TOP));
for (var h = c.hi & c.xhi & ~c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new ClueAt(HI(Long.numberOfTrailingZeros(h)), CLUE_RIGHT_TOP)); for (var h = c.hi & c.xhi & ~c.rhi & c.vhi; h != X; h &= h - 1) stream.accept(new Vestigium(HI(Long.numberOfTrailingZeros(h)), CLUE_RIGHT_TOP));
return stream.build(); return stream.build();
} }
@@ -108,15 +103,15 @@ public record Export() {
} }
} }
record Gridded(@Delegate Grid grid, Clues cl) record Puzzle(@Delegate Grid grid, Clues cl)
implements Stream<LetterAt> { implements Stream<Lettrix> {
public Gridded(Clues clues) { this(clues.toGrid(), clues); } public Puzzle(Clues clues) { this(clues.toGrid(), clues); }
public Gridded(Clued clues) { this(clues.c); } public Puzzle(Signa clues) { this(clues.c); }
public @Delegate Stream<LetterAt> stream() { public @Delegate Stream<Lettrix> stream() {
val stream = Stream.<LetterAt>builder(); val stream = Stream.<Lettrix>builder();
for (var l = grid.lo & ~cl.lo; l != X; l &= l - 1) stream.accept(LetterAt.from(Long.numberOfTrailingZeros(l), grid.g)); for (var l = grid.lo & ~cl.lo; l != X; l &= l - 1) stream.accept(Lettrix.from(Long.numberOfTrailingZeros(l), grid.g));
for (var h = grid.hi & ~cl.hi & 0xFF; h != X; h &= h - 1) stream.accept(LetterAt.from(64 | Long.numberOfTrailingZeros(h), grid.g)); for (var h = grid.hi & ~cl.hi & 0xFF; h != X; h &= h - 1) stream.accept(Lettrix.from(64 | Long.numberOfTrailingZeros(h), grid.g));
return stream.build(); return stream.build();
} }
String gridToString() { String gridToString() {
@@ -141,7 +136,7 @@ public record Export() {
sb[r * (C + 1) + c] = (byte) clueChar.replace(new Rell(grid, cl, idx, (byte) (dir | 48))); sb[r * (C + 1) + c] = (byte) clueChar.replace(new Rell(grid, cl, idx, (byte) (dir | 48)));
}); });
stream().forEach((l) -> sb[l.index(C + 1)] = (byte) l.human()); stream().forEach((l) -> sb[l.index(C + 1)] = (byte) l.human());
return new String(sb).replaceAll(" ", "" + emptyFallback).split("\n"); return new String(sb).replaceAll(" ", String.valueOf(emptyFallback)).split("\n");
} }
public static IntStream cellWalk(byte base, long lo, long hi) { public static IntStream cellWalk(byte base, long lo, long hi) {
if (Slotinfo.increasing(base)) { if (Slotinfo.increasing(base)) {
@@ -219,8 +214,19 @@ public record Export() {
public record WordOut(String word, int[] cell, int startRow, int startCol, char direction, int arrowRow, int arrowCol, boolean isReversed, int complex, String[] clue) { public record WordOut(String word, int[] cell, int startRow, int startCol, char direction, int arrowRow, int arrowCol, boolean isReversed, int complex, String[] clue) {
private static ShardLem lookup(long w, byte[] bytes) {
try {
val rec = Meta.lookupSilent(w);
System.out.println("\nQuery: w=" + w + " -> i=" + rec.mmap());
System.out.println(" word=" + Lemma.asWord(w, bytes) + "\n" + " simpel=" + rec.simpel() + "\n" + " clues=" + Arrays.toString(rec.clues()));
return rec;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public WordOut(long l, int startRow, int startCol, char d, int arrowRow, int arrowCol, boolean isReversed, byte[] bytes) { public WordOut(long l, int startRow, int startCol, char d, int arrowRow, int arrowCol, boolean isReversed, byte[] bytes) {
val meta = Meta.lookup(l); val meta = lookup(l, bytes);
this(Lemma.asWord(l, bytes), new int[]{ arrowRow, arrowCol, startRow, startCol }, startRow, startCol, d, arrowRow, arrowCol, isReversed, this(Lemma.asWord(l, bytes), new int[]{ arrowRow, arrowCol, startRow, startCol }, startRow, startCol, d, arrowRow, arrowCol, isReversed,
meta.simpel(), meta.clues()); meta.simpel(), meta.clues());
} }
@@ -228,7 +234,7 @@ public record Export() {
public record ExportedPuzzle(String[] grid, WordOut[] words, int difficulty, Rewards rewards) { } public record ExportedPuzzle(String[] grid, WordOut[] words, int difficulty, Rewards rewards) { }
public record PuzzleResult(Clued clues, Gridded grid, Slotinfo[] slots, FillResult filled) { public record PuzzleResult(Signa clues, Puzzle grid, Slotinfo[] slots, FillResult filled) {
public ExportedPuzzle exportFormatFromFilled(Rewards rewards) { public ExportedPuzzle exportFormatFromFilled(Rewards rewards) {
// If nothing placed: return full grid mapped to letters/# only // If nothing placed: return full grid mapped to letters/# only
@@ -236,7 +242,7 @@ public record Export() {
return new ExportedPuzzle(grid.exportGrid(_ -> '#', '#'), new WordOut[0], 1, rewards); return new ExportedPuzzle(grid.exportGrid(_ -> '#', '#'), new WordOut[0], 1, rewards);
} }
var placed = Arrays.stream(slots).map(slot -> new Placed(slot.assign().w, slot.key(), Gridded.cellWalk((byte) slot.key(), slot.lo(), slot.hi()).toArray())).toArray( var placed = Arrays.stream(slots).map(slot -> new Placed(slot.assign().w, slot.key(), Puzzle.cellWalk((byte) slot.key(), slot.lo(), slot.hi()).toArray())).toArray(
Placed[]::new); Placed[]::new);
// 2) bounding box around all word cells + arrow cells, with 1-cell margin // 2) bounding box around all word cells + arrow cells, with 1-cell margin
@@ -258,7 +264,7 @@ public record Export() {
} }
// 3) map of only used letter cells (everything else becomes '#') // 3) map of only used letter cells (everything else becomes '#')
var map = grid.stream().collect(Collectors.toMap(LetterAt::index, LetterAt::human)); var map = grid.stream().collect(Collectors.toMap(Lettrix::index, Lettrix::human));
// 4) render gridv2 over cropped bounds (out-of-bounds become '#') // 4) render gridv2 over cropped bounds (out-of-bounds become '#')
var gridv2 = new String[Math.max(0, maxR - minR + 1)]; var gridv2 = new String[Math.max(0, maxR - minR + 1)];
for (int r = minR, i = 0; r <= maxR; r++, i++) { for (int r = minR, i = 0; r <= maxR; r++, i++) {
@@ -279,20 +285,17 @@ public record Export() {
p.arrowCol() - MIN_C, p.arrowCol() - MIN_C,
p.isReversed(), bytes p.isReversed(), bytes
)).toArray(WordOut[]::new); )).toArray(WordOut[]::new);
var total = 0.0001d; var total = 0.0001d + Arrays.stream(wordsOut).mapToDouble(WordOut::complex).sum();
for (var word : wordsOut) {
total += word.complex();
}
return new ExportedPuzzle(gridv2, wordsOut, (int) (total / wordsOut.length), rewards); return new ExportedPuzzle(gridv2, wordsOut, (int) (total / wordsOut.length), rewards);
} }
} }
record LetterAt(int index, byte letter) { record Lettrix(int index, byte letter) {
public int row() { return INDEX_ROW(index); } public int row() { return INDEX_ROW(index); }
public int col() { return INDEX_COL(index); } public int col() { return INDEX_COL(index); }
public char human() { return LETTER(letter); } public char human() { return LETTER(letter); }
static LetterAt from(int index, byte[] bytes) { return new LetterAt(index, bytes[index]); } static Lettrix from(int index, byte[] bytes) { return new Lettrix(index, bytes[index]); }
public int index(int cols) { return (row() * cols) + col(); } public int index(int cols) { return (row() * cols) + col(); }
} }
} }

View File

@@ -1,16 +1,25 @@
package puzzle; package puzzle;
import module java.base; import module java.base;
import anno.DictGen;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import lombok.val; import lombok.val;
import puzzle.Masker.Clues; import puzzle.Masker.Clues;
import puzzle.SwedishGenerator.Rng; import puzzle.SwedishGenerator.Rng;
import static puzzle.Export.*; import static puzzle.Export.*;
import static puzzle.SwedishGenerator.*; import static puzzle.SwedishGenerator.*;
@DictGen(
packageName = "puzzle.dict800",
className = "DictData800",
scv = "/home/mike/dev/puzzle-generator/nl_score_hints_v4.csv",
simpleMax = 800,
minLen = 2,
maxLen = 8
)
public class Main { public class Main {
final static String OUT_DIR = envOrDefault("OUT_DIR", "/data/puzzle"); final static String OUT_DIR = envOrDefault("OUT_DIR", "/data/puzzle");
@@ -50,6 +59,7 @@ public class Main {
void main(String[] args) { void main(String[] args) {
_main(args); _main(args);
} }
@SneakyThrows
public void _main(String[] args) { public void _main(String[] args) {
var opts = parseArgs(args); var opts = parseArgs(args);
@@ -245,7 +255,7 @@ public class Main {
PuzzleResult generatePuzzle(Opts opts) { PuzzleResult generatePuzzle(Opts opts) {
var tLoad0 = System.nanoTime(); var tLoad0 = System.nanoTime();
var dict = puzzle.dict800.DictData.DICT800;//loadDict(opts.wordsPath); Dict dict = puzzle.dict800.DictData800.DICT800;//loadDict(opts.wordsPath);
var tLoad1 = System.nanoTime(); var tLoad1 = System.nanoTime();
section("Load"); section("Load");
@@ -365,7 +375,7 @@ public class Main {
var filled = fillMask(rng, slotInfo, grid); var filled = fillMask(rng, slotInfo, grid);
if (!multiThreaded) { if (!multiThreaded) {
System.out.print("\r" + Strings.padRight("", 120) + "\r"); System.out.print("\r" + " ".repeat(120 - "".length()) + "\r");
System.out.flush(); System.out.flush();
} }
// print a final progress line // print a final progress line
@@ -395,7 +405,7 @@ public class Main {
//System.out.println(Arrays.stream(new Clued(mask).gridToString().split("\n")).map(s -> "\"" + s + "\\n\" +").collect(Collectors.joining("\n"))); //System.out.println(Arrays.stream(new Clued(mask).gridToString().split("\n")).map(s -> "\"" + s + "\\n\" +").collect(Collectors.joining("\n")));
} }
if (filled.ok()) { if (filled.ok()) {
return new PuzzleResult(new Clued(mask), new Gridded(grid, mask), slotInfo, filled); return new PuzzleResult(new Signa(mask), new Puzzle(grid, mask), slotInfo, filled);
} }
return null; return null;

View File

@@ -1,6 +1,9 @@
package puzzle; package puzzle;
import module java.base; import module java.base;
import anno.GenerateNeighbor;
import anno.GenerateNeighbors;
import anno.Shaped;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -13,29 +16,28 @@ import static puzzle.SwedishGenerator.*;
public final class Masker { public final class Masker {
public static final rci[] IT = Neighbors9x8.IT; @Shaped public static final rci[] IT = Neighbors9x8.IT;
public static final long[] PATH_LO = Neighbors9x8.PATH_LO; @Shaped public static final long[] PATH_LO = Neighbors9x8.PATH_LO;
public static final long[] PATH_HI = Neighbors9x8.PATH_HI; @Shaped public static final long[] PATH_HI = Neighbors9x8.PATH_HI;
public static final long MASK_LO = -1L; @Shaped public static final long MASK_LO = -1L;
public static final long MASK_HI = Neighbors9x8.MASK_HI;//(1L << (SIZE - 64)) - 1; @Shaped public static final long MASK_HI = Neighbors9x8.MASK_HI;//(1L << (SIZE - 64)) - 1;
public static final int MIN_LEN = Neighbors9x8.MIN_LEN;//Config.MIN_LEN; @Shaped public static final int MIN_LEN = Neighbors9x8.MIN_LEN;//Config.MIN_LEN;
public static final int STACK_SIZE = 128; @Shaped public static final int C = Neighbors9x8.C;
public static final int C = Neighbors9x8.C; @Shaped public static final int R = Neighbors9x8.R;
public static final int R = Neighbors9x8.R; @Shaped public static final double SIZED = Neighbors9x8.SIZED;// ~18
public static final double SIZED = Neighbors9x8.SIZED;// ~18 @Shaped private static final long[] NBR_LO = Neighbors9x8.NBR_LO;
private static final long[] NBR_LO = Neighbors9x8.NBR_LO; @Shaped private static final long[] NBR_HI = Neighbors9x8.NBR_HI;
private static final long[] NBR_HI = Neighbors9x8.NBR_HI; @Shaped private final int[] activeCIdx = new int[Neighbors9x8.SIZE];
@Shaped private final long[] activeSLo = new long[Neighbors9x8.SIZE];
@Shaped private final long[] activeSHi = new long[Neighbors9x8.SIZE];
@Shaped private final long[] adjLo = new long[Neighbors9x8.SIZE];
@Shaped private final long[] adjHi = new long[Neighbors9x8.SIZE];
@Shaped private final int[] rCount = new int[Neighbors9x8.R];
@Shaped private final int[] cCount = new int[Neighbors9x8.C];
private final Rng rng; private final Rng rng;
private final int[] stack; private final int[] stack;
private final Clues cache; private final Clues cache;
private final int[] activeCIdx = new int[Neighbors9x8.SIZE]; public static final int STACK_SIZE = 128;
private final long[] activeSLo = new long[Neighbors9x8.SIZE];
private final long[] activeSHi = new long[Neighbors9x8.SIZE];
private final long[] adjLo = new long[Neighbors9x8.SIZE];
private final long[] adjHi = new long[Neighbors9x8.SIZE];
private final int[] rCount = new int[Neighbors9x8.R];
private final int[] cCount = new int[Neighbors9x8.C];
public Masker(Rng rng, int[] stack, Clues cache) { public Masker(Rng rng, int[] stack, Clues cache) {
this.rng = rng; this.rng = rng;
this.stack = stack; this.stack = stack;

View File

@@ -1,6 +1,7 @@
package puzzle; package puzzle;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.experimental.UtilityClass;
import puzzle.SwedishGenerator.Lemma; import puzzle.SwedishGenerator.Lemma;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -11,8 +12,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.StandardOpenOption; import java.nio.file.StandardOpenOption;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale; @UtilityClass
public class Meta { public class Meta {
static final Gson GSON = new Gson(); static final Gson GSON = new Gson();
@@ -27,7 +27,7 @@ public class Meta {
static final Path shardData = dir.resolve("shard0.data"); static final Path shardData = dir.resolve("shard0.data");
static final Path shardMap = dir.resolve("shard0.map"); static final Path shardMap = dir.resolve("shard0.map");
private static Path detectShardDir() { private Path detectShardDir() {
// 1) optioneel override // 1) optioneel override
String p = System.getProperty("puzzle.shards.dir"); String p = System.getProperty("puzzle.shards.dir");
if (p != null && !p.isBlank()) return Path.of(p).toAbsolutePath().normalize(); if (p != null && !p.isBlank()) return Path.of(p).toAbsolutePath().normalize();
@@ -43,7 +43,7 @@ public class Meta {
} }
} }
// --- Lookup: w -> i using mmap --- // --- Lookup: w -> i using mmap ---
static int findIndexInMapMmap(long target) throws IOException { private int findIndexInMapMmap(long target) throws IOException {
try (var ch = FileChannel.open(Meta.shardMap, StandardOpenOption.READ)) { try (var ch = FileChannel.open(Meta.shardMap, StandardOpenOption.READ)) {
var mbb = (MappedByteBuffer) ch.map(FileChannel.MapMode.READ_ONLY, 0, ch.size()).order(ORDER); var mbb = (MappedByteBuffer) ch.map(FileChannel.MapMode.READ_ONLY, 0, ch.size()).order(ORDER);
@@ -67,7 +67,7 @@ public class Meta {
} }
// --- Read record i from shard.data (your format) --- // --- Read record i from shard.data (your format) ---
static ShardLem readRecord(long w, int i) throws IOException { private ShardLem readRecord(long w, int i) throws IOException {
try (var ch = FileChannel.open(Meta.shardData, StandardOpenOption.READ)) { try (var ch = FileChannel.open(Meta.shardData, StandardOpenOption.READ)) {
var hdr = ByteBuffer.allocate(12).order(ORDER); var hdr = ByteBuffer.allocate(12).order(ORDER);
ch.read(hdr); ch.read(hdr);
@@ -97,11 +97,11 @@ public class Meta {
var simpel = Integer.parseInt(parts[1]); var simpel = Integer.parseInt(parts[1]);
var clues = GSON.fromJson(parts[2], String[].class); var clues = GSON.fromJson(parts[2], String[].class);
return new ShardLem(w, simpel, clues); return new ShardLem(w, simpel, i, clues);
} }
} }
static int readIntAt(FileChannel ch, long pos) throws IOException { private int readIntAt(FileChannel ch, long pos) throws IOException {
var b = ByteBuffer.allocate(4).order(ORDER); var b = ByteBuffer.allocate(4).order(ORDER);
ch.position(pos); ch.position(pos);
ch.read(b); ch.read(b);
@@ -109,23 +109,18 @@ public class Meta {
return b.getInt(); return b.getInt();
} }
// --- Demo main --- public record ShardLem(long w, int simpel, int mmap, String[] clues) { }
public static ShardLem lookup(long w) {
public ShardLem lookupSilent(long w) {
try { try {
var i = findIndexInMapMmap(Lemma.pack43(w)); var i = findIndexInMapMmap(Lemma.packLetterAndLengthBits(w));
System.out.println("\nQuery: w=" + w + " -> i=" + i);
if (i >= 0) { if (i >= 0) {
var rec = readRecord(w, i); return readRecord(w, i);
System.out.println(" simpel=" + rec.simpel());
System.out.println(" clues=" + Arrays.toString(rec.clues()));
return rec;
} else { } else {
System.out.println(" NOT FOUND"); throw new RuntimeException("NOT FOUND{w=" + w + ", text=" + Lemma.asWord(w, new byte[8]) + "}");
throw new RuntimeException("NOT FOUND");
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
public record ShardLem(long w, int simpel, String[] clues) { }
} }

View File

@@ -1,13 +1,14 @@
package puzzle; package puzzle;
import gen.GenDict; import anno.ConstGen;
import gen.GenerateConst; import anno.GenerateNeighbor;
import gen.GenerateNeighbors; import anno.GenerateNeighbors;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.val; import lombok.val;
import precomp.Neighbors9x8; import precomp.Neighbors9x8;
import static java.lang.Long.*; import static java.lang.Long.bitCount;
import static java.lang.Long.numberOfLeadingZeros;
import static java.lang.Long.numberOfTrailingZeros; import static java.lang.Long.numberOfTrailingZeros;
import static java.nio.charset.StandardCharsets.US_ASCII; import static java.nio.charset.StandardCharsets.US_ASCII;
@@ -27,17 +28,14 @@ import static java.nio.charset.StandardCharsets.US_ASCII;
* javac SwedishGenerator.java * javac SwedishGenerator.java
* java SwedishGenerator [--seed N] [--pop N] [--gens N] [--tries N] [--words word-list.txt] * java SwedishGenerator [--seed N] [--pop N] [--gens N] [--tries N] [--words word-list.txt]
*/ */
@SuppressWarnings("ALL") @ConstGen(C = 9, R = 8, packageName = "precomp", className = "Const9x8")
@GenerateNeighbors(C = 9, R = 8, packageName = "precomp", className = "Neighbors9x8", MIN_LEN = 2) @GenerateNeighbors({
@GenerateConst(C = 9, R = 8, packageName = "precomp", className = "Const9x8") @GenerateNeighbor(C = 9, R = 8, packageName = "precomp", className = "Neighbors9x8", MIN_LEN = 2),
@GenDict( @GenerateNeighbor(C = 4, R = 3, packageName = "precomp", className = "Neighbors4x3", MIN_LEN = 2)
packageName = "puzzle.dict950", })
className = "DictData950", /*@GenerateShapedCopies(
scv = "/home/mike/dev/puzzle-generator/nl_score_hints_v4.csv", shapes = { "precomp.Neighbors9x8", "precomp.Neighbors4x3" }
simpleMax = 950, )*/
minLen = 2,
maxLen = 8
)
public record SwedishGenerator() { public record SwedishGenerator() {
public static final long X = 0L; public static final long X = 0L;
@@ -57,12 +55,12 @@ public record SwedishGenerator() {
} }
//@formatter:off //@formatter:off
public static record Dict(DictEntry[] index, int length) { } public record Dict(DictEntry[] index, int length) { }
public static record DictEntry(long[] words, long[][] posBitsets, int length, int numlong) { } public record DictEntry(long[] words, long[][] posBitsets, int length, int numlong) { }
@AllArgsConstructor @NoArgsConstructor static final class Assign { long w; } @AllArgsConstructor @NoArgsConstructor static final class Assign { long w; }
public static final class FillStats { public double simplicity; } public static final class FillStats { public double simplicity; }
@AllArgsConstructor public static final class Grid { public final byte[] g; public long lo, hi; } @AllArgsConstructor public static final class Grid { public final byte[] g; public long lo, hi; }
public static record FillResult(boolean ok, long nodes, long backtracks, int lastMRV, long elapsed, FillStats stats) { } public record FillResult(boolean ok, long nodes, long backtracks, int lastMRV, long elapsed, FillStats stats) { }
//@formatter:on //@formatter:on
public static final class Rng { public static final class Rng {
@@ -91,10 +89,10 @@ public record SwedishGenerator() {
public int biasedIndexPow3(int N) { return (int) (((Math.min(nextU32(), Math.min(nextU32(), nextU32())) & 0xFFFFFFFFL) * (long) N) >>> 32); } public int biasedIndexPow3(int N) { return (int) (((Math.min(nextU32(), Math.min(nextU32(), nextU32())) & 0xFFFFFFFFL) * (long) N) >>> 32); }
} }
public static interface Lemma { public interface Lemma {
static final long LETTER_MASK = (1L << 40) - 1; // low 40 bits long LETTER_MASK = (1L << 40) - 1; // low 40 bits
static final long INDEX_MASK = (1L << 43) - 1; // 24 bits long LETTER_AND_LENGTH_MASK = (1L << 43) - 1;
static long from(byte[] word) { return packShiftIn(word) | ((long) (word.length - 1) << 40); } static long from(byte[] word) { return packShiftIn(word) | ((long) (word.length - 1) << 40); }
static long pack(long w, int shardIndex) { return w | (((long) shardIndex) << 43) | ((long) length0(w)) << 40; } static long pack(long w, int shardIndex) { return w | (((long) shardIndex) << 43) | ((long) length0(w)) << 40; }
@@ -103,10 +101,10 @@ public record SwedishGenerator() {
for (int i = b.length - 1; i >= 0; i--) w = (w << 5) | ((long) b[i] & 31); for (int i = b.length - 1; i >= 0; i--) w = (w << 5) | ((long) b[i] & 31);
return w; return w;
} }
static public long from(String word) { return packShiftIn(word.getBytes(US_ASCII)) | ((long) (word.length() - 1) << 40); } static long from(String word) { return packShiftIn(word.getBytes(US_ASCII)) | ((long) (word.length() - 1) << 40); }
static byte byteAt(long word, int idx) { return (byte) ((word >>> (idx * 5)) & 0b11111L); } static byte byteAt(long word, int idx) { return (byte) ((word >>> (idx * 5)) & 0b11111L); }
static int length0(long word) { return ((63 - numberOfLeadingZeros(word & LETTER_MASK)) / 5); } static int length0(long word) { return ((63 - numberOfLeadingZeros(word & LETTER_MASK)) / 5); }
public static String asWord(long word, byte[] bytes) { static String asWord(long word, byte[] bytes) {
int bi = 0; int bi = 0;
for (long w = word & LETTER_MASK; w != 0; w >>>= 5) bytes[bi++] = (byte) ((w & 31) | 64); for (long w = word & LETTER_MASK; w != 0; w >>>= 5) bytes[bi++] = (byte) ((w & 31) | 64);
return new String(bytes, 0, bi, US_ASCII); return new String(bytes, 0, bi, US_ASCII);
@@ -114,12 +112,10 @@ public record SwedishGenerator() {
static int unpackIndex(long w) { return (int) (w >>> 40); } static int unpackIndex(long w) { return (int) (w >>> 40); }
static int unpackSize(long w) { return (int) (w >>> 40) & 7; } static int unpackSize(long w) { return (int) (w >>> 40) & 7; }
static int unpackLetters(long w) { return (int) (w & LETTER_MASK); } static int unpackLetters(long w) { return (int) (w & LETTER_MASK); }
static long pack43(long w) { static long packLetterAndLengthBits(long w) { return w & LETTER_AND_LENGTH_MASK; }
return w & INDEX_MASK;
}
} }
public static record Slotinfo(int key, long lo, long hi, int score, Assign assign, DictEntry entry, int minL) { public record Slotinfo(int key, long lo, long hi, int score, Assign assign, DictEntry entry, int minL) {
public static int wordCount(int k, Slotinfo[] arr) { public static int wordCount(int k, Slotinfo[] arr) {
for (var n = 1; n < arr.length; n++) if (arr[n].assign.w != X) k++; for (var n = 1; n < arr.length; n++) if (arr[n].assign.w != X) k++;
@@ -289,12 +285,11 @@ public record SwedishGenerator() {
val words = s.entry.words; val words = s.entry.words;
long low, top; long low, top;
if (info != null && info.length > 0) { if (info != null && info.length > 0) {
var idxs = info; var L = info.length;
var L = idxs.length;
var tries = Math.min(MAX_TRIES_PER_SLOT, L); var tries = Math.min(MAX_TRIES_PER_SLOT, L);
for (var t = 0; t < tries; t++) { for (var t = 0; t < tries; t++) {
var w = words[idxs[rng.biasedIndexPow3(L - 1)]]; var w = words[info[rng.biasedIndexPow3(L - 1)]];
var lemIdx = Lemma.unpackIndex(w); var lemIdx = Lemma.unpackIndex(w);
if (Bit1029.get(used, lemIdx)) continue; if (Bit1029.get(used, lemIdx)) continue;
low = glo; low = glo;

View File

@@ -1,14 +1,15 @@
package puzzle; package puzzle;
import module java.base; import module java.base;
import anno.DictGen;
import lombok.val; import lombok.val;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import precomp.Neighbors9x8.rci; import precomp.Neighbors9x8.rci;
import puzzle.Export.ClueAt; import puzzle.Export.Vestigium;
import puzzle.Export.Clued; import puzzle.Export.Signa;
import puzzle.Export.Gridded; import puzzle.Export.Puzzle;
import puzzle.Export.LetterAt; import puzzle.Export.Lettrix;
import puzzle.Export.PuzzleResult; import puzzle.Export.PuzzleResult;
import puzzle.Export.Rewards; import puzzle.Export.Rewards;
import puzzle.Main.Opts; import puzzle.Main.Opts;
@@ -28,7 +29,14 @@ import static puzzle.SwedishGenerator.Slotinfo;
import static puzzle.SwedishGenerator.fillMask; import static puzzle.SwedishGenerator.fillMask;
import static puzzle.SwedishGeneratorTest.LETTER_A; import static puzzle.SwedishGeneratorTest.LETTER_A;
import static puzzle.SwedishGeneratorTest.LETTER_Z; import static puzzle.SwedishGeneratorTest.LETTER_Z;
@DictGen(
packageName = "puzzle.dict950",
className = "DictData950",
scv = "/home/mike/dev/puzzle-generator/nl_score_hints_v4.csv",
simpleMax = 950,
minLen = 2,
maxLen = 8
)
public class MainTest { public class MainTest {
static final Opts opts = new Main.Opts() {{ static final Opts opts = new Main.Opts() {{
@@ -44,8 +52,8 @@ public class MainTest {
}}; }};
@Test @Test
void testExtractSlots() { void testExtractSlots() {
var clues = Clued.of(r0c0d1); var clues = Signa.of(r0c0d1);
var grid = new Gridded(clues); var grid = new Puzzle(clues);
val g = grid.grid().g; val g = grid.grid().g;
GridBuilder.placeWord(grid.grid(), g, r0c0d1.slotKey, (1L << OFF_0_1) | (1L << OFF_0_2), 0, AB); GridBuilder.placeWord(grid.grid(), g, r0c0d1.slotKey, (1L << OFF_0_1) | (1L << OFF_0_2), 0, AB);
@@ -53,7 +61,7 @@ public class MainTest {
assertEquals(1, slots.length); assertEquals(1, slots.length);
var s = slots[0]; var s = slots[0];
assertEquals(8, Masker.Slot.length(s.lo(), s.hi())); assertEquals(8, Masker.Slot.length(s.lo(), s.hi()));
var cells = Gridded.cellWalk((byte) s.key(), s.lo(), s.hi()).mapToObj(c -> Masker.IT[c]).toArray(rci[]::new); var cells = Puzzle.cellWalk((byte) s.key(), s.lo(), s.hi()).mapToObj(c -> Masker.IT[c]).toArray(rci[]::new);
assertEquals(0, cells[0].r()); assertEquals(0, cells[0].r());
assertEquals(1, cells[0].c()); assertEquals(1, cells[0].c());
assertEquals(0, cells[1].r()); assertEquals(0, cells[1].r());
@@ -72,7 +80,7 @@ public class MainTest {
@Test @Test
void testForEachSlot() { void testForEachSlot() {
var count = new AtomicInteger(0); var count = new AtomicInteger(0);
Clued.of(r0c0d1).forEachSlot((key, lo, hi) -> { Signa.of(r0c0d1).forEachSlot((key, lo, hi) -> {
count.incrementAndGet(); count.incrementAndGet();
assertEquals(8, Long.bitCount(lo) + Long.bitCount(hi)); assertEquals(8, Long.bitCount(lo) + Long.bitCount(hi));
assertEquals(0, Masker.IT[Long.numberOfTrailingZeros(lo)].r()); assertEquals(0, Masker.IT[Long.numberOfTrailingZeros(lo)].r());
@@ -91,15 +99,15 @@ public class MainTest {
} }
@Test @Test
public void testGridBasics() { public void testGridBasics() {
var clues = Clued.of(r2c1d2); var clues = Signa.of(r2c1d2);
var grid = new Gridded(clues); var grid = new Puzzle(clues);
// Test set/get // Test set/get
GridBuilder.placeWord(grid.grid(), grid.grid().g, r2c1d2.slotKey, (1L << OFF_1_1) | (1L << OFF_0_1), 0, AZ); GridBuilder.placeWord(grid.grid(), grid.grid().g, r2c1d2.slotKey, (1L << OFF_1_1) | (1L << OFF_0_1), 0, AZ);
val map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); val map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
Assertions.assertEquals(LETTER_A, map.get(OFF_1_1)); Assertions.assertEquals(LETTER_A, map.get(OFF_1_1));
Assertions.assertEquals(LETTER_Z, map.get(OFF_0_1)); Assertions.assertEquals(LETTER_Z, map.get(OFF_0_1));
var clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue)); var clueMap = clues.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(1, clueMap.size()); Assertions.assertEquals(1, clueMap.size());
Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1)); Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1));
@@ -112,7 +120,7 @@ public class MainTest {
// Test isDigitAt // Test isDigitAt
Assertions.assertFalse(clues.isClueLo(OFF_0_0)); Assertions.assertFalse(clues.isClueLo(OFF_0_0));
Assertions.assertTrue(clues.isClueLo(OFF_2_1)); Assertions.assertTrue(clues.isClueLo(OFF_2_1));
clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue)); clueMap = clues.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1)); Assertions.assertEquals(UP2.dir, clueMap.get(OFF_2_1));
Assertions.assertFalse(clues.isClueLo(OFF_2_3)); Assertions.assertFalse(clues.isClueLo(OFF_2_3));
Assertions.assertFalse(clues.isClueLo(OFF_1_1)); Assertions.assertFalse(clues.isClueLo(OFF_1_1));
@@ -124,24 +132,24 @@ public class MainTest {
} }
@Test @Test
public void testCluesDeepCopy() { public void testCluesDeepCopy() {
var clues = Clued.of(r0c0d1, r0c1d2, r1c0d3, r1c1d0); var clues = Signa.of(r0c0d1, r0c1d2, r1c0d3, r1c1d0);
var copy = clues.deepCopyGrid(); var copy = clues.deepCopyGrid();
var clueMap = clues.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue)); var clueMap = clues.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0)); Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0));
copy.setClue(r0c0d0); copy.setClue(r0c0d0);
var copied = copy.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue)); var copied = copy.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(DOWN0.dir, copied.get(OFF_0_0)); Assertions.assertEquals(DOWN0.dir, copied.get(OFF_0_0));
Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0)); Assertions.assertEquals(RIGHT1.dir, clueMap.get(OFF_0_0));
} }
@Test @Test
public void testMini() { public void testMini() {
Assertions.assertTrue(Clued.of(r1c1d3).isClueLo(OFF_1_1)); Assertions.assertTrue(Signa.of(r1c1d3).isClueLo(OFF_1_1));
} }
@Test @Test
void testFiller2() { void testFiller2() {
var mask = Clued.of( var mask = Signa.of(
r0c0d1, r0c0d1,
r0c3d0, r0c4d0, r0c5d0, r0c6d0, r0c7d0, r0c8d0, r0c3d0, r0c4d0, r0c5d0, r0c6d0, r0c7d0, r0c8d0,
r1c0d1, r1c0d1,
@@ -153,7 +161,7 @@ public class MainTest {
r7c0d2, r7c1d2, r7c2d2, r7c8d3 r7c0d2, r7c1d2, r7c2d2, r7c8d3
); );
Assertions.assertEquals(20, mask.clueCount()); Assertions.assertEquals(20, mask.clueCount());
val map = mask.stream().collect(Collectors.toMap(ClueAt::index, ClueAt::clue)); val map = mask.stream().collect(Collectors.toMap(Vestigium::index, Vestigium::clue));
Assertions.assertEquals(20, map.size()); Assertions.assertEquals(20, map.size());
var slots = mask.slots(DictData950.DICT950); var slots = mask.slots(DictData950.DICT950);
// var filled = fillMask(rng, slotInfo, grid, false); // var filled = fillMask(rng, slotInfo, grid, false);
@@ -163,7 +171,7 @@ public class MainTest {
void testFiller() { void testFiller() {
System.out.println(DictData950.DICT950.index().length); System.out.println(DictData950.DICT950.index().length);
val rng = new Rng(-343913721); val rng = new Rng(-343913721);
var mask = Clued.of( var mask = Signa.of(
r0c3d3, r0c6d3, r0c7d0, r0c8d0, r0c3d3, r0c6d3, r0c7d0, r0c8d0,
r1c1d1, r1c1d1,
r2c1d1, r2c1d1,
@@ -181,7 +189,7 @@ public class MainTest {
Assertions.assertEquals("BEADEMT", Lemma.asWord(slotInfo[0].assign().w, Export.BYTES.get())); Assertions.assertEquals("BEADEMT", Lemma.asWord(slotInfo[0].assign().w, Export.BYTES.get()));
Assertions.assertEquals(-1L, grid.lo); Assertions.assertEquals(-1L, grid.lo);
Assertions.assertEquals(-1L, grid.hi); Assertions.assertEquals(-1L, grid.hi);
var g = new Gridded(grid, mask.c()); var g = new Puzzle(grid, mask.c());
g.gridToString(); g.gridToString();
var aa = new PuzzleResult(mask, g, slotInfo, filled).exportFormatFromFilled(new Rewards(1, 1, 1)); var aa = new PuzzleResult(mask, g, slotInfo, filled).exportFormatFromFilled(new Rewards(1, 1, 1));
System.out.println(String.join("\n", aa.grid())); System.out.println(String.join("\n", aa.grid()));

View File

@@ -2,8 +2,8 @@ package puzzle;
import lombok.val; import lombok.val;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import puzzle.Export.Clued; import puzzle.Export.Signa;
import puzzle.Export.Gridded; import puzzle.Export.Puzzle;
import puzzle.Export.Placed; import puzzle.Export.Placed;
import puzzle.Export.PuzzleResult; import puzzle.Export.PuzzleResult;
import puzzle.Export.Rewards; import puzzle.Export.Rewards;
@@ -36,7 +36,7 @@ public class MarkerTest {
for (var i = 0; i < 200; i++) { for (var i = 0; i < 200; i++) {
for (var j = 19; j < 24; j++) { for (var j = 19; j < 24; j++) {
var clues = masker.randomMask(j); var clues = masker.randomMask(j);
assertTrue(masker.isValid(clues), "Mask should be valid for length \n" + new Clued(clues).gridToString()); assertTrue(masker.isValid(clues), "Mask should be valid for length \n" + new Signa(clues).gridToString());
} }
} }
} }
@@ -54,7 +54,7 @@ public class MarkerTest {
simCount++; simCount++;
masker.mutate(clues); masker.mutate(clues);
sim += orig.similarity(clues); sim += orig.similarity(clues);
assertTrue(masker.isValid(clues), "Mask should be valid for length \n" + new Clued(clues).gridToString()); assertTrue(masker.isValid(clues), "Mask should be valid for length \n" + new Signa(clues).gridToString());
} }
} }
System.out.println("Average similarity: " + sim / simCount); System.out.println("Average similarity: " + sim / simCount);
@@ -73,21 +73,21 @@ public class MarkerTest {
simCount++; simCount++;
var cross = masker.crossover(clues, clues2); var cross = masker.crossover(clues, clues2);
sim += Math.max(cross.similarity(clues), cross.similarity(clues2)); sim += Math.max(cross.similarity(clues), cross.similarity(clues2));
assertTrue(masker.isValid(cross), "Mask should be valid for length \n" + new Clued(cross).gridToString()); assertTrue(masker.isValid(cross), "Mask should be valid for length \n" + new Signa(cross).gridToString());
} }
} }
System.out.println("Average similarity: " + sim / simCount); System.out.println("Average similarity: " + sim / simCount);
} }
@Test @Test
void testSimilarity() { void testSimilarity() {
var a = Clued.of(r0c0d1, r2c1d0).c(); var a = Signa.of(r0c0d1, r2c1d0).c();
var b = Clued.of(r0c0d1, r2c1d0).c(); var b = Signa.of(r0c0d1, r2c1d0).c();
// Identity // Identity
assertEquals(1.0, a.similarity(b), 0.001); assertEquals(1.0, a.similarity(b), 0.001);
// Different direction // Different direction
var c = Clued.of(r0c0d0, r2c1d0); var c = Signa.of(r0c0d0, r2c1d0);
assertTrue(a.similarity(c.c()) < 1.0); assertTrue(a.similarity(c.c()) < 1.0);
// Completely different // Completely different
@@ -103,10 +103,10 @@ public class MarkerTest {
assertTrue(masker.isValid(Clues.createEmpty())); assertTrue(masker.isValid(Clues.createEmpty()));
// Valid clue: Right from (0,0) in 9x8 grid. Length is 8. // Valid clue: Right from (0,0) in 9x8 grid. Length is 8.
assertTrue(masker.isValid(Clued.of(r0c0d1).c())); assertTrue(masker.isValid(Signa.of(r0c0d1).c()));
// Invalid clue: Right from (0,7) in 9x8 grid. Length is 1 (too short if MIN_LEN >= 2). // Invalid clue: Right from (0,7) in 9x8 grid. Length is 1 (too short if MIN_LEN >= 2).
assertFalse(masker.isValid(Clued.of(r0c7d1).c())); assertFalse(masker.isValid(Signa.of(r0c7d1).c()));
} }
@Test @Test
@@ -138,18 +138,18 @@ public class MarkerTest {
// Clue 1: (0,0) Right. Slot cells: (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8) // Clue 1: (0,0) Right. Slot cells: (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8)
// Clue 2: (1,2) Up. Slot cells: (0,2) // Clue 2: (1,2) Up. Slot cells: (0,2)
// Intersection is exactly 1 cell (0,2). Valid. // Intersection is exactly 1 cell (0,2). Valid.
assertTrue(masker.isValid(Clued.of(r0c0d1, r2c2d2).c())); assertTrue(masker.isValid(Signa.of(r0c0d1, r2c2d2).c()));
// Clue 3: (1,1) Right. Slot cells: (1,2), (1,3), ... // Clue 3: (1,1) Right. Slot cells: (1,2), (1,3), ...
// No intersection with Clue 1 or 2. Valid. // No intersection with Clue 1 or 2. Valid.
assertTrue(masker.isValid(Clued.of(r0c0d1, r2c2d2, r1c1d1).c())); assertTrue(masker.isValid(Signa.of(r0c0d1, r2c2d2, r1c1d1).c()));
// Now create a violation: two slots sharing 2 cells. // Now create a violation: two slots sharing 2 cells.
// We can do this with Corner Down and another clue. // We can do this with Corner Down and another clue.
// Clue A: (0,0) Corner Down. Starts at (0,1) goes down: (0,1), (1,1), (2,1), (3,1), ... // Clue A: (0,0) Corner Down. Starts at (0,1) goes down: (0,1), (1,1), (2,1), (3,1), ...
// Clue B: (0,2) Corner Down Left. Starts at (0,1) goes down: (0,1), (1,1), (2,1), ... // Clue B: (0,2) Corner Down Left. Starts at (0,1) goes down: (0,1), (1,1), (2,1), ...
// They share MANY cells starting from (0,1). // They share MANY cells starting from (0,1).
assertFalse(masker.isValid(Clued.of(r0c0d4, r0c2d5).c())); assertFalse(masker.isValid(Signa.of(r0c0d4, r0c2d5).c()));
} }
@Test @Test
@@ -233,7 +233,7 @@ public class MarkerTest {
} }
@Test @Test
void testCornerDownSlot() { void testCornerDownSlot() {
var clues = Clued.of(r0c0d4); var clues = Signa.of(r0c0d4);
// Clue op (0,0), type 4 (Corner Down) // Clue op (0,0), type 4 (Corner Down)
assertEquals(r0c0d4.d, clues.getDir(r0c0d4.index)); assertEquals(r0c0d4.d, clues.getDir(r0c0d4.index));
@@ -257,14 +257,14 @@ public class MarkerTest {
@Test @Test
void testCornerDownExtraction() { void testCornerDownExtraction() {
var slots = Masker.slots(Clued.of(r0c0d4).c(), DictData950.DICT950.index()); var slots = Masker.slots(Signa.of(r0c0d4).c(), DictData950.DICT950.index());
assertEquals(1, slots.length); assertEquals(1, slots.length);
assertEquals(r0c0d4.d, Masker.Slot.dir(slots[0].key())); assertEquals(r0c0d4.d, Masker.Slot.dir(slots[0].key()));
} }
@Test @Test
void testCornerDownLeftSlot() { void testCornerDownLeftSlot() {
var clues = Clued.of(r0c1d5); var clues = Signa.of(r0c1d5);
assertEquals(r0c1d5.d, clues.getDir(r0c1d5.index)); assertEquals(r0c1d5.d, clues.getDir(r0c1d5.index));
@@ -287,15 +287,15 @@ public class MarkerTest {
@Test @Test
void testCornerDownLeftExtraction() { void testCornerDownLeftExtraction() {
var slots = Clued.of(r0c1d5).slots(DictData950.DICT950); var slots = Signa.of(r0c1d5).slots(DictData950.DICT950);
assertEquals(1, slots.length); assertEquals(1, slots.length);
assertEquals(r0c1d5.d, Masker.Slot.dir(slots[0].key())); assertEquals(r0c1d5.d, Masker.Slot.dir(slots[0].key()));
} }
@Test @Test
void testExportFormatFromFilled() { void testExportFormatFromFilled() {
val clues = Clued.of(r0c0d1, r0c5d3); val clues = Signa.of(r0c0d1, r0c5d3);
var grid = new Gridded(clues); var grid = new Puzzle(clues);
// key = (cellIndex << 2) | (direction) // key = (cellIndex << 2) | (direction)
var key = r0c0d1.slotKey; var key = r0c0d1.slotKey;
@@ -346,7 +346,7 @@ public class MarkerTest {
var grid = SwedishGeneratorTest.createEmpty(); var grid = SwedishGeneratorTest.createEmpty();
val clues = Clues.createEmpty(); val clues = Clues.createEmpty();
var fillResult = new FillResult(true, 0, 0, 0, 0, new FillStats()); var fillResult = new FillResult(true, 0, 0, 0, 0, new FillStats());
var puzzleResult = new PuzzleResult(new Clued(clues), new Gridded(grid, clues), new Slotinfo[0], fillResult); var puzzleResult = new PuzzleResult(new Signa(clues), new Puzzle(grid, clues), new Slotinfo[0], fillResult);
var exported = puzzleResult.exportFormatFromFilled(new Rewards(0, 0, 0)); var exported = puzzleResult.exportFormatFromFilled(new Rewards(0, 0, 0));
@@ -362,19 +362,20 @@ public class MarkerTest {
@Test @Test
void testShardToClue() { void testShardToClue() {
var bytes = Export.BYTES.get();
for (var length = 2; length <= 8; length++) { for (var length = 2; length <= 8; length++) {
val entry = DictData950.DICT950.index()[length]; val entry = DictData950.DICT950.index()[length];
if (entry == null) continue; if (entry == null) continue;
val words = entry.words(); val words = entry.words();
for (var i = 0; i < Math.min(words.length, 5); i++) { for (var i = 0; i < Math.min(words.length, 5); i++) {
val wordVal = words[i]; val wordVal = words[i];
val word = Lemma.asWord(wordVal, Export.BYTES.get());
val clueRec = Meta.lookup(wordVal);
assertNotNull(clueRec); val rec = Meta.lookupSilent(wordVal);
assertEquals(word, Lemma.asWord(clueRec.w(), Export.BYTES.get()));
assertTrue(clueRec.simpel() >= 0); assertNotNull(rec);
assertTrue(clueRec.clues().length > 0); assertEquals(Lemma.asWord(wordVal, bytes), Lemma.asWord(rec.w(), bytes));
assertTrue(rec.simpel() >= 0);
assertTrue(rec.clues().length > 0);
} }
} }
} }
@@ -382,13 +383,14 @@ public class MarkerTest {
@Test @Test
void testSpecificWords() { void testSpecificWords() {
// These words are known to be in the CSV and likely in the dictionary // These words are known to be in the CSV and likely in the dictionary
var bytes = Export.BYTES.get();
var testWords = new String[]{ "EEN", "NAAR", "IEDEREEN" }; var testWords = new String[]{ "EEN", "NAAR", "IEDEREEN" };
for (var wStr : testWords) { for (var wStr : testWords) {
var w = Lemma.from(wStr); var w = Lemma.from(wStr);
val clueRec = Meta.lookup(w); val clueRec = Meta.lookupSilent(w);
assertNotNull(clueRec); assertNotNull(clueRec);
assertEquals(wStr, Lemma.asWord(clueRec.w(), Export.BYTES.get())); assertEquals(wStr, Lemma.asWord(clueRec.w(), bytes));
// Check some expected complexity values (from CSV head output, column 3) // Check some expected complexity values (from CSV head output, column 3)
if (wStr.equals("EEN")) { if (wStr.equals("EEN")) {
assertEquals(451, clueRec.simpel()); assertEquals(451, clueRec.simpel());

View File

@@ -1,11 +1,13 @@
package puzzle; package puzzle;
import module java.base; import module java.base;
import anno.DictGen;
import anno.Dictionaries;
import lombok.val; import lombok.val;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import puzzle.Export.Clue; import puzzle.Export.Clue;
import puzzle.Export.Clued; import puzzle.Export.Signa;
import puzzle.Export.Gridded; import puzzle.Export.Puzzle;
import puzzle.Masker.Clues; import puzzle.Masker.Clues;
import puzzle.SwedishGenerator.Rng; import puzzle.SwedishGenerator.Rng;
import puzzle.SwedishGenerator.Slotinfo; import puzzle.SwedishGenerator.Slotinfo;
@@ -13,9 +15,24 @@ import puzzle.SwedishGenerator.Slotinfo;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static precomp.Const9x8.Cell.*; import static precomp.Const9x8.Cell.*;
import static puzzle.SwedishGenerator.fillMask; import static puzzle.SwedishGenerator.fillMask;
import static puzzle.dict800.DictData.DICT800; import static puzzle.dict800.DictData800.DICT800;
import static puzzle.dict900.DictData.DICT900; import static puzzle.dict900.DictData900.DICT900;
@Dictionaries({ @DictGen(
packageName = "puzzle.dict900",
className = "DictData900",
scv = "/home/mike/dev/puzzle-generator/nl_score_hints_v4.csv",
simpleMax = 900,
minLen = 2,
maxLen = 8
), @DictGen(
packageName = "puzzle.dict800",
className = "DictData800",
scv = "/home/mike/dev/puzzle-generator/nl_score_hints_v4.csv",
simpleMax = 800,
minLen = 2,
maxLen = 8
) })
public class PerformanceTest { public class PerformanceTest {
void main() { void main() {
@@ -73,7 +90,7 @@ public class PerformanceTest {
void testIncrementalComplexity() { void testIncrementalComplexity() {
// Use the complex mask from Main.java // Use the complex mask from Main.java
var mask = Clued.of( var mask = Signa.of(
r0c0d1, r0c5d0, r0c6d0, r0c7d0, r0c8d0, r0c0d1, r0c5d0, r0c6d0, r0c7d0, r0c8d0,
r1c0d1, r1c0d1,
r2c0d0, r2c1d0, r2c3d0, r2c4d1, r2c0d0, r2c1d0, r2c3d0, r2c4d1,
@@ -103,7 +120,7 @@ public class PerformanceTest {
val rng = new Rng(42); val rng = new Rng(42);
// A single horizontal slot at (0,0) // A single horizontal slot at (0,0)
val mask = Clued.of(r0c0d1); val mask = Signa.of(r0c0d1);
val slots = Masker.slots(mask.c(), DICT800.index()); val slots = Masker.slots(mask.c(), DICT800.index());
System.out.println("[DEBUG_LOG] \n--- Single Slot Resolution ---"); System.out.println("[DEBUG_LOG] \n--- Single Slot Resolution ---");
@@ -160,7 +177,7 @@ public class PerformanceTest {
var slotChar = dir.slotChar; var slotChar = dir.slotChar;
display[cr][cc] = clueChar; display[cr][cc] = clueChar;
Gridded.cellWalk((byte) slot.key(), slot.lo(), slot.hi()).forEach(idx -> { Puzzle.cellWalk((byte) slot.key(), slot.lo(), slot.hi()).forEach(idx -> {
var r = Masker.IT[idx].r(); var r = Masker.IT[idx].r();
var c = Masker.IT[idx].c(); var c = Masker.IT[idx].c();
if (display[r][c] == ' ' || (display[r][c] >= 'A' && display[r][c] <= 'D')) { if (display[r][c] == ' ' || (display[r][c] >= 'A' && display[r][c] <= 'D')) {

View File

@@ -3,12 +3,12 @@ package puzzle;
import module java.base; import module java.base;
import module java.sql; import module java.sql;
public final class HintScores { public final class ScoreHintsTask {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Class.forName("org.sqlite.JDBC"); Class.forName("org.sqlite.JDBC");
try (Connection conn = DriverManager.getConnection("jdbc:sqlite:tools/hint/hint.sqlite")) { try (Connection conn = DriverManager.getConnection("jdbc:sqlite:tools/hint/hint.sqlite")) {
updateCrossScores(conn, HintScores::crossabilityScore, 1000); updateCrossScores(conn, ScoreHintsTask::crossabilityScore, 1000);
} }
} }
static final Map<Character, Integer> LETTER_WEIGHT = Map.ofEntries( static final Map<Character, Integer> LETTER_WEIGHT = Map.ofEntries(

View File

@@ -1,16 +1,17 @@
package puzzle; package puzzle;
import module java.base; import module java.base;
import gen.GenerateDict; import anno.GenerateNeighbor;
import gen.GenerateNeighbors; import anno.GenerateNeighbors;
import anno.LemmaGen;
import lombok.val; import lombok.val;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import precomp.Neighbors9x8.rci; import precomp.Neighbors9x8.rci;
import puzzle.DictJavaGeneratorMulti.DictEntryDTO.IntListDTO; import puzzle.DictJavaGeneratorMulti.DictEntryDTO.IntListDTO;
import puzzle.Export.Clued; import puzzle.Export.Signa;
import puzzle.Export.Gridded; import puzzle.Export.Puzzle;
import puzzle.Export.LetterAt; import puzzle.Export.Lettrix;
import puzzle.Masker.Clues; import puzzle.Masker.Clues;
import puzzle.Masker.Slot; import puzzle.Masker.Slot;
@@ -37,17 +38,15 @@ import static puzzle.LemmaData.INEREN;
import static puzzle.LemmaData.INERENA; import static puzzle.LemmaData.INERENA;
import static puzzle.LemmaData.INERENAE; import static puzzle.LemmaData.INERENAE;
import static puzzle.SwedishGenerator.*; import static puzzle.SwedishGenerator.*;
@GenerateNeighbors(C = 4, R = 3, packageName = "precomp", className = "Neighbors4x3", MIN_LEN = 2) @GenerateNeighbors(@GenerateNeighbor(C = 4, R = 3, packageName = "precomp", className = "Neighbors4x3", MIN_LEN = 2))
@GenerateDict( @LemmaGen(
packageName = "puzzle", packageName = "puzzle",
className = "LemmaData", className = "LemmaData",
scv = "nl_score_hints_v4.csv",
words = { words = {
"EEN", "NAAR", "IEDEREEN", "A", "C", "X", "TEST", "IN", "INE", "INER", "INEREN", "INERENA", "INERENAE", "EEN", "NAAR", "IEDEREEN", "A", "C", "X", "TEST", "IN", "INE", "INER", "INEREN", "INERENA", "INERENAE",
"APPLE", "AXE", "ABC", "ABD", "AZ", "AB", "APPLE", "AXE", "ABC", "ABD", "AZ", "AB",
"AT", "CAT", "DOGS", "APPLY", "BANAN", "BANANA", "BANANAS", "BANANASS" "AT", "CAT", "DOGS", "APPLY", "BANAN", "BANANA", "BANANAS", "BANANASS"
}, },
simpleMax=900,
minLen = 2, minLen = 2,
maxLen = 8 maxLen = 8
) )
@@ -105,9 +104,9 @@ public class SwedishGeneratorTest {
@Test @Test
void testPatternForSlotAllLetters() { void testPatternForSlotAllLetters() {
var grid = new Gridded(Clued.of(r0c0d1)); var grid = new Puzzle(Signa.of(r0c0d1));
GridBuilder.placeWord(grid.grid(), grid.grid().g, r0c0d1.slotKey, (1L << OFF_0_1) | (1L << OFF_0_2) | (1L << OFF_0_3), 0L, ABC); GridBuilder.placeWord(grid.grid(), grid.grid().g, r0c0d1.slotKey, (1L << OFF_0_1) | (1L << OFF_0_2) | (1L << OFF_0_3), 0L, ABC);
val map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); val map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(LETTER_A, map.get(OFF_0_1)); assertEquals(LETTER_A, map.get(OFF_0_1));
assertEquals(LETTER_B, map.get(OFF_0_2)); assertEquals(LETTER_B, map.get(OFF_0_2));
assertEquals(LETTER_C, map.get(OFF_0_3)); assertEquals(LETTER_C, map.get(OFF_0_3));
@@ -167,9 +166,9 @@ public class SwedishGeneratorTest {
@Test @Test
void testGrid() { void testGrid() {
var grid = new Gridded(Clues.createEmpty()); var grid = new Puzzle(Clues.createEmpty());
GridBuilder.placeWord(grid.grid(), grid.grid().g, r0c0d1.slotKey, 1L << OFF_0_0, 0, WORD_A); GridBuilder.placeWord(grid.grid(), grid.grid().g, r0c0d1.slotKey, 1L << OFF_0_0, 0, WORD_A);
val arr = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); val arr = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(1, arr.size()); assertEquals(1, arr.size());
assertEquals(LETTER_A, arr.get(OFF_0_0)); assertEquals(LETTER_A, arr.get(OFF_0_0));
} }
@@ -229,7 +228,7 @@ public class SwedishGeneratorTest {
assertEquals(OFF_2_3, Slot.clueIndex(key)); assertEquals(OFF_2_3, Slot.clueIndex(key));
assertEquals(CLUE_DOWN, Slot.dir(key)); assertEquals(CLUE_DOWN, Slot.dir(key));
assertFalse(Slot.horiz(key)); assertFalse(Slot.horiz(key));
var cells = Gridded.cellWalk((byte) key, lo, 0L).mapToObj(i -> Masker.IT[i]).toArray(rci[]::new); var cells = Puzzle.cellWalk((byte) key, lo, 0L).mapToObj(i -> Masker.IT[i]).toArray(rci[]::new);
assertEquals(2, cells[0].r()); assertEquals(2, cells[0].r());
assertEquals(3, cells[1].r()); assertEquals(3, cells[1].r());
assertEquals(4, cells[2].r()); assertEquals(4, cells[2].r());
@@ -268,7 +267,7 @@ public class SwedishGeneratorTest {
void testForEachSlotAndExtractSlots() { void testForEachSlotAndExtractSlots() {
// This should detect a slot starting at 0,1 with length 2 (0,1 and 0,2) // This should detect a slot starting at 0,1 with length 2 (0,1 and 0,2)
var dict = DictJavaGeneratorMulti.Dicts.makeDict(WORDS2); var dict = DictJavaGeneratorMulti.Dicts.makeDict(WORDS2);
var slots = Masker.extractSlots(Clued.of(r0c0d1).c(), dict.index()); var slots = Masker.extractSlots(Signa.of(r0c0d1).c(), dict.index());
assertEquals(1, slots.length); assertEquals(1, slots.length);
var s = slots[0]; var s = slots[0];
@@ -296,10 +295,10 @@ public class SwedishGeneratorTest {
var rng = new Rng(42); var rng = new Rng(42);
var gen = new Masker(rng, new int[Masker.STACK_SIZE], Masker.Clues.createEmpty()); var gen = new Masker(rng, new int[Masker.STACK_SIZE], Masker.Clues.createEmpty());
var c1 = new Clued(gen.randomMask(18)); var c1 = new Signa(gen.randomMask(18));
assertNotNull(c1); assertNotNull(c1);
var g2 = new Clued(gen.mutate(c1.deepCopyGrid().c())); var g2 = new Signa(gen.mutate(c1.deepCopyGrid().c()));
assertNotNull(g2); assertNotNull(g2);
assertNotSame(c1.c(), g2.c()); assertNotSame(c1.c(), g2.c());
@@ -311,7 +310,7 @@ public class SwedishGeneratorTest {
@Test @Test
void testPlaceWord() { void testPlaceWord() {
var grid = new Gridded(Clues.createEmpty()); var grid = new Puzzle(Clues.createEmpty());
// Slot at OFF_0_0 length 3, horizontal (right) // Slot at OFF_0_0 length 3, horizontal (right)
var key = Slot.packSlotKey(0, CLUE_RIGHT); var key = Slot.packSlotKey(0, CLUE_RIGHT);
var lo = (1L << OFF_0_0) | (1L << OFF_0_1) | (1L << OFF_0_2); var lo = (1L << OFF_0_0) | (1L << OFF_0_1) | (1L << OFF_0_2);
@@ -321,7 +320,7 @@ public class SwedishGeneratorTest {
// 1. Successful placement in empty grid // 1. Successful placement in empty grid
assertTrue(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, w1)); assertTrue(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, w1));
var map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); var map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(3, map.size()); assertEquals(3, map.size());
assertEquals(LETTER_A, map.get(OFF_0_0)); assertEquals(LETTER_A, map.get(OFF_0_0));
assertEquals(LETTER_B, map.get(OFF_0_1)); assertEquals(LETTER_B, map.get(OFF_0_1));
@@ -332,24 +331,24 @@ public class SwedishGeneratorTest {
// 3. Conflict: place "ABD" where "ABC" is // 3. Conflict: place "ABD" where "ABC" is
assertFalse(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, ABD)); assertFalse(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, ABD));
// Verify grid is unchanged (still "ABC") // Verify grid is unchanged (still "ABC")
map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(3, map.size()); assertEquals(3, map.size());
assertEquals(LETTER_A, map.get(OFF_0_0)); assertEquals(LETTER_A, map.get(OFF_0_0));
assertEquals(LETTER_B, map.get(OFF_0_1)); assertEquals(LETTER_B, map.get(OFF_0_1));
assertEquals(LETTER_C, map.get(OFF_0_2)); assertEquals(LETTER_C, map.get(OFF_0_2));
// 4. Partial placement then conflict (rollback) // 4. Partial placement then conflict (rollback)
grid = new Gridded(Clues.createEmpty()); grid = new Puzzle(Clues.createEmpty());
GridBuilder.placeWord(grid.grid(), grid.grid().g, Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_2, 0, WORD_X); // Conflict at the end GridBuilder.placeWord(grid.grid(), grid.grid().g, Slot.packSlotKey(0, CLUE_RIGHT), 1L << OFF_0_2, 0, WORD_X); // Conflict at the end
assertFalse(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, w1)); assertFalse(GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, hi, w1));
map = grid.stream().collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); map = grid.stream().collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(1, map.size()); assertEquals(1, map.size());
assertEquals(LETTER_X, map.get(OFF_0_2)); assertEquals(LETTER_X, map.get(OFF_0_2));
} }
@Test @Test
void testBacktrackingHelpers() { void testBacktrackingHelpers() {
var grid = new Gridded(Clues.createEmpty()); var grid = new Puzzle(Clues.createEmpty());
// Slot at 0,1 length 2 // Slot at 0,1 length 2
var key = Slot.packSlotKey(0, CLUE_RIGHT); var key = Slot.packSlotKey(0, CLUE_RIGHT);
var lo = (1L << OFF_0_1) | (1L << OFF_0_2); var lo = (1L << OFF_0_1) | (1L << OFF_0_2);
@@ -359,14 +358,14 @@ public class SwedishGeneratorTest {
var placed = GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, 0L, w); var placed = GridBuilder.placeWord(grid.grid(), grid.grid().g, key, lo, 0L, w);
assertTrue(placed); assertTrue(placed);
var map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); var map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(2, map.size()); assertEquals(2, map.size());
assertEquals(LETTER_A, map.get(OFF_0_1)); assertEquals(LETTER_A, map.get(OFF_0_1));
assertEquals(LETTER_Z, map.get(OFF_0_2)); assertEquals(LETTER_Z, map.get(OFF_0_2));
grid.grid().hi = top; grid.grid().hi = top;
grid.grid().lo = low; grid.grid().lo = low;
map = grid.collect(Collectors.toMap(LetterAt::index, LetterAt::letter)); map = grid.collect(Collectors.toMap(Lettrix::index, Lettrix::letter));
assertEquals(0, map.size()); assertEquals(0, map.size());
assertFalse(map.containsKey(OFF_0_1)); assertFalse(map.containsKey(OFF_0_1));
assertFalse(map.containsKey(OFF_0_2)); assertFalse(map.containsKey(OFF_0_2));