From 3fd43cd5fcb22bb65bf2a92a25d95d801b11c9e0 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Wed, 1 Jun 2016 18:58:58 -0700 Subject: Initial checkin for typhoon chess engine. --- src/genetic/._main.cpp | Bin 0 -> 4096 bytes src/genetic/GeneticDriver.java | 40 + src/genetic/GeneticProcess.java | 24 + src/genetic/Makefile | 26 + src/genetic/ParallelChessGeneticProcess.java | 267 ++ src/genetic/baseline.dna | 129 + src/genetic/baseline.log | 370 ++ src/genetic/gen0_0.dna | 57 + src/genetic/gen0_seed0.dna | 57 + src/genetic/gen0_seed1.dna | 57 + src/genetic/gen0_seed2.dna | 57 + src/genetic/gen0_seed3.dna | 57 + src/genetic/gen0_seed4.dna | 57 + src/genetic/gen0_seed5.dna | 57 + src/genetic/gen0_seed6.dna | 57 + src/genetic/gen0_seed7.dna | 57 + src/genetic/gen0_seed8.dna | 57 + src/genetic/main.cpp | 918 +++++ src/genetic/mutate.pl | 31 + .../org/guru/wannabe/genetic/GeneticDriver.class | Bin 0 -> 1367 bytes .../org/guru/wannabe/genetic/GeneticProcess.class | Bin 0 -> 269 bytes .../ParallelChessGeneticProcess$1ChessGame.class | Bin 0 -> 1312 bytes ...ParallelChessGeneticProcess$1FileAndScore.class | Bin 0 -> 1108 bytes ...ParallelChessGeneticProcess$2FileAndScore.class | Bin 0 -> 1108 bytes .../genetic/ParallelChessGeneticProcess.class | Bin 0 -> 5848 bytes src/genetic/position.bin | Bin 0 -> 40 bytes src/genetic/position.lrn | 11 + src/genetic/score_histogram.pl | 43 + src/genetic/trial.ep_ | 3520 ++++++++++++++++++++ src/genetic/typhoon | Bin 0 -> 954368 bytes 30 files changed, 5949 insertions(+) create mode 100644 src/genetic/._main.cpp create mode 100644 src/genetic/GeneticDriver.java create mode 100644 src/genetic/GeneticProcess.java create mode 100755 src/genetic/Makefile create mode 100644 src/genetic/ParallelChessGeneticProcess.java create mode 100644 src/genetic/baseline.dna create mode 100644 src/genetic/baseline.log create mode 100644 src/genetic/gen0_0.dna create mode 100644 src/genetic/gen0_seed0.dna create mode 100644 src/genetic/gen0_seed1.dna create mode 100644 src/genetic/gen0_seed2.dna create mode 100644 src/genetic/gen0_seed3.dna create mode 100644 src/genetic/gen0_seed4.dna create mode 100644 src/genetic/gen0_seed5.dna create mode 100644 src/genetic/gen0_seed6.dna create mode 100644 src/genetic/gen0_seed7.dna create mode 100644 src/genetic/gen0_seed8.dna create mode 100644 src/genetic/main.cpp create mode 100755 src/genetic/mutate.pl create mode 100644 src/genetic/org/guru/wannabe/genetic/GeneticDriver.class create mode 100644 src/genetic/org/guru/wannabe/genetic/GeneticProcess.class create mode 100644 src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class create mode 100644 src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class create mode 100644 src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class create mode 100644 src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class create mode 100644 src/genetic/position.bin create mode 100644 src/genetic/position.lrn create mode 100755 src/genetic/score_histogram.pl create mode 100644 src/genetic/trial.ep_ create mode 100755 src/genetic/typhoon (limited to 'src/genetic') diff --git a/src/genetic/._main.cpp b/src/genetic/._main.cpp new file mode 100644 index 0000000..c78eae5 Binary files /dev/null and b/src/genetic/._main.cpp differ diff --git a/src/genetic/GeneticDriver.java b/src/genetic/GeneticDriver.java new file mode 100644 index 0000000..5c09b03 --- /dev/null +++ b/src/genetic/GeneticDriver.java @@ -0,0 +1,40 @@ +/* + Copyright 2007 Scott Gasch + + Licensed under the Apache License, Version 2.0 (the "License"); you + may not use this file except in compliance with the License. You may + obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. +*/ + +package org.guru.wannabe.genetic; + +public class GeneticDriver { + public static final int numGenerations = 5; + public static final int numPerGeneration = 32; + + public static void main(String[] args) { + System.out.println("---BEGIN: Genetic simulation."); + GeneticProcess process = new ParallelChessGeneticProcess(); + if (!process.mainInitialize(numGenerations, numPerGeneration)) { + throw new AssertionError("process.mainInitialize failed."); + } + for (int currentGeneration = 0; + currentGeneration < numGenerations; + currentGeneration++) { + System.out.println("---BEGIN: Generation " + currentGeneration); + process.generationInitialize(currentGeneration); + process.generationEvaluation(currentGeneration); + process.generationReproduction(currentGeneration); + System.out.println("---END: Generation " + currentGeneration); + } + System.out.println("---END: Genetic simulation."); + } +} diff --git a/src/genetic/GeneticProcess.java b/src/genetic/GeneticProcess.java new file mode 100644 index 0000000..091ce03 --- /dev/null +++ b/src/genetic/GeneticProcess.java @@ -0,0 +1,24 @@ +/* + Copyright 2007 Scott Gasch + + Licensed under the Apache License, Version 2.0 (the "License"); you + may not use this file except in compliance with the License. You may + obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. +*/ + +package org.guru.wannabe.genetic; + +public interface GeneticProcess { + boolean mainInitialize(int numGenerations, int numPerGeneration); + boolean generationInitialize(int currentGeneration); + boolean generationEvaluation(int currentGeneration); + boolean generationReproduction(int CurrentGeneration); +} diff --git a/src/genetic/Makefile b/src/genetic/Makefile new file mode 100755 index 0000000..f927946 --- /dev/null +++ b/src/genetic/Makefile @@ -0,0 +1,26 @@ +# Makefile + +# Gdata required activation.jar and mail.jar; make this where you put them +SHAREPATH= /usr/local/share/java/classes +CLASSPATH= ./ + +JFLAGS= -classpath $(CLASSPATH) -sourcepath ./ -d . +JAVAC= javac $(JFLAGS) $(JCFLAGS) -Xlint:unchecked +JAVA= java $(JFLAGS) $(JRFLAGS) + +JAVASRC= GeneticDriver.java GeneticProcess.java \ + ParallelChessGeneticProcess.java +CLASSES= $(JAVASRC:.java=.class) + +all : compile + +compile : $(JAVASRC) + $(JAVAC) $(JFLAGS) $(JAVASRC) + +doc : + mkdir -p doc + javadoc -d doc *.java + +clean : + rm -f $(CLASSES:.class='$$'*.class) $(CLASSES) + rm -fr doc diff --git a/src/genetic/ParallelChessGeneticProcess.java b/src/genetic/ParallelChessGeneticProcess.java new file mode 100644 index 0000000..75d9425 --- /dev/null +++ b/src/genetic/ParallelChessGeneticProcess.java @@ -0,0 +1,267 @@ +/* + Copyright 2007 Scott Gasch + + Licensed under the Apache License, Version 2.0 (the "License"); you + may not use this file except in compliance with the License. You may + obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. +*/ + +package org.guru.wannabe.genetic; + +import java.io.*; +import java.util.regex.*; + +import java.util.Map; +import java.util.TreeMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Arrays; + +public class ParallelChessGeneticProcess implements GeneticProcess { + private static final int numProcessors = 4; + private static final String baselineDna = "./baseline.dna"; + private static final String baselineLog = "./baseline.log"; + private static final String scriptName = "./trial.ep_"; + + private int numGenerations; + private int numPerGeneration; + private int numSeeds; + + // Helper function to emulate system(3). + private static void system(String cmd[]) { + Runtime runtime = Runtime.getRuntime(); + try { + Process ps = runtime.exec(cmd); + InputStream stdin = ps.getInputStream(); + InputStreamReader isr = new InputStreamReader(stdin); + BufferedReader br = new BufferedReader(isr); + String line = null; + while((line = br.readLine()) != null) ; + ps.waitFor(); + } catch(Exception e) { + throw new AssertionError(e); + } + } + + // Private helpers to build filenames + private static String seedFilename(int generation, int which) { + return "./gen" + generation + "_seed" + which + ".dna"; + } + + private static String logFilename(int generation, int which) { + return "./gen" + generation + "_" + which + ".log"; + } + + private static String dnaFilename(int generation, int which) { + return "./gen" + generation + "_" + which + ".dna"; + } + + // Uses mutate.pl to cause dna mutations + private static void mutate(String from, String to) { + String cmd[] = new String[] { "./mutate.pl", from, to }; + system(cmd); + try { + BufferedWriter out = + new BufferedWriter(new FileWriter(to, true)); + out.write("# mutate " + from + " -> " + to + "\n"); + out.close(); + } catch(IOException e) { + throw new AssertionError(e); + } + } + + // Runs a chess trial event + private static void chessTrial(String dnaFile, String logFile) { + String cmd[] = new String[] { "./typhoon", + "--cpus", "1", + "--hash", "128m", + "--batch", + "--logfile", logFile, + "--dnafile", dnaFile, + "--command", "script ./trial.ep_" }; + system(cmd); + } + + // The mainInitialize method produces the 0th generation DNA from + // a seed file called "baseline.dna" using a helper script called + // mutate.pl (the generic DNA mutation routine). + public boolean mainInitialize(int numGenerations, + int numPerGeneration) { + + System.out.println("Performing pre-generation setup tasks."); + this.numGenerations = numGenerations; + this.numPerGeneration = numPerGeneration; + this.numSeeds = numPerGeneration / 5; + if ((numGenerations <= 0) || + (numPerGeneration <= 0) || + (numSeeds <= 0)) { + throw new IllegalArgumentException("Bad value"); + } + + // Create generation zero seeds based on mutations of baseline.dna + for (int x = 0; x < numSeeds; x++) { + String seedFile = seedFilename(0, x); + if (!new File(seedFile).exists()) { + mutate(baselineDna, seedFile); + } else { + System.out.println("Using existing " + seedFile); + } + } + + // Run baseline.dna trial to get a starting point. + if (!new File(baselineLog).exists()) { + chessTrial(baselineDna, baselineLog); + } else { + System.out.println("Using existing " + baselineLog); + } + return true; + } + + public boolean generationInitialize(int generationNumber) { + + // Using the seed dna of the previous generation, build the + // genes for the current generation. + System.out.println("Initializing generation " + generationNumber); + for (int x = 0; x < numPerGeneration; x++) { + String dnaFile = dnaFilename(generationNumber, x); + String seedFile = seedFilename(generationNumber, x % numSeeds); + mutate(seedFile, dnaFile); + } + return true; + } + + public boolean generationEvaluation(int generationNumber) { + class ChessGame implements Runnable { + public String dnaFile; + public String logFile; + public ChessGame(String dnaFile, String logFile) { + this.dnaFile = dnaFile; this.logFile = logFile; + } + public void run() { + if (!new File(logFile).exists()) { + System.out.println("Creating " + logFile); + chessTrial(dnaFile, logFile); + } else { + System.out.println("Using existing " + logFile); + } + } + } + + // Populate work queue + System.out.println("Evaluating generation " + generationNumber); + List workQueue = new ArrayList(); + for (int x = 0; x < numPerGeneration; x++) { + String dnaFile = dnaFilename(generationNumber, x); + String logFile = logFilename(generationNumber, x); + workQueue.add(new ChessGame(dnaFile, logFile)); + } + + // Depopulate the work queue in parallel + Thread threadPool[] = new Thread[numProcessors]; + while(!workQueue.isEmpty()) { + ChessGame next = workQueue.remove(0); + int x = 0; + do { + if ((threadPool[x] == null) || + (!threadPool[x].isAlive())) { + threadPool[x] = new Thread(next); + threadPool[x].setPriority(Thread.MAX_PRIORITY); + threadPool[x].start(); + break; + } + x++; + if (x >= numProcessors) { + x = 0; + try { + Thread.sleep(2000); + } catch(Exception e) { + ; + } + } + } + while(true); + } + + // Wait for all threads to become idle again + int x = 0; + do { + if (threadPool[x] != null && threadPool[x].isAlive()) { + x = 0; + } + x++; + try { + Thread.sleep(2000); + } catch(Exception e) { + ; + } + } while(x < numProcessors); + return true; + } + + public boolean generationReproduction(int generationNumber) { + + // Helper data class + class FileAndScore implements Comparable { + public final String file; + public final int score; + public final int number; + public FileAndScore(String file, int score, int number) { + this.file = file; this.score = score; this.number = number; + } + public int compareTo(FileAndScore other) { + return other.score - score; + } + } + + System.out.println("Seeding subsequent generation."); + List scores = new ArrayList(); + for (int x = 0; x < numPerGeneration; x++) { + String logFile = logFilename(generationNumber, x); + try { + BufferedReader log = new BufferedReader( + new FileReader(logFile)); + String line = null; + Pattern p = + Pattern.compile("\\s+correct solutions\\s+:\\s+(\\d+)"); + while ((line = log.readLine()) != null) { + Matcher m = p.matcher(line); + if (m.matches()) { + int score = Integer.parseInt(m.group(1)); + FileAndScore fas = + new FileAndScore(logFile, score, x); + scores.add(fas); + break; + } + } + log.close(); + } + catch (Exception e) { + throw new AssertionError(e); + } + } + java.util.Collections.sort(scores); + for (int x = 0; x < numSeeds; x++) { + FileAndScore breeder = scores.get(0); + scores.remove(0); + String dnaFile = dnaFilename(generationNumber, breeder.number); + String seedFile = seedFilename(generationNumber + 1, x); + if (!new File(seedFile).exists()) { + System.out.println("Number " + breeder.number + " got score " + + breeder.score + " and will propagate."); + String cmd[] = new String[] { "/bin/cp", "-f", dnaFile, seedFile }; + system(cmd); + } else { + System.out.println("Using existing " + seedFile); + } + } + return true; + } +} diff --git a/src/genetic/baseline.dna b/src/genetic/baseline.dna new file mode 100644 index 0000000..185d863 --- /dev/null +++ b/src/genetic/baseline.dna @@ -0,0 +1,129 @@ +# BEGIN MUTATION ALLOWED +# Trade pieces/pawns +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +# END MUTATION ALLOWED +# Reduced material down scaler +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +# Reduced material up scaler +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +# Passer material up scaler +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +# Pawn centrality bonus by location +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0,-10,0,0,0,0,0,0,0,0,-10,0,5,5,5,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,9,9,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,9,9,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,5,5,5,0,-10,0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0,-10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Backward shielded by location +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Backward exposed by location +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Doubled pawn penalty by count +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-48,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-14,-25,-39,-55,-73,-95,-121 +# Isolated pawn penalty by count +0,-3,-7,-9,-16,-35,-50,-85,-100 +# Isolated pawn penalty by board file +0,-8,-9,-10,-11,-11,-10,-9,-8 +# Isolated exposed base score +-6 +# Isolated doubled base score +-18 +# BEGIN MUTATION ALLOWED +# Passer pawn by rank/color (reduced if enemy controls sq ahead) +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +# Candidate passer pawn by rank/color +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +# Connected passer pawn by rank/color (x2, one for each pawn) +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +# Supported passer pawn by rank/color +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +# END MUTATION ALLOWED +# Outside passer pawn by how far outside +0,0,7,14,21,28,34,41,55 +# BEGIN MUTATION ALLOWED +# Passer bonus as material comes off +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# END MUTATION ALLOWED +# Unstoppable passer +800 +# Undeveloper minors in the opening +0,-6,-10,-16,-22 +# Bishop over knight in the endgame by how open is the board +33 +# Bishop pair value by number of pawns +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41 +# BEGIN MUTATION ALLOWED +# Stationary pawns on bishop color +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-7,-7,-7,-7,-7,-7,-5,0,0,0,0,0,0,0,0,-7,-7,-8,-8,-8,-8,-7,-7,0,0,0,0,0,0,0,0,-8,-9,-10,-12,-12,-10,-9,-8,0,0,0,0,0,0,0,0,-8,-9,-10,-12,-12,-10,-9,-8,0,0,0,0,0,0,0,0,-7,-7,-8,-8,-8,-8,-7,-7,0,0,0,0,0,0,0,0,-5,-7,-7,-7,-7,-7,-7,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Transient pawns on bishop color +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Bishop mobility by num squares +-22,-15,-13,-8,-3,0,2,4,7,11,15,17,18,19 +# Bishop mobility num-in-a-row bonus +-14,-6,1,4,6,7,9,11 +# END MUTATION ALLOWED +# Outposted bishop by distance from eking +0,38,30,18,8,4,0,-10,-16 +# Bishop in a closed position bonus +15,15,15,15,14,14,13,12,11,10,9,7,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# Knight centrality by location +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +# Knight-eking tropism bonus +0,15,12,9,5,0,0,0,0 +# Knight value as pawns come off +-30,-24,-18,-12,-6,0,6,12,18 +# Outposted knight by distance from eking +0,40,33,22,10,3,0,0,0 +# Knight on interesting square by rank/color +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +# BEGIN MUTATION ALLOWED +# Knight mobility +-17,-10,-6,0,3,6,8,9,10 +# Knight with N pawns supporting +0,7,11 +# END MUTATION ALLOWED +# Knight in a closed position +0,0,0,0,0,0,2,4,6,8,9,10,11,12,13,14,16,18,19,20,20,21,21,22,22,23,23,24,24,25,25,26,27 +# Rook on full open file by distance from eking +24,22,17,14,13,13,12,12 +# Rook on half open file with enemy pawn by distance from eking +12,11,9,9,8,8,8,7 +# Rook on half open file with friend pawn by distance from eking +13,12,11,11,9,9,9,8 +# Rook behind own passer by passer rank/color +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +# Rook leading own passer by passer rank/color +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +# King trapping friend rook +-40 +# Rook trapping eking +22 +# Rook value as pawns come off +55,44,33,22,11,0,-12,-24,-36 +# Rooks connected vertically (x2) +7 +# Rooks connected horizontally (x2) +4 +# BEGIN MUTATION ALLOWED +# Rook mobility by squares +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +# Rook mobility by n-in-a-row +-15,-6,0,4,8,8,8,8 +# Queen mobility by squares +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +# END MUTATION ALLOWED +# Queen out too early by num unmoved minors +0,-14,-22,-26,-33 +# Queen eking tropism +0,39,35,28,24,17,16,15 +# Queen attacking square next to eking (x #squares) +8 +# Initial king safety counter by location/color +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +# Bring king to center by location +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +# BEGIN MUTATION ALLOWED +# King pawn shield (x #pawns) +15 +# King safety by counter +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-140,-160,-180,-200,-225,-250,-275,-300,-333,-366,-399,-433,-466,-499,-533,-566,-599,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600 +# END MUTATION ALLOWED +# King missing one castle option +-23 diff --git a/src/genetic/baseline.log b/src/genetic/baseline.log new file mode 100644 index 0000000..5c96888 --- /dev/null +++ b/src/genetic/baseline.log @@ -0,0 +1,370 @@ +Typhoon 1.00 (built on Jun 29 2008 15:18:00): + Copyright (C) 2000-2007, Scott Gasch (scott.gasch@gmail.com) + $Id: chess.h 353 2008-06-29 18:10:16Z scott $ + GCC 4.0.1 (Apple Inc. build 5465) + Make profile used: -std=gnu99 -D_X86_ -DOSX -DGENETIC -g -O3 -fexpensive-optimizations -ffast-math -finline-functions -m32 -DPERF_COUNTERS -DMP -DSMP + Multiprocessor enabled; 1 searcher thread + Performance counters + Hash sizes: 64 Mb (main), 10 Mb / thread (pawn), 48 Mb / thread (eval) + QCheckPlies: 1 + FutilityBase: 50 + Logging Eval DNA. +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12 +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 + IID R-factor: 2 ply +INPUT SYSTEM INIT: Pushing "script ./trial.ep_ +" +_white(move 1)_ +SCRIPT> st 20 + +SCRIPT> easy + +SCRIPT> setboard 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - + +FEN: 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| *q |::::| *r |::::| *k |::::| 0x00 + 7 |::::| *p |:*p:| *b |::::| |::::| | 0x10 + 6 | *r |::::| |:*p:| |:.P:| *p |::::| 0x20 + 5 |:*p:| |::::| |::::| *n |::::| *p | 0x30 + 4 | |::::| .P |::::| *n |::::| |::::| 0x40 + 3 |::::| |::::| |::::| .N |:.P:| .P | 0x50 + 2 | .P |:.P:| |::::| |:.Q:| |:.K:| 0x60 + 1 |::::| |:.B:| .R |:.R:| .B |::::| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution f7+ + +SCRIPT> id "ECM.001" + +SCRIPT> go + +The root position is: 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 7 +2.98 00:00.365 184386 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 b3 + 8 +3.13 00:00.684 375962 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 Nf6+ Kg7 b3 Bxb3 axb3 Kxf6 + 9 +3.35 00:02.259 1314795 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 Re1 Kh8 Bg5 +10 +3.58 00:04.394 2477084 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kf8 Nxe4 Ba4 Re1 Kg7 b3 Bc6 Bb2+ Kh7 +11 +3.64 00:08.367 4600580 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg7 Nxe4 Bc6 Bd3 Qe8 Ng5 Qe5 Bf4 +SOFT TIMER (20.1 sec) --> stop searching now +move f7+ +--------------------------------------------- +Searched for 20.1 seconds, saw 10616832 nodes (8908964 qnodes) (527305 nps). +tellothers d11, +3.64, 20.1s, 527knps, PV=f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg7 Nxe4 Bc6 Bd3 Qe8 Ng5 Qe5 Bf4 +Hashing percentages: (37.045 total, 13.886 useful) +Pawn hash hitrate: 99.416 percent. +Null move cutoff rate: 77.853 percent. +First move beta cutoff rate was 93.652 percent. +Eval percentages: ( 8.46 hash, 69.90 lazy, 21.64 full) +Extensions: (303079 +, 137182 q+, 23377 1mv, 5339 !kmvs, 1374 mult+, 4112 pawn + 6087 threat, 0 zug, 1679 sing, 2 endg, 2644 bm, 8898 recap) +Problem "ECM.001" solved in 0.0 sec. +Current suite score: 1 correct of 1 problems. +SCRIPT> setboard 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - + +FEN: 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| |::::| |::::| |:*r:| 0x00 + 7 |::::| *p |::::| |:*k:| |::::| | 0x10 + 6 | |::::| *b |:*p:| *p |::::| |::::| 0x20 + 5 |:*p:| |::::| |:*n:| *p |::::| | 0x30 + 4 | .P |::::| .P |:.R:| |::::| |::::| 0x40 + 3 |::::| |:.N:| |::::| .P |:.P:| | 0x50 + 2 | |:.P:| |::::| |::::| .K |::::| 0x60 + 1 |::::| |::::| .B |::::| |::::| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution Bxf3+ + +SCRIPT> id "ECM.002" + +SCRIPT> go + +The root position is: 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 9 +2.48 00:00.164 117472 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kg2 Nxd4 g4 f4 g5 e5 +10 +2.25 00:00.348 262726 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 f3 g6 +11 +2.47 00:00.752 576332 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Kg4 Kf7 +12 +2.20 00:01.258 987310 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Ne4 Ke6 g6 +13 +2.47 00:03.330 2593758 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Kg4 Ke6 g6 Kf6 +14 +2.20 00:05.220 4166374 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 e5 Kf2 e4 Ke3 +15 +2.28 00:12.333 9835420 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg3 e5 Kf2 e4 Nd5 Ke5 +16 +2.30 00:19.914 16085480 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 Nb3 Nd1 Nc5 Nc3 Nd3 Nb5 +HARD TIMER (20.1 sec) --> stop searching now +move Bxf3+ +--------------------------------------------- +Searched for 20.1 seconds, saw 16252928 nodes (12457309 qnodes) (807319 nps). +tellothers d16, +2.30, 20.1s, 807knps, PV=Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 Nb3 Nd1 Nc5 Nc3 Nd3 Nb5 +Hashing percentages: (54.754 total, 26.571 useful) +Pawn hash hitrate: 98.837 percent. +Null move cutoff rate: 83.429 percent. +First move beta cutoff rate was 96.057 percent. +Eval percentages: (11.20 hash, 71.63 lazy, 17.16 full) +Extensions: (461475 +, 41902 q+, 2821 1mv, 401 !kmvs, 636 mult+, 4863 pawn + 699 threat, 18 zug, 290 sing, 21674 endg, 5357 bm, 10418 recap) +Problem "ECM.002" solved in 0.1 sec. +Current suite score: 2 correct of 2 problems. +SCRIPT> setboard 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - + +FEN: 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| |::::| *k |::::| |::::| 0x00 + 7 |:*p:| |:.P:| |::::| |:*p:| | 0x10 + 6 | |::::| *q |::::| *n |:*p:| |:*p:| 0x20 + 5 |::::| |::::| .N |::::| |::::| | 0x30 + 4 | |::::| |::::| |::::| |::::| 0x40 + 3 |::::| .Q |::::| |::::| .P |:.P:| | 0x50 + 2 | |::::| |::::| |::::| .K |:.P:| 0x60 + 1 |::::| |::::| |::::| |::::| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution Qb5 + +SCRIPT> id "ECM.003" + +SCRIPT> go + +The root position is: 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 5 +1.12 00:00.196 136405 Qb8+ Kd7 Qg8 g5 c8=Q+ Qxc8 Nxf6+ Kc7 Qf7+ Kb8 Nd7+ Kc7 Qxe6 Qxd7 Qxh6 + 5 +1.33 00:00.275 197327 Nb4 Qd7 Qd5 Nxc7 Qg8+ Ke7 Qxg7+ Kd8 Qxh6 + 5+ +2.92 00:00.334 242098 Qb5 ++ + 5 +2.76 00:00.335 242668 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 + 6 +2.76 00:00.338 245531 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 + 7 +2.76 00:00.490 369773 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 + 8 +2.72 00:00.936 734352 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5 + 9 +2.60 00:02.860 2302612 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5 a5 Nc3+ Kd4 +10 +2.60 00:05.762 4811455 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5 a5 Nc3+ Kd4 +11 +2.64 00:16.020 13521099 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 a5 Kf2 g6 Nc3 Kd4 +HARD TIMER (20.2 sec) --> stop searching now +move Qb5 +--------------------------------------------- +Searched for 20.2 seconds, saw 16777218 nodes (13737368 qnodes) (831574 nps). +tellothers d11, +2.64, 20.2s, 832knps, PV=Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 a5 Kf2 g6 Nc3 Kd4 +Hashing percentages: (49.643 total, 23.838 useful) +Pawn hash hitrate: 99.845 percent. +Null move cutoff rate: 84.497 percent. +First move beta cutoff rate was 97.183 percent. +Eval percentages: ( 5.57 hash, 88.54 lazy, 5.89 full) +Extensions: (998642 +, 365387 q+, 40580 1mv, 2227 !kmvs, 773 mult+, 194 pawn + 4448 threat, 0 zug, 8001 sing, 15206 endg, 10689 bm, 3168 recap) +Problem "ECM.003" solved in 0.3 sec. +Current suite score: 3 correct of 3 problems. +SCRIPT> setboard 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - + +FEN: 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| *r |::::| *b |::::| *k |::::| 0x00 + 7 |:.R:| |::::| |::::| *p |:*p:| | 0x10 + 6 | |::::| |::::| *p |:*b:| |:*p:| 0x20 + 5 |::::| *p |:.B:| *r |::::| |::::| | 0x30 + 4 | |:.P:| *q |::::| |:.P:| |::::| 0x40 + 3 |::::| |::::| .N |::::| |::::| | 0x50 + 2 | |::::| .P |:.Q:| |::::| .P |:.P:| 0x60 + 1 |::::| |::::| |::::| .R |:.K:| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution Rcxc5 + +SCRIPT> id "ECM.004" + +SCRIPT> go + +The root position is: 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 7 +1.28 00:00.241 128871 Bd4+ Bxd4 Qxd4+ Qf2 Rxc2 Qxd4 Rxd4 Rd1 f6 + 7+ +1.90 00:00.406 230629 Bd4+ Bxd4 Qxd4+ Qf2 Rxc2 Qxd4 Rxd4 Rd1 f6 ++ + 7 +3.31 00:00.473 269299 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 c3 + 8 +3.54 00:00.762 457282 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Rd1 Bc6 + 9 +3.45 00:01.279 775279 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 f5 e5 Re1 +10 +3.54 00:02.287 1455118 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Rd1 Qf2 Rf1 Qc5 +11 +3.38 00:03.973 2655301 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 g6 h3 Bd4 Rd1 +12 +3.54 00:07.504 5112945 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qe4 Bd4 Rd1 Bc3 h3 Qf2 +13 +3.58 00:14.106 9751497 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 Qa8 h3 Bc6 Rg1 Kh7 Qd3+ Be4 Qxb5 Bxc2 +SOFT TIMER (20.1 sec) --> stop searching now +move Rcxc5 +--------------------------------------------- +Searched for 20.1 seconds, saw 14286848 nodes (11078116 qnodes) (710896 nps). +tellothers d13, +3.58, 20.1s, 711knps, PV=Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 Qa8 h3 Bc6 Rg1 Kh7 Qd3+ Be4 Qxb5 Bxc2 +Hashing percentages: (54.802 total, 27.084 useful) +Pawn hash hitrate: 99.661 percent. +Null move cutoff rate: 80.447 percent. +First move beta cutoff rate was 94.013 percent. +Eval percentages: ( 7.93 hash, 81.56 lazy, 10.50 full) +Extensions: (242731 +, 147017 q+, 10540 1mv, 11362 !kmvs, 273 mult+, 1569 pawn + 4886 threat, 25 zug, 3489 sing, 19 endg, 12049 bm, 5871 recap) +Problem "ECM.004" solved in 0.5 sec. +Current suite score: 4 correct of 4 problems. +SCRIPT> setboard 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - + +FEN: 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| |::::| |::::| *k |::::| 0x00 + 7 |:*p:| |:*q:| *b |::::| *p |::::| *p | 0x10 + 6 | |:*p:| |::::| |:*n:| *p |::::| 0x20 + 5 |::::| |:*b:| |::::| *p |::::| | 0x30 + 4 | |::::| .B |::::| |::::| |::::| 0x40 + 3 |::::| |:.P:| |::::| |:.N:| | 0x50 + 2 | .P |:.P:| |::::| .Q |:.P:| .P |:.P:| 0x60 + 1 |::::| |::::| |:.N:| |:.K:| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution Bxf2+ + +SCRIPT> id "ECM.005" + +SCRIPT> go + +The root position is: 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 7 +0.99 00:00.173 97919 Bxf2+ Qxf2 Qxc4 Qd4 Qc6 Nf3 h6 c4 + 8 +1.07 00:00.357 216878 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 Qe5 Qxe5 Nxe5 + 9 +1.07 00:00.646 411939 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 Qe5 Qxe5 Nxe5 +10 +1.01 00:01.439 944061 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 c4 Qe3+ Qxe3 Nxe3 Ne5 +11 +1.02 00:02.977 2004691 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 c4 Qe3+ Qxe3 Nxe3 Ne5 Ba4 +12 +0.98 00:06.061 4098991 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Ne8 b3 f6 c4 g5 Kh1 f4 +SOFT TIMER (20.0 sec) --> stop searching now +move Bxf2+ +--------------------------------------------- +Searched for 20.0 seconds, saw 13631488 nodes (11086938 qnodes) (680902 nps). +tellothers d12, +0.98, 20.0s, 681knps, PV=Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Ne8 b3 f6 c4 g5 Kh1 f4 +Hashing percentages: (31.320 total, 14.951 useful) +Pawn hash hitrate: 98.692 percent. +Null move cutoff rate: 75.182 percent. +First move beta cutoff rate was 94.965 percent. +Eval percentages: ( 6.34 hash, 78.69 lazy, 14.97 full) +Extensions: (404449 +, 155342 q+, 9621 1mv, 17129 !kmvs, 998 mult+, 3515 pawn + 6103 threat, 15 zug, 5503 sing, 6067 endg, 12601 bm, 8911 recap) +Problem "ECM.005" solved in 0.1 sec. +Current suite score: 5 correct of 5 problems. +SCRIPT> setboard 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - + +FEN: 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - 0 0 + + + 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 + +---------------------------------------+ + 8 | |::::| |:*q:| |::::| |::::| 0x00 + 7 |:*p:| *p |::::| |::::| *p |:*k:| *p | 0x10 + 6 | |::::| |::::| |:*n:| *p |:.N:| 0x20 + 5 |::::| |:*b:| *p |:*r:| |:.B:| | 0x30 + 4 | |::::| |::::| *r |::::| |::::| 0x40 + 3 |::::| |:.P:| |::::| .Q |::::| | 0x50 + 2 | .P |:.P:| |::::| |:.P:| .P |:.P:| 0x60 + 1 |:.R:| |::::| |::::| .R |:.K:| | 0x70 + +---------------------------------------+ + A B C D E F G H + + +SCRIPT> solution Bxf6+ + +SCRIPT> id "ECM.006" + +SCRIPT> go + +The root position is: 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - 0 0 +SetMoveTimer: Soft time limit 00:20.000 seconds. +SetMoveTimer: Hard time limit 00:20.000 seconds. + 7 +0.99 00:00.284 179093 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 dxe4 + 8 +1.25 00:00.553 377491 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Rad1 + 9 +1.05 00:01.062 761451 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Rad1 Re2 +10 +1.21 00:01.884 1386628 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Rad1 +11 +0.97 00:03.816 2860869 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Rad1 Re2 +12 +1.12 00:08.716 6383777 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Kg2 Re2 Kf3 +13 +1.10 00:15.549 11572369 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Kg2 Re2 b4 Bb6 Rad1 +HARD TIMER (20.0 sec) --> stop searching now +move Bxf6+ +--------------------------------------------- +Searched for 20.0 seconds, saw 14680066 nodes (11319222 qnodes) (732823 nps). +tellothers d13, +1.10, 20.0s, 733knps, PV=Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Kg2 Re2 b4 Bb6 Rad1 +Hashing percentages: (53.520 total, 26.213 useful) +Pawn hash hitrate: 98.553 percent. +Null move cutoff rate: 84.810 percent. +First move beta cutoff rate was 96.523 percent. +Eval percentages: ( 6.98 hash, 83.44 lazy, 9.58 full) +Extensions: (375467 +, 183351 q+, 44761 1mv, 9029 !kmvs, 1761 mult+, 580 pawn + 3970 threat, 2 zug, 5124 sing, 5803 endg, 9894 bm, 7604 recap) diff --git a/src/genetic/gen0_0.dna b/src/genetic/gen0_0.dna new file mode 100644 index 0000000..17f913b --- /dev/null +++ b/src/genetic/gen0_0.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8, +7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,4,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0, +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-2,-6,-7,-14,-30,-44,-74,-88, +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5, +-11 +0,0,190,130,72,42,21,15,0,0,0,15,21,42,72,130,190,0, +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-9,-9,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-9,-9,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9, +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +8,8,8,7,7,6,6,5,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12 +13,12,10,10,9,9,9,7, +10,9,9,9,7,7,7,6, +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-23,-17,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-17,-23,0, +-36, +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4, +-30,-25,-21,-15,-7,-2,0,4,8,12,16,18,20,22,23, +-15,-6,0,4,8,8,8,8 +-26,-23,-19,-15,-9,-7,-3,-1,0,1,3,6,8,10,12,13,14,15,16,16,17,17,18,18,19,19,20,20, +0,-14,-22,-26,-33 +0,40,33,25,22,20,18,17, +7, +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-19, +# mutate ./baseline.dna -> ./gen0_seed0.dna diff --git a/src/genetic/gen0_seed0.dna b/src/genetic/gen0_seed0.dna new file mode 100644 index 0000000..393454c --- /dev/null +++ b/src/genetic/gen0_seed0.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,4,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0, +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-2,-6,-7,-14,-30,-44,-74,-88, +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5, +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9, +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +9,9,9,8,8,7,7,6,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12 +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-23,-17,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-17,-23,0, +-36, +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-30,-25,-21,-15,-7,-2,0,4,8,12,16,18,20,22,23, +-15,-6,0,4,8,8,8,8 +-26,-23,-19,-15,-9,-7,-3,-1,0,1,3,6,8,10,12,13,14,15,16,16,17,17,18,18,19,19,20,20, +0,-14,-22,-26,-33 +0,40,33,25,22,20,18,17, +7, +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed0.dna diff --git a/src/genetic/gen0_seed1.dna b/src/genetic/gen0_seed1.dna new file mode 100644 index 0000000..ec279f8 --- /dev/null +++ b/src/genetic/gen0_seed1.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,0,0,0,0,0,0,-7,0,0,0,0,0,0,0,0,-7,0,4,4,4,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,8,8,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,8,8,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,4,4,4,0,-7,0,0,0,0,0,0,0,0,-7,0,0,0,0,0,0,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,64,43,13,6,3,1,0,0,0,1,3,6,13,43,64,0, +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +706, +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12, +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12, +10,9,8,8,7,7,7,6, +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7, +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-32,-28,-23,-18,-11,-8,-4,-2,-1,2,4,7,10,12,15,16,17,18,19,20,21,21,22,22,23,23,24,24, +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-22, +# mutate ./baseline.dna -> ./gen0_seed1.dna diff --git a/src/genetic/gen0_seed2.dna b/src/genetic/gen0_seed2.dna new file mode 100644 index 0000000..e9efe52 --- /dev/null +++ b/src/genetic/gen0_seed2.dna @@ -0,0 +1,57 @@ +0,78,70,63,58,53,49,45,43,43,43,43,43,43,43,43,0,0,108,101,94,86,78,72,67,61,57,57,57,57,57,57,57,0,0,130,114,107,100,94,88,81,75,66,66,66,66,66,66,66,0, +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36, +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,156,107,59,34,17,12,0,0,0,12,17,34,59,107,156,0, +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +51,0,0,32,0,37,16,0,12,7,17,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +682, +0,-6,-10,-16,-22 +34, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-2,-3,-3,-3,-3,-3,-3,-2,0,0,0,0,0,0,0,0,-3,-4,-6,-7,-7,-6,-4,-3,0,0,0,0,0,0,0,0,-3,-4,-6,-7,-7,-6,-4,-3,0,0,0,0,0,0,0,0,-2,-3,-3,-3,-3,-3,-3,-2,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,22,17,12,5,0,0,0,0, +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +25,23,17,14,13,13,12,12, +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +6, +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23, +# mutate ./baseline.dna -> ./gen0_seed2.dna diff --git a/src/genetic/gen0_seed3.dna b/src/genetic/gen0_seed3.dna new file mode 100644 index 0000000..dfe3e08 --- /dev/null +++ b/src/genetic/gen0_seed3.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-11,-8,-8,-10,-10,-8,-8,-11,0,0,0,0,0,0,0,0,-8,-6,-6,-8,-8,-6,-6,-8,0,0,0,0,0,0,0,0,-6,-5,-5,-6,-6,-5,-5,-6,0,0,0,0,0,0,0,0,-6,-5,-5,-6,-6,-5,-5,-6,0,0,0,0,0,0,0,0,-8,-6,-6,-8,-8,-6,-6,-8,0,0,0,0,0,0,0,0,-11,-8,-8,-10,-10,-8,-8,-11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,-27,-55,-84,-114,-145,-177,-210,-248,0,-19,-40,-65,-92,-123,-157,-198,-248,0,-7,-16,-26,-39,-54,-73,-95,-122,0,-6,-11,-21,-33,-47,-62,-81,-103, +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,69,46,15,6,3,1,0,0,0,1,3,6,15,46,69,0, +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-5,-9,-15,-20, +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-25,-16,-11,-5,-1,0,1,3,4,5,7,8,9,10, +-10,-4,1,3,4,5,5,5 +0,35,30,19,8,4,0,-10,-17, +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,13,12,10,6,3,0,0,0,0,0,0,0,3,6,10,12,13, +-17,-10,-6,0,3,5,7,8,8 +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,10,12,13,15,17,19,22,24,24,25,25,26,26,27,27,28,28,30,31, +24,22,17,14,13,13,12,12 +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-26,-18,-15,-10,-5,-3,0,0,0,-3,-5,-10,-15,-18,-26,0, +-33, +18, +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +6, +4, +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8, +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15, +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed3.dna diff --git a/src/genetic/gen0_seed4.dna b/src/genetic/gen0_seed4.dna new file mode 100644 index 0000000..4b6a92e --- /dev/null +++ b/src/genetic/gen0_seed4.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-36,-12,0,2,5,8,12,17,23,-52,-20,0,3,7,11,15,20,26,-8,0,0,5,12,16,20,24,30, +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +7,7,7,7,7,7,6,6,6,5,6,4,3,4,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-3,-2,-2,-3,-3,-2,-2,-3,0,0,0,0,0,0,0,0,-3,-2,-2,-3,-3,-2,-2,-3,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-31,-63,-97,-131,-167,-203,-241,-285,0,-22,-46,-74,-106,-141,-181,-228,-285,0,-8,-18,-30,-45,-62,-84,-109,-140,0,-6,-12,-24,-38,-54,-71,-93,-119, +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11, +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,54,53,52,51,50,49,47,45,42,41,41,41,41,41,41,41, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12, +-17,-10,-6,0,3,5,7,8,8 +0,4,8, +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,28, +24,22,17,14,13,13,12,12 +9,9,7,7,6,6,6,5, +13,12,11,11,9,9,9,8 +0,0,24,16,11,5,0,0,0,0,0,0,0,5,11,16,24,0, +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-23,-27,-35, +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed4.dna diff --git a/src/genetic/gen0_seed5.dna b/src/genetic/gen0_seed5.dna new file mode 100644 index 0000000..81b587b --- /dev/null +++ b/src/genetic/gen0_seed5.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6, +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +63,-1,-1,39,-1,45,20,-1,14,9,21,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,38,32,20,9,4,0,-11,-18, +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-9,-6,-6,-6,-6,-6,-6,-9,0,0,0,0,0,0,0,0,-6,-1,-1,0,0,-1,-1,-6,0,0,0,0,0,0,0,0,-6,-1,3,4,4,3,-1,-6,0,0,0,0,0,0,0,0,-6,-1,4,6,6,4,-1,-6,0,0,0,0,0,0,0,0,-6,-1,4,6,6,4,-1,-6,0,0,0,0,0,0,0,0,-6,-1,3,4,4,3,-1,-6,0,0,0,0,0,0,0,0,-6,-1,-1,0,0,-1,-1,-6,0,0,0,0,0,0,0,0,-9,-6,-6,-6,-6,-6,-6,-9,0,0,0,0,0,0,0,0, +0,13,10,8,3,0,0,0,0, +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-16,-9,-5,0,2,4,6,7,7, +0,4,8 +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12 +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,24,16,11,5,0,0,0,0,0,0,0,5,11,16,24,0, +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-11,-17,-21,-26, +0,34,28,22,19,17,16,15 +7, +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,6,4,2,0,0,0,0,0,0,0,0,0,2,4,12,14,14,12,4,2,0,0,0,0,0,0,0,0,4,6,16,21,21,16,6,4,0,0,0,0,0,0,0,0,4,6,16,21,21,16,6,4,0,0,0,0,0,0,0,0,2,4,12,14,14,12,4,2,0,0,0,0,0,0,0,0,0,2,4,6,6,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed5.dna diff --git a/src/genetic/gen0_seed6.dna b/src/genetic/gen0_seed6.dna new file mode 100644 index 0000000..0250961 --- /dev/null +++ b/src/genetic/gen0_seed6.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +7,7,7,7,7,7,6,6,6,5,6,4,3,4,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-10,-18,-39,-56,-96,-113, +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,79,61,39,17,8,4,0,0,0,4,8,17,39,61,79,0, +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +29, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,55,54,53,52,51,50,48,46,43,42,42,42,42,42,42,42, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8, +0,4,8, +0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27 +24,22,17,14,13,13,12,12 +11,10,8,8,7,7,7,6, +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-21,-15,-12,-8,-4,-2,0,0,0,-2,-4,-8,-12,-15,-21,0, +-40 +23, +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-22,-19,-16,-11,-5,-1,0,3,6,9,12,13,15,17,18, +-15,-6,0,4,8,8,8,8, +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,16,16,13,5,3,0,0,0,0,0,0,0,0,5,7,18,24,24,18,7,5,0,0,0,0,0,0,0,0,5,7,18,24,24,18,7,5,0,0,0,0,0,0,0,0,3,5,13,16,16,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed6.dna diff --git a/src/genetic/gen0_seed7.dna b/src/genetic/gen0_seed7.dna new file mode 100644 index 0000000..c442968 --- /dev/null +++ b/src/genetic/gen0_seed7.dna @@ -0,0 +1,57 @@ +0,76,68,62,57,52,48,44,42,42,42,42,42,42,42,42,0,0,106,99,92,85,77,71,66,60,56,56,56,56,56,56,56,0,0,127,112,105,98,92,86,80,74,65,65,65,65,65,65,65,0, +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-5 +-11 +0,0,152,104,58,33,16,12,0,0,0,12,16,33,58,104,152,0, +0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0 +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,51,34,11,5,2,0,0,0,0,0,2,5,11,34,51,0, +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-18,-11,-8,-4,0,0,0,2,3,4,4,5,6,7, +-8,-3,0,2,3,4,4,4, +0,31,26,17,7,3,0,-9,-15, +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0 +0,12,10,7,3,0,0,0,0, +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-19,-11,-6,0,3,5,8,9,9, +0,4,8 +0,0,0,0,0,0,0,0,0,0,0,1,3,5,8,10,11,12,14,16,18,20,20,21,21,22,22,23,23,24,24,25,25, +24,22,17,14,13,13,12,12 +11,10,8,8,7,7,7,6, +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +25, +55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25 +7 +4 +-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22 +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed7.dna diff --git a/src/genetic/gen0_seed8.dna b/src/genetic/gen0_seed8.dna new file mode 100644 index 0000000..de77bb3 --- /dev/null +++ b/src/genetic/gen0_seed8.dna @@ -0,0 +1,57 @@ +-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1 +-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36 +0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8 +8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0 +8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121 +0,-3,-7,-9,-16,-35,-50,-85,-100 +0,-7,-8,-9,-10,-10,-9,-8,-7 +-4, +-11 +0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0 +0,0,0,50,35,23,13,9,0,0,0,9,13,23,35,50,0,0, +0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0 +0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0 +0,0,7,14,21,28,34,41,55 +60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +800 +0,-6,-10,-16,-22 +33 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9 +-10,-4,1,3,4,5,5,5 +0,33,28,18,8,4,0,-10,-16 +10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0, +0,15,12,9,4,0,0,0,0 +0,25,19,14,6,0,0,0,0 +0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12 +-17,-10,-6,0,3,5,7,8,8 +0,4,8, +0,0,0,0,0,0,0,0,0,0,1,2,4,6,10,12,13,14,16,19,21,23,23,24,24,25,25,26,26,28,28,29,30, +24,22,17,14,13,13,12,12 +12,11,9,9,8,8,8,7 +13,12,11,11,9,9,9,8 +0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0 +0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0 +-40 +22 +62,58,50,43,37,30,25,18,8,1,-3,-6,-10,-13,-20,-25,-28, +7 +4 +-31,-26,-22,-15,-7,-2,0,4,8,13,16,19,21,23,24, +-15,-6,0,4,8,8,8,8 +-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23 +0,-14,-22,-26,-33 +0,34,28,22,19,17,16,15 +8 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500 +-23 +# mutate ./baseline.dna -> ./gen0_seed8.dna diff --git a/src/genetic/main.cpp b/src/genetic/main.cpp new file mode 100644 index 0000000..aa7ec73 --- /dev/null +++ b/src/genetic/main.cpp @@ -0,0 +1,918 @@ +/* + * INCLUDES + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/* + * GLOBALS + */ + +int start_time; +bool pipe_logging = false; +int only_opening = -1; +FILE *pgn_log = NULL; +FILE *match_log = NULL; + + + + +/* + * Misc + */ + +void strip_newline(char *s) +{ + int i; + + for (i = 0;; ++i) + { + if (!s[i] || s[i] == '\r' || s[i] == '\n') + { + s[i] = 0; + return; + } + } +} + +void copy_result(char *to, char *from) +{ + int i; + + for (i = 0; i < strlen(from); ++i) + if (from[i] == '0' || from[i] == '1') + break; + strcpy(to, &from[i]); + for (i = 0; i < strlen(to); ++i) + if (to[i] == '}') + break; + to[i + 1] = 0; +} + + + + +/* + * MyLock + */ + +#include +#include + +class MyLock +{ +public: + MyLock(); + void get(); + void release(); + +private: + pthread_mutex_t the_lock; +}; + +MyLock::MyLock() +{ + pthread_mutex_init(&the_lock, NULL); +} + +void MyLock::get() +{ + for (;;) + { + if (pthread_mutex_lock(&the_lock) == 0) // EBUSY?? + break; + usleep(1); + } +} + +void MyLock::release() +{ + pthread_mutex_unlock(&the_lock); +} + +MyLock glock; + + + + +/* + * Settings + */ + +class Settings +{ +public: + Settings() { count = 0; }; + bool read(char *filename); + char * get(char *name); + +private: + char map[20][2][1000]; + int count; +}; + +Settings settings; + +bool Settings::read(char *filename) +{ + FILE *f; + char line[1000]; + char var[1000]; + + printf("Reading settings file: %s\n", filename); + count = 0; + f = fopen(filename, "r"); + if (!f) + { + printf("Couldn't open file.\n"); + return false; + } + for (;;) + { + line[0] = 0; + fgets(line, 1000, f); + if (!line[0]) + break; + strip_newline(line); + sscanf(line, "%s", var); + strcpy(map[count][0], var); + strcpy(map[count][1], line + strlen(var) + 1); + count++; + } + fclose(f); + return true; +} + +char * Settings::get(char *name) +{ + int i; + + for (i = 0; i < count; ++i) + if (!strcmp(map[i][0], name)) + return map[i][1]; + printf("Setting not found: %s\n", name); + exit(1); +} + + + + +/* + * ChildProc + */ + +class ChildProc +{ +public: + ChildProc(); + virtual ~ChildProc(); + + virtual void start(char *cmd_line); + virtual void stop(); + void send(char *line); + void receive(char *line, int size); + bool poll(); + void flush(); + char * get_cmd() { return cmd; } + +private: + void init(); + + char cmd[100]; + bool running; + + int pid; + int to_prog[2]; + int from_prog[2]; + FILE *to; + FILE *from; +}; + +ChildProc::ChildProc() +{ + init(); +} + +ChildProc::~ChildProc() +{ + stop(); +} + +void ChildProc::init() +{ + strcpy(cmd, ""); + pid = 0; + to = NULL; + from = NULL; + running = false; +} + +void ChildProc::start(char *cmd_line) +{ + char *argv[100]; + char arg_buff[100][100]; + int args = 0, i = 0, j = 0; + + argv[0] = arg_buff[0]; + for (;;) + { + argv[args][i] = cmd_line[j]; + if (!argv[args][i] || argv[args][i] == ' ') + { + argv[args][i] = 0; + args++; + argv[args] = arg_buff[args]; + i = -1; // will get incremented to 0 + } + if (!cmd_line[j]) + break; + i++; + j++; + } + argv[args] = NULL; + + stop(); + glock.get(); + pipe(to_prog); + pipe(from_prog); + if ((pid = fork()) == 0) // what to do with glock here? + { + dup2(to_prog[0], 0); + dup2(from_prog[1], 1); + close(to_prog[0]); + close(to_prog[1]); + close(from_prog[0]); + close(from_prog[1]); + dup2(1, fileno(stderr)); // force stderr to the pipe + execvp(argv[0], argv); + perror(argv[0]); + exit(1); + } + if (pid == -1) + { + printf("fork() failed, command line: %s\n", cmd_line); + exit(1); + } + close(to_prog[0]); + close(from_prog[1]); + from = fdopen(from_prog[0], "r"); + to = fdopen(to_prog[1], "w"); + setbuf(from, NULL); + setbuf(to, NULL); + glock.release(); + + running = true; + strcpy(cmd, argv[0]); +} + +void ChildProc::stop() +{ + int x; + + if (!running) + return; + glock.get(); + fclose(to); + fclose(from); + close(to_prog[1]); + close(from_prog[0]); + glock.release(); + kill(pid, SIGTERM); + waitpid(pid, &x, 0); + init(); +} + +void ChildProc::send(char *line) +{ + char temp[1000]; + int i; + + if (!running) + return; + strcpy(temp, line); + strip_newline(temp); + glock.get(); + fprintf(to, "%s\n", temp); + glock.release(); + if (pipe_logging) + printf("%s send: %s\n", cmd, temp); +} + +void ChildProc::receive(char *line, int size) +{ + int i; + + line[0] = 0; + if (!running) + return; + if (!poll()) + return; + glock.get(); + fgets(line, size, from); + glock.release(); + strip_newline(line); + if (pipe_logging) + printf("%s recv: %s\n", cmd, line); +} + +bool ChildProc::poll() +{ + fd_set myset; + timeval mytime; + int r; + + FD_ZERO(&myset); + FD_SET(from_prog[0], &myset); + mytime.tv_sec = 0; + mytime.tv_usec = 0; + glock.get(); + r = select(from_prog[0] + 1, &myset, NULL, NULL, &mytime); + glock.release(); + return (r > 0) ? true : false; +} + +void ChildProc::flush() +{ + char line[1000]; + + while (poll()) + { + receive(line, 1000); + if (!line[0]) + break; + } +} + + + + +/* + * ChessEngine + */ + +class ChessEngine : private ChildProc +{ +public: + void start(char *cmd_line, char *init_str_arg); + void stop(); + void new_game(); + void send_move(char *move); + void get_move(char *move); + bool is_game_over() { return game_over; } + char * get_result() { return result; } + +private: + bool game_over; + char result[100]; + char init_str[1000]; +}; + +void ChessEngine::start(char *cmd_line, char *init_str_arg) +{ + ChildProc::start(cmd_line); + send("xboard\n"); + strcpy(init_str, init_str_arg); +} + +void ChessEngine::stop() +{ + send("quit\n"); + ChildProc::stop(); +} + +void ChessEngine::new_game() +{ + char temp[1000]; + + // stop the engine and flush leftover output + // only necessary when reusing the engine + /*send("?\n"); + usleep(100000); + flush();*/ + + send("new\n"); + send("easy\n"); + sprintf(temp, "%s\n", init_str); + send(temp); + send("force\n"); + + game_over = false; +} + +void ChessEngine::send_move(char *move) +{ + char s[100]; + + if (game_over) + return; + sprintf(s, "%s\n", move); + send(s); +} + +void ChessEngine::get_move(char *move) +{ + char line[1000]; + char tok[1000]; + + move[0] = 0; + while (poll()) // does the engine think the game is over? + { + receive(line, 1000); + if (strchr(line, '{')) + { + game_over = true; + copy_result(result, line); + } + } + if (game_over) + return; + send("go\n"); + for (;;) + { + receive(line, 1000); + if (!line[0]) + { + usleep(1000); + continue; + } + if (strchr(line, '{')) + { + game_over = true; + copy_result(result, line); + break; + } + sscanf(line, "%s", tok); + if (!strcmp(tok, "move")) + { + sscanf(line, "move %s", move); + break; + } + } + if (!game_over) + send("force\n"); +} + + + + +/* + * WorkItems + */ + +const int max_work_items = 5000; +const int max_game_ply = 400; + +struct WorkItem +{ + volatile int status; + bool printed; + + int white_engine; + int opening_id; + char opening[200]; + char move[max_game_ply + 2][10]; + int moves; + char result[100]; +}; + +WorkItem *work_item[max_work_items]; +int work_items; + +bool make_work_items(char *filename) +{ + FILE *f; + char line[1000]; + int openings = 0; + WorkItem *w; + + printf("Creating work items from file: %s\n", filename); + work_items = 0; + f = fopen(filename, "r"); + if (!f) + { + printf("Couldn't open file.\n"); + return false; + } + for (;;) + { + line[0] = 0; + fgets(line, 1000, f); + if (!line[0]) + break; + strip_newline(line); + openings++; + + if (only_opening != -1 && openings != only_opening) + continue; + + w = new WorkItem; + w->status = 0; + w->opening_id = openings; + strcpy(w->opening, line); + w->white_engine = 1; + work_item[work_items++] = w; + + w = new WorkItem; + w->status = 0; + w->opening_id = openings; + strcpy(w->opening, line); + w->white_engine = 2; + work_item[work_items++] = w; + } + fclose(f); + printf("%d work items created.\n", work_items); + return true; +} + +void print_game(WorkItem *w) +{ + char white_name[100]; + char black_name[100]; + char line[1000]; + char short_result[100]; + char *temp; + int m, i, line_break; + + if (w->white_engine == 1) + { + strcpy(white_name, settings.get("engine1")); + strcpy(black_name, settings.get("engine2")); + } + else + { + strcpy(white_name, settings.get("engine2")); + strcpy(black_name, settings.get("engine1")); + } + sprintf(line, "Opening: %d, %s vs. %s, result: %s\n", + w->opening_id, + white_name, + black_name, + w->result); + printf(line); + fprintf(match_log, line); + fflush(match_log); + + strcpy(short_result, w->result); + temp = strchr(short_result, ' '); + if (temp) + *temp = 0; + fprintf(pgn_log, "[Round \"%d.%d\"]\n", w->opening_id, w->white_engine); + fprintf(pgn_log, "[White \"%s\"]\n", white_name); + fprintf(pgn_log, "[Black \"%s\"]\n", black_name); + fprintf(pgn_log, "[Result \"%s\"]\n", short_result); + fprintf(pgn_log, "\n"); + m = 0; + line_break = 0; + for (i = 1;; ++i) + { + if (m == w->moves) + { + fprintf(pgn_log, "%s\n", w->result); + break; + } + fprintf(pgn_log, "%d. %s ", i, w->move[m++]); + if (m < w->moves) + fprintf(pgn_log, "%s ", w->move[m++]); + if (m > line_break + 8) + { + fprintf(pgn_log, "\n"); + line_break = m; + } + } + fprintf(pgn_log, "\n"); + fflush(pgn_log); + + w->printed = true; +} + +void print_stats(int items) +{ + int i; + int win = 0, lose = 0, draw = 0; + int games = 0; + double percent; + double elo; + char elo_sign = '+'; + int elapsed_time; + int min, sec; + double spg = 10.0; + double percent_done; + double eta; + int eta_min, eta_sec; + + for (i = 0; i < items; ++i) + { + if (work_item[i]->status != 2) // shouldn't happen + break; + if (strstr(work_item[i]->result, "1-0")) + { + if (work_item[i]->white_engine == 1) + win++; + else + lose++; + } + if (strstr(work_item[i]->result, "0-1")) + { + if (work_item[i]->white_engine == 1) + lose++; + else + win++; + } + if (strstr(work_item[i]->result, "1/2-1/2")) + draw++; + } + games = win + lose + draw; + + percent = (double)win + (0.5 * (double)draw); + percent /= (double)games; + if (percent > 0.99999) + elo = 400.0; + else if (percent < 0.00001) + elo = -400.0; + else + elo = -400.0 * log(1.0 / percent - 1.0) / log(10.0); + if (elo < 0.0) + { + elo_sign = '-'; + elo = -elo; + } + elapsed_time = time(NULL) - start_time; + sec = elapsed_time; + min = sec / 60; + sec -= min * 60; + if (elapsed_time) + spg = (double)(time(NULL) - start_time) / (double)games; + percent_done = (double)games / (double)work_items; + eta = (double)work_items - (double)games; + eta *= spg; + eta_sec = (int)eta; + eta_min = eta_sec / 60; + eta_sec -= eta_min * 60; + + printf("%s vs. %s: +%d -%d =%d, %.2f%c, ELO: %c%d\n", + settings.get("engine1"), + settings.get("engine2"), + win, lose, draw, + (float)(percent * 100.0), '%', + elo_sign, (int)elo); + printf("%d games in %d:%02d, %.2f seconds/game, %.1f%c done, ETA: %d:%02d\n", + games, min, sec, (float)spg, + (float)(percent_done * 100.0), '%', + eta_min, eta_sec); + printf("\n"); +} + + + +/* + * WorkerThread + */ + +class WorkerThread +{ +public: + void do_work(int id_arg); + void do_item(WorkItem *w); + +private: + void do_opening(WorkItem *w); + void add_move(WorkItem *w, char *move); + + int id; + ChessEngine engine1, engine2; +}; + +void WorkerThread::do_work(int id_arg) +{ + int i; + + id = id_arg; + for (;;) + { + glock.get(); + for (i = 0; i < work_items; ++i) + if (work_item[i]->status == 0) + break; + if (i != work_items) + work_item[i]->status = 1; + glock.release(); + + if (i == work_items) + break; + do_item(work_item[i]); + } +} + +void WorkerThread::do_item(WorkItem *w) +{ + char move[100]; + ChessEngine *etm; // engine to move + ChessEngine *etw; // engine to wait + ChessEngine *temp; + + w->printed = false; + w->moves = 0; + + engine1.start(settings.get("cmd1"), settings.get("init1")); + engine2.start(settings.get("cmd2"), settings.get("init2")); + engine1.new_game(); + engine2.new_game(); + do_opening(w); + + etm = &engine1; + etw = &engine2; + if ((w->moves & 1) == 1 && w->white_engine == 1) + { + etm = &engine2; + etw = &engine1; + } + if ((w->moves & 1) == 0 && w->white_engine == 2) + { + etm = &engine2; + etw = &engine1; + } + for (;;) + { + etm->get_move(move); + if (etm->is_game_over()) + { + strcpy(w->result, etm->get_result()); + break; + } + etw->send_move(move); + add_move(w, move); + if (w->moves >= max_game_ply) + { + strcpy(w->result, "1/2-1/2 {Game too long}"); + break; + } + temp = etm; + etm = etw; + etw = temp; + } + + engine1.stop(); + engine2.stop(); + w->status = 2; +} + +void WorkerThread::do_opening(WorkItem *w) +{ + char move[100]; + int i = 0, j = 0; + + for (;;) + { + move[i] = w->opening[j]; + if (!move[i] || move[i] == ' ') + { + move[i] = 0; + engine1.send_move(move); + engine2.send_move(move); + add_move(w, move); + i = -1; + } + if (!w->opening[j]) + break; + i++; + j++; + } +} + +void WorkerThread::add_move(WorkItem *w, char *move) +{ + strcpy(w->move[w->moves++], move); +} + + + + +/* + * threads + */ + +WorkerThread *worker[100]; +pthread_t *mythread[100]; +volatile int thread_count = 0; + +void * thread_proc(void *arg) +{ + int id; + + glock.get(); + id = thread_count++; + glock.release(); + worker[id] = new WorkerThread; + worker[id]->do_work(id); + delete worker[id]; + pthread_exit(&mythread[id]); + delete mythread[id]; // ? +} + +void start_threads(int count) +{ + int i; + int x = 0; + + printf("Starting threads...\n"); + for (i = 0; i < count; ++i) + { + mythread[i] = new pthread_t; + pthread_create(mythread[i], NULL, thread_proc, (void *)&x); + } + printf("Started %d threads.\n", i); +} + + + + +/* + * main + */ + +main(int argc, char *argv[]) +{ + int i; + char settings_filename[100]; + int threads = 1; + + start_time = time(NULL); + strcpy(settings_filename, "settings.txt"); + + for (i = 1;;) + { + if (i >= argc) + break; + if (!strcmp(argv[i], "-l")) + { + pipe_logging = true; + } + else if (!strcmp(argv[i], "-o")) + { + only_opening = atoi(argv[++i]); + } + else if (!strcmp(argv[i], "-t")) + { + threads = atoi(argv[++i]); + } + else if (argv[i][0] == '-') + { + printf("Usage: shiai [options] [settings file]\n"); + printf("\n"); + printf(" -h : Display this screen\n"); + printf(" -l : Display I/O with engines (\"log\")\n"); + printf(" -o # : Run opening number #\n"); + printf(" -t # : Run with # threads\n"); + printf("\n"); + exit(0); + } + else + { + strcpy(settings_filename, argv[i]); + } + i++; + } + + if (!settings.read(settings_filename)) + exit(1); + if (!make_work_items(settings.get("openings"))) + exit(1); + + pgn_log = fopen(settings.get("pgnlog"), "w"); + if (!pgn_log) + { + printf("Couldn't open %s for writing.\n", settings.get("pgnlog")); + exit(1); + } + match_log = fopen(settings.get("matchlog"), "w"); + if (!match_log) + { + printf("Couldn't open %s for writing.\n", settings.get("matchlog")); + exit(1); + } + + if (threads <= 0 || threads > 16) + threads = 1; + start_threads(threads); + for (i = 0; i < work_items; ++i) + { + while (work_item[i]->status != 2) + sleep(1); + print_game(work_item[i]); + print_stats(i + 1); + } + + fclose(pgn_log); + fclose(match_log); + return 0; +} diff --git a/src/genetic/mutate.pl b/src/genetic/mutate.pl new file mode 100755 index 0000000..ea4f38e --- /dev/null +++ b/src/genetic/mutate.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl + +open(FILE, $ARGV[0]) || die $!; +open(OUT, ">$ARGV[1]") || die $!; +$mutation_chance = 0.20; +$mutation_allowed = 1; + +while() { + next if (/^\s*$/); + if (/^\s*#/) { + $mutation_allowed = 1 if (/^#\s*BEGIN MUTATION ALLOWED/); + $mutation_allowed = 0 if (/^#\s*END MUTATION ALLOWED/); + print OUT; + next; + } + $should_mutate = rand() < $mutation_chance; + $mutation_amount = (rand() - 0.5) / 2.7; + if (($should_mutate) && ($mutation_allowed)) { + @arr = split(/,/); + for $a (@arr) { + $x = ($a * $mutation_amount); + $x += $a; + $x = int($x); + print OUT "$x,"; + } + print OUT "\n"; + } else { + print OUT; + } +} +exit 0; diff --git a/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class b/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class new file mode 100644 index 0000000..4845848 Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class differ diff --git a/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class b/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class new file mode 100644 index 0000000..3db2b55 Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class differ diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class new file mode 100644 index 0000000..2a23c9b Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class differ diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class new file mode 100644 index 0000000..c73b2a7 Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class differ diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class new file mode 100644 index 0000000..8223691 Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class differ diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class new file mode 100644 index 0000000..83e165a Binary files /dev/null and b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class differ diff --git a/src/genetic/position.bin b/src/genetic/position.bin new file mode 100644 index 0000000..1f52dce Binary files /dev/null and b/src/genetic/position.bin differ diff --git a/src/genetic/position.lrn b/src/genetic/position.lrn new file mode 100644 index 0000000..aed44ce --- /dev/null +++ b/src/genetic/position.lrn @@ -0,0 +1,11 @@ +position +[White "unknown"] +[Black "Crafty 19.13"] +[Date "2007.06.18"] +setboard 1r1r/1b2kpp/2pRp2p/p3P/2B/2PR2P/P1P2P1P/2K/ b +{-140 6314 780} +[White "unknown"] +[Black "Crafty 19.13"] +[Date "2007.06.19"] +setboard /4k/1n1p1p1p/n2Pp1pP/2p1P1P/N1P2P/1P1KB// b +{-280 15604 1020} diff --git a/src/genetic/score_histogram.pl b/src/genetic/score_histogram.pl new file mode 100755 index 0000000..facc71a --- /dev/null +++ b/src/genetic/score_histogram.pl @@ -0,0 +1,43 @@ +#!/usr/bin/perl + +$gen = $ARGV[0]; +opendir(DIR, "."); +@files = readdir(DIR); +closedir(DIR); + +$min_score = 999999999; $max_score = 0; +$total = 0; +$best = ""; +for $file(@files) { + if ($file =~ m/gen(\d+)_\d+\.log/) { + $score = 0; + next if $1 != $gen; + open(FILE, $file) || die $!; + $total++; + while() { + chop; + if (m/ correct solutions\s+\:\s+(\d+)/) { + $score = $1; + last; + } + } + $score = int($score); + $scores[$score] += 1; + $names{$score} .= "$file "; + if ($score > $max_score) { + $max_score = $score; + $best = $file; + } + $min_score = $score if ($score < $min_score); + close(FILE); + } +} + +for ($x = $min_score; $x <= $max_score; $x++) { + next if $scores[$x] == 0; + printf "%4u : ", $x; + print "*" x int($scores[$x] / $total * 60); + print " ($scores[$x], $names{$x})\n"; +} +print "Best was $best\n"; +system "tail -22 $best"; diff --git a/src/genetic/trial.ep_ b/src/genetic/trial.ep_ new file mode 100644 index 0000000..a98e32f --- /dev/null +++ b/src/genetic/trial.ep_ @@ -0,0 +1,3520 @@ +st 20 +easy +setboard 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - +solution f7+ +id "ECM.001" +go +setboard 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - +solution Bxf3+ +id "ECM.002" +go +setboard 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - +solution Qb5 +id "ECM.003" +go +setboard 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - +solution Rcxc5 +id "ECM.004" +go +setboard 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - +solution Bxf2+ +id "ECM.005" +go +setboard 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - +solution Bxf6+ +id "ECM.006" +go +setboard 3rr1k1/pb3pp1/1p1q1b1p/1P2NQ2/3P4/P1NB4/3K1P1P/2R3R1 w - - +solution Rxg7+ +id "ECM.007" +go +setboard r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - - +solution Bg4 +id "ECM.008" +go +setboard 3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - - +solution Rxh3 +id "ECM.009" +go +setboard 2r4k/pB4bp/6p1/6q1/1P1n4/2N5/P4PPP/2R1Q1K1 b - - +solution Qxc1 +id "ECM.010" +go +setboard 1r5r/3b1pk1/3p1np1/p1qPp3/p1N1PbP1/2P2PN1/1PB1Q1K1/R3R3 b - - +solution Nxg4 +id "ECM.011" +go +setboard 5rk1/7p/p1N5/3pNp2/2bPnqpQ/P7/1P3PPP/4R1K1 w - - +solution Ne7+ +id "ECM.012" +go +setboard rnb2rk1/pp2np1p/2p2q1b/8/2BPPN2/2P2Q2/PP4PP/R1B2RK1 w - - +solution Nd5 +id "ECM.013" +go +setboard 2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - - +solution Nd5 +id "ECM.014" +go +setboard r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq - +solution Nxe5 +id "ECM.015" +go +setboard 2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - - +solution Rxc5 +id "ECM.016" +go +setboard r1b1k3/5p1p/p1p5/3np3/1b2N3/4B3/PPP1BPrP/2KR3R w q - +solution Rxd5 +id "ECM.017" +go +setboard r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - - +solution Nxd6 +id "ECM.018" +go +setboard b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - - +solution Rxf6+ +id "ECM.019" +go +setboard 1rr1nbk1/5ppp/3p4/1q1PpN2/np2P3/5Q1P/P1BB1PP1/2R1R1K1 w - - +solution Bxa4 +id "ECM.020" +go +setboard r7/5kp1/2p1p2p/1p1n3P/2rP4/2P3R1/PK2RPP1/2B5 b - - +solution Rxc3 +id "ECM.021" +go +setboard r1r3k1/p3qpp1/b1P4p/3p4/3Nn3/4P3/P1Q2PPP/1BR1K2R b K - +solution Qb4+ +id "ECM.022" +go +setboard rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - - +solution Bxd5 +id "ECM.023" +go +setboard 6rk/1p1br2p/pqp5/3pNP2/3Pp3/P5PR/5PKR/Q7 w - - +solution Rxh7+ +id "ECM.024" +go +setboard 2b3k1/5p1p/7b/p2B3p/3P4/P2Q1N1P/1q3PP1/6K1 w - - +solution Bxf7+ +id "ECM.025" +go +setboard r1b5/4k3/p7/3p1n2/3Bp3/2P2r1P/PPBK1P2/4R2R w - - +solution Bc5+ +id "ECM.026" +go +setboard r4rk1/1b3Npp/p7/1p3Q2/3P4/1B2q3/P5PP/3n1R1K b - - +solution Bxg2+ +id "ECM.027" +go +setboard r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - - +solution Rxf4 +id "ECM.028" +go +setboard 3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - - +solution Rgxg6 +id "ECM.029" +go +setboard r2q1rk1/p3b1pp/2p5/1pn5/1n1Bp1b1/1P6/PQ1PPP2/2RNKBNR b K - +solution Bxe2 +id "ECM.030" +go +setboard 3r2k1/p2r1p1p/1p2p1p1/q4n2/3P4/PQ1R3P/1P2NPP1/3R2K1 b - - +solution Nxd4 +id "ECM.031" +go +setboard 2bnr1k1/2q2ppp/p7/2p1b3/2N1B3/R7/1P2QPPP/2B3K1 w - - +solution Nxe5 +id "ECM.032" +go +setboard r1b2r1k/3nN2p/p2Q1p2/8/4PP2/1R6/q1PK2PP/4R3 w - - +solution Qd5 +id "ECM.033" +go +setboard 1nk1r1r1/pp2n1pp/4p3/q2pPp1N/b1pP1P2/B1P2R2/2P1B1PP/R2Q2K1 w - - +solution Nf6 +id "ECM.034" +go +setboard 2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - - +solution Rxc8 +id "ECM.035" +go +setboard br1r2k1/1q4p1/p2ppb1p/2p2p2/2P1n3/Pn2P2P/QPR2PPB/2NRNBK1 b - - +solution Nxc1 +id "ECM.036" +go +setboard 2k4r/ppp1n1p1/2n2qb1/2N5/Q1P3p1/P2r3P/1P3PB1/R1B2RK1 w - - +solution Qb5 +id "ECM.037" +go +setboard 8/6bk/1B1R4/6p1/2bNP3/4KP2/1r6/8 b - - +solution Be5 +id "ECM.038" +go +setboard r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - - +solution Rxa1 +id "ECM.039" +go +setboard r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - - +solution Nxc6 +id "ECM.040" +go +setboard 5rk1/1b3ppp/p3p3/1p1q2N1/4n3/6P1/PP2PPBP/2Q2RK1 b - - +solution Nxg3 +id "ECM.041" +go +setboard 2kr3r/pppq2p1/1bn1R3/6N1/1P6/1QN1B1p1/P4PP1/R5K1 b - - +solution gxf2+ +id "ECM.042" +go +setboard 2rr4/5pk1/p1q3p1/3bpP1p/1p4nR/1N4Q1/PPP3PP/3NR2K b - - +solution Bxg2+ +id "ECM.043" +go +setboard r4rk1/pp4pp/2nqb3/3p4/8/2NB4/PP1Q1PPP/4RRK1 w - - +solution Bxh7+ +id "ECM.044" +go +setboard 3rk1r1/3b1p1p/p2BpQ2/8/2q5/2P5/PP3PPP/3R2K1 b - - +solution Rxg2+ +id "ECM.045" +go +setboard 3r1rk1/4pp1p/p1Q1b1p1/3N4/3b4/5B2/Pq3PPP/R4RK1 b - - +solution Bxd5 +id "ECM.046" +go +setboard 5bk1/1bqn1r1p/p3Q1p1/4p3/1PN1Pp2/P1N4P/5PP1/R1BR2K1 w - - +solution Qxf7+ +id "ECM.047" +go +setboard 3rkb1r/1p3p2/p1n1p3/q5pp/2PpP3/1P4P1/P1Q1BPKP/R2N3R b k - +solution d3 +id "ECM.048" +go +setboard 5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - - +solution Qxf7+ +id "ECM.049" +go +setboard 2kr1b1R/1b3pp1/p2pp3/1pq3P1/2nQPP2/P1N5/1PP1BB2/1K6 w - - +solution Rxf8 +id "ECM.050" +go +setboard 1k1r1b1r/p1p1q3/2p1p3/4Ppp1/4nP2/P2BQ3/1PP3PB/2KR3R b - - +solution Rxh2 +id "ECM.051" +go +setboard r3nb1Q/p1q2kr1/2p3p1/2ppnpP1/1P3N2/4P3/PB1P4/1R2KB1R w K - +solution Qxf8+ +id "ECM.052" +go +setboard r1bq1rk1/pp3pbp/2pp1np1/2n3B1/2PNP3/2N2P2/PP1QB1PP/R4RK1 b - - +solution Nfxe4 +id "ECM.053" +go +setboard 1rb1qn2/1p2nrbk/p2p2p1/P2Pp1Pp/NP2P2P/2RNB3/2QKB3/1R6 w - - +solution Ba7 +id "ECM.054" +go +setboard 5r2/1b2k2p/3bp3/5PP1/Bn1Q3P/1N6/1Pr5/1K3R2 b - - +solution Rxb2+ +id "ECM.055" +go +setboard r1b1r1k1/pp4bp/5np1/2qPB3/8/6NP/PPP1Q1B1/R4R1K w - - +solution Rxf6 +id "ECM.056" +go +setboard r1b2r1k/1pq3bp/8/3Qp2n/1P1n1pp1/2NP2P1/3BPPBP/1R2NRK1 b - - +solution Qxc3 +id "ECM.057" +go +setboard 4qk2/pp3pp1/1nbr3p/2p5/5N2/2P1Q3/PPB2PPP/2K1R3 w - - +solution Ng6+ +id "ECM.058" +go +setboard 3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - - +solution Rd5 +id "ECM.059" +go +setboard r4rk1/pp1b2pp/3bpq2/3p1p2/2PPn3/PP1B4/1BQN1PPP/R4RK1 b - - +solution Bxh2+ +id "ECM.060" +go +setboard r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - - +solution Nxf7 +id "ECM.061" +go +setboard 2rq1r2/pp3pnk/2n1b1pp/3pQ3/3P1N2/P1N5/1P3PPP/1BR2RK1 w - - +solution Bxg6+ +id "ECM.062" +go +setboard 4nk2/r1r1bppp/pN2p3/2np4/8/BPN3PP/P3PPK1/2RR4 w - - +solution Ncxd5 +id "ECM.063" +go +setboard r4r1k/2pqn1b1/p1bp2pp/1p2pn2/4N3/2PP1PPQ/PPB4P/R1B1RNK1 b - - +solution Nd4 +id "ECM.064" +go +setboard r1bQ1nk1/bp3ppp/p7/3B4/1P6/P3P1P1/2P4P/q1B2RK1 b - - +solution Bxe3+ +id "ECM.065" +go +setboard 3r1rk1/1b2bppp/2q1pn2/pp4Q1/3B1P2/PBN5/1PP3PP/R2R3K b - - +solution Rxd4 +id "ECM.066" +go +setboard 2nq2k1/2r3pp/p1p1rp2/PpQ1N3/1P1PR3/8/5PPP/2R3K1 w - - +solution Nf7 +id "ECM.067" +go +setboard r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - - +solution Bd3 +id "ECM.068" +go +setboard 3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - - +solution g6 +id "ECM.069" +go +setboard 5r1k/p6p/1p1p1qp1/2pQpr2/8/2PP2P1/PP2RPKP/5R2 b - - +solution e4 +id "ECM.070" +go +setboard b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - - +solution Qh6 +id "ECM.071" +go +setboard 2r2rk1/5pbp/p5p1/3P2q1/1QbN4/5P2/P4BPP/2RR2K1 b - - +solution Bf1 +id "ECM.072" +go +setboard r1bqnrk1/pp2ppb1/1np3pp/4P1N1/5P2/2NBB3/PPP3PP/R2Q1RK1 w - - +solution Nh7 +id "ECM.073" +go +setboard 3nk3/3q1p2/1B3pr1/4p3/bP2P2p/r2B4/2Q2RPP/3R2K1 w - - +solution Bb5 +id "ECM.074" +go +setboard 3rnr1k/pp3ppp/4b3/2p1qNP1/P2pPR2/1P1P2Q1/2P3BP/5RK1 w - - +solution Nh6 +id "ECM.075" +go +setboard r1b2kr1/1p1p1pNp/p1n1p1p1/5P2/3QP3/2N5/PqP1B1PP/R4RK1 w - - +solution fxg6 +id "ECM.076" +go +setboard 5rk1/3r1p1p/3b2pQ/8/4q3/4B2P/3R1PP1/4R1K1 w - - +solution Rxd6 +id "ECM.077" +go +setboard 4rrk1/1bp2ppp/p1q2b1B/1pn2B2/4N1Q1/2P4P/PP3PP1/3RR1K1 w - - +solution Nxc5 +id "ECM.078" +go +setboard 2rnrbnk/3q1ppp/p1p5/3p1P2/1p1PPN2/4BQ1R/PP1N2PP/3R2K1 w - - +solution Ng6+ +id "ECM.079" +go +setboard 5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - - +solution Rd4 +id "ECM.080" +go +setboard Q7/p1r1ppk1/1qP4p/2Rb2p1/8/3N2P1/4PP1P/6K1 b - - +solution Qb1+ +id "ECM.081" +go +setboard 1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - - +solution exf6 +id "ECM.082" +go +setboard r2qr1k1/pp3pbp/3p1np1/2pP1bB1/2P1N3/3Q1PN1/PP4PP/R4RK1 b - - +solution Nxe4 +id "ECM.083" +go +setboard 4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - - +solution Bg6 +id "ECM.084" +go +setboard r1br2k1/ppb1qpp1/2P4p/2n1p3/4B3/P1N2N2/1P3PPP/2RQ1RK1 w - - +solution Nd5 +id "ECM.085" +go +setboard 2r3k1/1nqbrp2/p5pp/1p1Pp1N1/8/1P5P/P1B2PP1/2RQR1K1 w - - +solution Nxf7 +id "ECM.086" +go +setboard 2r1rbk1/1b3ppp/pp6/2q1pNP1/Pn1RP3/2N5/1PP2QBP/5R1K w - - +solution Nh6+ +id "ECM.087" +go +setboard r1b1rk2/3n1pbQ/2qp2p1/p2N2P1/2Bp3N/4P3/PP3PP1/2KR3R w - - +solution Nxg6+ +id "ECM.088" +go +setboard r1r2qkb/4pp1p/pBbp3P/3Nn1P1/4Q3/1B6/PPP5/1K1R2R1 w - - +solution g6 +id "ECM.089" +go +setboard r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - - +solution Re7 +id "ECM.090" +go +setboard rn1q1r2/4bpk1/p3p3/1pN1N1np/2pP4/4PpBb/PPQ4P/1B1RK1R1 w - - +solution Nc6 +id "ECM.091" +go +setboard 5rk1/6pp/8/2Q4q/N2pP3/4b1Pb/4PP1K/1R3R2 b - - +solution Bxf1+ +id "ECM.092" +go +setboard 2r4k/pp2Q1pp/5r2/P2P4/3Pb1P1/4Ppq1/1P1R3N/3R3K b - - +solution Qe1+ +id "ECM.093" +go +setboard 1r1rb1k1/2p3pp/p2q1p2/3PpP1Q/Pp1bP2N/1B5R/1P4PP/2B4K w - - +solution Qxh7+ +id "ECM.094" +go +setboard r1b4k/p2n1Bpp/1p1Q1n2/5p2/3P4/P3BqP1/1P3P1P/R4RK1 b - - +solution Bb7 +id "ECM.095" +go +setboard rn1r2k1/p4ppp/2p3b1/3PQ3/1B2Np1q/1B3P2/P1P3PP/4R1K1 w - - +solution Nf6+ +solution Qe8+ +id "ECM.096" +go +setboard 4r2k/5R1p/pp1Bq1pN/2p1P3/1n1b3Q/3P4/1P4KP/8 w - - +solution Rxh7+ +id "ECM.097" +go +setboard r2nk1r1/pb3q1p/4p3/3p2pQ/8/BP6/P4PPP/2R1R1K1 w q - +solution Rc7 +id "ECM.098" +go +setboard 6k1/1pqb1p2/5bpB/r2n4/4N1P1/1P3P2/1P1Q4/1K5R w - - +solution Qxd5 +id "ECM.099" +go +setboard rr4k1/2p1ppb1/3pbnpp/q1pP4/4P3/1PNNBP1P/P1KR2P1/2Q4R b - - +solution Qxc3+ +id "ECM.100" +go +setboard 1r3rk1/3Q2pp/p3p3/6B1/3np3/6R1/PqP1B2P/3K2R1 w - - +solution Qxg7+ +id "ECM.101" +go +setboard 2r5/p4Q2/k1bBp3/4P3/p1nq4/5B2/2Pr2P1/1R1RK3 w - - +solution Qb7+ +id "ECM.102" +go +setboard 5rk1/p1pb2pp/2p5/3p3q/2P3n1/1Q4BN/PP1Np1KP/R3R3 b - - +solution Qxh3+ +id "ECM.103" +go +setboard 2r1nk2/4qpbQ/4b3/1p2RpP1/4P3/p7/PBP5/1K5R w - - +solution Qxg7+ +id "ECM.104" +go +setboard 2kr4/1bpr3p/4R3/1pQ5/8/6B1/3q2PP/2R4K w - - +solution Qxc7+ +id "ECM.105" +go +setboard r4rk1/1pbb2pp/p1p1p2q/2Pp4/1P1Pn3/P3B2P/2Q1BPP1/R4RNK b - - +solution Qxe3 +id "ECM.106" +go +setboard r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - - +solution Qxf5+ +id "ECM.107" +go +setboard 6r1/p4rkp/3RQ1n1/1pp1p1B1/2p1P3/2P3R1/P4qPK/8 w - - +solution Qxe5+ +id "ECM.108" +go +setboard 2kr1r2/1pp3pp/1n2p1b1/pN2B3/P1q5/1Q1p3P/5PP1/R4R1K w - - +solution Rac1 +id "ECM.109" +go +setboard 2kr1bnr/1ppq4/p3bp2/6pp/4p3/2N2NBP/PP3PP1/2RQ1RK1 w - - +solution Na4 +id "ECM.110" +go +setboard r2q2rk/p3bp1p/4b1p1/3pP2R/1p1B4/3BQ3/PPP3PP/5R1K w - - +solution Rxf7 +id "ECM.111" +go +setboard r1b1Q3/6pk/p6p/1pq1n3/4N3/8/PPP3PP/R6K b - - +solution Qc6 +id "ECM.112" +go +setboard q6r/pp3pkp/5np1/4Q3/4P3/6N1/P4PPP/5RK1 w - - +solution Nh5+ +id "ECM.113" +go +setboard r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - - +solution Qg8+ +id "ECM.114" +go +setboard r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K - +solution Nxh7 +id "ECM.115" +go +setboard r3r1k1/p2N1pp1/1pn1p3/q1n5/2PQ4/P3B3/4PPKP/R5R1 w - - +solution Nf6+ +id "ECM.116" +go +setboard 4qbk1/1R5n/p2pr1p1/2pQpNPp/P1P1P3/2P2P2/3B4/5K2 w - - +solution Ne7+ +id "ECM.117" +go +setboard 3qr1k1/1p1bppbp/p2p2p1/2rPn3/P2N4/4BP2/1PPQ2PP/R2R1BK1 w - - +solution Ne6 +id "ECM.118" +go +setboard 2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - - +solution Rxf6 +id "ECM.119" +go +setboard 8/R5p1/6k1/pr2p1b1/4K3/7P/5P2/6R1 w - - +solution h4 +id "ECM.120" +go +setboard 5rk1/1b1r1p2/p1q1pQp1/1p2P2p/8/1BP1NR2/PP1n2PP/5R1K w - - +solution Bxe6 +id "ECM.121" +go +setboard 6k1/p1p2r2/1p1p1P1Q/3P4/2P5/5qr1/PP4RP/6RK w - - +solution Qh3 +id "ECM.122" +go +setboard 2b1rr1k/1p5p/1Ppp2q1/p3bN2/2P1n3/5R2/PBQ3BP/3R2K1 w - - +solution Nxd6 +id "ECM.123" +go +setboard 3b2rk/7p/p7/2pbqNrn/Pp1p1R2/1P1Q2P1/1BPN1R1P/6K1 w - - +solution Rxd4 +id "ECM.124" +go +setboard 1rbr2k1/1pq1bp1p/p1pNn1p1/2n1p3/2B1P2P/1NQ1BP2/PP4P1/1K1R3R w - - +solution Nxf7 +id "ECM.125" +go +setboard r4rk1/1pp1b1pp/p1q5/3pPp2/3Pn3/P3N3/1P3PPP/R1BQR1K1 w - - +solution Qb3 +id "ECM.126" +go +setboard rbbq1rk1/p3nppp/1p2p3/8/1B1pN3/P2B4/1P3PPP/2RQ1RK1 w - - +solution Nf6+ +id "ECM.127" +go +setboard rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - - +solution Nxh5 +id "ECM.128" +go +setboard 5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - - +solution Re6 +id "ECM.129" +go +setboard r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - - +solution Rxe7 +id "ECM.130" +go +setboard 2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - - +solution c5 +id "ECM.131" +go +setboard rnbq1rk1/pp2b1pp/5n2/2pPp3/2P1N3/3B1N2/PP4PP/R1BQK2R w KQ - +solution d6 +id "ECM.132" +go +setboard 2n1rbk1/5pp1/7p/qP1pp3/4b1Q1/1B5P/1P1N1PP1/2B1R1K1 w - - +solution Rxe4 +id "ECM.133" +go +setboard 4k3/2R2p2/5p1p/8/rb6/1N6/5PPP/5K2 w - - +solution Rc4 +id "ECM.134" +go +setboard 2k3r1/pp2rp2/1np5/2Np1p2/P2P3p/1R2P1Pq/2Q2P1P/1R4K1 w - - +solution Nxb7 +id "ECM.135" +go +setboard 2r1k3/p3nrR1/1p1p4/2p1p1p1/2P1B3/2PP1P2/P5K1/7R w - - +solution Rh8+ +id "ECM.136" +go +setboard 8/1Qp3pk/7p/5p2/5Pqn/1P1r4/P5PP/2B2RK1 b - - +solution c6 +id "ECM.137" +go +setboard 2rr1bk1/5p1p/pPN2np1/3Bp3/2Q1n3/1P2B1Pq/P3PP2/R2R2K1 b - - +solution Rxd5 +id "ECM.138" +go +setboard 3r2k1/1p4pp/p1q1p3/3p1B2/bP1B2P1/P4Q2/5PKP/2b2R2 w - - +solution Rxc1 +id "ECM.139" +go +setboard rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - - +solution Bf4 +id "ECM.140" +go +setboard 5n1r/1p2kp2/rB1Nb3/4p1Pp/4p2P/1PP5/8/1K1R1R2 w - - +solution Rxf7+ +id "ECM.141" +go +setboard b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - - +solution d3+ +id "ECM.142" +go +setboard 4r1k1/3R1ppp/p2p4/5PP1/2q2P2/2n2B2/P1P3QP/1r3R1K w - - +solution Rxb1 +id "ECM.143" +go +setboard 2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - - +solution Bd5+ +id "ECM.144" +go +setboard 6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - - +solution Bd4+ +id "ECM.145" +go +setboard 8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - - +solution Ba3 +id "ECM.146" +go +setboard r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - - +solution g6 +id "ECM.147" +go +setboard 5r2/1b3pk1/pqrpp1p1/4n1Nn/1p2PP1P/8/PPPQB3/1NKR2R1 b - - +solution Rfc8 +id "ECM.148" +go +setboard 1r2k2r/p5bp/4p1p1/q2pn3/1p2N1P1/6QP/PPP5/1KBR3R w k - +solution Bh6 +id "ECM.149" +go +setboard rn1q1rk1/pp3p1p/2p5/3p4/5Q1P/2NP3R/PPP3P1/4RK2 w - - +solution Rg3+ +id "ECM.150" +go +setboard 7r/kppQP1pp/p7/2qp1R2/4n3/1P2b2P/P1P3PK/R7 b - - +solution Re8 +id "ECM.151" +go +setboard r1b1kb1Q/qp2pp2/p3n1p1/2nN2Pp/2B4P/7N/PPP5/2KRR3 w q - +solution Nc7+ +id "ECM.152" +go +setboard 8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - - +solution Qd8 +id "ECM.153" +go +setboard 2r1q1r1/6bk/p2pN1pp/1p1N4/4P3/3R3Q/PnP4P/1K4R1 w - - +solution Nf6+ +id "ECM.154" +go +setboard 4r3/Q2bppkp/3p2p1/3Nn3/4P3/6PP/1qr2PB1/R3R1K1 b - - +solution Ra8 +id "ECM.155" +go +setboard 6k1/p1q2pp1/2n2b2/3B2Pp/2P2P2/5N1P/Pr1Q2K1/4R3 w - - +solution Re8+ +id "ECM.156" +go +setboard r1r3k1/p4n2/3p4/5NpR/8/2q2P2/P1PQ4/2K4R w - - +solution Rh8+ +id "ECM.157" +go +setboard 8/p5Q1/2ppq2p/3n1ppk/3B4/2P2P1P/P5P1/6K1 w - - +solution g4+ +id "ECM.158" +go +setboard r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - - +solution Nd6 +id "ECM.159" +go +setboard 1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k - +solution Ba4 +id "ECM.160" +go +setboard r1bq3k/ppp2Qp1/2n1p2p/6N1/2BPN3/2P1n3/PP4PP/R5K1 w - - +solution Nf6 +id "ECM.161" +go +setboard 3R4/1p2kp2/p1b1nN2/6p1/8/6BP/2r1qPPK/Q7 w - - +solution Rd7+ +id "ECM.162" +go +setboard 6k1/p5p1/1p1p1nN1/1B1P4/4PK2/8/2r3b1/7R w - - +solution Rh8+ +id "ECM.163" +go +setboard 8/5P2/4K1kP/4R3/8/8/8/5r2 w - - +solution Rg5+ +id "ECM.164" +go +setboard 3r1rk1/p1p1qp1p/2p1b1p1/8/P2PRP2/2P1NQ2/6PP/R5K1 w - - +solution f5 +id "ECM.165" +go +setboard 6k1/pr3ppp/1p3qn1/5NQ1/2p5/8/P4PPP/4R1K1 w - - +solution Re8+ +id "ECM.166" +go +setboard Q7/1pq2kpp/4bp2/3r4/2B5/P3P3/1r3PPP/2R1K2R b K - +solution Rd1+ +id "ECM.167" +go +setboard 4r1k1/p4ppp/4q2r/1Q6/4p3/4P1P1/P4P1P/2RR2K1 w - - +solution Rd6 +id "ECM.168" +go +setboard 8/5p1k/4p1p1/3p2K1/3P1Q1P/P4P2/7q/8 b - - +solution f6+ +id "ECM.169" +go +setboard r4r2/6k1/3p4/2pPp2p/4Pqp1/3P1P2/1R2Q1KP/5R2 b - - +solution Ra1 +id "ECM.170" +go +setboard 4r1k1/1np1r1pp/1ppp1q2/6N1/1P3P2/4RQP1/7P/4R1K1 w - - +solution Qh5 +id "ECM.171" +go +setboard r4rk1/pp3p1p/3pq1p1/2nNp3/3R1P2/7Q/PP4PP/5RK1 w - - +solution f5 +id "ECM.172" +go +setboard 3qn2k/1p3Bp1/rbn4p/2p5/p1P2p2/P2b2PP/1BQNRP2/1R4K1 w - - +solution Qxd3 +id "ECM.173" +go +setboard 3r1rk1/1pp4p/1q3bp1/p3p3/P2n1P2/2BB3P/1PP2QP1/R4RK1 b - - +solution Bh4 +id "ECM.174" +go +setboard 4rrk1/2p2ppp/p2b4/1p1P4/3P2nq/2P4P/PPQ1RPP1/RNB3K1 b - - +solution Qxf2+ +id "ECM.175" +go +setboard 1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - - +solution Nxf7 +id "ECM.176" +go +setboard r3kb1r/2q2p2/3p4/ppp1n1B1/P6P/1B3pQ1/1PP3b1/2KRR3 w kq - +solution Bd5 +id "ECM.177" +go +setboard r1b2rk1/1p4pp/p1n3q1/4ppN1/7Q/2P1B3/P1P2PPP/R2R2K1 w - - +solution Rd6 +id "ECM.178" +go +setboard 1rb2r2/1pR1N2p/p2R2pk/5p2/4pP2/1P1nP3/P4P1P/5BK1 w - - +solution Rf6 +id "ECM.179" +go +setboard r1b3k1/ppp2r2/6p1/3n3p/6qP/3BQ3/PBP5/2KR3R w - - +solution Bd4 +id "ECM.180" +go +setboard 3r2k1/p2q1r1p/1p1N2p1/1PpP4/3b1Bn1/1Q4Pb/1P2RP1P/R5KB b - - +solution Qxd6 +id "ECM.181" +go +setboard 4r1k1/1pbb3p/2pp2q1/p1n5/2P2R2/1PN1n1P1/PB2Q1B1/5RK1 w - - +solution Qxe3 +id "ECM.182" +go +setboard 3r2k1/p2r1p1p/1pR1p1qP/3P1pP1/3R4/1P2Q3/P4K2/8 w - - +solution dxe6 +id "ECM.183" +go +setboard 3r3k/p1Q3bp/2p3p1/8/2P1BRn1/1P4Pb/P1N1q2P/6BK b - - +solution Nf2+ +id "ECM.184" +go +setboard r4k2/p1pr1ppp/2q5/3PR2P/3Q4/8/6P1/5RK1 w - - +solution Re7 +id "ECM.185" +go +setboard 1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - - +solution Nxh6 +id "ECM.186" +go +setboard r1b4r/pp2ppk1/2np1np1/3N3p/2B1P3/q3BP2/P1PQ2PP/1R3RK1 w - - +solution Nxe7 +id "ECM.187" +go +setboard r3k2r/pb1n1pbp/4p1p1/q1n1P3/Bp1N1N2/4B3/PP3PPP/R2Q1RK1 w kq - +solution Ndxe6 +id "ECM.188" +go +setboard 5rk1/Q2nqppp/5n2/2p5/8/1B2PP1P/Pr1B1P2/R3K2R b KQ - +solution Ne4 +id "ECM.189" +go +setboard 5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - - +solution Nd7 +id "ECM.190" +go +setboard 2k1r1r1/ppb2p2/6b1/2qP4/2P2P2/4pP1p/P3Q2P/2RBRN1K b - - +solution Bd3 +id "ECM.191" +go +setboard 5r1k/pp1n1p1p/1b1qpP2/8/1PrN4/P1N1Q1P1/7P/3R1R1K w - - +solution Qh6 +id "ECM.192" +go +setboard r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - - +solution Nb6 +id "ECM.193" +go +setboard 1r3rk1/p4pbp/q1p2pp1/3p1b2/1n1P1P1B/PB3N2/1PPQR1PP/2KR4 b - - +solution Bxc2 +id "ECM.194" +go +setboard 1rbr2k1/4qp2/p1n2bpp/1pp1p1N1/4P3/2P1BQ1P/PPB2PP1/3RR1K1 w - - +solution Bxc5 +id "ECM.195" +go +setboard 2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - - +solution Rxd5 +id "ECM.196" +go +setboard rn3rk1/pp2ppbp/6p1/2R3N1/2B3b1/q3B3/P1P1Q1PP/5RK1 w - - +solution Rxf7 +id "ECM.197" +go +setboard r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q - +solution Ba6 +id "ECM.198" +go +setboard r1nqr2k/1p1b1Q1p/p5p1/P1pPb3/5B2/2N5/BP4PP/R4RK1 w - - +solution Qf8+ +id "ECM.199" +go +setboard 8/k3r1b1/Pp2rpp1/1qpQ4/4nB2/2P2NP1/7P/R4RK1 w - - +solution Bb8+ +id "ECM.200" +go +setboard 1k1r4/ppq2p2/8/2pPb1r1/2P1Q1B1/6P1/PP3PK1/R4R2 b - - +solution f5 +id "ECM.201" +go +setboard r1b2nk1/2qn1p1p/1ppR2p1/8/1PP1NP2/4r1PP/1Q2N1B1/3R2K1 w - - +solution b5 +id "ECM.202" +go +setboard 8/5pk1/3q2p1/8/7P/5Q1K/6B1/6b1 b - - +solution Qh2+ +id "ECM.203" +go +setboard 6r1/ppp4k/3p2rp/3Pb3/PPP1Np1q/5P1b/3QRRBP/6K1 b - - +solution Bd4 +id "ECM.204" +go +setboard 4br1k/pR4bp/2r1B1pN/4npB1/3p4/P7/5PPP/4R1K1 w - - +solution Rxg7 +id "ECM.205" +go +setboard r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - - +solution Nxc7 +id "ECM.206" +go +setboard r6r/1p2kp2/3p1b2/pPpPpQ1P/1nP1P2P/6R1/1P2K3/1B6 w - - +solution Rg6 +id "ECM.207" +go +setboard 2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - - +solution Ndxf4 +id "ECM.208" +go +setboard 2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - - +solution Rb3 +id "ECM.209" +go +setboard r2qr1n1/p4pk1/1p1p2p1/4p3/4PQ2/1PN2P2/1PP3P1/2KR3R w - - +solution Rh7+ +id "ECM.210" +go +setboard r4rk1/ppp3b1/3p1qp1/3Pp3/2P1Bn2/4BP2/PP1Q4/2K3RR w - - +solution Rxg6 +id "ECM.211" +go +setboard 1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - - +solution Bf4 +id "ECM.212" +go +setboard k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - - +solution Re7 +id "ECM.213" +go +setboard 1q3rk1/r5b1/pNp1bn1p/2Pp1n2/1P2p3/1N2P2P/PBQKB3/3R3R b - - +solution Nxe3 +id "ECM.214" +go +setboard r4n1r/ppq1nk2/1bpRpN2/4PpQ1/8/2B4P/PPP2PP1/2KR4 w - - +solution Rd7 +id "ECM.215" +go +setboard 3r2k1/p5pp/bpP1p3/3n1p2/2NQpP1q/P3P3/1B1R1R2/4KBr1 b - - +solution Rxf1+ +id "ECM.216" +go +setboard 1rq1r2k/5Rbp/p2p1p1B/2p1p3/2P1P2Q/1P6/P5PP/3b3K w - - +solution Bxg7+ +id "ECM.217" +go +setboard 5Q2/5p1p/3p2p1/4p1k1/4P1P1/3R1P1K/r6P/4q3 w - - +solution f4+ +id "ECM.218" +go +setboard 2b2r1k/ppq3pp/3b3r/n3NpN1/Q2PpP1B/2P1R3/PP5P/4R1K1 w - - +solution Ngf7+ +id "ECM.219" +go +setboard 2r1r1k1/1R4bp/p5p1/2pqn3/8/2B5/1PQ1B1PP/5RK1 w - - +solution Bc4 +id "ECM.220" +go +setboard 7k/pp1q2pp/3Nr1n1/3B2Q1/2pP4/B3P1Pb/P6P/6K1 w - - +solution Qd8+ +id "ECM.221" +go +setboard r5k1/5p1p/bq1p2p1/r2Pp3/1p2N1P1/1P3P2/1KPQ3P/3R3R b - - +solution Ra2+ +id "ECM.222" +go +setboard 5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - - +solution Bg7 +id "ECM.223" +go +setboard 5nk1/2b1q1p1/2p5/3pP1pQ/1r1P2P1/3B1R2/5PP1/6K1 w - - +solution Rxf8+ +id "ECM.224" +go +setboard 1k1r3r/1pp2p2/p2b4/4n1p1/N3q1P1/1B2B3/PP3RP1/4RQK1 b - - +solution Rh1+ +id "ECM.225" +go +setboard rnb1kr2/p4pQ1/8/1ppPpP2/2p1P3/N6P/Pq4B1/3R1RK1 w q - +solution Nxb5 +id "ECM.226" +go +setboard 5r1k/2p3pp/3pQ3/3P1rN1/pp5q/5PR1/P4PKP/B7 w - - +solution Bxg7+ +id "ECM.227" +go +setboard 8/pR3Bk1/3p2p1/5b1p/2P4P/6P1/P4bQK/4q3 b - - +solution Bg1+ +id "ECM.228" +go +setboard r1b1Rnk1/6pp/p4q2/1pp2P2/3r4/2NB4/PP1Q2PP/4R1K1 w - - +solution Nd5 +id "ECM.229" +go +setboard 1Q6/pb3pk1/1p3qp1/1N3p1p/2Pr3P/3BR1PK/r7/6R1 b - - +solution Rh2+ +id "ECM.230" +go +setboard rq3r1k/p2n1p2/1pbb1np1/2p2BB1/8/2N2N2/PP3QPP/3R1RK1 w - - +solution Rxd6 +id "ECM.231" +go +setboard 2kr3r/Qpp1n1p1/2b2pp1/4b3/8/6N1/PPP2P2/R1B2RK1 b - - +solution Rh1+ +id "ECM.232" +go +setboard 8/2p2Q1p/1rp5/p3q1kp/P7/2P2RP1/5PK1/8 w - - +solution Rf5+ +id "ECM.233" +go +setboard 1r2b3/1p2q1bk/p1p1p1p1/P1PpP2r/1P1KpPQP/4P2N/6R1/4B2R b - - +solution Rxe5 +id "ECM.234" +go +setboard 6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - - +solution Re8+ +id "ECM.235" +go +setboard 2R5/4ppkp/6p1/p2P4/4P2P/p3B1P1/qbR2PK1/8 w - - +solution Rg8+ +id "ECM.236" +go +setboard 3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - - +solution Bf2+ +id "ECM.237" +go +setboard 6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - - +solution Qc1 +id "ECM.238" +go +setboard 3r1rk1/1pq1nppp/p7/2pB3Q/P4P2/1P2P3/6PP/2RR2K1 w - - +solution Bf3 +solution Rxc5 +id "ECM.239" +go +setboard 8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - - +solution Rxd6 +id "ECM.240" +go +setboard 6k1/1pp2p2/p2p2q1/2PPb3/4r3/Pr4PK/2R5/2Q2NR1 b - - +solution Rh4+ +id "ECM.241" +go +setboard 3r4/1pQ4R/p1b2kp1/P6p/2q5/7P/2P3P1/6K1 b - - +solution Rd1+ +id "ECM.242" +go +setboard 6rr/1b3k1p/pbqppPn1/1p5Q/4PN2/P6R/1PP3BP/2B2R1K w - - +solution Qxh7+ +id "ECM.243" +go +setboard 4rrk1/3b1ppp/pb6/1pqP4/P1p1PP2/1P2NK2/3QB2P/R2R4 b - - +solution Rxe4 +id "ECM.244" +go +setboard 2r1r1k1/1p4bp/p2p1qp1/1n1P4/2P1B2P/1N1Q4/PP2R3/1K5R b - - +solution Rxc4 +id "ECM.245" +go +setboard 6rr/ppqb1pkp/2pb1pn1/3p3Q/3P1P1N/3B1RN1/PPP3PP/5RK1 w - - +solution Qh6+ +id "ECM.246" +go +setboard r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - - +solution Bh7+ +id "ECM.247" +go +setboard r2q1rk1/1b1nbpp1/p1p1p2p/1pPpN3/3P1N2/P2BP3/1PQ2PPP/R4RK1 w - - +solution Bh7+ +id "ECM.248" +go +setboard 2r2rk1/pb4pp/1p2p3/4Npq1/3P1n2/5P2/PP1R2PP/RB2Q1K1 b - - +solution Rc1 +id "ECM.249" +go +setboard 2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - - +solution Bxf7+ +id "ECM.250" +go +setboard 1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - - +solution Bb7 +id "ECM.251" +go +setboard r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - - +solution Bxf6 +id "ECM.252" +go +setboard 1R2br1k/5r1p/p2p1P2/6RQ/3p1P2/4p2B/q6P/5N1K w - - +solution Rxe8 +id "ECM.253" +go +setboard kr1r4/7p/2bqp1p1/p7/1Pp1PP1P/K1B1nNPB/PP5R/RN2Q3 b - - +solution Qxb4+ +id "ECM.254" +go +setboard 5r1r/1pkb4/5pB1/2P5/p3R2P/Pq6/1PQ2Pn1/K2R4 w - - +solution Rxd7+ +id "ECM.255" +go +setboard kn5r/p2r2p1/1pqBp1np/1Q1pPp2/R2P4/1N6/2P2PPP/R5K1 w - - +solution Rxa7+ +id "ECM.256" +go +setboard 4Rnk1/2p2pp1/3r3p/p2P4/P5Q1/1B5P/5PK1/q7 w - - +solution Rxf8+ +id "ECM.257" +go +setboard 4r3/2k1p2q/pp1nR1p1/2pP1pP1/2P2P2/1P6/P1K3B1/4Q3 w - - +solution Rxd6 +id "ECM.258" +go +setboard 2b3k1/p4ppp/7q/2Q5/8/P3r1P1/1r4BP/R3R1K1 b - - +solution Rxg2+ +id "ECM.259" +go +setboard r1b1rbk1/7p/2p1pBp1/p2pP1P1/5P2/1PqB4/P1P1Q3/1K4RR w - - +solution Rxh7 +id "ECM.260" +go +setboard 2rq4/5rbk/3p1n1p/p2Pp2P/1p2b3/4BNR1/PP1Q1P2/3BK1R1 w - - +solution Bxh6 +id "ECM.261" +go +setboard r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - - +solution Rxh8+ +id "ECM.262" +go +setboard 3r2k1/p4rPp/1b1q3Q/n1p1pP2/1p6/3B1NR1/P4P1P/6RK w - - +solution Qxh7+ +id "ECM.263" +go +setboard r1bqrnk1/p4p2/1p5p/3pB1p1/P2P2n1/1P1B2N1/2Q3PP/R4RK1 w - - +solution Bh7+ +id "ECM.264" +go +setboard r2rn1k1/1bqn1ppp/p7/2bpP1P1/1p1N1Q2/1P3B2/PBP1NR1P/3R2K1 w - - +solution Qxf7+ +id "ECM.265" +go +setboard r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - - +solution Nxf7 +id "ECM.266" +go +setboard r1b1r1k1/1p1n1p2/p1nBp1p1/q2pP1Np/P7/R2B3Q/2P2PPP/5RK1 w - - +solution Nxf7 +id "ECM.267" +go +setboard r1b1k2r/ppp3pp/1qp5/2b1Pp2/3Qn3/5N2/PPPBNPPP/2KR3R w kq - +solution Qd8+ +id "ECM.268" +go +setboard 1k6/1p4p1/P1p5/5Q2/2q2r2/P7/8/4R2K w - - +solution Re8+ +id "ECM.269" +go +setboard 6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - - +solution Bg3+ +id "ECM.270" +go +setboard 4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - - +solution Nxc6 +id "ECM.271" +go +setboard r2qk2r/1pp2ppp/p3pnn1/6N1/1B1P2P1/1Q2P2P/PP3PK1/R6R b kq - +solution Nh4+ +id "ECM.272" +go +setboard 2kr2r1/R2p3p/2n2p2/1R3P2/2P1p3/4BQ2/1Pq4P/4K3 w - - +solution Ra8+ +id "ECM.273" +go +setboard r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - - +solution Qxf3+ +id "ECM.274" +go +setboard r1br4/ppq2pk1/3bpN2/8/2P5/3n2B1/PP2QPPP/R4K1R w - - +solution Qg4+ +id "ECM.275" +go +setboard 6kb/B1p2p2/5r2/1r1p2pR/6q1/3P2P1/P1P2PP1/2KR3Q b - - +solution Rb1+ +id "ECM.276" +go +setboard rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - - +solution Rh8+ +id "ECM.277" +go +setboard 3k2r1/pp1b3Q/1b2pP1p/3pN2q/5B2/7B/PP2nP1K/2R5 b - - +solution Rg2+ +id "ECM.278" +go +setboard 2r2rk1/pp3qpp/8/3P1b2/3Q4/P1N1B3/5PKP/R2R4 b - - +solution Rxc3 +id "ECM.279" +go +setboard r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - - +solution Nxg7 +id "ECM.280" +go +setboard 4k2r/1bqnbppp/p3p3/1p2P1N1/2r2BB1/8/PPP3PP/R2Q1R1K w k - +solution Nxf7 +id "ECM.281" +go +setboard 5r1k/1pqb3p/2n5/p1pB4/2Pp1r1P/1P5P/R2N2K1/3Q1R2 b - - +solution Bxh3+ +id "ECM.282" +go +setboard r4r2/pp2qk2/4pnp1/3pQ3/2p2P2/3B4/PPP2P2/2KR3R w - - +solution Bxg6+ +id "ECM.283" +go +setboard 3bq3/p1n2rk1/1pp1p1p1/3pPnPp/1P1P1N1P/2PN3K/P2BQR2/8 w - - +solution Nxg6 +id "ECM.284" +go +setboard b6r/2q2k2/4pPp1/1p1n2Bp/2pPB1PP/2P2Q2/8/4R1K1 w - - +solution Bxg6+ +id "ECM.285" +go +setboard r1b2r2/3pNpkp/3pn1p1/2pN3P/2PnP3/q3QP2/4BKP1/1R5R w - - +solution Qh6+ +id "ECM.286" +go +setboard 4k3/p4ppp/nb1P4/4p3/1P6/P4BP1/3q1r1P/2R2QKR w - - +solution Qb5+ +id "ECM.287" +go +setboard r2q1rk1/pp2pp2/3pb3/3Qb2R/4P1p1/1BN1Bn2/PPP2P2/2K4R w - - +solution Rh8+ +id "ECM.288" +go +setboard 2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - - +solution Nxg7 +id "ECM.289" +go +setboard 1rbk2nr/p1pp2b1/7p/2qP1pp1/2Bn4/2NKBP2/PP2N1PP/R2Q3R b - - +solution Qxc4+ +id "ECM.290" +go +setboard 1r3rk1/6p1/p1pb1qPp/3p4/4nPR1/2N4Q/PPP4P/2K1BR2 b - - +solution Rxb2 +id "ECM.291" +go +setboard 5rk1/ppp1q2p/1n1p1np1/3P2N1/1P1R2P1/2Q4P/P3r1B1/5RK1 b - - +solution Rxg2+ +id "ECM.292" +go +setboard 6k1/pp2p2p/3p2p1/4b1r1/2Pn1r1q/2B1N3/PP4B1/R3QRK1 b - - +solution Qh2+ +id "ECM.293" +go +setboard r2qnr2/pp3kbQ/2npb1p1/2pN1pP1/4P3/8/PPP1BP2/R1B1K1NR w KQ - +solution Qxg6+ +id "ECM.294" +go +setboard r2k3r/2pb1ppp/p1p1q3/2Q5/5B2/2N5/PPP2PPP/3R2K1 w - - +solution Bxc7+ +id "ECM.295" +go +setboard 2r2r2/2N2pkp/2Q5/1N2p1b1/1p6/3P1qPb/PPR2P1P/4R1K1 b - - +solution e4 +id "ECM.296" +go +setboard 2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - - +solution b4 +id "ECM.297" +go +setboard 2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - - +solution Re6 +id "ECM.298" +go +setboard 1r2k2r/2p2p1b/q1Pppb1N/p2p2P1/Q2P4/P3B3/1P5P/2KRR3 b k - +solution Rb4 +id "ECM.299" +go +setboard 8/2b2k1p/2N2pp1/P2p4/3KnP2/6BP/P5P1/8 w - - +solution Kxd5 +id "ECM.300" +go +setboard 4b1r1/1p3ppk/3r3p/p1p1qP1B/3pPN2/3P3R/nPPQ3P/6RK w - - +solution Ne6 +id "ECM.301" +go +setboard 4b2k/7p/3q3P/1p1pRpr1/1P1B4/2P2Q2/7K/8 w - - +solution Qg3 +id "ECM.302" +go +setboard 2kr2r1/pbp4p/1p4p1/1NqpNp2/4nQ2/8/PPPR1PPP/2K1R3 w - - +solution Nc6 +id "ECM.303" +go +setboard 1rr3k1/1p1bqpbp/1R1p2p1/pN1P4/P3P1n1/1Q6/3NB1PP/2B1R1K1 b - - +solution Rc3 +id "ECM.304" +go +setboard r1br4/1p3k2/p2q1p2/3N1Pp1/3Q4/8/PP4P1/4RR1K w - - +solution Re6 +id "ECM.305" +go +setboard r3kbnr/p4ppp/2p1p3/8/Q1B3b1/2N1B3/PP3PqP/R3K2R w KQkq - +solution Bd5 +id "ECM.306" +go +setboard 3r1rk1/2p1qp1p/pnP3p1/4n3/PP1NpR2/1BQ4P/6P1/5RK1 w - - +solution Ne6 +id "ECM.307" +go +setboard r1bq1k2/5pb1/p2p1n2/2pPrP2/2p4B/3B2R1/PP1Q2PP/R5K1 w - - +solution Qg5 +id "ECM.308" +go +setboard 2bq1rk1/p4pbp/p2p2p1/3P4/2p1QP2/2Pr3P/PP1N2P1/R1B2RK1 b - - +solution Bd4+ +id "ECM.309" +go +setboard r5rk/1p1bqpnp/3p1b1B/pBnPp2P/4P3/2N2Q2/PP3P2/R3KNR1 b Q - +solution Nf5 +id "ECM.310" +go +setboard r3rk2/p2q1b1p/1pnP1Qp1/5pN1/2p2P2/P1P5/7P/4RRK1 w - - +solution Re7 +id "ECM.311" +go +setboard r3r1k1/p1q2pp1/2p4p/7n/BPPP2N1/3Q1N2/P3n1P1/R1B4K b - - +solution Nhg3+ +id "ECM.312" +go +setboard r2qrbk1/1p4pb/2n2p1p/pNpn4/2N5/PP1PPQPB/1B5P/2R2RK1 w - - +solution Nbd6 +id "ECM.313" +go +setboard 5r1k/1p1b1p1p/p2ppb2/5P1B/1q6/1Pr3R1/2PQ2PP/5R1K w - - +solution Qh6 +id "ECM.314" +go +setboard r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - - +solution Rd6 +id "ECM.315" +go +setboard r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - - +solution R1b4 +id "ECM.316" +go +setboard 4r3/pp1b3k/2p2qpp/2Pp4/1P6/PBbP1N1P/2R3P1/3Q3K b - - +solution Re1+ +id "ECM.317" +go +setboard 1rb2rk1/p1p2ppp/2q5/3R4/2P1N3/bP4B1/P1Q2P1P/1K5R w - - +solution Bd6 +id "ECM.318" +go +setboard 8/5k1p/5PpB/3PR3/2r4P/1p3K2/2b5/8 b - - +solution Re4 +id "ECM.319" +go +setboard 4r2k/3b3p/p2p4/2pP1p2/q1B2Q1P/2PK1P2/Pr1R4/7R b - - +solution Re4 +id "ECM.320" +go +setboard rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - - +solution Rd5 +id "ECM.321" +go +setboard 2R5/2R4p/5p1k/6n1/8/1P2QPPq/r7/6K1 w - - +solution Rxh7+ +id "ECM.322" +go +setboard r1b1r1kb/p1qn1pnp/2p1p1p1/4P1N1/2p1NPP1/4B3/PPPQ3P/3RK2R w K - +solution Qxd7 +id "ECM.323" +go +setboard 5k1r/ppqnnp2/3b2p1/2pB2Qp/3p3N/1P1P2P1/P1P2P2/2B1R1K1 w - - +solution Rxe7 +id "ECM.324" +go +setboard 5rk1/5p1p/8/3pNp2/RPrqn3/1Q5P/1P3PP1/4R1K1 w - - +solution Rxe4 +id "ECM.325" +go +setboard 2rr2k1/4qppp/bn6/p1bB4/4N3/6P1/PB2PP1P/2RQ1RK1 w - - +solution Rxc5 +id "ECM.326" +go +setboard 3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - - +solution Rxd7 +id "ECM.327" +go +setboard 5rk1/r2nqpp1/p3p3/1p2P3/4N1pP/8/PPP3Q1/1K1R3R w - - +solution Rxd7 +id "ECM.328" +go +setboard 1rr3k1/4ppb1/2q1bnp1/1p2B1Q1/6P1/2p2P2/2P1B2R/2K4R w - - +solution Qh6 +id "ECM.329" +go +setboard 2r2r1k/1pq1b1p1/p1b1Qn1p/8/3B4/2NB4/PPP3PP/3R1R1K w - - +solution Rxf6 +id "ECM.330" +go +setboard 3rqb2/1pR3pk/p3n1pp/3p4/3B4/PP6/1P4PP/4RQK1 w - - +solution Rxe6 +id "ECM.331" +go +setboard rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - - +solution Rxc8+ +id "ECM.332" +go +setboard 2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - - +solution Rxe4 +id "ECM.333" +go +setboard r3r1k1/1p3pPp/p1p5/3bb2N/7q/1P1Q4/2PB2PP/4RRK1 w - - +solution Rxe5 +id "ECM.334" +go +setboard 8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - - +solution Rxd4 +id "ECM.335" +go +setboard r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - - +solution Rxe5 +id "ECM.336" +go +setboard r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - - +solution Rxe2 +id "ECM.337" +go +setboard 2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - - +solution Ng3 +id "ECM.338" +go +setboard r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - - +solution Rxc5 +id "ECM.339" +go +setboard 1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - - +solution Rxe7 +id "ECM.340" +go +setboard r1k2n1r/2pb4/1p1p1qpp/p2P1p2/3N1P1P/2Q3P1/PPP1R3/2K1RB2 w - - +solution Re8+ +id "ECM.341" +go +setboard r1b2r1R/1p2bpk1/4p1p1/4P1N1/p2p4/5Q2/qPP2PP1/1NKR4 w - - +solution Qf6+ +id "ECM.342" +go +setboard rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - - +solution Nxe6 +id "ECM.343" +go +setboard 4q1r1/5kpp/2p1nb2/2PpQp2/r4P2/1N3P2/1BP1R2P/6RK w - - +solution Rxg7+ +id "ECM.344" +go +setboard 2r1k2r/1pq1bppp/p3bn2/4N3/2pPN3/2P5/P3QPPP/R1B1R1K1 w k - +solution Nxf6+ +id "ECM.345" +go +setboard 1r3k1r/4Rn1p/pb1p1P2/1p1q2P1/5p2/7Q/PPP1B1RP/2K5 w - - +solution Rxf7+ +id "ECM.346" +go +setboard 4rrk1/ppn3pp/2pb1n1q/3p4/1P1P4/P3BNP1/2P1BPKP/R2Q1R2 b - - +solution Rxe3 +id "ECM.347" +go +setboard 2b1r2k/2Q4p/4q3/1pp5/3b4/4NP2/1P3BP1/3R2K1 w - - +solution Rxd4 +id "ECM.348" +go +setboard r3r1k1/pp3ppp/1qp5/2bbNQ2/5B2/2P5/PP3PPP/3RR1K1 w - - +solution Rxd5 +id "ECM.349" +go +setboard 7r/3qbk1r/3p1n2/p1pPp1p1/Pp1nPpP1/1P1Q1P1B/1NP3K1/R3B2R b - - +solution Nxg4 +id "ECM.350" +go +setboard r2qn1k1/1p1b3p/2pp1b2/6pQ/p1P1P3/P1N3PB/1P6/3R1R1K w - - +solution Rxf6 +id "ECM.351" +go +setboard 2rq3r/5p2/p3pkbQ/3p4/3N4/2P4R/P4PP1/4R1K1 w - - +solution Rf3+ +id "ECM.352" +go +setboard r4k1r/pp2pp2/3p1b2/q2PnQpp/3N4/1BP3P1/PP3PP1/3RR1K1 w - - +solution Rxe5 +id "ECM.353" +go +setboard 5rk1/2p3pp/p1p4r/2P1p3/3pPnq1/1P3R1P/PN1Q3K/R5N1 b - - +solution Qxf3 +id "ECM.354" +go +setboard r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - - +solution Rxd7 +id "ECM.355" +go +setboard 2r2rk1/p3p1bp/3qP1p1/1Q1p4/P4P2/3R4/1P4PP/2B2RK1 b - - +solution Rxc1 +id "ECM.356" +go +setboard r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - - +solution Rxd4 +id "ECM.357" +go +setboard 1r6/3b1pk1/pr1p1q1p/2pPb1p1/2B1P1P1/2N2PP1/1PQ3K1/RR6 b - - +solution Rxb2 +id "ECM.358" +go +setboard 2r2rk1/5ppp/1p2p3/p7/1n1R4/P1NnPN2/1P3PPP/1R4K1 b - - +solution Nxb2 +id "ECM.359" +go +setboard 2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - - +solution Bxf6 +id "ECM.360" +go +setboard r3r1k1/p4ppp/2pp1b2/8/q2n1P2/2BQ3P/PPP3P1/1K1R2NR b - - +solution Re3 +id "ECM.361" +go +setboard rn1kr3/pppb4/3p1q2/3P1pNn/2P2P1p/1P2Q2P/P2NR1B1/4R1K1 w - - +solution Qxe8+ +id "ECM.362" +go +setboard r2q1rk1/ppp1b1pp/1nn1p3/4P3/2PP4/2N1B2P/PP1Q4/2KR1B1R b - - +solution Rxf1 +id "ECM.363" +go +setboard r3k3/1pqb1p2/p3p3/4n2r/3N1Q2/2P5/PP4B1/4RRK1 w q - +solution Rxe5 +id "ECM.364" +go +setboard 1rb2bk1/q4r2/pB1p1nn1/3Pp3/N3PpP1/8/1PQ1BNP1/R1R3K1 b - - +solution Rxb6 +id "ECM.365" +go +setboard 2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - - +solution Rxd8 +id "ECM.366" +go +setboard r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - - +solution Rd5 +id "ECM.367" +go +setboard 3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - - +solution Rxg6+ +id "ECM.368" +go +setboard 2rr2k1/5ppp/p1b1pn2/q1p5/P1B1PQ2/R1PN1P2/6PP/1R4K1 b - - +solution Rxd3 +id "ECM.369" +go +setboard 1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - - +solution Bd8 +id "ECM.370" +go +setboard 1k2rb1r/pbp1q1pp/2pp4/2PnpP2/Q7/1P3NP1/PB5P/2KR1B1R w - - +solution Rxd5 +id "ECM.371" +go +setboard 7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - - +solution g4 +id "ECM.372" +go +setboard 5qk1/p4p2/1p3Pp1/2p4Q/3rr3/7R/PP6/6RK b - - +solution Rh4 +id "ECM.373" +go +setboard 5r1k/5Bb1/3p2Pp/p1pP4/1p2Q3/4P1P1/q7/3K3R w - - +solution Rxh6+ +id "ECM.374" +go +setboard 2b4B/1pp2k2/1p6/3P3n/5p1P/1P4p1/P2r2P1/R5KR b - - +solution f3 +id "ECM.375" +go +setboard r3k2N/pppbq1pp/5n2/3Ppn2/2BP4/2P3bP/PP2Q1P1/RNB2K1R b q - +solution Bh2 +id "ECM.376" +go +setboard r2q1r2/p1pbppbk/1p3npp/n2P2B1/7Q/2NB1N2/PPP3PP/4RRK1 w - - +solution d6 +id "ECM.377" +go +setboard 5n2/3bp1r1/1r1p3k/p1p2pNp/1nP2P1P/1PN1PB1K/P5R1/6R1 w - - +solution Nf7+ +id "ECM.378" +go +setboard r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - - +solution Bxe5+ +id "ECM.379" +go +setboard r1b1qbk1/7p/4p1p1/1p2Bp2/p1B2Q2/P3P3/1P3PPP/3R2K1 w - - +solution Bc3 +id "ECM.380" +go +setboard 2r1k2r/3b1pb1/p2ppp2/2q2P2/2p1P2p/P1N2N2/1PP1Q1PP/3R1R1K w k - +solution e5 +id "ECM.381" +go +setboard 3r1rk1/1pq1bppp/p7/n2RN3/P7/1P6/1B2QPPP/R5K1 w - - +solution Nd7 +id "ECM.382" +go +setboard q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - - +solution Rxc4 +id "ECM.383" +go +setboard r3bknr/1p4pp/p3Q3/q4pb1/P1Bn4/8/1PP2PPP/R1B1R1K1 w - - +solution Qd6+ +id "ECM.384" +go +setboard r1b1nrk1/p2n3p/2pp4/8/2P2q1N/1PB4P/P4PB1/R2QR1K1 w - - +solution Bd5+ +id "ECM.385" +go +setboard 7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - - +solution Bxe4 +id "ECM.386" +go +setboard r4r1k/1bq4p/p4bp1/3pn3/NP6/Q1PBB2P/6P1/3R1RK1 b - - +solution d4 +id "ECM.387" +go +setboard r2r2k1/1bq2pb1/6pp/2P1p3/1nBpN2N/6PP/2Q2P2/3RR1K1 w - - +solution Nf6+ +id "ECM.388" +go +setboard r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - - +solution Nf6+ +id "ECM.389" +go +setboard 2k1r3/Qp3pb1/2p4p/6q1/8/1P4PN/PBPn1P2/K2R4 b - - +solution Qe5 +id "ECM.390" +go +setboard r3r1k1/1pp2p1b/7p/2Q5/2PP2p1/2P1NpPq/P2R1P1P/6RK b - - +solution Rxe3 +id "ECM.391" +go +setboard 5bk1/5p1p/Q5p1/1B4n1/8/2q1p3/6PP/3R2K1 b - - +solution e2 +id "ECM.392" +go +setboard r5k1/1p3pp1/1p3q1p/1P1bQ3/P2P3n/8/3B1PPP/R3R1K1 b - - +solution Nf3+ +id "ECM.393" +go +setboard 2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - - +solution Rxa6 +id "ECM.394" +go +setboard r5kr/p3PR1p/1p1p2pq/4n3/8/3B4/P4QPP/4R1K1 w - - +solution Rxe5 +id "ECM.395" +go +setboard 2bq1b2/1p3k2/1r1p1p1p/pNpP1PpP/P1P3P1/6B1/1P5Q/2K1R3 w - - +solution Re6 +id "ECM.396" +go +setboard 2kr3r/pp3p1p/2b1p3/q3Q3/5P2/2P1B3/P1P3PP/1R3RK1 b - - +solution Rhg8 +id "ECM.397" +go +setboard 2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - - +solution Rxd3 +id "ECM.398" +go +setboard 2r2nk1/6pp/p1rPqp2/1pP1p3/1P6/2B3R1/1P2Q1PP/5RK1 w - - +solution Rxf6 +id "ECM.399" +go +setboard 3r2k1/pb3p1p/1q4p1/2b1P3/1Pp5/2P1p1P1/P3Q1BP/R1B4K b - - +solution Qc6 +id "ECM.400" +go +setboard r2rnbk1/pp3ppp/1q4n1/3p1N2/5P2/1PQB4/PBP3PP/4RR1K w - - +solution Nh6+ +id "ECM.401" +go +setboard r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - - +solution e5 +id "ECM.402" +go +setboard r1b2rk1/pp2qp2/2nRp1p1/6Pn/1Pp5/P1N1P3/1BQ2PP1/2K2B1R w - - +solution Rxh5 +id "ECM.403" +go +setboard 5rr1/pp1kq1bp/2bppn2/2p3B1/4N3/2NP2P1/PPP4P/R3QRK1 b - - +solution Nxe4 +id "ECM.404" +go +setboard 1r1q1k2/R4pp1/5p1r/1p1p1n1p/3Pb2N/1BP5/2P1Q1PP/4R1K1 w - - +solution Qxe4 +id "ECM.405" +go +setboard R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - - +solution Nxe5 +id "ECM.406" +go +setboard r1b3kr/bp3ppp/p1nNp3/4P3/P1Q2P2/BBP5/5qPP/R2R3K w - - +solution Nxc8 +id "ECM.407" +go +setboard 6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - - +solution Rxc4 +id "ECM.408" +go +setboard 4r1k1/1p5p/5ppP/1qnP4/r4R2/P6P/1B1Q2K1/5R2 w - - +solution Rxf6 +id "ECM.409" +go +setboard r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - - +solution e6 +id "ECM.410" +go +setboard r4rk1/1b4bp/p1npq1P1/R3p3/8/1N2BP2/1PPQ2P1/4KB1R w K - +solution Qxd6 +id "ECM.411" +go +setboard 6k1/pbq2pp1/4r2p/8/3prb2/1P1Q3P/PN2BPP1/3RRK2 b - - +solution Bd2 +id "ECM.412" +go +setboard 6k1/2p3p1/2b4p/p4P2/2pR2PK/2P1r2P/1B6/8 b - - +solution Bg2 +id "ECM.413" +go +setboard r1b2rk1/pp2ppbp/2np1np1/q7/4P3/2N1BN2/PPPQBPPP/2KR3R b - - +solution Nxe4 +id "ECM.414" +go +setboard 3r1rk1/p1q4p/1p3bp1/3bnp2/3B4/1NPB3P/P1PQ2P1/1R2R2K b - - +solution Nf3 +id "ECM.415" +go +setboard r2q1rk1/p5pp/bn1p1p2/2pP4/1bP1NP2/3B1R2/PBQ3PP/R5K1 w - - +solution Ng5 +id "ECM.416" +go +setboard 1r1q2k1/7p/2p3p1/1P1n1b1r/2BQ4/4B3/P6P/1R3RK1 w - - +solution bxc6 +id "ECM.417" +go +setboard r3kbnr/1ppb3p/p1q1pp2/3p4/3P4/2N2N2/PPP2PPP/R1BQ1RK1 w kq - +solution Ne5 +id "ECM.418" +go +setboard r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - - +solution Rxf6 +id "ECM.419" +go +setboard 3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - - +solution Bc3 +id "ECM.420" +go +setboard 2b2r2/rpp2pkp/3pq3/2pR2P1/2n1P1N1/2P2B2/1P3Q1P/1K5R b - - +solution Qxd5 +id "ECM.421" +go +setboard 6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - - +solution f4 +id "ECM.422" +go +setboard 7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - - +solution b4 +id "ECM.423" +go +setboard 5r2/4prkp/3q2p1/2pP1n2/N1Q2R2/1P4PP/P5K1/4R3 b - - +solution g5 +id "ECM.424" +go +setboard B1b1rbk1/5ppp/pq6/1p2n3/2p2P2/6PP/PPQ4K/R1BR4 b - - +solution Ng4+ +id "ECM.425" +go +setboard 8/2R4p/2R3bk/8/5N1P/1p3PP1/2pqP1K1/8 w - - +solution g4 +id "ECM.426" +go +setboard 6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - - +solution Ne2+ +id "ECM.427" +go +setboard 1kqr3r/p1p4p/RpQP4/2P1p3/4B3/4Bp2/P4P1P/6K1 b - - +solution Rdg8+ +id "ECM.428" +go +setboard 6k1/3Q1pp1/4p2p/p2pP3/1p1P2P1/nP1R1N2/q1r2PKP/8 w - - +solution Qe8+ +id "ECM.429" +go +setboard 6k1/5pp1/p5r1/3Np2q/4P2p/1r3P1Q/n4P1P/3R2RK w - - +solution Rxg6 +id "ECM.430" +go +setboard nr2rb2/3q1kpp/3p4/pnpPpNBP/2N1P3/3Q4/PP3P2/2K3RR w - - +solution Nh6+ +id "ECM.431" +go +setboard r3k1r1/1pp2ppp/pb1p1qn1/4p2b/2B1P3/N1PP1NPP/PP2QPK1/R4R2 b q - +solution Nh4+ +id "ECM.432" +go +setboard 1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - - +solution Bxh6 +id "ECM.433" +go +setboard r2b4/pb2q1k1/np1p2r1/1N1Pp2Q/PPN1Pp2/8/2R2BPp/2R4K w - - +solution Ncxd6 +id "ECM.434" +go +setboard r7/2qnb1kp/p2p1nP1/1p1Pp1p1/6N1/3BB2Q/PPP4P/5RK1 w - - +solution Qxh7+ +id "ECM.435" +go +setboard n1rqk3/1p2p3/1n1pP1p1/pP1P1p1r/3B3P/1BN3p1/3Q4/R3K2R w KQ - +solution Qg5 +id "ECM.436" +go +setboard rn2kr2/pp1b1pQp/3Pp3/qB1n4/3N4/P7/1PP2PPP/2KR3R w q - +solution Nxe6 +id "ECM.437" +go +setboard 3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - - +solution Bh4 +id "ECM.438" +go +setboard r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - - +solution Bf8 +id "ECM.439" +go +setboard 4rr1k/pbp3bp/3p4/1p5q/3n4/1B1Q2B1/PP1N1N1P/4RRK1 b - - +solution Rf3 +id "ECM.440" +go +setboard r3k2r/pp2ppbp/1qp5/2n2b2/2P5/4BN2/PP1QBP1P/2KR3R b kq - +solution Nb3+ +id "ECM.441" +go +setboard 4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - - +solution Ng6+ +id "ECM.442" +go +setboard 2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - - +solution Qb2 +id "ECM.443" +go +setboard 2r3k1/n3qppp/1B1r1n2/N7/N4P2/1Q4PP/P5B1/R1b4K b - - +solution Qe1+ +id "ECM.444" +go +setboard 7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - - +solution Qxg5+ +id "ECM.445" +go +setboard rnb2k2/ppbp2p1/2p2pB1/8/1PN5/2P5/P4PPP/R1B3K1 w - - +solution Bf4 +id "ECM.446" +go +setboard 2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - - +solution f5 +id "ECM.447" +go +setboard 2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - - +solution f3 +id "ECM.448" +go +setboard r3q2r/2p1k1p1/p5p1/1p2Nb2/1P2nB2/P7/2PNQbPP/R2R3K b - - +solution Rxh2+ +id "ECM.449" +go +setboard 6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - - +solution Rxg2 +id "ECM.450" +go +setboard 4r1k1/1p2rq1p/2bQpp2/p1Pp4/3P4/P3RN2/5PPP/4R1K1 w - - +solution Ne5 +id "ECM.451" +go +setboard b2b1r1k/3R1ppp/4qP2/4p1PQ/4P3/5B2/4N1KP/8 w - - +solution g6 +id "ECM.452" +go +setboard 1k4q1/1p2Rprp/p1p5/2Pp4/1P1Q3P/6P1/P5K1/8 w - - +solution Qe5+ +id "ECM.453" +go +setboard r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - - +solution Ng6+ +id "ECM.454" +go +setboard r4r1k/p2bN2p/1p1p1p2/2q4P/3Q4/1P6/1PP3P1/1K2R2R w - - +solution Ng6+ +id "ECM.455" +go +setboard 2kr3r/p5b1/Pp2R1p1/2q2p1p/2p2Pn1/2P2BP1/1PQB2P1/5R1K b - - +solution h4 +id "ECM.456" +go +setboard r1b2k1r/1p2qp2/pN1p1n2/2pP2pp/P2bP1P1/2N5/1P2BPP1/R2Q1RK1 b - - +solution hxg4 +id "ECM.457" +go +setboard 6nk/p4rrp/1p1p1p2/1q1Pp2R/4B1P1/1PP2Q1R/P6P/7K w - - +solution g5 +id "ECM.458" +go +setboard r1b1k2r/6pp/p1p1p3/3np1B1/1b2N3/8/q1PQB1PP/3RK2R w Kkq - +solution Qxb4 +id "ECM.459" +go +setboard 3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - - +solution Bxh5 +id "ECM.460" +go +setboard 2r3k1/4qpp1/2p1r3/pbQpN1Pp/3P1P1P/4P3/PP6/1KR3R1 w - - +solution Qxb5 +id "ECM.461" +go +setboard 4r2k/p2Q3p/2p1r1p1/4NpR1/3P4/2P1PP1b/P4q1P/6RK w - - +solution Nxg6+ +id "ECM.462" +go +setboard 4r1kb/p2r4/1np1p1p1/3nP1Bp/1p3P1R/1B2qP2/PPPN3Q/2K4R w - - +solution Rxh5 +id "ECM.463" +go +setboard 2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - - +solution e5 +id "ECM.464" +go +setboard r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - - +solution Rxd5 +id "ECM.465" +go +setboard 2r1kr2/p1qbbp1Q/3pp3/5p2/1p1N1PB1/6P1/PPP4P/K2RR3 w - - +solution Bxf5 +id "ECM.466" +go +setboard r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - - +solution Rf6 +id "ECM.467" +go +setboard 2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - - +solution f5 +id "ECM.468" +go +setboard 2Q2bkr/5p2/1rb5/1pN1n1qB/1P1pPN2/6P1/5P2/R1R3K1 w - - +solution Nce6 +id "ECM.469" +go +setboard 2r4r/1q1kb1p1/4p2p/3pP3/np6/3RBP2/NPP2Q1P/1K2R3 b - - +solution Nc3+ +id "ECM.470" +go +setboard 2r4r/3bk1b1/1q2pp2/3pPp1p/1p1N1P1P/1P1R1BP1/P2Q4/1K1R4 w - - +solution Nxf5+ +id "ECM.471" +go +setboard 1rb3k1/2r2pbp/p2q1npn/P1pPp1N1/2B1P3/2P1B1NP/5QP1/3R1RK1 w - - +solution Ne6 +id "ECM.472" +go +setboard r7/pp4pk/2n3qp/5p2/3p4/P4QB1/1PP1RPPP/6K1 b - - +solution d3 +id "ECM.473" +go +setboard 2r2r1k/1p3p1p/p2p1Pp1/3Pp3/1q2Bn1Q/8/1PP3PP/4RR1K w - - +solution Rxf4 +id "ECM.474" +go +setboard r4rk1/5ppp/p7/4PR2/P1qnp2Q/4B3/1P4PP/5RK1 w - - +solution Rh5 +id "ECM.475" +go +setboard 4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - - +solution Rexe3+ +id "ECM.476" +go +setboard 1r3kr1/p3q1b1/3p2Q1/2p2p2/2P2N2/4Pn2/PB6/K2R3R w - - +solution Ne6+ +id "ECM.477" +go +setboard 5r1k/6bp/3p1q2/3Q1nP1/8/6P1/PP3BKP/R2N4 b - - +solution Ne3+ +id "ECM.478" +go +setboard 1r1q1k1r/Q4ppp/2B2n2/8/Pbbp4/1P4P1/2PP1P1P/R1B1K2R b KQ - +solution Qe8+ +id "ECM.479" +go +setboard 5rk1/p1p1R1p1/1p5p/8/2pP1P2/3n2P1/PP2Q2P/5KNq b - - +solution Nxf4 +id "ECM.480" +go +setboard r5k1/1N3ppp/4b3/1Nq5/Pn3pn1/5B2/1PPQ3P/R6K b - - +solution Qxb5 +id "ECM.481" +go +setboard 1r2k2r/1bq2pp1/pn2p2p/1p2P1b1/3N4/2N3Q1/PPP3PP/1K1R1BR1 w k - +solution Bxb5+ +id "ECM.482" +go +setboard r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - - +solution Nxh6 +id "ECM.483" +go +setboard 2r2r2/p4p1k/1p2pBpn/2p5/6N1/8/P4P2/R3R1K1 w - - +solution Kg2 +id "ECM.484" +go +setboard r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ - +solution Bg5 +id "ECM.485" +go +setboard 3rn1k1/pp3ppp/6b1/2p1Q3/2P1P3/P4P2/1B1qBP1P/1R5K w - - +solution Rd1 +id "ECM.486" +go +setboard 4r1k1/5ppp/p1q3b1/1ppNr3/2P1P3/1P4QP/P4PP1/4RRK1 w - - +solution f4 +id "ECM.487" +go +setboard 2kr2r1/2pqbp1p/p1n1b3/1P1pP3/4n3/1BP1BN2/1P4PP/RN1Q1RK1 b - - +solution Bh3 +id "ECM.488" +go +setboard 2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - - +solution Ne4 +id "ECM.489" +go +setboard 6k1/5rp1/4Nb1p/2p5/4Q3/1r5P/q5P1/3R1R1K w - - +solution Rxf6 +id "ECM.490" +go +setboard 1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - - +solution Nxe4 +id "ECM.491" +go +setboard r4r2/1pnqb2k/3p1p1p/p1pPpPpP/2P1N1P1/4BP2/PP1Q4/R2R2K1 w - - +solution Bxc5 +id "ECM.492" +go +setboard rnb3kr/ppp2ppp/1b6/3q4/3pN3/Q4N2/PPP2KPP/R1B1R3 w - - +solution Nf6+ +id "ECM.493" +go +setboard 6kr/1p1r1p1p/p2pnPpQ/3Np2R/2q1P3/5P2/PPP5/2KR4 w - - +solution Rxe5 +id "ECM.494" +go +setboard 3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - - +solution Nd6 +id "ECM.495" +go +setboard r2q1rk1/pp1n2pp/2pb4/1P1p3n/P1PPpP2/4P2b/1BNNBP1P/R2QR1K1 b - - +solution Nxf4 +id "ECM.496" +go +setboard rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - - +solution f5 +id "ECM.497" +go +setboard r4rk1/1bq1bppp/8/p2pPR2/3B4/1NnP3Q/1P4PP/4R1K1 w - - +solution Rh5 +id "ECM.498" +go +setboard r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - - +solution Nxh5 +id "ECM.499" +go +setboard r1b2rk1/pp4bp/2p3p1/4q2n/NQPN1p1P/1P5n/P3PPB1/2BRRK2 b - - +solution f3 +id "ECM.500" +go +setboard 4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - - +solution Nxf3 +id "ECM.501" +go +setboard r2qkr2/1p3pQp/2p1b3/1B1pN3/1p6/8/1P1K1PPP/2B1R3 w q - +solution Nxc6 +id "ECM.502" +go +setboard r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - - +solution Bc8 +id "ECM.503" +go +setboard r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - - +solution Nxf4 +id "ECM.504" +go +setboard 1q4k1/p3rppp/3b1n2/8/5P2/4P3/PP1B3P/RNQ3K1 b - - +solution Bxf4 +id "ECM.505" +go +setboard r3k2r/1p1b1p2/p3p3/2b3p1/4N1n1/1B5P/PPP3P1/R1B2R1K b kq - +solution Bc6 +id "ECM.506" +go +setboard r3kb1r/npqbpp1p/p3n1p1/P3P3/6N1/3B1NB1/1PP3PP/R3QRK1 w kq - +solution Ng5 +id "ECM.507" +go +setboard 7k/p6p/4bppb/1N6/P2p1p2/1PrP2P1/2r1P2P/1R1Q2K1 b - - +solution f3 +id "ECM.508" +go +setboard 2kr4/pp1r1pp1/4n1p1/4R3/2Pp1qP1/3P2QP/5PB1/1R4K1 w - - +solution Rc5+ +id "ECM.509" +go +setboard 3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - - +solution Rxe6 +id "ECM.510" +go +setboard r2qkn1r/pb2bp2/1pp1p3/5p1p/2BPN3/5NQ1/PPP2PPP/1K1RR3 w kq - +solution d5 +id "ECM.511" +go +setboard 2rr1nk1/pp2q1b1/4p1p1/5p2/1nB5/2B1N1QP/PP4P1/4RRK1 w - - +solution Nxf5 +id "ECM.512" +go +setboard 3r3k/p4npp/1p2qpb1/4P3/5P2/P3N3/1B2QP1P/6RK w - - +solution exf6 +id "ECM.513" +go +setboard 6rk/1b2bp1p/ppq1p3/2p1Pp2/P1Br1P2/1PNR2P1/2P1QK1P/6R1 b - - +solution Rxf4+ +id "ECM.514" +go +setboard r3r1k1/p1q2pp1/b1pb3p/n7/B3n3/2P1BN2/PP1N1PPP/R2QK2R b KQ - +solution Nxc3 +id "ECM.515" +go +setboard 4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - - +solution Bxf6 +id "ECM.516" +go +setboard r5n1/pppb1B2/2k1pb2/3p2B1/5P2/2N5/PPP3P1/2KR4 w - - +solution Nxd5 +id "ECM.517" +go +setboard 2b2q2/r2n2kp/1n1p1pp1/p1pP4/1pP1NPN1/1P1B4/P5PP/Q3R1K1 w - - +solution Nexf6 +id "ECM.518" +go +setboard 1k1r2r1/p1p3q1/2p2p2/3pn3/1P1b2bB/1QN5/P4PPP/1R2RBK1 b - - +solution Nf3+ +id "ECM.519" +go +setboard r3k2r/1bq1bp1p/p2p1np1/1p2p3/3NP3/P1N2QB1/1PP2PPP/3RR1K1 w kq - +solution Ndxb5 +id "ECM.520" +go +setboard r2q4/5p1P/2p1bR2/ppk1p1P1/3pB2Q/8/PPP5/6K1 w - - +solution g6 +id "ECM.521" +go +setboard r3kb1r/pp1b1pp1/4p3/2q3Qp/5B2/2PB4/P4PPP/R3R1K1 w kq - +solution Rxe6+ +id "ECM.522" +go +setboard 1rbr2k1/p4pp1/5b1p/2p1p3/3qPP2/1PNB2PP/PKP2Q2/5R1R b - - +solution c4 +id "ECM.523" +go +setboard r3r1k1/p6p/bp4p1/2bPN3/6n1/6P1/PB2RPB1/3R2K1 w - - +solution d6 +id "ECM.524" +go +setboard 2bk3r/3r2pp/p2nQ3/q2R2P1/1p6/8/PPP2P1P/1K3B1R b - - +solution Qxd5 +id "ECM.525" +go +setboard 3r1k2/1q1r1pp1/3p2bp/p2N4/8/2P1RQ1P/P4PP1/4R1K1 w - - +solution Nf6 +id "ECM.526" +go +setboard 3q3r/p2r1pkp/bp1N1np1/n2p4/5Q2/B1P5/P4PPP/R3R1K1 w - - +solution Nf5+ +id "ECM.527" +go +setboard r4Nk1/1p2pp1p/p1np2p1/3N4/P3PPn1/8/1bPKBqPP/R2Q1R2 b - - +solution Qd4+ +id "ECM.528" +go +setboard 1kb3rr/1p2n2q/1Np2p2/1p6/1P1N1P1p/8/2P1RQPP/R6K w - - +solution Nxb5 +id "ECM.529" +go +setboard r3r1k1/p3Rp1p/1qp1bQ2/8/1p1P4/3R4/PP3PPP/6K1 w - - +solution Rg3+ +id "ECM.530" +go +setboard rn4k1/pp2rpb1/2pNb1pp/4p3/P3Pq2/2P2N1P/1PB1QPP1/R3R1K1 w - - +solution Nf5 +id "ECM.531" +go +setboard 3r1rk1/pp3ppp/8/2p5/4PB1n/P1P2qPP/Q3RP1K/6R1 b - - +solution Qg2+ +id "ECM.532" +go +setboard r4rn1/ppp1q3/2bp2kp/6P1/3QpP2/2N5/PPP1B3/2KR3R w - - +solution f5+ +id "ECM.533" +go +setboard 3qr2r/1p1bppk1/3p2p1/p1nP1PQp/3N3R/1P4PP/P1P3BK/4R3 w - - +solution Ne6+ +id "ECM.534" +go +setboard 2rq1rk1/1b1nbpp1/1p5p/p2pNB2/3p1N2/4P3/PPQ2PPP/2RR2K1 w - - +solution Bh7+ +id "ECM.535" +go +setboard 8/5pkp/2pp2p1/4P3/1P2P3/2QBq2P/2PnNnPK/8 b - - +solution Nf1+ +id "ECM.536" +go +setboard r3r2k/pb2q1p1/1p2Nn1p/2b5/2B5/2P2P2/PPQ3PP/4RR1K w - - +solution Nf4 +id "ECM.537" +go +setboard r1b2nk1/ppq2ppp/8/1BP1p1NQ/5p2/8/PP3PPP/3R2K1 w - - +solution Rd7 +id "ECM.538" +go +setboard 6k1/5qp1/pN5p/3pRp2/3QnP2/2r4P/r5P1/6RK b - - +solution Qh5 +id "ECM.539" +go +setboard 5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ - +solution Nf5+ +id "ECM.540" +go +setboard 6rk/p2b4/3p1Nqp/2pPpn2/P1P4p/5P1P/Q2B1NP1/6RK b - - +solution Ng3+ +id "ECM.541" +go +setboard r4r1k/pppb2pp/8/3q4/2N5/P1P2nQ1/BP2R2P/R6K b - - +solution Ne1+ +id "ECM.542" +go +setboard r5rk/1pp1n1pp/p1n1b1q1/3p1p2/7R/2QB1N2/PB3PPP/4R1K1 w - - +solution Rxe6 +id "ECM.543" +go +setboard 8/4Ppk1/6p1/1p6/1Pb1Q3/6pq/8/6K1 w - - +solution Qe5+ +id "ECM.544" +go +setboard 3R4/4Qpk1/4p1p1/7p/7K/5rP1/5P2/2q5 w - - +solution Qf8+ +id "ECM.545" +go +setboard 8/5pk1/p6p/2R5/3q2p1/6P1/2Q3PK/4r3 w - - +solution Rg5+ +id "ECM.546" +go +setboard 1Q4R1/8/P1b2p2/2p2k2/2P5/5p2/1r5P/4R1K1 b - - +solution f2+ +id "ECM.547" +go +setboard 5r1k/1q2R3/8/6Q1/8/8/6P1/7K b - - +solution Rf1+ +id "ECM.548" +go +setboard 8/4p3/8/3P3p/P2pK3/6P1/7b/3k4 w - - +solution d6 +id "ECM.549" +go +setboard 3Q4/k3K3/q7/2N1P3/1P6/5r2/8/8 b - - +solution Rf7+ +id "ECM.550" +go +setboard 3k4/p1p5/8/2p1p3/4P3/PpPP2K1/1P6/8 b - - +solution c4 +id "ECM.551" +go +setboard 6r1/5p1k/4p3/3pQp2/1p1P1P1q/1P3RR1/7r/5K2 w - - +solution Rxg8 +id "ECM.552" +go +setboard r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - - +solution Nxf7 +id "ECM.553" +go +setboard 1r4k1/3qb2p/pr1pppn1/2p2N2/2P2PQ1/1P4P1/P2R2BP/R5K1 w - - +solution Bd5 +id "ECM.554" +go +setboard r6r/pR1nqkpp/2p1p3/3p4/6Q1/2b4P/P1PP1PP1/2B1R1K1 w - - +solution Rxe6 +id "ECM.555" +go +setboard 1k1r3r/ppq2pnp/1npbb1p1/3p4/3P1NP1/2NBP2P/PPQ2P1B/1KR4R w - - +solution Nb5 +id "ECM.556" +go +setboard 5rk1/p1p1br2/1p1p2qp/4p3/2PPn1pP/3Q2P1/PPN1P1K1/2RR2B1 b - - +solution Bxh4 +id "ECM.557" +go +setboard r5r1/4q2k/p2p3p/5p2/4p3/P2QR3/1PP2PPP/4R1K1 w - - +solution Rxe4 +id "ECM.558" +go +setboard r1b2rk1/4bnpp/2p5/pp2q3/4N3/PQ2B1P1/1PP3BP/4RRK1 w - - +solution Ng5 +id "ECM.559" +go +setboard 2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - - +solution Nf3+ +id "ECM.560" +go +setboard r3k1r1/pb1qpp1p/1pnp1n1B/2p2R2/3PP3/2P3PN/P1P3BP/R2Q3K b q - +solution Nxe4 +id "ECM.561" +go +setboard 2r2rk1/pp2bppp/3q1n2/3nNRB1/3P4/1B5Q/PP4PP/3R2K1 w - - +solution Nxf7 +id "ECM.562" +go +setboard r1bq1rk1/1pp2ppn/1pnp3p/3N4/2B1PN2/3P4/PPP3PP/R2Q1RK1 w - - +solution Ng6 +id "ECM.563" +go +setboard r1b2rk1/pp3p1p/2pq2pn/2nNN3/2B1QP2/8/P1PP2PP/R1B1K2R w KQ - +solution Nxf7 +id "ECM.564" +go +setboard 1r2r1k1/1bn2pbp/pp1q1np1/2pPN1B1/P1B5/2N4P/1P1Q1PP1/R3R1K1 w - - +solution Nxf7 +id "ECM.565" +go +setboard 1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - - +solution Rxc5 +id "ECM.566" +go +setboard r1b3k1/2pq2pp/p4p2/1p1Nr3/2n2R2/1B6/PPQ2PPP/R5K1 w - - +solution Rxc4 +id "ECM.567" +go +setboard 2rq1rk1/3bbppp/p3pn2/1p1pN3/2nP1B2/P1NBP2Q/1P3PPP/2R2RK1 w - - +solution Nxd5 +id "ECM.568" +go +setboard 2r1r1k1/pp1b1ppp/1q6/3P4/7N/Pn1Q4/1P3PPP/1RB2RK1 b - - +solution Nxc1 +id "ECM.569" +go +setboard 1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - - +solution Rxb2 +id "ECM.570" +go +setboard 2r5/p3kpp1/P2p4/1P2pP1p/1P2PqnP/6R1/r2N2P1/3RQ1K1 b - - +solution Rxd2 +id "ECM.571" +go +setboard 2br2k1/1p2qppp/r1n1p3/pQ1nN3/P2P4/2B3P1/1P3PBP/2RR2K1 w - - +solution Qxa6 +id "ECM.572" +go +setboard 5rk1/3q2bp/3pb2r/1p1n1p2/3p1P2/P2B1QN1/1P1B2PP/2R1R1K1 w - - +solution Nxf5 +id "ECM.573" +go +setboard 4r1k1/1ppQr1p1/1p1p1pP1/3P3p/7P/1P3q2/P1P5/1KRR4 w - - +solution Re1 +id "ECM.574" +go +setboard 2Rr2k1/7p/4pqp1/p4p2/1p1P1Q1P/8/PP3PP1/6K1 w - - +solution Qe5 +id "ECM.575" +go +setboard 4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - - +solution Rc1 +id "ECM.576" +go +setboard 5rk1/bp4p1/p2rp2p/8/8/2PN4/PP1R1PPP/3R2K1 b - - +solution e5 +id "ECM.577" +go +setboard 2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - - +solution Bh3 +id "ECM.578" +go +setboard n1bq3k/pp4bp/6p1/5pP1/3p1P2/1B1P4/PB3Q1P/4R1K1 w - - +solution Bxd4 +id "ECM.579" +go +setboard r3r1k1/p2n4/3p1pp1/qnp3B1/1p2P1P1/1P3P2/PP2N2Q/1K1R1B2 w - - +solution Nf4 +id "ECM.580" +go +setboard 6k1/pb3ppp/1p2p3/4P3/5P2/P1r5/1q4PP/1B2Q1RK b - - +solution Rc1 +id "ECM.581" +go +setboard 2rq1kbR/4R1p1/3p3r/pp1P1Pp1/6P1/3B4/PPP1Q3/6K1 w - - +solution f6 +id "ECM.582" +go +setboard 2r5/5kb1/4ppp1/pp1qB3/2rP4/1RP2R1Q/P4PP1/6K1 b - - +solution Rh8 +id "ECM.583" +go +setboard 4k3/4Bp2/1p2nP1P/2p5/2K1b1B1/8/P7/8 w - - +solution Bf3 +id "ECM.584" +go +setboard 3rr1k1/ppp1qp1p/3b2p1/4np1P/1P1N1Pn1/P1P4R/1B1NB3/R2Q1K2 b - - +solution Nf3 +id "ECM.585" +go +setboard 1k1r3r/ppqb4/5Ppp/3p4/P2np3/3BR1Q1/2PB1PPP/R5K1 w - - +solution Rxe4 +id "ECM.586" +go +setboard r2q1rk1/pb1nbpp1/1pp1pn1p/3pN3/2PPP3/2N1B1P1/PP3PBP/R2Q1RK1 w - - +solution Nxc6 +id "ECM.587" +go +setboard 8/2R2pbk/6pp/1p2pq2/1P2Qn2/3P3P/3B1PP1/r3N1K1 b - - +solution Nxd3 +id "ECM.588" +go +setboard 2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - - +solution h3 +id "ECM.589" +go +setboard r2b1rnk/1p4qp/p1p1b1p1/2PpNp2/PP1PnP1Q/3BB2R/4N1PP/R6K w - - +solution Qxh7+ +id "ECM.590" +go +setboard r1b2rk1/1p3pbp/2p3p1/p1q5/1P6/1Q4P1/1P2PPBP/R1B1R1K1 b - - +solution Be6 +id "ECM.591" +go +setboard 4r1k1/r1q2p1p/p5pB/1pbBpN1n/1n2P3/5Q2/PP3PPP/R1R3K1 w - - +solution Rxc5 +id "ECM.592" +go +setboard r1r3k1/ppnbb1pp/2ppp1q1/1P3p2/P1PPn3/2N2NP1/2Q1PPBP/1RB2RK1 w - - +solution Nxe4 +id "ECM.593" +go +setboard r1b1k2r/2q1bppp/p3p3/1p1nP1B1/3Q4/2N5/PPP1B1PP/2KR3R w kq - +solution Bxe7 +id "ECM.594" +go +setboard 1rb1r1k1/p1p1qppp/2pb4/8/2P3n1/4P1P1/PB2BP1P/R1QN1RK1 b - - +solution Nxh2 +id "ECM.595" +go +setboard 2rqk1nr/pp3ppp/2n1p3/2b5/3N4/2NQB1P1/PP2PPKP/R4R2 w k - +solution Nxe6 +id "ECM.596" +go +setboard rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - - +solution Bf4 +id "ECM.597" +go +setboard 8/8/1p1k4/5ppp/PPK1p3/6P1/5PP1/8 b - - +solution f4 +id "ECM.598" +go +setboard 8/5pp1/7p/5P1P/2p3P1/2k5/5P2/2K5 w - - +solution f6 +id "ECM.599" +go +setboard 7k/8/1p1ppp1p/1Pp5/2P2P2/8/3P2PP/6K1 w - - +solution f5 +id "ECM.600" +go +setboard 8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - - +solution g4 +id "ECM.601" +go +setboard 8/5K2/kp6/p1p5/P2p4/1P3P2/2P5/8 b - - +solution b5 +id "ECM.602" +go +setboard 8/2k3p1/2p4p/5P2/2K3PP/8/8/8 w - - +solution g5 +id "ECM.603" +go +setboard 8/1kp1b3/1p4K1/4P2p/P1P3p1/5pP1/P4P2/4B3 b - - +solution h4 +id "ECM.604" +go +setboard 8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - - +solution g5 +id "ECM.605" +go +setboard 8/8/3K1k2/5p1p/4p1p1/4P1P1/5PP1/8 b - - +solution f4 +id "ECM.606" +go +setboard r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - - +solution Bxg6 +id "ECM.607" +go +setboard 6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - - +solution Rxc6 +id "ECM.608" +go +setboard 1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - - +solution f6 +id "ECM.609" +go +setboard 2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q - +solution Rh1 +id "ECM.610" +go +setboard 1r3qk1/pb3p1p/1pn2PpQ/2pN4/3r4/5B2/PPP4P/4RRK1 w - - +solution Ne7+ +id "ECM.611" +go +setboard 4r1k1/5p1p/3q2p1/1p1P4/1P6/2p4P/2Q1nPB1/4RK2 b - - +solution Ng3+ +id "ECM.612" +go +setboard 6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - - +solution e5 +id "ECM.613" +go +setboard 5r2/pp1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - - +solution Qxf7+ +id "ECM.614" +go +setboard 6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - - +solution b5 +id "ECM.615" +go +setboard r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - - +solution Rxa6 +id "ECM.616" +go +setboard 3r2k1/p6p/b2r2p1/2qPQp2/2P2P2/8/6BP/R4R1K w - - +solution Rxa6 +id "ECM.617" +go +setboard 8/p3q1k1/6p1/1p3nP1/2pp1QBr/P2P4/1PP2K2/R7 b - - +solution Qe3+ +id "ECM.618" +go +setboard 7k/4b2p/5p1P/5PP1/1pNp1P2/1P1B4/2P2K2/r7 w - - +solution g6 +id "ECM.619" +go +setboard 5r1k/1p1b2rP/p2p4/3P3B/P2P4/5pP1/1P2pP2/R3R1K1 b - - +solution Rxg3+ +id "ECM.620" +go +setboard 6B1/2p2pp1/2p5/p3K3/1k6/nP4P1/5P1P/8 b - - +solution Nc4+ +id "ECM.621" +go +setboard 3q1k2/5p2/p5pN/1b2Q2P/8/8/5PPK/8 w - - +solution Qh8+ +id "ECM.622" +go +setboard 6k1/p3b1pp/4p3/4Pp2/Pp1r1P1P/1P4P1/2p2R2/5RK1 b - - +solution Rc4 +id "ECM.623" +go +setboard 4r2k/3n1Qpp/1pRP1p2/p4P2/1p1P2P1/6rP/P3q1B1/6RK w - - +solution Qe6 +id "ECM.624" +go +setboard 2r2rk1/p1N2p1p/2P1p1p1/1Pp3q1/3b4/5Q2/P1P3PP/4RR1K w - - +solution Nxe6 +id "ECM.625" +go +setboard 3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - - +solution Ba6 +id "ECM.626" +go +setboard 3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - - +solution Qxe7 +id "ECM.627" +go +setboard rn1q2k1/pp3pb1/3p2pp/2pP2N1/3r1P2/7Q/PP4PP/R1B2RK1 w - - +solution Nxf7 +id "ECM.628" +go +setboard 8/6Bp/6p1/2k1p3/4PPP1/1pb4P/8/2K5 b - - +solution b2+ +id "ECM.629" +go +setboard 5bk1/r4ppp/1r1P1n2/2p2N2/b7/2B3P1/5PBP/R3R1K1 w - - +solution Bxf6 +id "ECM.630" +go +setboard 8/8/8/P2k1p2/2N5/1pb2P2/4P3/2K5 w - - +solution a6 +id "ECM.631" +go +setboard 3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - - +solution d7 +id "ECM.632" +go +setboard 6k1/5pbp/6p1/2p1r3/1pPr4/3n2NP/1PB2PP1/1R1R2K1 b - - +solution Nxb2 +id "ECM.633" +go +setboard 4r3/p4pk1/6p1/P1pB2Pp/2P3b1/2p1N1P1/Qb1r1P2/6K1 b - - +solution Rxe3 +id "ECM.634" +go +setboard 2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - - +solution Nxa7 +id "ECM.635" +go +setboard r4rk1/ppq3pp/2p1Pn2/4p1Q1/8/2N5/PP4PP/2KR1R2 w - - +solution Rxf6 +id "ECM.636" +go +setboard r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - - +solution Qh5 +id "ECM.637" +go +setboard 8/6kP/6p1/1p1pP3/pP6/P1n2K2/2N5/8 w - - +solution e6 +id "ECM.638" +go +setboard 8/Pb6/8/8/7K/5k1p/6pB/8 b - - +solution g1=Q +id "ECM.639" +go +setboard 8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - - +solution Rxb2 +id "ECM.640" +go +setboard 6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - - +solution cxb6 +id "ECM.641" +go +setboard 6k1/p4pbp/Bp2p1p1/n2P4/q3P3/B1rQP3/P5PP/5RK1 w - - +solution dxe6 +id "ECM.642" +go +setboard 5r2/R4p2/5P1k/4PK2/1p6/8/8/8 w - - +solution Rxf7 +id "ECM.643" +go +setboard 4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - - +solution f5 +id "ECM.644" +go +setboard 1r6/3r1Pk1/p2p1np1/5q2/1p3P2/1B5R/PPP4Q/1K1R4 w - - +solution Rh8 +id "ECM.645" +go +setboard 8/2k5/2p5/2pb2K1/pp4P1/1P1R4/P7/8 b - - +solution Bxb3 +id "ECM.646" +go +setboard 2r5/1r5k/1P3p2/PR2pP1p/4P2p/2p1BP2/1p2n3/4R2K b - - +solution Nd4 +id "ECM.647" +go +setboard 4r2k/p2qr1pp/1pp2p2/2p1nP1N/4R3/1P1P2RP/1PP2QP1/7K w - - +solution Rxg7 +id "ECM.648" +go +setboard 6k1/p4p2/5Ppp/3RP3/Pr4P1/2p2K2/7P/8 w - - +solution Rd8+ +id "ECM.649" +go +setboard 8/1R2P3/6k1/3B4/2P2P2/1p2r3/1Kb4p/8 w - - +solution Be6 +id "ECM.650" +go +setboard 2kr2r1/pp2bQ1p/2b1P3/2qN4/8/1B2p2P/PPP3P1/3R1R1K b - - +solution e2 +id "ECM.651" +go +setboard r1b2rk1/1p2qppp/p3p3/2n5/3N4/3B1R2/PPP1Q1PP/R5K1 w - - +solution Bxh7+ +id "ECM.652" +go +setboard 3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - - +solution Bb5 +id "ECM.653" +go +setboard r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - - +solution Bxh7+ +id "ECM.654" +go +setboard 6rk/3nrpbp/p1bq1npB/1p2p1N1/4P1PQ/P2B3R/1PP1N2P/5R1K w - - +solution Nxh7 +id "ECM.655" +go +setboard 1rb2rk1/3nqppp/p1n1p3/1p1pP3/5P2/2NBQN2/PPP3PP/2KR3R w - - +solution Bxh7+ +id "ECM.656" +go +setboard 2k5/ppp3pp/8/NQ2n2q/2Pp1n2/R4bP1/1P3P1P/4R1K1 b - - +solution Qxh2+ +id "ECM.657" +go +setboard 5rrk/1p3qpp/p3pn2/2PpBp2/3P1P1Q/P1P1R2R/2b1B1PP/6K1 w - - +solution Qxh7+ +id "ECM.658" +go +setboard r4rk1/1bq2ppp/p1p1p3/2b1P1B1/3p2Q1/3B4/PPP2PPP/R3R1K1 w - - +solution Bxh7+ +id "ECM.659" +go +setboard r4rk1/pb1q1ppp/2N1p3/2Rn4/3P4/3BPQ2/1P3PPP/2R3K1 w - - +solution Bxh7+ +id "ECM.660" +go +setboard r5rk/1p1q1p1p/5pn1/p2p1N1Q/3P2P1/PP2R3/5P1P/5RK1 w - - +solution Qxh7+ +id "ECM.661" +go +setboard 2r2r2/p2qppkp/3p2p1/3P1P2/2n2R2/7R/P5PP/1B1Q2K1 w - - +solution Rxh7+ +id "ECM.662" +go +setboard 1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - - +solution Rxh7 +id "ECM.663" +go +setboard 4rrk1/2q1bppp/p2p4/1p1Pn3/3B1R2/P2B2Q1/1PP3PP/5R1K w - - +solution Bxh7+ +id "ECM.664" +go +setboard r1b2rk1/2q1bppp/p1n1p3/1p1np1P1/5P2/1NNBBQ2/PPP4P/R4RK1 w - - +solution Bxh7+ +id "ECM.665" +go +setboard 5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - - +solution Nxh7 +id "ECM.666" +go +setboard r4rk1/pp2q1p1/4b2p/2ppb3/6n1/2P3N1/PPQBBPPP/R4RK1 b - - +solution Nxh2 +id "ECM.667" +go +setboard b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - - +solution Bxh7+ +id "ECM.668" +go +setboard 2r1qrk1/3n3p/b3pPp1/4P3/1pp1nBN1/pP4PQ/P1P2PK1/3RR3 w - - +solution Qxh7+ +id "ECM.669" +go +setboard r1b1rnk1/pp1nb1pp/2p1pp2/q3N3/2PP1P2/3BP1N1/PBQ3PP/R4RK1 w - - +solution Bxh7+ +id "ECM.670" +go +setboard 4r1k1/2q2r1p/p3bQ2/1p4Bp/2np4/8/PPB2PP1/3RR1K1 w - - +solution Bxh7+ +id "ECM.671" +go +setboard 5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - - +solution Bxh7+ +id "ECM.672" +go +setboard 2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - - +solution Bxh7+ +id "ECM.673" +go +setboard r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - - +solution Nxh7 +id "ECM.674" +go +setboard rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ - +solution Bxh7+ +id "ECM.675" +go +setboard r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - - +solution Rxh7 +id "ECM.676" +go +setboard r1b2rk1/1pq2ppp/p1p1p3/2n1P3/2N2P2/3B4/PPP3PP/R2Q1RK1 w - - +solution Bxh7+ +id "ECM.677" +go +setboard rnq3rk/4bp1p/p1p3pQ/1p1pP3/1P1N1B2/2P3R1/1P3PPP/R5K1 w - - +solution e6 +id "ECM.678" +go +setboard rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - - +solution Nxh7 +id "ECM.679" +go +setboard 3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - - +solution Bxh7+ +id "ECM.680" +go +setboard 1r2nrkb/2n2p1p/p2p1Pp1/P1pPp1P1/1pP1P1q1/1P1BB1N1/3Q4/2KR3R w - - +solution Rxh7 +id "ECM.681" +go +setboard 2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - - +solution Bxh7+ +id "ECM.682" +go +setboard r2q3r/2pkb1p1/p2p1n2/4p1p1/Pp2P1P1/1QP5/1P1P2PP/RNB2RK1 b - - +solution Rxh2 +id "ECM.683" +go +setboard 2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - - +solution Nxh7 +id "ECM.684" +go +setboard 2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - - +solution Rxh7 +id "ECM.685" +go +setboard r2qn1k1/pb4Pp/1pn5/2p5/2P2p2/P1PB4/5PPP/R2Q1RK1 w - - +solution Bxh7+ +id "ECM.686" +go +setboard r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - - +solution Bxh7+ +id "ECM.687" +go +setboard r2r2k1/ppqbbppp/4pn2/6N1/n1P4P/3B1N2/PP2QPP1/1KBR3R w - - +solution Nxh7 +id "ECM.688" +go +setboard r5k1/6bp/2q1p1p1/p2pP3/3P4/1rP2QP1/3B1PK1/2R4R w - - +solution Rxh7 +id "ECM.689" +go +setboard r6r/4ppk1/p2p1bp1/B2p4/3P2p1/QP2P3/P1R1qPPP/2R3K1 b - - +solution Rxh2 +id "ECM.690" +go +setboard 4nrk1/r4p1p/p2p2pQ/2pPpNPP/qpn1P3/5P1R/PPP1N3/2K3R1 w - - +solution Qxh7+ +id "ECM.691" +go +setboard r3k2r/1b1n1p2/pq1p1bp1/1p4p1/P3P3/1NN5/1PP3PP/R2QRB1K b kq - +solution Rxh2+ +id "ECM.692" +go +setboard r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - - +solution Bxh7+ +id "ECM.693" +go +setboard rn1q1rk1/pppbb1pp/4p3/3pP1p1/3P3P/2NB4/PPP2PP1/R2QK2R w KQ - +solution Bxh7+ +id "ECM.694" +go +setboard 1r2nr1k/6pp/pp1p1p2/2pPnN2/q1P1PB2/5PR1/4K1P1/2Q4R w - - +solution Bxe5 +id "ECM.695" +go +setboard 3r1rk1/4qp1p/p1bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - - +solution Bxh2+ +id "ECM.696" +go +setboard r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ - +solution Bxh7+ +id "ECM.697" +go +setboard 2k3r1/ppq2p1p/n1Pb1p2/8/6r1/4BN1b/PPQ2PPP/R3RBK1 b - - +solution Bxh2+ +id "ECM.698" +go +setboard 3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - - +solution Bxh2+ +id "ECM.699" +go +setboard 3r2k1/p1R2p2/4pQp1/1q5p/5P1P/1PR5/2Pr2P1/6K1 b - - +solution Rxg2+ +id "ECM.700" +go +setboard r1b4r/3p1kp1/pp3q1p/4RP2/8/B7/P5PP/4QRK1 w - - +solution Qe4 +id "ECM.701" +go +setboard 1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - - +solution Rxg7+ +id "ECM.702" +go +setboard 3r2k1/pb5p/1p2qpp1/8/2p5/1P1nP3/P1N2PPP/1Q1R1R1K b - - +solution Bxg2+ +id "ECM.703" +go +setboard 4rrk1/2qb2pp/p5P1/1p2p3/1b2P3/2N5/PPPQ4/1K1R2R1 w - - +solution gxh7+ +id "ECM.704" +go +setboard 3q1k2/pp3ppn/2p1n2p/4pN1N/P3P2P/5Q2/1PP2PP1/6K1 w - - +solution Nhxg7 +id "ECM.705" +go +setboard 2r2r1k/3b1pb1/p3pp1p/q2p1P1B/8/2N2RR1/P1PQ2PP/7K w - - +solution Rxg7 +id "ECM.706" +go +setboard 5bk1/1p4p1/4N1R1/3p4/p1r2P1q/Pr1QP2P/1P6/1K4R1 w - - +solution Rxg7+ +id "ECM.707" +go +setboard 2r1r1k1/5ppp/p3pn2/1pb1N3/2P5/1PQ3R1/PB2qPPP/3R2K1 w - - +solution Rxg7+ +id "ECM.708" +go +setboard 7k/1bp1P1p1/3p2rp/1pb2p1q/5P2/1BP2N1P/1P4P1/R1B2R1K b - - +solution Rxg2 +id "ECM.709" +go +setboard r1q1bk1r/1p3pp1/4pn1p/p3Q3/P1P2N2/1B4R1/1P3PPP/4R1K1 w - - +solution Rxg7 +id "ECM.710" +go +setboard r4rk1/p2n2p1/1q1Qpn1p/1P6/P6B/2p5/2B1KP1P/R5R1 w - - +solution Rxg7+ +id "ECM.711" +go +setboard r2qr1k1/1p3ppp/2pb4/2Np4/1P1P2bn/3BP3/2QN1PPP/1RR3K1 b - - +solution Nxg2 +id "ECM.712" +go +setboard r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - - +solution Bxg7 +id "ECM.713" +go +setboard r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - - +solution Nxg7 +id "ECM.714" +go +setboard 3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - - +solution Rxg7+ +id "ECM.715" +go +setboard rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - - +solution Nxg7 +id "ECM.716" +go +setboard r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - - +solution Rxg7 +id "ECM.717" +go +setboard r4rk1/5ppp/p2pbb2/3B3Q/qp2p3/4B3/PPP2P1P/2KR2R1 w - - +solution Rxg7+ +id "ECM.718" +go +setboard 4q1k1/1b3r1p/p4pp1/1p6/2P2n2/1P3N2/1B3PPP/R2Q3K b - - +solution Nxg2 +id "ECM.719" +go +setboard r2r3k/5bp1/2p2N2/5P1p/3q3Q/3B2R1/n5PP/3R3K w - - +solution Rxg7 +id "ECM.720" +go +setboard 4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - - +solution Nxg7 +id "ECM.721" +go +setboard r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - - +solution Rg3 +id "ECM.722" +go +setboard r4rk1/1p1q1ppp/p1b4B/8/2R3R1/P2P4/1b1N1QPP/6K1 w - - +solution Bxg7 +id "ECM.723" +go +setboard rq3rk1/3b1ppp/p2bp3/3pB2Q/8/1B5P/PP3PP1/2RR2K1 w - - +solution Bxg7 +id "ECM.724" +go +setboard 4kbr1/pp1bpp1p/3p1p2/3N4/1PBQP3/q7/P1r2PPP/R4RK1 b - - +solution Rxg2+ +id "ECM.725" +go +setboard 2r3k1/1p2R1p1/p3n2p/2pq4/7P/1P1P2P1/PB1Q3K/8 w - - +solution Bxg7 +id "ECM.726" +go +setboard 2rr2k1/4bppp/p1n1p3/3q4/1p1P2N1/2P3R1/P3QPPP/2B2RK1 w - - +solution Nh6+ +id "ECM.727" +go +setboard rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - - +solution Bxg7 +id "ECM.728" +go +setboard r1b5/ppqn2bk/3R2pp/2p2p2/2P1rN2/4BN2/PPQ2PPP/4R1K1 w - - +solution Rxg6 +id "ECM.729" +go +setboard 3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - - +solution Nxf7 +id "ECM.730" +go +setboard r1bqkbnr/pp2ppp1/2p4p/3n2N1/2BP4/5N2/PPP2PPP/R1BQK2R w KQkq - +solution Nxf7 +id "ECM.731" +go +setboard r2qr1k1/1ppb1p1p/p1np2p1/7Q/3PP2b/1B2N2P/PP3PP1/R1B2RK1 w - - +solution Bxf7+ +id "ECM.732" +go +setboard 2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - - +solution Bxf7+ +id "ECM.733" +go +setboard r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - - +solution Bxf7+ +id "ECM.734" +go +setboard r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - - +solution Ngxf2 +id "ECM.735" +go +setboard r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - - +solution Nxf2 +id "ECM.736" +go +setboard r2qr1k1/1b2bp1p/p3p1p1/1p2N1Bn/3P4/P6Q/1P3PPP/RB2R1K1 w - - +solution Nxf7 +id "ECM.737" +go +setboard r5k1/1pp3pp/1b1p1r2/pN1P1n2/P1P3nq/6N1/1P1B1PQP/4RRK1 b - - +solution Nxf2 +id "ECM.738" +go +setboard 2rqnk1r/pp2bpp1/2p1pn1p/2P1N2P/3P1BP1/3BQ3/PP6/2K2R1R w - - +solution Nxf7 +id "ECM.739" +go +setboard 2rq1rk1/1b2bppp/p1n5/1p1BN3/5B2/P7/1P3PPP/R2Q1RK1 w - - +solution Nd7 +id "ECM.740" +go +setboard 3r1qrk/p1p5/bbp3pp/4p3/4Pp1N/2Pn3P/PPQN1PPB/R4RK1 b - - +solution Nxf2 +id "ECM.741" +go +setboard r2qr1k1/pb2bp1p/1pn1p1pB/8/2BP4/P1P2N2/4QPPP/3R1RK1 w - - +solution d5 +id "ECM.742" +go +setboard r3r1k1/1bq1nppp/p1np4/1ppBpN2/4P3/2PP1N2/PP3PPP/R2QR1K1 w - - +solution Bxf7+ +id "ECM.743" +go +setboard r5k1/p4ppp/3qpb2/1P2N3/1nBP4/1P5P/4QPP1/4R1K1 w - - +solution Nxf7 +id "ECM.744" +go +setboard r2qr1k1/1b1nbp1p/p3pp2/1p2N3/3P4/3B1N2/PP2QPPP/R2R2K1 w - - +solution Nxf7 +id "ECM.745" +go +setboard r3k2r/p1qb1p2/1p2p2p/3pPpN1/P1nP3Q/8/2P2PPP/R1B1R1K1 w kq - +solution Nxf7 +id "ECM.746" +go +setboard 3qNk2/5p1p/1r3p2/2p5/Q1pb4/3b2P1/P4PBP/4R1K1 b - - +solution Bxf2+ +id "ECM.747" +go +setboard 2r1r1k1/1pq1bp1p/p3pnp1/P2n2N1/7R/2P4P/1PB1QPP1/2B1R1K1 w - - +solution Nxf7 +id "ECM.748" +go +setboard r1bq2k1/pp1n1ppp/3b1n2/PQ1B3r/3N1P2/2N5/1PP3PP/R1B2RK1 w - - +solution Bxf7+ +id "ECM.749" +go +setboard 2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - - +solution Bxf7+ +id "ECM.750" +go +setboard r4rk1/ppRn1p2/6pb/2P1pq1p/3N4/P1QPn1Pb/1B1NPP1P/4R1KB b - - +solution Qxf2+ +id "ECM.751" +go +setboard r3kr2/1b2qp2/pp2p2N/4p2Q/8/2n5/P3B1PP/3R1R1K w q - +solution Nxf7 +id "ECM.752" +go +setboard b2r1rk1/pq2bpp1/1p2p2p/4N2n/2P2R2/1PB2N2/1P2QPPP/4R1K1 w - - +solution Rxf7 +id "ECM.753" +go +setboard rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq - +solution Bxf7+ +id "ECM.754" +go +setboard r2r2k1/4ppbp/5np1/p1q5/QnB1P3/5N2/1P3PPP/R1B2RK1 w - - +solution Bxf7+ +id "ECM.755" +go +setboard 1r2q1k1/p3pp2/3p1bp1/2pP2N1/8/P5PB/2Q2PK1/1rBR4 w - - +solution Nxf7 +id "ECM.756" +go +setboard 2rqrbk1/pb1n1p1p/1p2pnp1/4N3/2BP1N2/1P2Q3/PB3PPP/3R1RK1 w - - +solution Nxf7 +id "ECM.757" +go +setboard 1r4k1/p4pp1/bqnrpn1p/2ppN3/2P2P1B/P3P3/1P2B1PP/1Q1R1RK1 w - - +solution Bxf6 +id "ECM.758" +go +setboard r1bqrbk1/5p1p/2pp2nB/pp5Q/4P3/PBNPR2P/1P4P1/R5K1 w - - +solution Bxf7+ +id "ECM.759" +go +setboard r1bqkb1r/1p3ppp/pn1P1n2/4p3/2B5/2N2N2/PP3PPP/R1BQ1RK1 w kq - +solution Bxf7+ +id "ECM.760" +go +setboard 2rqr1k1/pp2nppp/3p2b1/6B1/2BNn1Q1/P7/1PP2PPP/2KRR3 w - - +solution Bxf7+ +id "ECM.761" +go +setboard r3r1k1/pbq1ppbp/1pp2np1/4N3/3P4/2P5/PPB1QPPP/R1B1R1K1 w - - +solution Nxf7 +id "ECM.762" +go +setboard r1b2rk1/p6p/2p3Pb/3pp1q1/8/2PB4/PP3PP1/RN1Q1K1R b - - +solution Rxf2+ +id "ECM.763" +go +setboard r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - - +solution Nxf7 +id "ECM.764" +go +setboard r1bqr1k1/1p1nnpb1/p5pp/2P1p1B1/B3N3/5N2/P4PPP/2RQR1K1 w - - +solution Nd6 +id "ECM.765" +go +setboard r1b1r1k1/pp2qpbp/2p3p1/2P5/3NnB2/7P/PPQ1PPB1/2RR2K1 b - - +solution Nxf2 +id "ECM.766" +go +setboard rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - - +solution Bxf7+ +id "ECM.767" +go +setboard 5rk1/r2qnppp/p1nN4/2Q5/3PB3/4P3/6PP/R4RK1 w - - +solution Nxf7 +id "ECM.768" +go +setboard 1bq2k2/1b1n1pp1/pp5p/2pBpN2/P3P2B/3Q1P2/1PP3PP/4K3 w - - +solution Bxf7 +id "ECM.769" +go +setboard rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - - +solution Rxf7 +id "ECM.770" +go +setboard 3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - - +solution Nxf7 +id "ECM.771" +go +setboard 1qr1b1k1/4bpp1/pn2p2p/1p1nN3/3P4/P2BBN1Q/1P3PPP/4R1K1 w - - +solution Bxh6 +id "ECM.772" +go +setboard rr1q2k1/1p2bpp1/2p1p2p/P1Pn4/2NP4/3Q1RP1/5PKP/2B1R3 w - - +solution Bxh6 +id "ECM.773" +go +setboard r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - - +solution Bxh6 +id "ECM.774" +go +setboard 2r5/1p4bk/3p2rp/4pN2/1P2P1pR/2P2q2/QP6/1K5R w - - +solution Rxh6+ +id "ECM.775" +go +setboard r1b1r3/pp2Npbk/3pp2p/q5p1/2QNPP2/6P1/PPP3P1/2KR3R w - - +solution Ndf5 +id "ECM.776" +go +setboard r1q3r1/1ppQ2pk/3bNp1p/p3pP2/P3P3/7R/1PP3PP/3R2K1 w - - +solution Rxh6+ +id "ECM.777" +go +setboard 4r1k1/p1pq1pp1/2p5/3p1b2/Q7/2P1B2P/P1P1rPP1/2R2RK1 b - - +solution Bxh3 +id "ECM.778" +go +setboard 1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - - +solution Bxh6 +id "ECM.779" +go +setboard r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - - +solution Bxh6 +id "ECM.780" +go +setboard 3r1r1k/p5p1/n1p2p1p/1qp2b2/N1R4R/1PB1P1P1/P2P3P/3Q2K1 w - - +solution Rxh6+ +id "ECM.781" +go +setboard r4rk1/2q1b1p1/p4p1p/n3pP2/1p2Q1N1/4B3/PPP3PP/4RR1K w - - +solution Nxh6+ +id "ECM.782" +go +setboard 6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - - +solution Bxh3 +id "ECM.783" +go +setboard r2q1rk1/ppp2pp1/1b2b2p/3n3Q/2Bp4/3P1N2/PPP2PPP/R1B1R1K1 w - - +solution Bxh6 +id "ECM.784" +go +setboard r3rbk1/1bp1qpp1/p6p/np2p2Q/4P2N/1BP4P/PP3PP1/R1B1R1K1 w - - +solution Bg5 +id "ECM.785" +go +setboard 4q3/p2r1ppk/R6p/3n4/3B1Q2/4P2P/5PP1/6K1 w - - +solution Rxh6+ +id "ECM.786" +go +setboard 7r/1p2qk2/pQ1p2p1/3Ppp2/P4b2/2P2PrP/1P2R1B1/4R2K b - - +solution Rhxh3+ +id "ECM.787" +go +setboard 5rk1/Qp5p/3pp1p1/4n3/2P1P2q/5r1P/P3NPP1/3R1RK1 b - - +solution Rxh3 +id "ECM.788" +go +setboard 2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - - +solution Bxh6 +id "ECM.789" +go +setboard 3q1rk1/p2bbpp1/1rn4p/1pp2P2/3pBBP1/3P3P/PPPQ3N/R4RK1 w - - +solution Bxh6 +id "ECM.790" +go +setboard 2br2k1/4qppp/p5r1/2pBp3/2P1Pn2/4Q2P/RP3PPK/1N4R1 b - - +solution Bxh3 +id "ECM.791" +go +setboard r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - - +solution Bxh6 +id "ECM.792" +go +setboard r5r1/pbn4k/1p1p1Ppp/2pPn3/4BQq1/1PN3P1/PB3PK1/3R1R2 w - - +solution Qxh6+ +id "ECM.793" +go +setboard r1b2rk1/pp2bpp1/4p2p/2q4Q/5nNB/2PB4/PP3PPP/2KR3R w - - +solution Nxh6+ +id "ECM.794" +go +setboard 6k1/p4ppp/1pn1b1rr/8/PBpPp2q/2P1P1NP/5PP1/RR3QK1 b - - +solution Bxh3 +id "ECM.795" +go +setboard r1b2rk1/1p3pp1/p5Pp/2bpPp1Q/3N4/1Pq1B1R1/2P4P/3R2K1 w - - +solution Bxh6 +id "ECM.796" +go +setboard r2r2k1/pp1n1bp1/2p2p1p/b4N2/q2BR3/2QB2PP/1PP5/2KR4 w - - +solution Nxh6+ +id "ECM.797" +go +setboard 3r2bk/1q4p1/p2P1N1p/2p1rP2/pb5R/7P/1P4P1/2Q2RK1 w - - +solution Rxh6+ +id "ECM.798" +go +setboard 2b1rk2/r6p/1pP1p1p1/p2pNnR1/5Q2/P1B4q/1PP2P1P/1K4R1 w - - +solution Nxg6+ +id "ECM.799" +go +setboard 6R1/6Q1/3q2p1/5p1p/P3p1k1/1P1r2P1/5PK1/8 b - - +solution Rxg3+ +id "ECM.800" +go +setboard r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - - +solution Nh6+ +id "ECM.801" +go +setboard 3r3r/p4pk1/5Rp1/3q4/1p1P2RQ/5N2/P1P4P/2b4K w - - +solution Rfxg6+ +id "ECM.802" +go +setboard 2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - - +solution Bxg3 +id "ECM.803" +go +setboard r1bq2k1/pp3r1p/2n1p1p1/3pP3/6Q1/2PB2P1/P4PK1/R1B4R w - - +solution Bxg6 +id "ECM.804" +go +setboard 3q1rk1/2r4p/n1p1n1pQ/p2pP3/Np1P2R1/5PN1/PP3KP1/2R5 w - - +solution Rxg6+ +id "ECM.805" +go +setboard 2Nq1rk1/6pp/b1p2b2/p6Q/np1p4/6P1/PB3PBP/R3R1K1 w - - +solution Be4 +id "ECM.806" +go +setboard r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - - +solution e6 +id "ECM.807" +go +setboard 2kr3r/pbq3p1/1p2pp2/2b4n/2P1B3/1P1N2Pp/PB2QP1P/R4RK1 b - - +solution Nxg3 +id "ECM.808" +go +setboard r5k1/1p2Rpb1/3p1np1/2nP2B1/1qP5/1pN1Q2P/P5P1/1B4K1 w - - +solution Bxg6 +id "ECM.809" +go +setboard 2rqr1k1/pb2bp1p/1pn1pnpB/4N3/3P4/P1N3R1/1P3PPP/RB1Q2K1 w - - +solution Rxg6+ +id "ECM.810" +go +setboard 2r5/pp2qr1k/1nb3pp/2ppBp2/2P4P/3B2R1/P3QPP1/1R4K1 w - - +solution Rxg6 +id "ECM.811" +go +setboard 3rr3/3q1p1k/p2P2pp/1bp1b3/5N2/6QP/P1B3P1/3RR1K1 w - - +solution Bxg6+ +id "ECM.812" +go +setboard r2q1rk1/pp2ppb1/3pn1pQ/3R4/2P3B1/4BR2/PP4PP/6K1 w - - +solution Qxg6 +id "ECM.813" +go +setboard 1n1b1rk1/r4p1p/p1p2qpQ/P3Np2/2BP4/2P1R3/5PPP/R5K1 w - - +solution Rb1 +id "ECM.814" +go +setboard 6rk/pb3p1p/3bpPq1/3P4/1p1B3r/1B4P1/PPRQ1R1P/6K1 b - - +solution Bxg3 +id "ECM.815" +go +setboard 3rr1k1/pb2bp1p/3qp1pB/1p2N3/3P2Q1/2P1R3/P4PPP/4R1K1 w - - +solution Nxg6 +id "ECM.816" +go +setboard r2q1rk1/pb1nbp1p/1p2p1p1/4N1BQ/2PP4/P7/5PPP/RB2R1K1 w - - +solution Nxg6 +id "ECM.817" +go +setboard 1Q4R1/r2qbp2/3p1kp1/3Bp2p/8/3PP1P1/5PKP/8 w - - +solution Rxg6+ +id "ECM.818" +go +setboard r3r1k1/b1p2pn1/p2q1Bp1/1p1bN1Qp/3P4/2P4P/PPB2PP1/R3R1K1 w - - +solution Nxg6 +id "ECM.819" +go +setboard 3r2k1/p1rn1p1p/1p2pp2/6q1/3PQNP1/5P2/P1P4R/R5K1 w - - +solution Nxe6 +id "ECM.820" +go +setboard k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - - +solution Rxb7 +id "ECM.821" +go +setboard 1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - - +solution Ba3 +id "ECM.822" +go +setboard k7/pp1N4/4P3/5P2/8/5p2/1R6/B4Knq w - - +solution Nb6+ +id "ECM.823" +go +setboard 4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - - +solution Nxf3 +id "ECM.824" +go +setboard 1q1r3k/3P1pp1/ppBR1n1p/4Q2P/P4P2/8/5PK1/8 w - - +solution Rxf6 +id "ECM.825" +go +setboard 1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - - +solution Rxf3 +id "ECM.826" +go +setboard 1r1q1r1k/2p3pp/1p1bQ3/p7/1PP5/Pn3B2/1B3PPP/R4RK1 b - - +solution Rxf3 +id "ECM.827" +go +setboard r4rk1/2p1qpp1/p1p5/2Ppn2b/2PQ1N1p/4P3/PB3PPP/R4RK1 b - - +solution Nf3+ +id "ECM.828" +go +setboard r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - - +solution Nf6+ +id "ECM.829" +go +setboard 1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - - +solution Bxf6 +id "ECM.830" +go +setboard r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - - +solution Nf3+ +id "ECM.831" +go +setboard 3r1b2/p4bkp/1p1P1p2/r3p1p1/2q1N3/2N2P2/1P1R2PP/2QR3K w - - +solution Nxf6 +id "ECM.832" +go +setboard rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - - +solution Nf6+ +id "ECM.833" +go +setboard r1b1kb1r/1p4pp/p2ppn2/8/2qNP3/2N1B3/PPP3PP/R2Q1RK1 w kq - +solution Rxf6 +id "ECM.834" +go +setboard 1rn5/p3Bk1p/1pq1bpp1/P3p3/1Q2P2P/2P3P1/5PB1/1R4K1 w - - +solution Bxf6 +id "ECM.835" +go +setboard 2nr2k1/1pq1bppp/p1p5/2p1P1PQ/2P1NP2/1PNR4/P6P/6K1 w - - +solution Nf6+ +id "ECM.836" +go +setboard 6nk/pn2qr1r/1pbp1p1p/2p1pPpN/P1P1P1PP/2PP3R/7Q/2BBK2R w K - +solution Nxf6 +id "ECM.837" +go +setboard 7r/4p1k1/p3Pppp/1p6/3N1R2/3PQ2P/qr4b1/5RK1 w - - +solution Rxf6 +id "ECM.838" +go +setboard r3k2r/1bq1bp2/p3p1pp/1p2P3/3NpP2/4B1Q1/PPP3PP/1K1R3R w kq - +solution Nxe6 +id "ECM.839" +go +setboard rnbqkb1r/pp1n1p2/4p1p1/1N1pP2p/1P4Q1/3B1N2/P1PB1PPP/R3K2R w KQkq - +solution Qxe6+ +id "ECM.840" +go +setboard r1b1kb1r/1p1n1ppp/p2ppn2/6BB/2qNP3/2N5/PPP2PPP/R2Q1RK1 w kq - +solution Nxe6 +id "ECM.841" +go +setboard r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq - +solution Nxe6 +id "ECM.842" +go +setboard 2r2rk1/1b3ppp/pq2p3/1pbn2N1/3B3P/1B4P1/P1P1QP2/2KRR3 w - - +solution Qh5 +id "ECM.843" +go +setboard r3k2r/pp1n1pb1/1qn1p1p1/2p3Pp/4R2P/2NP2QB/PPPB1P2/2K1R3 w kq - +solution Rxe6+ +id "ECM.844" +go +setboard r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq - +solution Nxe6 +id "ECM.845" +go +setboard 3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - - +solution Rxe3 +id "ECM.846" +go +setboard rnbqkb1r/1p1n1pp1/p3p2p/3pP3/3p1NQP/2N5/P1PB1PP1/R3KB1R w KQkq - +solution Nxe6 +id "ECM.847" +go +setboard 3r1b1R/3bkpp1/1p1np3/1BqpPPP1/PQ1N4/8/1PP5/1K6 w - - +solution f6+ +id "ECM.848" +go +setboard 4r1k1/pp2n2p/1r1n1bp1/q2p1pB1/3P3N/P1NQ1P1P/1PP3R1/1K5R b - - +solution Rxb2+ +id "ECM.849" +go +setboard 3r2k1/2p1bppp/4b3/p2pP3/qr1N1B1P/8/1PPQ2P1/1K1RR3 b - - +solution Rxb2+ +id "ECM.850" +go +setboard 1k1r3r/ppR2ppp/1q2b3/1N6/4Q3/8/PP3PPP/4R1K1 w - - +solution Rxb7+ +id "ECM.851" +go +setboard 1r3rk1/5pbp/p2Pp1p1/q1n3P1/2p2P1P/2N1Q2R/PP6/1BKR4 b - - +solution Rxb2 +id "ECM.852" +go +setboard rr4k1/5p1p/n2p1npQ/q1pP4/6P1/2N2P1N/PP1R3P/2K4R b - - +solution Rxb2 +id "ECM.853" +go +setboard 1k2bb1r/1p3p1p/p2qpP1p/3pN3/3P1Q2/2RB2P1/PP3P1P/6K1 w - - +solution Qc1 +id "ECM.854" +go +setboard 1r4k1/1r3p2/p1p1b1pQ/q3P3/P7/bPN1R1P1/2P4P/1K1R1B2 b - - +solution Bxb3 +id "ECM.855" +go +setboard 5rk1/5rp1/p2qb3/R2Np2Q/3bP2B/7P/P5PK/1R6 b - - +solution Rf1 +id "ECM.856" +go +setboard 6k1/5p2/R3p1p1/1pq1PpB1/4nP2/5Q1P/P2r2PK/8 w - - +solution Ra8+ +id "ECM.857" +go +setboard 3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - - +solution Bxh2+ +id "ECM.858" +go +setboard 1r6/5pk1/p1b2qpp/P1P1n3/1N6/Q5NP/5PP1/3R2K1 b - - +solution Bxg2 +id "ECM.859" +go +setboard 1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - - +solution Qd8+ +id "ECM.860" +go +setboard 2R5/p3q1kp/6p1/3p4/b2P2p1/Pr4N1/5Q2/3K3R w - - +solution Nf5+ +id "ECM.861" +go +setboard 3r4/kb6/pp6/4R1pr/PPpq4/2N3Q1/2P3PP/3R3K b - - +solution Rf8 +id "ECM.862" +go +setboard 4r1k1/5p1p/4q1p1/8/Q5n1/3B2P1/P4P1P/2R3K1 b - - +solution Nxf2 +id "ECM.863" +go +setboard 8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - - +solution Nf5 +id "ECM.864" +go +setboard r1bq1rk1/ppp1n1bn/3p2p1/3Pp1Pp/1PP1Pp1P/2NN1P2/P3B3/R1BQ1RK1 b - - +solution Nxg5 +id "ECM.865" +go +setboard 7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - - +solution Rg8+ +id "ECM.866" +go +setboard r6r/1pn1b1k1/2p1pq2/2Pp3p/p2P1Pp1/P2BP1P1/1P2QB2/3R2KR w - - +solution Rxh5 +id "ECM.867" +go +setboard 1r4k1/pp4pp/2n1b3/1Rq1p3/2P2r2/P1B2P2/2Q1B1PP/3R1K2 b - - +solution Rxf3+ +id "ECM.868" +go +setboard 7k/1p4p1/2p4r/5p2/p1QP1q2/2P2PR1/r4P1P/4R2K b - - +solution Rxh2+ +id "ECM.869" +go +setboard 1r3r2/6kp/3p1pp1/qnp1pP2/1p2P2N/3P4/PPPQ1P1P/1K1R2R1 w - - +solution fxg6 +id "ECM.870" +go +setboard 5rk1/1rP3pp/p4n2/3Pp3/1P2Pq2/2Q4P/P5P1/R3R1K1 b - - +solution Rxc7 +id "ECM.871" +go +setboard 2rq1rk1/5ppp/2b1pb2/np6/6N1/2NBB3/PP3PPP/R2Q2K1 w - - +solution Bb6 +id "ECM.872" +go +setboard 5r2/p2p2kp/3PnNp1/1qr1Pp2/2p5/P1R5/6PP/2Q1R1K1 w - - +solution Qh6+ +id "ECM.873" +go +setboard 2Qbq1k1/6p1/1p4Np/4p2P/3rP3/8/3p2PK/3R4 w - - +solution Rf1 +id "ECM.874" +go +setboard 2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K - +solution Qg1+ +id "ECM.875" +go +setboard 2K5/6p1/kp2P3/1p6/1P6/2P1P2p/8/1r6 w - - +solution e7 +id "ECM.876" +go +setboard 2kr3r/1Rp1bpp1/p6q/Q3P3/2P5/3p1NP1/P3P2P/1R4K1 b - - +solution Qe3+ +id "ECM.877" +go +setboard 6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - - +solution a5 +id "ECM.878" +go +setboard r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - - +solution Rd2 +id "ECM.879" +go diff --git a/src/genetic/typhoon b/src/genetic/typhoon new file mode 100755 index 0000000..de5f56d Binary files /dev/null and b/src/genetic/typhoon differ -- cgit v1.3