Search in sources :

Example 6 with NormalOrder

use of common.datastore.order.NormalOrder in project solution-finder by knewjade.

the class CheckmateNoHold method search.

@Override
public List<Result> search(Field initField, Piece[] pieces, Candidate<T> candidate, int maxClearLine, int maxDepth) {
    Field freeze = initField.freeze(maxClearLine);
    int deleteLine = freeze.clearLine();
    dataPool.initFirst(new NormalOrder(freeze, null, maxClearLine - deleteLine, maxDepth));
    for (int depth = 0; depth < maxDepth; depth++) {
        TreeSet<Order> orders = dataPool.getNexts();
        dataPool.initEachDepth();
        assert depth < pieces.length;
        boolean isLast = depth == maxDepth - 1;
        for (int count = 0, size = orders.size(); count < size; count++) {
            Order order = orders.pollFirst();
            searcherCore.stepWithNextNoHold(candidate, pieces[depth], order, isLast);
        }
    }
    return dataPool.getResults();
}
Also used : Order(common.datastore.order.Order) NormalOrder(common.datastore.order.NormalOrder) Field(core.field.Field) NormalOrder(common.datastore.order.NormalOrder)

Example 7 with NormalOrder

use of common.datastore.order.NormalOrder in project solution-finder by knewjade.

the class CheckmateNoHoldReuse method search.

@Override
public List<Result> search(Field initFieldOrigin, Piece[] pieces, Candidate<T> candidate, int maxClearLine, int maxDepth) {
    Field initField = initFieldOrigin.freeze(maxClearLine);
    int deleteLine = initField.clearLine();
    int height = maxClearLine - deleteLine;
    TreeSet<Order> orders = new TreeSet<>();
    // 最初の探索開始depthとordersを調整
    int startDepth;
    if (!equalsField(lastField, initField) || lastPieces == null) {
        // mementoの初期化
        // 初めから
        memento = new ArrayList<>();
        orders.add(new NormalOrder(initField, null, height, maxDepth));
        startDepth = 0;
        memento.add(new TreeSet<>(orders));
    } else {
        int reuseIndex = -1;
        for (int index = 0; index < maxDepth; index++) {
            if (lastPieces[index] == pieces[index])
                reuseIndex = index;
            else
                break;
        }
        if (reuseIndex < 0) {
            memento = new ArrayList<>();
            orders.add(new NormalOrder(initField, null, height, maxDepth));
            startDepth = 0;
            memento.add(new TreeSet<>(orders));
        } else if (reuseIndex == maxDepth - 1) {
            return dataPool.getResults();
        } else {
            orders.addAll(memento.get(reuseIndex));
            startDepth = reuseIndex;
            memento = memento.subList(0, reuseIndex + 1);
        }
    }
    dataPool.resetResults();
    for (int depth = startDepth; depth < maxDepth; depth++) {
        dataPool.initEachDepth();
        assert depth < pieces.length;
        boolean isLast = depth == maxDepth - 1;
        for (int count = 0, size = orders.size(); count < size; count++) {
            Order order = orders.pollFirst();
            searcherCore.stepWithNextNoHold(candidate, pieces[depth], order, isLast);
        }
        orders = dataPool.getNexts();
        memento.add(new TreeSet<>(orders));
    }
    lastPieces = pieces;
    lastField = initField;
    return dataPool.getResults();
}
Also used : Order(common.datastore.order.Order) NormalOrder(common.datastore.order.NormalOrder) SmallField(core.field.SmallField) Field(core.field.Field) NormalOrder(common.datastore.order.NormalOrder) TreeSet(java.util.TreeSet)

Aggregations

NormalOrder (common.datastore.order.NormalOrder)7 Order (common.datastore.order.Order)7 Field (core.field.Field)7 Piece (core.mino.Piece)3 SmallField (core.field.SmallField)2 TreeSet (java.util.TreeSet)2 OperationHistory (common.OperationHistory)1 Result (common.datastore.Result)1 Mino (core.mino.Mino)1