Here is some python3 code that takes lpsolve output as input and generates tikz code of a chessboard.
# python code to read in an lpsolve output file
# and create a chessboard with the knights specified
#
# this code should be fed the lpsolve output, just the variables part
#
# The output is tikz code that can be added to a LaTeX file to
# create a figure showing the chessboard and knights
#
import re
import sys
resultsFile = sys.stdin.readlines()
#with open(resultsFile) as f:
# content = f.readlines()
maxX=0
maxY=0
## give size of grid (for an 8x8 board, e.g., use 8-1 here)
maxX=8-1
maxY=8-1
print("\\begin{tikzpicture}[auto,scale=0.4]")
for line in resultsFile:
if ('x' in line or 'k' in line): # we assume there are two variable types, b and w, for the two types of knights
a=re.split('_ *',line.rstrip('\n')) # split the line based on underscore or blank spaces, remove newline
b=re.split(' +',a[2])
# get integer values from string: coordinates plus the binary indicator
x=int(a[1])
y=int(b[0])
yes=int(b[1])
if (yes==1): # this coordinate is in the solution
# add K to the picture
# we assume the variables are x and something else
# but the output is white and black knights
if ('x' in line):
print("\\node at (",x+0.5,",",y+0.5,") {W};")
else :
print("\\node at (",x+0.5,",",y+0.5,") {B};")
# add grid
print("\\draw[gray] (0,0) grid (",int(maxX)+1,",",int(maxY)+1,");")
print("\\end{tikzpicture}")
Using this as input:
k_1_3 1 x_1_4 1 k_2_1 1 k_2_3 1 k_2_5 1 x_3_2 1 k_3_5 1 x_3_6 1 k_4_1 1 x_4_2 1 x_4_6 1 k_5_1 1 x_5_4 1 k_5_5 1 x_5_6 1 x_6_4 1(saved in a file called sample8x8.txt) we set the board size to 8 in tikzDiagramizer.py and then run it like this:
python3 tikzDiagramizer.py < sample8x8.txtto get the output
\begin{tikzpicture}[auto,scale=0.4]
\node at ( 1.5 , 3.5 ) {B};
\node at ( 1.5 , 4.5 ) {W};
\node at ( 2.5 , 1.5 ) {B};
\node at ( 2.5 , 3.5 ) {B};
\node at ( 2.5 , 5.5 ) {B};
\node at ( 3.5 , 2.5 ) {W};
\node at ( 3.5 , 5.5 ) {B};
\node at ( 3.5 , 6.5 ) {W};
\node at ( 4.5 , 1.5 ) {B};
\node at ( 4.5 , 2.5 ) {W};
\node at ( 4.5 , 6.5 ) {W};
\node at ( 5.5 , 1.5 ) {B};
\node at ( 5.5 , 4.5 ) {W};
\node at ( 5.5 , 5.5 ) {B};
\node at ( 5.5 , 6.5 ) {W};
\node at ( 6.5 , 4.5 ) {W};
\draw[gray] (0,0) grid ( 8 , 8 );
\end{tikzpicture}
Adding this to a LaTeX file with
\usepackage{tikz} in the header,
rendering the LaTeX file will yield this figure: