com.mike.angry.main.SolverResultOutput.java Source code

Java tutorial

Introduction

Here is the source code for com.mike.angry.main.SolverResultOutput.java

Source

/**
 * Project: ShuduSolver
 * 
 * File Created at 2013-5-11
 * $Id$
 * 
 * Copyright 1999-2100 Alibaba.com Corporation Limited.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information of
 * Alibaba Company. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Alibaba.com.
 */
package com.mike.angry.main;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.util.Assert;

import com.mike.angry.dm.DataModel;
import com.mike.angry.dm.DataModelStatusHelper;
import com.mike.angry.dm.Digital;
import com.mike.angry.dm.DigitalResolveResultDO;
import com.mike.angry.dm.RuleResolveResultDO;

/**
 * ?
 * 
 * @author haiquan.guhq
 */
public abstract class SolverResultOutput {

    public static final Logger log = Logger.getLogger(SolverResultOutput.class);

    public static void printResult(DataModel dataModel) {
        // ??
        log.info("puzzle:" + dataModel.getPath() + "\t");
        String abc = DataModelStatusHelper.isSolved(dataModel) ? "?"
                : "";
        log.info(abc);
        for (int i = 0; i < 9; i++) {
            StringBuffer oneline = new StringBuffer("");
            for (int j = 0; j < 9; j++) {
                Digital digital = dataModel.getBigSquare()[i][j];
                if (digital.isDetermined()) {
                    oneline.append(digital.getNumber() + ",");
                } else {
                    oneline.append("?,");
                }
            }
            log.info("line " + i + ":\t " + oneline.toString());
        }

        // 
        log.info("=============\n");

        StringBuffer oneline = new StringBuffer("\n");

        int total = processRuleResolveResult(oneline, dataModel);
        log.info("?" + dataModel.getInitValued() + "\t" + "" + total + "\t"
                + "" + DataModelStatusHelper.calcNotFound(dataModel) + "!");
        log.info(oneline);

        Assert.isTrue(81 == dataModel.getInitValued() + total + DataModelStatusHelper.calcNotFound(dataModel));
        // ?
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                log.debug(dataModel.getBigSquare()[i][j].toString());
            }
        }
    }

    private static int processRuleResolveResult(StringBuffer oneline, DataModel dataModel) {
        int total = 0;
        List<List<RuleResolveResultDO>> fixedProcess = dataModel.getFixedProcess();
        for (int i = 0; i < fixedProcess.size(); i++) {
            List<RuleResolveResultDO> resolvdList = fixedProcess.get(i);
            oneline.append("\n" + (i + 1) + "" + resolvdList.size() + "??");

            for (RuleResolveResultDO oneItem : resolvdList) {
                // ?
                List<DigitalResolveResultDO> dList = oneItem.getDecidedList();
                oneline.append("" + oneItem.getRuleName() + " " + dList.size() + ":\n");

                for (DigitalResolveResultDO oneDigital : dList) {
                    oneline.append(oneDigital.getDigital().getNumber() + "(" + oneDigital.getDigital().getX() + ","
                            + oneDigital.getDigital().getY() + ")" + ", ");
                }
                oneline.append("\n");
                total += dList.size();

                // ??
                // List<DigitalResolveResultDO> allAffactList = oneItem
                // .getAllAffactList();
                // oneline.append("" + oneItem.getRuleName() + " ? "
                // + allAffactList.size() + ":\n");
                // for (DigitalResolveResultDO oneDigital : allAffactList) {
                // oneline.append("(" + oneDigital.getDigital().getX() + ","
                // + oneDigital.getDigital().getY() + ")" + "??"
                // + oneDigital.getDeduceNums() + "; ");
                // }
                // oneline.append("\n");

            }
        }
        return total;
    }

    public static void recordInitValued(DataModel dataModel) {
        int count = 0;
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (dataModel.getBigSquare()[i][j].isDetermined()) {
                    count++;

                }
            }
        }

        dataModel.setInitValued(count);
    }

    public static void printResultForDebug(DataModel dataModel) {
        String empty = " ";
        // ?
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                Digital digital = dataModel.getBigSquare()[i][j];
                StringBuffer emptys = new StringBuffer();
                if (digital.isDetermined()) {
                    for (int k = 0; k < 8; k++) {
                        emptys.append(empty);
                    }
                    System.out.print((digital.getNumber()) + emptys.toString() + ",");
                } else {
                    List<Integer> possibleNums = digital.getPossibleNums();
                    for (Integer oneInt : possibleNums) {
                        emptys.append(oneInt);
                    }

                    for (int k = 0; k < 9 - possibleNums.size(); k++) {
                        emptys.append(empty);
                    }

                    System.out.print(emptys.toString() + ",");
                }
            }
            System.out.println();
        }
    }
}