// Path: happycoding/src/main/java/happy/coding/io/Logs.java
// public class Logs {
// 	private final static Logger logger = LoggerFactory.getLogger(Logs.class);
// 	private static String conf = null;
// 
// 	// default configuration
// 	static {
// 		if ((conf = FileIO.getResource("log4j.properties")) != null)
// 			config(conf, false);
// 		else if ((conf = FileIO.getResource("log4j.xml")) != null)
// 			config(conf, true);
// 	}
// 
// 	public static Logger config(String config, boolean isXml) {
// 		if (isXml)
// 			DOMConfigurator.configure(config);
// 		else
// 			PropertyConfigurator.configure(config);
// 
// 		return logger;
// 	}
// 
// 	public static void debug(double data) {
// 		logger.debug(Strings.toString(data));
// 	}
// 
// 	public static void debug(Object msg) {
// 		logger.debug(msg.toString());
// 	}
// 
// 	public static void debug(String msg) {
// 		logger.debug(msg);
// 	}
// 
// 	public static void debug(String format, Object arg) {
// 		logger.debug(format, arg);
// 	}
// 
// 	public static void debug(String format, Object... args) {
// 		logger.debug(format, args);
// 	}
// 
// 	public static void debug() {
// 		debug("");
// 	}
// 
// 	public static void error() {
// 		error("");
// 	}
// 
// 	public static void warn() {
// 		warn("");
// 	}
// 
// 	public static void info() {
// 		info("");
// 	}
// 
// 	public static void info(double data) {
// 		logger.info(Strings.toString(data));
// 	}
// 
// 	public static void info(Object msg) {
// 		if (msg == null)
// 			logger.info("");
// 		else
// 			logger.info(msg.toString());
// 	}
// 
// 	public static void info(String format, Object arg) {
// 		logger.info(format, arg);
// 	}
// 
// 	public static void info(String format, Object... args) {
// 		logger.info(format, args);
// 	}
// 
// 	public static void error(double data) {
// 		logger.error(Strings.toString(data));
// 	}
// 
// 	public static void error(Object msg) {
// 		logger.error(msg.toString());
// 	}
// 
// 	public static void warn(String msg) {
// 		logger.warn(msg);
// 	}
// 
// 	public static void warn(String format, Object arg) {
// 		logger.warn(format, arg);
// 	}
// 
// 	public static void warn(String format, Object... args) {
// 		logger.warn(format, args);
// 	}
// 
// 	public static void warn(double data) {
// 		logger.warn(Strings.toString(data));
// 	}
// 
// 	public static void warn(Object msg) {
// 		logger.warn(msg.toString());
// 	}
// 
// 	public static void error(String msg) {
// 		logger.error(msg);
// 	}
// 
// 	public static void error(String format, Object arg) {
// 		logger.error(format, arg);
// 	}
// 
// 	public static void error(String format, Object... args) {
// 		logger.error(format, args);
// 	}
// 
// 	public static void off() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.OFF);
// 	}
// 
// 	public static void on() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
// 	}
// 
// 	@Test
// 	public void example() {
// 		String[] msgs = new String[] { "Section content: ", "@author guoguibing" };
// 
// 		debug(msgs);
// 	}
// 
// }


import happy.coding.io.Logs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.junit.Test;
	 * Generate a permutation from min to max
	 * 
	 * @param min
	 *            the minimum value
	 * @param max
	 *            the maximum value
	 * @return a permutation
	 */
	public static List<Integer> permute(int min, int max) {
		List<Integer> list = new ArrayList<>();

		int len = max - min + 1;
		for (int i = 0; i < len; i++) {
			while (true) {
				int index = uniform(min, max + 1);

				if (!list.contains(index)) {
					list.add(index);
					break;
				}
			}
		}

		return list;
	}

	@Test
	public void example_permute() {
		for (int i = 0; i < 20; i++) {
			List<Integer> perm = Randoms.permute(1, 5);
// Path: happycoding/src/main/java/happy/coding/io/Logs.java
// public class Logs {
// 	private final static Logger logger = LoggerFactory.getLogger(Logs.class);
// 	private static String conf = null;
// 
// 	// default configuration
// 	static {
// 		if ((conf = FileIO.getResource("log4j.properties")) != null)
// 			config(conf, false);
// 		else if ((conf = FileIO.getResource("log4j.xml")) != null)
// 			config(conf, true);
// 	}
// 
// 	public static Logger config(String config, boolean isXml) {
// 		if (isXml)
// 			DOMConfigurator.configure(config);
// 		else
// 			PropertyConfigurator.configure(config);
// 
// 		return logger;
// 	}
// 
// 	public static void debug(double data) {
// 		logger.debug(Strings.toString(data));
// 	}
// 
// 	public static void debug(Object msg) {
// 		logger.debug(msg.toString());
// 	}
// 
// 	public static void debug(String msg) {
// 		logger.debug(msg);
// 	}
// 
// 	public static void debug(String format, Object arg) {
// 		logger.debug(format, arg);
// 	}
// 
// 	public static void debug(String format, Object... args) {
// 		logger.debug(format, args);
// 	}
// 
// 	public static void debug() {
// 		debug("");
// 	}
// 
// 	public static void error() {
// 		error("");
// 	}
// 
// 	public static void warn() {
// 		warn("");
// 	}
// 
// 	public static void info() {
// 		info("");
// 	}
// 
// 	public static void info(double data) {
// 		logger.info(Strings.toString(data));
// 	}
// 
// 	public static void info(Object msg) {
// 		if (msg == null)
// 			logger.info("");
// 		else
// 			logger.info(msg.toString());
// 	}
// 
// 	public static void info(String format, Object arg) {
// 		logger.info(format, arg);
// 	}
// 
// 	public static void info(String format, Object... args) {
// 		logger.info(format, args);
// 	}
// 
// 	public static void error(double data) {
// 		logger.error(Strings.toString(data));
// 	}
// 
// 	public static void error(Object msg) {
// 		logger.error(msg.toString());
// 	}
// 
// 	public static void warn(String msg) {
// 		logger.warn(msg);
// 	}
// 
// 	public static void warn(String format, Object arg) {
// 		logger.warn(format, arg);
// 	}
// 
// 	public static void warn(String format, Object... args) {
// 		logger.warn(format, args);
// 	}
// 
// 	public static void warn(double data) {
// 		logger.warn(Strings.toString(data));
// 	}
// 
// 	public static void warn(Object msg) {
// 		logger.warn(msg.toString());
// 	}
// 
// 	public static void error(String msg) {
// 		logger.error(msg);
// 	}
// 
// 	public static void error(String format, Object arg) {
// 		logger.error(format, arg);
// 	}
// 
// 	public static void error(String format, Object... args) {
// 		logger.error(format, args);
// 	}
// 
// 	public static void off() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.OFF);
// 	}
// 
// 	public static void on() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
// 	}
// 
// 	@Test
// 	public void example() {
// 		String[] msgs = new String[] { "Section content: ", "@author guoguibing" };
// 
// 		debug(msgs);
// 	}
// 
// }


// Path: happycoding/src/main/java/happy/coding/math/Randoms.java
import happy.coding.io.Logs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.junit.Test;

	 * Generate a permutation from min to max
	 * 
	 * @param min
	 *            the minimum value
	 * @param max
	 *            the maximum value
	 * @return a permutation
	 */
	public static List<Integer> permute(int min, int max) {
		List<Integer> list = new ArrayList<>();

		int len = max - min + 1;
		for (int i = 0; i < len; i++) {
			while (true) {
				int index = uniform(min, max + 1);

				if (!list.contains(index)) {
					list.add(index);
					break;
				}
			}
		}

		return list;
	}

	@Test
	public void example_permute() {
		for (int i = 0; i < 20; i++) {
			List<Integer> perm = Randoms.permute(1, 5);
			Logs.debug("Iteration " + (i + 1) + " : " + perm);