package puzzle;

public final class DictDataL8 {
  private DictDataL8() {}

  static final int LEN = 8;
  static final int ROWS = 208;
  static final int COLS = 207;
  static final int WORDS_LEN = 13238;
  static final int POS_LEN = 43056;

  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 SwedishGenerator.DictEntry entry() {
    long[] wds = words();
    long[] flat = posFlat();
    long[][] pos = reshape(flat, ROWS, COLS);
    return new 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;
  }
}
