diff --git a/codeword-maker.sh b/codeword-maker.sh new file mode 100644 index 0000000..100ac2a --- /dev/null +++ b/codeword-maker.sh @@ -0,0 +1,292 @@ +#!/bin/bash + +## Title: CodeWord Maker 1.00 +## Author: Ze'ev Schurmann +## License: This project is licensed under the GNU General Public License v3.0 only. +## License: URL +## Git: https://git.zaks.web.za/thisiszeev/ipuz-to-pdf +## https://github.com/thisiszeev/ipuz-to-pdf + +## What is this script? +## This script will convert a ipuz crossword file into set of PDF files. + +## Why did I make this script? +## I needed to create vector file of various ipuz files as per the defined ipuz standard. +## These vector files are for use in print publications. So I need a script, that can be +## run in batch jobs. Thus the script can be executed as: +## $ bash codeword-maker.sh {filename}.ipuz + +## Where can I get software to create ipuz files? +## Crosswords: https://gitlab.gnome.org/jrb/crosswords +## Sudokus: https://invent.kde.org/games/ksudoku + +## Where I can learn more about the ipuz format? +## ipuz is essentially a JSON format designed for storing puzzles. +## Website: https://libipuz.org/ipuz-spec.html + +## What must I do first? +## First you need to install FontConfig, Inkscape, JQ and the Ubuntu Font Family or this +## script will not run. +## FontConfig: https://www.baeldung.com/linux/find-installed-fonts-command-line +## Inkscape: https://inkscape.org/ +## JQ: https://jqlang.github.io/jq/ +## Ubuntu Font Family: https://design.ubuntu.com/font + +## Donations & Support: +## Left for last, as usual. If you want support, you can hit me up on Reddit u/thisiszeev. +## I will try help out when I get time. But donations are a major source of my income, as +## I need to eat. + +## Paypal: https://paypal.me/thisiszeev +## $5 buys me a coffee +## $10 buys me a a nice burger +## $20 buys me a bottle of wine + +## If you plan to use this script for commercial use, you are free to do so, but please +## remember I put a lot of work and effort into these scripts. I kindly urge you to +## please make a donation of at least $50. You will then get priority support for a +## period of 12 months. + +## SVGHEADER ARRAY +svgheader=("\n\n\n") + +## SVGFOOTER +svgfooter="" + +## SVGCELL ARRAY AND START POSITION +svgcell=(" ") +svgcellx="20" +svgcelly="20" + +## SVGVAL ARRAY AND START POSITION +svgval=(" " "") +svgvalx="30" +svgvaly="35" + +## SVGNUM ARRAY AND START POSITION +svgnum=(" " "") +svgnumx="21" +svgnumxdec=".25" +svgnumy="25" +svgnumydec=".5" + +## COLOUR PALETTE FOR FILLING CELLS +colblack="#000000" +colwhite="#FFFFFF" + +## OFFSETS +offsetx="20" +offsety="20" + +errorcode="" + +temp=($(whereis inkscape)) + +if [[ $? != 0 ]]; then + echo "Unexpected Error: whereis not found?" + exit 3 +fi + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install Inscape : https://inkscape.org/" + errorcode="${errorcode}I" +fi + +temp=($(whereis jq)) + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install JQ : https://jqlang.github.io/jq/" + errorcode="${errorcode}J" +fi + +temp=($(whereis fc-match)) + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install FontConfig : https://www.baeldung.com/linux/find-installed-fonts-command-line" + errorcode="${errorcode}F" +else + temp2=$(fc-match "Ubuntu Mono") + if [[ $temp2 != 'UbuntuMono-R.ttf: "Ubuntu Mono" "Regular"' ]]; then + echo "Please install Ubuntu Font Family : https://design.ubuntu.com/font" + errorcode="${errorcode}U" + fi +fi + +if [[ ! -z $errorcode ]] || [[ $errorcode != "" ]]; then + exit 2 +fi + +if [[ -z $1 ]] || [[ $1 == "" ]]; then + echo "Usage:" + echo " $ bash codeword-maker.sh {puzzlefile}.ipuz" + exit 1 +fi + +puzzlename="$1" + +width=$(jq -r ".dimensions.width" "$puzzlename") +height=$(jq -r ".dimensions.height" "$puzzlename") +block=$(jq -r ".block" "$puzzlename") +empty=$(jq -r ".empty" "$puzzlename") + +echo "Puzzle is $width by $height in size!" + +declare -A gridarray +declare -A valuearray + +echo "Loading Grid..." + +for ((y=0; y<$height; y++)); do + for ((x=0; x<$width; x++)); do + #gridarray[$x,$y]=$(jq -r ".puzzle[$y][$x]" "$puzzlename") + valuearray[$x,$y]=$(jq -r ".solution[$y][$x]" "$puzzlename") + #echo "$x, $y = ${gridarray[$x,$y]} = ${valuearray[$x,$y]}" + done +done + +echo "Puzzle Data:" + +for ((y=0; y<$height; y++)); do + for ((x=0; x<$width; x++)); do + if [[ ${valuearray[$x,$y]} == "null" ]]; then + echo -n " " + else + echo -n " ${valuearray[$x,$y]}" + fi + done + echo +done + +echo "Converting letters to numbers..." + +string="" + +for ((y=0; y<$height; y++)); do + for ((x=0; x<$width; x++)); do + if [[ ${valuearray[$x,$y]} != "null" ]]; then + test=$(echo "$string" | grep ${valuearray[$x,$y]}) + if [[ -z $test ]] || [[ $test == "" ]]; then + string=$string${valuearray[$x,$y]} + fi + gridarray[$x,$y]=$(expr index "$string" ${valuearray[$x,$y]}) + else + gridarray[$x,$y]=$block + fi + done +done + +ongrid=${#string} + +echo "$ongrid - $string" + +randnum[0]=$(((RANDOM%$ongrid)+1)) +randnum[1]=${randnum[0]} +while [[ ${randnum[0]} == ${randnum[1]} ]]; do + randnum[1]=$(((RANDOM%$ongrid)+1)) +done +randnum[2]=${randnum[0]} +while [[ ${randnum[0]} == ${randnum[2]} ]] || [[ ${randnum[1]} == ${randnum[2]} ]]; do + randnum[2]=$(((RANDOM%$ongrid)+1)) +done + +for ((c=0; c<3; c++)); do + echo "${randnum[$c]} - ${string:$((randnum[$c]-1)):1}" +done + +echo "Building SVG Files..." + +pagex=$((width * offsetx + offsetx + offsetx)) +pagey=$((height * offsety + offsety + offsety)) + +outputfile="CodeWord-${puzzlename%.*}" + +echo -e "${svgheader[0]}$pagex${svgheader[1]}$pagey${svgheader[2]}$pagex $pagey${svgheader[3]}" > "$outputfile.puzzle.svg" +echo -e "${svgheader[0]}$pagex${svgheader[1]}$pagey${svgheader[2]}$pagex $pagey${svgheader[3]}" > "$outputfile.solution.svg" +echo -e "${svgheader[0]}300${svgheader[1]}80${svgheader[2]}300 80${svgheader[3]}" > "$outputfile.legendbottom.svg" +echo -e "${svgheader[0]}80${svgheader[1]}300${svgheader[2]}80 300${svgheader[3]}" > "$outputfile.legendside.svg" + +for ((n=0; n<13; n++)); do + if [[ $n -lt $ongrid ]]; then + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((n*20+svgcellx))${svgcell[2]}$((svgcelly))${svgcell[3]}leg$((n+1))${svgcell[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((svgcellx))${svgcell[2]}$((n*20+svgcelly))${svgcell[3]}leg$((n+1))${svgcell[4]}" >> "$outputfile.legendside.svg" + echo -e "${svgnum[0]}$((n*20+svgnumx))$svgnumxdec${svgnum[1]}$((svgnumy))$svgnumydec${svgnum[2]}leg$((n+1))${svgnum[3]}$((n+1))${svgnum[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgnum[0]}$((svgnumx))$svgnumxdec${svgnum[1]}$((n*20+svgnumy))$svgnumydec${svgnum[2]}leg$((n+1))${svgnum[3]}$((n+1))${svgnum[4]}" >> "$outputfile.legendside.svg" + for ((c=0; c<3; c++)); do + if [[ $((n+1)) == ${randnum[$c]} ]]; then + echo -e "${svgval[0]}$((n*20+svgvalx))${svgval[1]}$((svgvaly))${svgval[2]}leg$((n+1))${svgval[3]}${string:$n:1}${svgval[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgval[0]}$((svgvalx))${svgval[1]}$((n*20+svgvaly))${svgval[2]}leg$((n+1))${svgval[3]}${string:$n:1}${svgval[4]}" >> "$outputfile.legendside.svg" + fi + done + else + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((n*20+svgcellx))${svgcell[2]}$((svgcelly))${svgcell[3]}leg$((n+1))${svgcell[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((svgcellx))${svgcell[2]}$((n*20+svgcelly))${svgcell[3]}leg$((n+1))${svgcell[4]}" >> "$outputfile.legendside.svg" + fi +done + +for ((n=0; n<13; n++)); do + if [[ $((n+13)) -lt $ongrid ]]; then + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((n*20+svgcellx))${svgcell[2]}$((20+svgcelly))${svgcell[3]}leg$((n+14))${svgcell[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((20+svgcellx))${svgcell[2]}$((n*20+svgcelly))${svgcell[3]}leg$((n+14))${svgcell[4]}" >> "$outputfile.legendside.svg" + echo -e "${svgnum[0]}$((n*20+svgnumx))$svgnumxdec${svgnum[1]}$((20+svgnumy))$svgnumydec${svgnum[2]}leg$((n+14))${svgnum[3]}$((n+14))${svgnum[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgnum[0]}$((20+svgnumx))$svgnumxdec${svgnum[1]}$((n*20+svgnumy))$svgnumydec${svgnum[2]}leg$((n+14))${svgnum[3]}$((n+14))${svgnum[4]}" >> "$outputfile.legendside.svg" + for ((c=0; c<3; c++)); do + if [[ $((n+14)) == ${randnum[$c]} ]]; then + echo -e "${svgval[0]}$((n*20+svgvalx))${svgval[1]}$((20+svgvaly))${svgval[2]}leg$((n+14))${svgval[3]}${string:$((n+13)):1}${svgval[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgval[0]}$((20+svgvalx))${svgval[1]}$((n*20+svgvaly))${svgval[2]}leg$((n+14))${svgval[3]}${string:$((n+13)):1}${svgval[4]}" >> "$outputfile.legendside.svg" + fi + done + else + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((n*20+svgcellx))${svgcell[2]}$((20+svgcelly))${svgcell[3]}leg$((n+14))${svgcell[4]}" >> "$outputfile.legendbottom.svg" + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((20+svgcellx))${svgcell[2]}$((n*20+svgcelly))${svgcell[3]}leg$((n+14))${svgcell[4]}" >> "$outputfile.legendside.svg" + fi +done + +for ((y=0; y<$height; y++)); do + if [[ $y -lt 10 ]]; then + idy="0$y" + else + idy="$y" + fi + for ((x=0; x<$width; x++)); do + if [[ $x -lt 10 ]]; then + idx="0$x" + else + idx="$x" + fi + if [[ ${gridarray[$x,$y]} == $block ]]; then + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.solution.svg" + else + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.solution.svg" + if [[ ${gridarray[$x,$y]} != $block ]] && [[ ${gridarray[$x,$y]} != $empty ]]; then + echo -e "${svgnum[0]}$((x*20+svgnumx))$svgnumxdec${svgnum[1]}$((y*20+svgnumy))$svgnumydec${svgnum[2]}$idx$idy${svgnum[3]}${gridarray[$x,$y]}${svgnum[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgnum[0]}$((x*20+svgnumx))$svgnumxdec${svgnum[1]}$((y*20+svgnumy))$svgnumydec${svgnum[2]}$idx$idy${svgnum[3]}${gridarray[$x,$y]}${svgnum[4]}" >> "$outputfile.solution.svg" + fi + for ((c=0; c<3; c++)); do + if [[ ${gridarray[$x,$y]} == ${randnum[$c]} ]]; then + echo -e "${svgval[0]}$((x*20+svgvalx))${svgval[1]}$((y*20+svgvaly))${svgval[2]}$idx$idy${svgval[3]}${valuearray[$x,$y]}${svgval[4]}" >> "$outputfile.puzzle.svg" + fi + done + echo -e "${svgval[0]}$((x*20+svgvalx))${svgval[1]}$((y*20+svgvaly))${svgval[2]}$idx$idy${svgval[3]}${valuearray[$x,$y]}${svgval[4]}" >> "$outputfile.solution.svg" + fi + done +done + +echo -e "$svgfooter" >> "$outputfile.puzzle.svg" +echo -e "$svgfooter" >> "$outputfile.solution.svg" +echo -e "$svgfooter" >> "$outputfile.legendbottom.svg" +echo -e "$svgfooter" >> "$outputfile.legendside.svg" + +echo "Converting SVG files to PDF files..." + +inkscape "$outputfile.puzzle.svg" --export-filename="$outputfile.puzzle.pdf" --export-area-drawing --export-type=pdf --export-text-to-path +inkscape "$outputfile.solution.svg" --export-filename="$outputfile.solution.pdf" --export-area-drawing --export-type=pdf --export-text-to-path +inkscape "$outputfile.legendbottom.svg" --export-filename="$outputfile.legendbottom.pdf" --export-area-drawing --export-type=pdf --export-text-to-path +inkscape "$outputfile.legendside.svg" --export-filename="$outputfile.legendside.pdf" --export-area-drawing --export-type=pdf --export-text-to-path + +echo "Cleaning up..." + +rm "$outputfile.puzzle.svg" "$outputfile.solution.svg" "$outputfile.legendbottom.svg" "$outputfile.legendside.svg" + +echo "DONE!!!" diff --git a/crossword-maker.sh b/crossword-maker.sh new file mode 100644 index 0000000..04e045b --- /dev/null +++ b/crossword-maker.sh @@ -0,0 +1,242 @@ +#!/bin/bash + +## Title: CrossWord Maker 1.00 +## Author: Ze'ev Schurmann +## License: This project is licensed under the GNU General Public License v3.0 only. +## License: URL +## Git: https://git.zaks.web.za/thisiszeev/ipuz-to-pdf +## https://github.com/thisiszeev/ipuz-to-pdf + +## What is this script? +## This script will convert a ipuz crossword file into set of PDF files. + +## Why did I make this script? +## I needed to create vector file of various ipuz files as per the defined ipuz standard. +## These vector files are for use in print publications. So I need a script, that can be +## run in batch jobs. Thus the script can be executed as: +## $ bash crossword-maker.sh {filename}.ipuz + +## Where can I get software to create ipuz files? +## Crosswords: https://gitlab.gnome.org/jrb/crosswords +## Sudokus: https://invent.kde.org/games/ksudoku + +## Where I can learn more about the ipuz format? +## ipuz is essentially a JSON format designed for storing puzzles. +## Website: https://libipuz.org/ipuz-spec.html + +## What must I do first? +## First you need to install FontConfig, Inkscape, JQ and the Ubuntu Font Family or this +## script will not run. +## FontConfig: https://www.baeldung.com/linux/find-installed-fonts-command-line +## Inkscape: https://inkscape.org/ +## JQ: https://jqlang.github.io/jq/ +## Ubuntu Font Family: https://design.ubuntu.com/font + +## Donations & Support: +## Left for last, as usual. If you want support, you can hit me up on Reddit u/thisiszeev. +## I will try help out when I get time. But donations are a major source of my income, as +## I need to eat. + +## Paypal: https://paypal.me/thisiszeev +## $5 buys me a coffee +## $10 buys me a a nice burger +## $20 buys me a bottle of wine + +## If you plan to use this script for commercial use, you are free to do so, but please +## remember I put a lot of work and effort into these scripts. I kindly urge you to +## please make a donation of at least $50. You will then get priority support for a +## period of 12 months. + +## SVGHEADER ARRAY +svgheader=("\n\n\n") + +## SVGFOOTER +svgfooter="" + +## SVGCELL ARRAY AND START POSITION +svgcell=(" ") +svgcellx="20" +svgcelly="20" + +## SVGVAL ARRAY AND START POSITION +svgval=(" " "") +svgvalx="30" +svgvaly="35" + +## SVGNUM ARRAY AND START POSITION +svgnum=(" " "") +svgnumx="21" +svgnumxdec=".25" +svgnumy="25" +svgnumydec=".5" + +## COLOUR PALETTE FOR FILLING CELLS +colblack="#000000" +colwhite="#FFFFFF" + +## OFFSETS +offsetx="20" +offsety="20" + +errorcode="" + +temp=($(whereis inkscape)) + +if [[ $? != 0 ]]; then + echo "Unexpected Error: whereis not found?" + exit 3 +fi + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install Inscape : https://inkscape.org/" + errorcode="${errorcode}I" +fi + +temp=($(whereis jq)) + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install JQ : https://jqlang.github.io/jq/" + errorcode="${errorcode}J" +fi + +temp=($(whereis fc-match)) + +if [[ ${#temp[@]} == 1 ]]; then + echo "Please install FontConfig : https://www.baeldung.com/linux/find-installed-fonts-command-line" + errorcode="${errorcode}F" +else + temp2=$(fc-match "Ubuntu Mono") + if [[ $temp2 != 'UbuntuMono-R.ttf: "Ubuntu Mono" "Regular"' ]]; then + echo "Please install Ubuntu Font Family : https://design.ubuntu.com/font" + errorcode="${errorcode}U" + fi +fi + +if [[ ! -z $errorcode ]] || [[ $errorcode != "" ]]; then + exit 2 +fi + +if [[ -z $1 ]] || [[ $1 == "" ]]; then + echo "Usage:" + echo " $ bash crossword-maker.sh {puzzlefile}.ipuz" + exit 1 +fi + +puzzlename="$1" + +width=$(jq -r ".dimensions.width" "$puzzlename") +height=$(jq -r ".dimensions.height" "$puzzlename") +block=$(jq -r ".block" "$puzzlename") +empty=$(jq -r ".empty" "$puzzlename") +acrosssize=$(jq -r ".clues.\"Across:Across\" | length" "$puzzlename") +downsize=$(jq -r ".clues.\"Down:Down\" | length" "$puzzlename") + +echo "Puzzle is $width by $height in size!" + +declare -A gridarray +declare -A valuearray +declare -a acrossclue +declare -a downclue +declare -a acrossnumber +declare -a downnumber + +echo "Loading Grid..." + +for ((y=0; y<$height; y++)); do + for ((x=0; x<$width; x++)); do + gridarray[$x,$y]=$(jq -r ".puzzle[$y][$x]" "$puzzlename") + valuearray[$x,$y]=$(jq -r ".solution[$y][$x]" "$puzzlename") + #echo "$x, $y = ${gridarray[$x,$y]} = ${valuearray[$x,$y]}" + done +done + +echo "Loading Clues..." + +for ((n=0; n<$acrosssize; n++)); do + acrossnumber[$n]=$(jq -r ".clues.\"Across:Across\"[$n].number" "$puzzlename") + acrossclue[$n]=$(jq -r ".clues.\"Across:Across\"[$n].clue" "$puzzlename") +done + +for ((n=0; n<$downsize; n++)); do + downnumber[$n]=$(jq -r ".clues.\"Down:Down\"[$n].number" "$puzzlename") + downclue[$n]=$(jq -r ".clues.\"Down:Down\"[$n].clue" "$puzzlename") +done + +echo "Puzzle Data:" + +for ((y=0; y<$height; y++)); do + for ((x=0; x<$width; x++)); do + if [[ ${valuearray[$x,$y]} == "null" ]]; then + echo -n " " + else + echo -n " ${valuearray[$x,$y]}" + fi + done + echo +done + +echo "Building SVG Files..." + +pagex=$((width * offsetx + offsetx + offsetx)) +pagey=$((height * offsety + offsety + offsety)) + +outputfile="CrossWord-${puzzlename%.*}" + +echo -e "${svgheader[0]}$pagex${svgheader[1]}$pagey${svgheader[2]}$pagex $pagey${svgheader[3]}" > "$outputfile.puzzle.svg" +echo -e "${svgheader[0]}$pagex${svgheader[1]}$pagey${svgheader[2]}$pagex $pagey${svgheader[3]}" > "$outputfile.solution.svg" + +for ((y=0; y<$height; y++)); do + if [[ $y -lt 10 ]]; then + idy="0$y" + else + idy="$y" + fi + for ((x=0; x<$width; x++)); do + if [[ $x -lt 10 ]]; then + idx="0$x" + else + idx="$x" + fi + if [[ ${gridarray[$x,$y]} == $block ]]; then + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgcell[0]}$colblack${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.solution.svg" + else + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgcell[0]}$colwhite${svgcell[1]}$((x*20+svgcellx))${svgcell[2]}$((y*20+svgcelly))${svgcell[3]}$idx$idy${svgcell[4]}" >> "$outputfile.solution.svg" + if [[ ${gridarray[$x,$y]} != $block ]] && [[ ${gridarray[$x,$y]} != $empty ]]; then + echo -e "${svgnum[0]}$((x*20+svgnumx))$svgnumxdec${svgnum[1]}$((y*20+svgnumy))$svgnumydec${svgnum[2]}$idx$idy${svgnum[3]}${gridarray[$x,$y]}${svgnum[4]}" >> "$outputfile.puzzle.svg" + echo -e "${svgnum[0]}$((x*20+svgnumx))$svgnumxdec${svgnum[1]}$((y*20+svgnumy))$svgnumydec${svgnum[2]}$idx$idy${svgnum[3]}${gridarray[$x,$y]}${svgnum[4]}" >> "$outputfile.solution.svg" + fi + echo -e "${svgval[0]}$((x*20+svgvalx))${svgval[1]}$((y*20+svgvaly))${svgval[2]}$idx$idy${svgval[3]}${valuearray[$x,$y]}${svgval[4]}" >> "$outputfile.solution.svg" + fi + done +done + +echo -e "$svgfooter" >> "$outputfile.puzzle.svg" +echo -e "$svgfooter" >> "$outputfile.solution.svg" + +echo "Exporting Clues..." + +echo "ACROSS:" > "$outputfile.clues.txt" + +for ((n=0; n<${#acrossclue[@]}; n++)); do + echo "${acrossnumber[$n]} ${acrossclue[$n]}" >> "$outputfile.clues.txt" +done + +echo >> "$outputfile.clues.txt" +echo "DOWN:" >> "$outputfile.clues.txt" + +for ((n=0; n<${#downclue[@]}; n++)); do + echo "${downnumber[$n]} ${downclue[$n]}" >> "$outputfile.clues.txt" +done + +echo "Converting SVG files to PDF files..." + +inkscape "$outputfile.puzzle.svg" --export-filename="$outputfile.puzzle.pdf" --export-area-drawing --export-type=pdf --export-text-to-path +inkscape "$outputfile.solution.svg" --export-filename="$outputfile.solution.pdf" --export-area-drawing --export-type=pdf --export-text-to-path + +echo "Cleaning up..." + +rm "$outputfile.puzzle.svg" "$outputfile.solution.svg" + +echo "DONE!!!" diff --git a/cwsample1.ipuz b/cwsample1.ipuz new file mode 100644 index 0000000..f650c66 --- /dev/null +++ b/cwsample1.ipuz @@ -0,0 +1,1721 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "copyright" : "GW Puzzles", + "publisher" : "GW Puzzles", + "title" : "Cryptic Crossword", + "author" : "GW Puzzles", + "editor" : "GW Puzzles", + "date" : "2024-04-22", + "difficulty" : "Mixed", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "showenumerations" : true, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + 4, + "#", + 5, + "#", + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 9, + 0, + 0, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 10, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 0, + "#", + 11, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 12, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 13, + 0, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + "#", + 15, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + "#", + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + "#" + ], + [ + 18, + 0, + 19, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 20, + 0, + 21, + 0, + 22 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 23, + 0, + 0, + 0, + 0, + "#", + 24, + 0, + 25, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 26, + 0, + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0 + ], + [ + 27, + 0, + 0, + 0, + 0, + "#", + 0, + "#", + 28, + 0, + 29, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 30, + 0, + 0, + 0, + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 31, + 0, + 0, + 0, + 0, + "#", + 0, + "#", + 32, + 0, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "D", + "A", + "D", + "J", + "O", + "K", + "E", + null, + "F", + null, + "S", + "L", + "E", + "E", + "P" + ], + [ + "I", + null, + "O", + null, + "D", + null, + "S", + "T", + "A", + "R", + "T", + null, + "M", + null, + "R" + ], + [ + "C", + "A", + "G", + "E", + "D", + "U", + "P", + null, + "R", + null, + "O", + "B", + "E", + "S", + "E" + ], + [ + "E", + null, + "P", + null, + null, + null, + "I", + null, + "M", + "A", + "C", + null, + "R", + null, + "T" + ], + [ + "B", + "E", + "A", + "S", + "T", + "M", + "O", + "D", + "E", + null, + "K", + "N", + "I", + "F", + "E" + ], + [ + "A", + null, + "R", + null, + "W", + null, + null, + null, + "R", + null, + "B", + null, + "T", + null, + "E" + ], + [ + "G", + "E", + "T", + "T", + "O", + null, + "S", + "A", + "T", + "U", + "R", + "N", + "I", + "A", + "N" + ], + [ + null, + null, + null, + null, + "F", + null, + "U", + null, + "A", + null, + "O", + null, + null, + null, + null + ], + [ + "R", + "A", + "P", + "T", + "O", + "R", + "P", + "E", + "N", + null, + "K", + "E", + "B", + "A", + "B" + ], + [ + "E", + null, + "A", + null, + "U", + null, + "E", + null, + null, + null, + "E", + null, + "L", + null, + "A" + ], + [ + "D", + "O", + "N", + "O", + "R", + null, + "R", + "A", + "C", + "E", + "R", + "I", + "O", + "T", + "S" + ], + [ + "F", + null, + "J", + null, + "T", + "A", + "B", + null, + "H", + null, + null, + null, + "O", + null, + "E" + ], + [ + "A", + "B", + "A", + "C", + "I", + null, + "I", + null, + "I", + "G", + "G", + "Y", + "P", + "O", + "P" + ], + [ + "C", + null, + "B", + null, + "M", + "A", + "K", + "E", + "R", + null, + "A", + null, + "E", + null, + "A" + ], + [ + "E", + "V", + "I", + "T", + "E", + null, + "E", + null, + "P", + "U", + "B", + "E", + "R", + "T", + "Y" + ] + ], + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "clue" : "Humorous quip often delivered by a father", + "enumeration" : "7", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ] + ] + }, + { + "number" : 6, + "clue" : "Restful state essential for rejuvenation", + "enumeration" : "5", + "cells" : [ + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "clue" : "Commence; initiate", + "enumeration" : "5", + "cells" : [ + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 10, + 1 + ] + ] + }, + { + "number" : 10, + "clue" : "Confined behind bars, perhaps", + "enumeration" : "7", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ] + ] + }, + { + "number" : 11, + "clue" : "Significantly overweight", + "enumeration" : "5", + "cells" : [ + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "clue" : "Popular computer brand, often seen in cafes", + "enumeration" : "3", + "cells" : [ + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 10, + 3 + ] + ] + }, + { + "number" : 13, + "clue" : "Intensity of performance, like an animal", + "enumeration" : "9", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 15, + "clue" : "Sharp cutting tool used in the kitchen", + "enumeration" : "5", + "cells" : [ + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 16, + "clue" : "Acquire; obtain", + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "clue" : "Relating to the sixth planet from the sun ", + "enumeration" : "9", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ], + [ + 12, + 6 + ], + [ + 13, + 6 + ], + [ + 14, + 6 + ] + ] + }, + { + "number" : 18, + "clue" : "Enclosure for predatory birds", + "enumeration" : "9", + "cells" : [ + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 20, + "clue" : "Skewered and grilled meat dish", + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 23, + "clue" : "One who gives to a cause or charity", + "enumeration" : "5", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ] + ] + }, + { + "number" : 24, + "clue" : "Urban unrest caused by issues of discrimination and inequality", + "enumeration" : "9", + "cells" : [ + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 26, + "clue" : "Bill to be settled later", + "enumeration" : "3", + "cells" : [ + [ + 4, + 11 + ], + [ + 5, + 11 + ], + [ + 6, + 11 + ] + ] + }, + { + "number" : 27, + "clue" : "Ancient counting devices with beads", + "enumeration" : "5", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ] + ] + }, + { + "number" : 28, + "clue" : "Legendary punk rock singer known for 'Lust for Life'", + "enumeration" : "7", + "cells" : [ + [ + 8, + 12 + ], + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 30, + "clue" : "One who creates or produces", + "enumeration" : "5", + "cells" : [ + [ + 4, + 13 + ], + [ + 5, + 13 + ], + [ + 6, + 13 + ], + [ + 7, + 13 + ], + [ + 8, + 13 + ] + ] + }, + { + "number" : 31, + "clue" : "Online invitation service for events", + "enumeration" : "5", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 32, + "clue" : "Stage of adolescence marked by physical changes", + "enumeration" : "7", + "cells" : [ + [ + 8, + 14 + ], + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "clue" : "Container for rolling bones in tabletop games", + "enumeration" : "7", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ] + }, + { + "number" : 2, + "clue" : "Component of a canine anatomy", + "enumeration" : "7", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ] + }, + { + "number" : 3, + "clue" : "Not even; not divisible by two", + "enumeration" : "3", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ] + ] + }, + { + "number" : 4, + "clue" : "Spy or undercover agent", + "enumeration" : "5", + "cells" : [ + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ] + ] + }, + { + "number" : 5, + "clue" : "Result of spending time in the sun without protection", + "enumeration" : "9", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 6, + "clue" : "Professional who buys and sells securities", + "enumeration" : "11", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ] + ] + }, + { + "number" : 7, + "clue" : "Plural form of 'emeritus', denoting retired status", + "enumeration" : "7", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ], + [ + 12, + 6 + ] + ] + }, + { + "number" : 8, + "clue" : "Child approaching adolescence", + "enumeration" : "7", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ], + [ + 14, + 6 + ] + ] + }, + { + "number" : 14, + "clue" : "Musical rhythm with two beats per measure", + "enumeration" : "11", + "cells" : [ + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 17, + "clue" : "High-performance motorcycle", + "enumeration" : "9", + "cells" : [ + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + }, + { + "number" : 18, + "clue" : "Blush or become visibly embarrassed", + "enumeration" : "7", + "cells" : [ + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 19, + "clue" : "Type of traditional South Asian clothing", + "enumeration" : "7", + "cells" : [ + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 21, + "clue" : "Embarrassing mistake or error", + "enumeration" : "7", + "cells" : [ + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 22, + "clue" : "Fixed salary amount before bonuses or overtime", + "enumeration" : "7", + "cells" : [ + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 25, + "clue" : "Short, high-pitched sound made by a small bird", + "enumeration" : "5", + "cells" : [ + [ + 8, + 10 + ], + [ + 8, + 11 + ], + [ + 8, + 12 + ], + [ + 8, + 13 + ], + [ + 8, + 14 + ] + ] + }, + { + "number" : 29, + "clue" : "Casual conversation or idle chatter", + "enumeration" : "3", + "cells" : [ + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + } + ] + } +} diff --git a/cwsample2.ipuz b/cwsample2.ipuz new file mode 100644 index 0000000..921babf --- /dev/null +++ b/cwsample2.ipuz @@ -0,0 +1,1689 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "copyright" : "GW Puzzles", + "publisher" : "GW Puzzles", + "title" : "Cryptic Crossword", + "author" : "GW Puzzles", + "editor" : "GW Puzzles", + "date" : "2024-04-22", + "difficulty" : "Mixed", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "showenumerations" : true, + "puzzle" : [ + [ + 1, + 0, + 2, + 0, + 3, + 0, + "#", + 4, + 5, + 0, + 6, + 0, + 7, + 0, + 8 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 9, + 0, + 0, + 0, + 0, + 0, + "#", + 10, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 11, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 12, + 0, + 0, + 0, + 0, + "#", + 13, + 0, + 0, + 14, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 15, + 0, + 0, + "#", + "#", + 0, + "#", + "#", + 0, + "#", + 0 + ], + [ + 16, + 0, + 0, + 0, + 0, + "#", + 17, + 0, + 18, + 0, + 19, + 0, + "#", + "#", + "#" + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 20, + "#", + 21 + ], + [ + "#", + "#", + "#", + 22, + 0, + 23, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0, + 0 + ], + [ + 25, + "#", + 26, + "#", + "#", + 0, + "#", + "#", + 27, + 0, + 0, + "#", + 0, + "#", + 0 + ], + [ + 28, + 0, + 0, + 0, + 29, + 0, + 30, + 0, + 0, + "#", + 31, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 32, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 33, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0 + ], + [ + 34, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 35, + 0, + 0, + 0, + 0, + 0 + ] + ], + "solution" : [ + [ + "H", + "A", + "M", + "L", + "I", + "N", + null, + "M", + "A", + "L", + "A", + "Y", + "A", + "N", + "S" + ], + [ + "A", + null, + "A", + null, + "R", + null, + null, + null, + "L", + null, + "C", + null, + "R", + null, + "P" + ], + [ + "P", + "I", + "C", + "K", + "O", + "N", + null, + "C", + "E", + "N", + "T", + "A", + "U", + "R", + "I" + ], + [ + "P", + null, + "Y", + null, + "N", + null, + "F", + null, + "S", + null, + "O", + null, + "B", + null, + "T" + ], + [ + "E", + "A", + "G", + "E", + "R", + null, + "A", + "L", + "I", + "E", + "N", + "R", + "A", + "C", + "E" + ], + [ + "N", + null, + "R", + null, + "I", + "N", + "K", + null, + null, + "T", + null, + null, + "N", + null, + "D" + ], + [ + "B", + "R", + "A", + "I", + "N", + null, + "E", + "L", + "E", + "C", + "T", + "S", + null, + null, + null + ], + [ + "Y", + null, + "Y", + null, + "G", + null, + "I", + null, + "S", + null, + "V", + null, + "A", + null, + "N" + ], + [ + null, + null, + null, + "T", + "S", + "K", + "T", + "S", + "K", + null, + "H", + "O", + "M", + "I", + "E" + ], + [ + "A", + null, + "A", + null, + null, + "B", + null, + null, + "I", + "O", + "U", + null, + "E", + null, + "R" + ], + [ + "V", + "A", + "L", + "V", + "E", + "S", + "T", + "E", + "M", + null, + "S", + "I", + "X", + "O", + "F" + ], + [ + "A", + null, + "P", + null, + "G", + null, + "O", + null, + "O", + null, + "B", + null, + "C", + null, + "G" + ], + [ + "T", + "A", + "I", + "L", + "G", + "A", + "T", + "E", + null, + "B", + "A", + "B", + "A", + "L", + "U" + ], + [ + "A", + null, + "N", + null, + "E", + null, + "A", + null, + null, + null, + "N", + null, + "R", + null, + "N" + ], + [ + "R", + "E", + "E", + "N", + "R", + "O", + "L", + "L", + null, + "A", + "D", + "I", + "D", + "A", + "S" + ] + ], + "clues" : { + "Across:Across" : [ + { + "number" : 1, + "clue" : "Pied Piper's home hides rodents initially", + "enumeration" : "6", + "cells" : [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + }, + { + "number" : 4, + "clue" : "Asylum for laymen confused by these people", + "enumeration" : "8", + "cells" : [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 11, + 0 + ], + [ + 12, + 0 + ], + [ + 13, + 0 + ], + [ + 14, + 0 + ] + ] + }, + { + "number" : 9, + "clue" : "Choose to harass", + "enumeration" : "4,2", + "cells" : [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + }, + { + "number" : 10, + "clue" : "One hundred stars within", + "enumeration" : "8", + "cells" : [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 11, + 2 + ], + [ + 12, + 2 + ], + [ + 13, + 2 + ], + [ + 14, + 2 + ] + ] + }, + { + "number" : 12, + "clue" : "Enthusiastic German goes around looking", + "enumeration" : "5", + "cells" : [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + }, + { + "number" : 13, + "clue" : "Out of this world marathon ", + "enumeration" : "5,4", + "cells" : [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 11, + 4 + ], + [ + 12, + 4 + ], + [ + 13, + 4 + ], + [ + 14, + 4 + ] + ] + }, + { + "number" : 15, + "clue" : "Dark fluid within pen", + "enumeration" : "3", + "cells" : [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ] + }, + { + "number" : 16, + "clue" : "Mind contained within", + "enumeration" : "5", + "cells" : [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + }, + { + "number" : 17, + "clue" : "Puts in the office", + "enumeration" : "6", + "cells" : [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 10, + 6 + ], + [ + 11, + 6 + ] + ] + }, + { + "number" : 22, + "clue" : "Tut twice for disapproval", + "enumeration" : "3,3", + "cells" : [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ] + }, + { + "number" : 24, + "clue" : "Buddy returning home", + "enumeration" : "5", + "cells" : [ + [ + 10, + 8 + ], + [ + 11, + 8 + ], + [ + 12, + 8 + ], + [ + 13, + 8 + ], + [ + 14, + 8 + ] + ] + }, + { + "number" : 27, + "clue" : "Debt acknowledgment", + "enumeration" : "3", + "cells" : [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ] + ] + }, + { + "number" : 28, + "clue" : "Regulating fluid passage", + "enumeration" : "5,4", + "cells" : [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ] + }, + { + "number" : 31, + "clue" : "Two of make a dozen", + "enumeration" : "3,2", + "cells" : [ + [ + 10, + 10 + ], + [ + 11, + 10 + ], + [ + 12, + 10 + ], + [ + 13, + 10 + ], + [ + 14, + 10 + ] + ] + }, + { + "number" : 32, + "clue" : "Follow closely", + "enumeration" : "8", + "cells" : [ + [ + 0, + 12 + ], + [ + 1, + 12 + ], + [ + 2, + 12 + ], + [ + 3, + 12 + ], + [ + 4, + 12 + ], + [ + 5, + 12 + ], + [ + 6, + 12 + ], + [ + 7, + 12 + ] + ] + }, + { + "number" : 33, + "clue" : "Musical tribute to Desi Arnaz's alter ego", + "enumeration" : "6", + "cells" : [ + [ + 9, + 12 + ], + [ + 10, + 12 + ], + [ + 11, + 12 + ], + [ + 12, + 12 + ], + [ + 13, + 12 + ], + [ + 14, + 12 + ] + ] + }, + { + "number" : 34, + "clue" : "Register again for classes", + "enumeration" : "8", + "cells" : [ + [ + 0, + 14 + ], + [ + 1, + 14 + ], + [ + 2, + 14 + ], + [ + 3, + 14 + ], + [ + 4, + 14 + ], + [ + 5, + 14 + ], + [ + 6, + 14 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 35, + "clue" : "All day I dream about something", + "enumeration" : "6", + "cells" : [ + [ + 9, + 14 + ], + [ + 10, + 14 + ], + [ + 11, + 14 + ], + [ + 12, + 14 + ], + [ + 13, + 14 + ], + [ + 14, + 14 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "clue" : "Occur close to this vicinity", + "enumeration" : "6,2", + "cells" : [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ] + }, + { + "number" : 2, + "clue" : "Singer's shades might leave you puzzled", + "enumeration" : "4,4", + "cells" : [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ] + }, + { + "number" : 3, + "clue" : "Bands for strong promises", + "enumeration" : "4,5", + "cells" : [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ] + ] + }, + { + "number" : 5, + "clue" : "Aisle scrambled to find French racing driver", + "enumeration" : "5", + "cells" : [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ] + }, + { + "number" : 6, + "clue" : "Performance is on", + "enumeration" : "3,2", + "cells" : [ + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ] + }, + { + "number" : 7, + "clue" : "Islander turned right before noon", + "enumeration" : "6", + "cells" : [ + [ + 12, + 0 + ], + [ + 12, + 1 + ], + [ + 12, + 2 + ], + [ + 12, + 3 + ], + [ + 12, + 4 + ], + [ + 12, + 5 + ] + ] + }, + { + "number" : 8, + "clue" : "Deliberately upset the redhead", + "enumeration" : "6", + "cells" : [ + [ + 14, + 0 + ], + [ + 14, + 1 + ], + [ + 14, + 2 + ], + [ + 14, + 3 + ], + [ + 14, + 4 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 11, + "clue" : "Keep busy before the win", + "enumeration" : "4,2", + "cells" : [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ] + ] + }, + { + "number" : 14, + "clue" : "And so forth, endlessly", + "enumeration" : "3", + "cells" : [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ] + }, + { + "number" : 18, + "clue" : "Northern folk missing out on summer, perhaps", + "enumeration" : "6", + "cells" : [ + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 8, + 11 + ] + ] + }, + { + "number" : 19, + "clue" : "Small screen spouse", + "enumeration" : "2,7", + "cells" : [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 10, + 11 + ], + [ + 10, + 12 + ], + [ + 10, + 13 + ], + [ + 10, + 14 + ] + ] + }, + { + "number" : 20, + "clue" : "Plastic payment from American Express", + "enumeration" : "4,4", + "cells" : [ + [ + 12, + 7 + ], + [ + 12, + 8 + ], + [ + 12, + 9 + ], + [ + 12, + 10 + ], + [ + 12, + 11 + ], + [ + 12, + 12 + ], + [ + 12, + 13 + ], + [ + 12, + 14 + ] + ] + }, + { + "number" : 21, + "clue" : "Playthings for safe battles", + "enumeration" : "4,4", + "cells" : [ + [ + 14, + 7 + ], + [ + 14, + 8 + ], + [ + 14, + 9 + ], + [ + 14, + 10 + ], + [ + 14, + 11 + ], + [ + 14, + 12 + ], + [ + 14, + 13 + ], + [ + 14, + 14 + ] + ] + }, + { + "number" : 23, + "clue" : "South Korean broadcasting company", + "enumeration" : "3", + "cells" : [ + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ] + ] + }, + { + "number" : 25, + "clue" : "Virtual representation of self", + "enumeration" : "6", + "cells" : [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 0, + 11 + ], + [ + 0, + 12 + ], + [ + 0, + 13 + ], + [ + 0, + 14 + ] + ] + }, + { + "number" : 26, + "clue" : "Relating to high mountain regions", + "enumeration" : "6", + "cells" : [ + [ + 2, + 9 + ], + [ + 2, + 10 + ], + [ + 2, + 11 + ], + [ + 2, + 12 + ], + [ + 2, + 13 + ], + [ + 2, + 14 + ] + ] + }, + { + "number" : 29, + "clue" : "Attacks houses on halloween", + "enumeration" : "5", + "cells" : [ + [ + 4, + 10 + ], + [ + 4, + 11 + ], + [ + 4, + 12 + ], + [ + 4, + 13 + ], + [ + 4, + 14 + ] + ] + }, + { + "number" : 30, + "clue" : "Add everything up", + "enumeration" : "5", + "cells" : [ + [ + 6, + 10 + ], + [ + 6, + 11 + ], + [ + 6, + 12 + ], + [ + 6, + 13 + ], + [ + 6, + 14 + ] + ] + } + ] + } +} \ No newline at end of file diff --git a/cwsample3.ipuz b/cwsample3.ipuz new file mode 100644 index 0000000..c662775 --- /dev/null +++ b/cwsample3.ipuz @@ -0,0 +1,1512 @@ +{ + "kind" : [ + "http://ipuz.org/crossword#1", + "http://ipuz.org/crossword/crypticcrossword#1" + ], + "version" : "http://ipuz.org/v2", + "copyright" : "GW Puzzles", + "publisher" : "GW Puzzles", + "title" : "Cryptic Crossword", + "author" : "GW Puzzles", + "date" : "2024-04-22", + "difficulty" : "Mixed", + "block" : "#", + "empty" : "0", + "dimensions" : { + "width" : 15, + "height" : 15 + }, + "showenumerations" : true, + "puzzle" : [ + [ + "#", + 1, + "#", + 2, + "#", + 3, + "#", + 4, + "#", + 5, + "#", + 6, + "#", + 7, + "#" + ], + [ + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 9, + 0, + 0, + 0, + 0, + "#" + ], + [ + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#" + ], + [ + 10, + 0, + 0, + 0, + "#", + 11, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#" + ], + [ + 12, + 0, + 0, + 13, + 0, + 0, + "#", + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#" + ], + [ + 15, + 0, + 0, + 0, + 0, + 16, + 0, + "#", + 17, + 0, + 0, + 0, + 0, + 18, + 0 + ], + [ + "#", + "#", + "#", + 0, + "#", + 0, + "#", + 19, + "#", + "#", + "#", + 0, + "#", + 0, + "#" + ], + [ + 20, + 21, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 22, + 0, + 0, + 0, + 0, + 0 + ], + [ + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + "#", + "#", + 0, + "#" + ], + [ + 23, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + "#", + 24, + 0, + 0, + 0 + ], + [ + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#" + ], + [ + "#", + 25, + 0, + 0, + 0, + 0, + "#", + 26, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#", + 0, + "#" + ] + ], + "solution" : [ + [ + null, + "T", + null, + "S", + null, + "O", + null, + "A", + null, + "O", + null, + "O", + null, + "C", + null + ], + [ + "L", + "U", + "C", + "K", + "Y", + "D", + "O", + "G", + null, + "B", + "E", + "N", + "C", + "H", + null + ], + [ + null, + "B", + null, + "A", + null, + "E", + null, + "R", + null, + "O", + null, + "E", + null, + "O", + null + ], + [ + "F", + "A", + "R", + "T", + null, + "S", + "C", + "E", + "N", + "E", + "S", + "H", + "O", + "P", + "S" + ], + [ + null, + "M", + null, + null, + null, + "S", + null, + "E", + null, + "R", + null, + "I", + null, + "R", + null + ], + [ + "M", + "U", + "R", + "I", + "C", + "A", + null, + "T", + "R", + "E", + "A", + "T", + "B", + "A", + "G" + ], + [ + null, + "T", + null, + "N", + null, + null, + null, + "O", + null, + "E", + null, + "K", + null, + null, + null + ], + [ + "S", + "E", + "L", + "F", + "I", + "E", + "S", + null, + "H", + "D", + "M", + "I", + "O", + "U", + "T" + ], + [ + null, + null, + null, + "L", + null, + "X", + null, + "I", + null, + null, + null, + "L", + null, + "N", + null + ], + [ + "G", + "R", + "O", + "U", + "P", + "O", + "N", + "S", + null, + "U", + "N", + "L", + "E", + "S", + "S" + ], + [ + null, + "O", + null, + "E", + null, + "M", + null, + "E", + null, + "P", + null, + null, + null, + "P", + null + ], + [ + "A", + "B", + "A", + "N", + "D", + "O", + "N", + "E", + "E", + "S", + null, + "A", + "T", + "O", + "M" + ], + [ + null, + "L", + null, + "C", + null, + "O", + null, + "N", + null, + "I", + null, + "C", + null, + "K", + null + ], + [ + null, + "O", + "C", + "E", + "A", + "N", + null, + "O", + "N", + "E", + "L", + "I", + "T", + "E", + "R" + ], + [ + null, + "X", + null, + "R", + null, + "S", + null, + "W", + null, + "S", + null, + "D", + null, + "N", + null + ] + ], + "clues" : { + "Across:Across" : [ + { + "number" : 8, + "clue" : "Fortunate canine", + "enumeration" : "5,3", + "cells" : [ + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ] + ] + }, + { + "number" : 9, + "clue" : "Take a seat at the gym", + "enumeration" : "5", + "cells" : [ + [ + 9, + 1 + ], + [ + 10, + 1 + ], + [ + 11, + 1 + ], + [ + 12, + 1 + ], + [ + 13, + 1 + ] + ] + }, + { + "number" : 10, + "clue" : "Noisy escape from rear", + "enumeration" : "4", + "cells" : [ + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ] + }, + { + "number" : 11, + "clue" : "Displays settings for dramas", + "enumeration" : "5,5", + "cells" : [ + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 10, + 3 + ], + [ + 11, + 3 + ], + [ + 12, + 3 + ], + [ + 13, + 3 + ], + [ + 14, + 3 + ] + ] + }, + { + "number" : 12, + "clue" : "America slang twisted in rum", + "enumeration" : "6", + "cells" : [ + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ] + ] + }, + { + "number" : 14, + "clue" : "Candy container for goodie exchange", + "enumeration" : "5,3", + "cells" : [ + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ], + [ + 10, + 5 + ], + [ + 11, + 5 + ], + [ + 12, + 5 + ], + [ + 13, + 5 + ], + [ + 14, + 5 + ] + ] + }, + { + "number" : 15, + "clue" : "Narcissistic shots left on phone", + "enumeration" : "7", + "cells" : [ + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ] + ] + }, + { + "number" : 17, + "clue" : "Exit for high-definition connection", + "enumeration" : "4,3", + "cells" : [ + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 10, + 7 + ], + [ + 11, + 7 + ], + [ + 12, + 7 + ], + [ + 13, + 7 + ], + [ + 14, + 7 + ] + ] + }, + { + "number" : 20, + "clue" : "Discounts for gatherings", + "enumeration" : "8", + "cells" : [ + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ] + ] + }, + { + "number" : 22, + "clue" : "Except if no less", + "enumeration" : "6", + "cells" : [ + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 11, + 9 + ], + [ + 12, + 9 + ], + [ + 13, + 9 + ], + [ + 14, + 9 + ] + ] + }, + { + "number" : 23, + "clue" : "Those left deserted in need", + "enumeration" : "10", + "cells" : [ + [ + 0, + 11 + ], + [ + 1, + 11 + ], + [ + 2, + 11 + ], + [ + 3, + 11 + ], + [ + 4, + 11 + ], + [ + 5, + 11 + ], + [ + 6, + 11 + ], + [ + 7, + 11 + ], + [ + 8, + 11 + ], + [ + 9, + 11 + ] + ] + }, + { + "number" : 24, + "clue" : "Particle in matter", + "enumeration" : "4", + "cells" : [ + [ + 11, + 11 + ], + [ + 12, + 11 + ], + [ + 13, + 11 + ], + [ + 14, + 11 + ] + ] + }, + { + "number" : 25, + "clue" : "Vast expanse of water", + "enumeration" : "5", + "cells" : [ + [ + 1, + 13 + ], + [ + 2, + 13 + ], + [ + 3, + 13 + ], + [ + 4, + 13 + ], + [ + 5, + 13 + ] + ] + }, + { + "number" : 26, + "clue" : "Bottle size for liquid measure", + "enumeration" : "3,5", + "cells" : [ + [ + 7, + 13 + ], + [ + 8, + 13 + ], + [ + 9, + 13 + ], + [ + 10, + 13 + ], + [ + 11, + 13 + ], + [ + 12, + 13 + ], + [ + 13, + 13 + ], + [ + 14, + 13 + ] + ] + } + ], + "Down:Down" : [ + { + "number" : 1, + "clue" : "Silence horn instrument in bathroom", + "enumeration" : "4,4", + "cells" : [ + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ] + }, + { + "number" : 2, + "clue" : "Card game at the bar", + "enumeration" : "4", + "cells" : [ + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ] + }, + { + "number" : 3, + "clue" : "City's ode's initial letter", + "enumeration" : "6", + "cells" : [ + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ] + }, + { + "number" : 4, + "clue" : "Concur with total chaos", + "enumeration" : "5,2", + "cells" : [ + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ] + ] + }, + { + "number" : 5, + "clue" : "Wind instrument is back in dense fog", + "enumeration" : "4,4", + "cells" : [ + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ] + ] + }, + { + "number" : 6, + "clue" : "Single strike ends existence", + "enumeration" : "3,3,4", + "cells" : [ + [ + 11, + 0 + ], + [ + 11, + 1 + ], + [ + 11, + 2 + ], + [ + 11, + 3 + ], + [ + 11, + 4 + ], + [ + 11, + 5 + ], + [ + 11, + 6 + ], + [ + 11, + 7 + ], + [ + 11, + 8 + ], + [ + 11, + 9 + ] + ] + }, + { + "number" : 7, + "clue" : "Deepak cooks rice dish", + "enumeration" : "6", + "cells" : [ + [ + 13, + 0 + ], + [ + 13, + 1 + ], + [ + 13, + 2 + ], + [ + 13, + 3 + ], + [ + 13, + 4 + ], + [ + 13, + 5 + ] + ] + }, + { + "number" : 13, + "clue" : "Social media star's flu epidemic", + "enumeration" : "10", + "cells" : [ + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 3, + 10 + ], + [ + 3, + 11 + ], + [ + 3, + 12 + ], + [ + 3, + 13 + ], + [ + 3, + 14 + ] + ] + }, + { + "number" : 16, + "clue" : "Satellites outside Earth", + "enumeration" : "3,5", + "cells" : [ + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 5, + 11 + ], + [ + 5, + 12 + ], + [ + 5, + 13 + ], + [ + 5, + 14 + ] + ] + }, + { + "number" : 18, + "clue" : "Silence broken on one", + "enumeration" : "8", + "cells" : [ + [ + 13, + 7 + ], + [ + 13, + 8 + ], + [ + 13, + 9 + ], + [ + 13, + 10 + ], + [ + 13, + 11 + ], + [ + 13, + 12 + ], + [ + 13, + 13 + ], + [ + 13, + 14 + ] + ] + }, + { + "number" : 19, + "clue" : "Realization of present situation", + "enumeration" : "1,3,3", + "cells" : [ + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 7, + 11 + ], + [ + 7, + 12 + ], + [ + 7, + 13 + ], + [ + 7, + 14 + ] + ] + }, + { + "number" : 21, + "clue" : "Build bricks online", + "enumeration" : "6", + "cells" : [ + [ + 1, + 9 + ], + [ + 1, + 10 + ], + [ + 1, + 11 + ], + [ + 1, + 12 + ], + [ + 1, + 13 + ], + [ + 1, + 14 + ] + ] + }, + { + "number" : 22, + "clue" : "Lifting toddlers", + "enumeration" : "6", + "cells" : [ + [ + 9, + 9 + ], + [ + 9, + 10 + ], + [ + 9, + 11 + ], + [ + 9, + 12 + ], + [ + 9, + 13 + ], + [ + 9, + 14 + ] + ] + }, + { + "number" : 24, + "clue" : "Sour substance with it", + "enumeration" : "4", + "cells" : [ + [ + 11, + 11 + ], + [ + 11, + 12 + ], + [ + 11, + 13 + ], + [ + 11, + 14 + ] + ] + } + ] + } +} \ No newline at end of file