// Path: src/main/java/net/zomis/minesweeper/analyze/AnalyzeResult.java
// public interface AnalyzeResult<T> {
// 	AnalyzeResult<T> cloneAddSolve(List<RuleConstraint<T>> extraRules);
// 	
// 	List<T> getFields();
// 	
// 	FieldGroup<T> getGroupFor(T field);
// 	
// 	List<FieldGroup<T>> getGroups();
// 	
// 	List<RuleConstraint<T>> getOriginalRules();
// 	
// 	double getProbabilityOf(List<RuleConstraint<T>> extraRules);
// 	
// 	List<RuleConstraint<T>> getRules();
// 	
// 	List<T> getSolution(double solution);
// 
// 	Iterable<Solution<T>> getSolutionIteration();
// 
// 	List<Solution<T>> getSolutions();
// 
// 	/**
// 	 * Get the total number of combinations of Field placements.
// 	 * @return The number of combinations for the analyze. 0 if the analyze is impossible.
// 	 */
// 	double getTotal();
// 
// 	List<T> randomSolution(Random random);
// 
// 	DetailedResults<T> analyzeDetailed(NeighborFind<T> neighborStrategy);
// 
// }


import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import net.zomis.minesweeper.analyze.AnalyzeResult;
package net.zomis.minesweeper.analyze.detail;



public class DetailedResultsImpl<T> implements DetailedResults<T> {

	private final AnalyzeResult<T> analyze;
	private final Map<T, ProbabilityKnowledge<T>> proxies;
	private final int proxyCount;

// Path: src/main/java/net/zomis/minesweeper/analyze/AnalyzeResult.java
// public interface AnalyzeResult<T> {
// 	AnalyzeResult<T> cloneAddSolve(List<RuleConstraint<T>> extraRules);
// 	
// 	List<T> getFields();
// 	
// 	FieldGroup<T> getGroupFor(T field);
// 	
// 	List<FieldGroup<T>> getGroups();
// 	
// 	List<RuleConstraint<T>> getOriginalRules();
// 	
// 	double getProbabilityOf(List<RuleConstraint<T>> extraRules);
// 	
// 	List<RuleConstraint<T>> getRules();
// 	
// 	List<T> getSolution(double solution);
// 
// 	Iterable<Solution<T>> getSolutionIteration();
// 
// 	List<Solution<T>> getSolutions();
// 
// 	/**
// 	 * Get the total number of combinations of Field placements.
// 	 * @return The number of combinations for the analyze. 0 if the analyze is impossible.
// 	 */
// 	double getTotal();
// 
// 	List<T> randomSolution(Random random);
// 
// 	DetailedResults<T> analyzeDetailed(NeighborFind<T> neighborStrategy);
// 
// }


// Path: src/main/java/net/zomis/minesweeper/analyze/detail/DetailedResultsImpl.java
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import net.zomis.minesweeper.analyze.AnalyzeResult;

package net.zomis.minesweeper.analyze.detail;



public class DetailedResultsImpl<T> implements DetailedResults<T> {

	private final AnalyzeResult<T> analyze;
	private final Map<T, ProbabilityKnowledge<T>> proxies;
	private final int proxyCount;

	public DetailedResultsImpl(AnalyzeResult<T> analyze, Map<T, FieldProxy<T>> proxies, int proxyCount) {