local.laer.app.knapsack.support.KnapsackSolution.java Source code

Java tutorial

Introduction

Here is the source code for local.laer.app.knapsack.support.KnapsackSolution.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package local.laer.app.knapsack.support;

import com.google.common.base.CharMatcher;
import com.google.common.collect.ImmutableMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import local.laer.app.knapsack.domain.Cell;
import local.laer.app.knapsack.domain.Item;
import local.laer.app.knapsack.domain.Position;
import static local.laer.app.knapsack.support.IntFunctions.merge;
import static local.laer.app.knapsack.support.OffsetBinaryMatrix.convertToBool;

/**
 *
 * @author Lars Eriksson (larsq.eriksson@gmail.com)
 */
public class KnapsackSolution {

    public KnapsackSolution(Region region, Map<Cell<String>, Item> map) {
        this.area = region.shape();
        this.items = ImmutableMap.copyOf(map);
    }

    private final OffsetBinaryMatrix area;
    private final Map<Cell<String>, Item> items;

    public Map<Cell<String>, Item> getItems() {
        return items;
    }

    public OffsetBinaryMatrix getArea() {
        return area;
    }

    private OffsetIntMatrix itemMatrix(Position position, Item item) {
        OffsetIntMatrix m = OffsetIntMatrixParser.valueOf(item.getShape());
        return m.translateTo(position);
    }

    public OffsetIntMatrix asIntMatrix() {
        OffsetIntMatrix m = OffsetIntMatrixParser.valueOf(area);
        m.mutableTransform(IntFunctions.fillWith(0));

        items.entrySet().forEach(e -> {
            OffsetIntMatrix itemM = itemMatrix(e.getKey(), e.getValue());
            m.mutableTransform(
                    merge(itemM, (current, other) -> convertToBool(other) ? e.getValue().getId() : current));
        });

        return m;
    }

}