use of core.mino.MinoShifter in project solution-finder by knewjade.
the class AllSeparableMinoFactoryTest method create3x3.
@Test
void create3x3() throws Exception {
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
int width = 3;
int height = 3;
Set<SeparableMino> minos = getSeparableMinos(minoFactory, minoShifter, width, height);
assertThat(minos.stream()).hasSize(114);
assertThat(minos.stream().filter(createBlockPredicate(Piece.T))).hasSize(24);
assertThat(minos.stream().filter(createBlockPredicate(Piece.I))).hasSize(9);
assertThat(minos.stream().filter(createBlockPredicate(Piece.S))).hasSize(12);
assertThat(minos.stream().filter(createBlockPredicate(Piece.Z))).hasSize(12);
assertThat(minos.stream().filter(createBlockPredicate(Piece.O))).hasSize(9);
assertThat(minos.stream().filter(createBlockPredicate(Piece.L))).hasSize(24);
assertThat(minos.stream().filter(createBlockPredicate(Piece.J))).hasSize(24);
}
use of core.mino.MinoShifter in project solution-finder by knewjade.
the class AllSeparableMinoFactoryTest method create3x5.
@Test
void create3x5() throws Exception {
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
int width = 3;
int height = 5;
Set<SeparableMino> minos = getSeparableMinos(minoFactory, minoShifter, width, height);
assertThat(minos.stream()).hasSize(540);
assertThat(minos.stream().filter(createBlockPredicate(Piece.T))).hasSize(120);
assertThat(minos.stream().filter(createBlockPredicate(Piece.I))).hasSize(30);
assertThat(minos.stream().filter(createBlockPredicate(Piece.S))).hasSize(60);
assertThat(minos.stream().filter(createBlockPredicate(Piece.Z))).hasSize(60);
assertThat(minos.stream().filter(createBlockPredicate(Piece.O))).hasSize(30);
assertThat(minos.stream().filter(createBlockPredicate(Piece.L))).hasSize(120);
assertThat(minos.stream().filter(createBlockPredicate(Piece.J))).hasSize(120);
}
use of core.mino.MinoShifter in project solution-finder by knewjade.
the class MappedBasicSolutionsFactoryTest method createSeparableMinos.
private static SeparableMinos createSeparableMinos(SizedBit sizedBit) {
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
return SeparableMinos.createSeparableMinos(minoFactory, minoShifter, sizedBit);
}
use of core.mino.MinoShifter in project solution-finder by knewjade.
the class HarddropBuildUpListUpThreadLocal method initialValue.
@Override
protected BuildUpStream initialValue() {
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
HarddropReachable reachable = new HarddropReachable(minoFactory, minoShifter, height);
return new BuildUpStream(reachable, height);
}
use of core.mino.MinoShifter in project solution-finder by knewjade.
the class PathEntryPoint method run.
@Override
public void run() throws FinderException {
output("# Setup Field");
// Setup field
Field field = settings.getField();
Verify.field(field);
// Setup max clear line
int maxClearLine = settings.getMaxClearLine();
Verify.maxClearLineUnder10(maxClearLine);
// Setup reserved blocks
BlockField reservedBlocks = settings.getReservedBlock();
if (settings.isReserved()) {
Verify.reservedBlocks(reservedBlocks);
for (int y = maxClearLine - 1; 0 <= y; y--) {
StringBuilder builder = new StringBuilder();
for (int x = 0; x < 10; x++) {
if (reservedBlocks.getBlock(x, y) != null)
builder.append(reservedBlocks.getBlock(x, y).getName());
else if (!field.isEmpty(x, y))
builder.append('X');
else
builder.append('_');
}
output(builder.toString());
}
} else {
output(FieldView.toString(field, maxClearLine));
}
// Setup max depth
// パフェに必要なミノ数
int maxDepth = Verify.maxDepth(field, maxClearLine);
output();
// ========================================
// Output user-defined
output("# Initialize / User-defined");
output("Max clear lines: " + maxClearLine);
output("Using hold: " + (settings.isUsingHold() ? "use" : "avoid"));
output("Drop: " + settings.getDropType().name().toLowerCase());
output("Searching patterns:");
// Setup patterns
List<String> patterns = settings.getPatterns();
PatternGenerator generator = Verify.patterns(patterns, maxDepth);
// Output patterns
for (String pattern : patterns) output(" " + pattern);
output();
// ========================================
// Setup core
output("# Initialize / System");
int threadCount = getThreadCount();
// Output system-defined
output("Version = " + FinderConstant.VERSION);
output("Threads = " + threadCount);
output("Need Pieces = " + maxDepth);
output();
// ========================================
// Initialize
MinoFactory minoFactory = new MinoFactory();
MinoShifter minoShifter = new MinoShifter();
ColorConverter colorConverter = new ColorConverter();
SizedBit sizedBit = decideSizedBitSolutionWidth(maxClearLine);
SolutionFilter solutionFilter = new ForPathSolutionFilter(generator, maxClearLine);
// Holdができるときは必要なミノ分(maxDepth + 1)だけを取り出す。maxDepth + 1だけないときはブロックの個数をそのまま指定
output("# Enumerate pieces");
boolean isUsingHold = settings.isUsingHold();
int piecesDepth = generator.getDepth();
output("Piece pop count = " + (isUsingHold && maxDepth < piecesDepth ? maxDepth + 1 : maxDepth));
output();
// ========================================
output("# Cache");
output(" -> Stopwatch start");
Stopwatch stopwatch1 = Stopwatch.createStartedStopwatch();
BasicSolutions basicSolutions = calculateBasicSolutions(field, minoFactory, minoShifter, sizedBit, solutionFilter);
stopwatch1.stop();
output(" ... done");
output(" -> Stopwatch stop : " + stopwatch1.toMessage(TimeUnit.MILLISECONDS));
output();
// ========================================
output("# Search");
output(" -> Stopwatch start");
output(" ... searching");
Stopwatch stopwatch2 = Stopwatch.createStartedStopwatch();
PathCore pathCore = createPathCore(field, maxClearLine, maxDepth, patterns, minoFactory, colorConverter, sizedBit, solutionFilter, isUsingHold, basicSolutions, threadCount);
List<PathPair> pathPairs = run(pathCore, field, sizedBit, reservedBlocks);
stopwatch2.stop();
output(" ... done");
output(" -> Stopwatch stop : " + stopwatch2.toMessage(TimeUnit.MILLISECONDS));
output();
// ========================================
output("# Output file");
OutputType outputType = settings.getOutputType();
PathOutput pathOutput = createOutput(outputType, generator, maxDepth);
pathOutput.output(pathPairs, field, sizedBit);
output();
// ========================================
output("# Finalize");
output("done");
}
Aggregations