RPG program - SUDOR h option(*srcstmt: *nodebugio) dftactgrp(*no) * Copyright (c) 2005 Dave Kahn. - All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. ***** ----------------------------------------------------- ***** ***** This program was provoked by a post by Gerald Magnuson ***** ***** to the midrange-nontech listserv at midrange.com ***** ***** suggesting the "need" for a 5250 based Sudoku solver. ***** ***** Essentially therefore it's all Gerald's fault. ***** ***** Have fun with it, but please don't risk your job. ***** ***** ***** ***** The wide format screen showing the numbers in each ***** ***** cell that the program has not yet eliminated was ***** ***** designed by Gerald Magnuson. ***** ***** ----------------------------------------------------- ***** ***** Bugreports, new ideas and enhancements are welcomed to: ***** ***** Dave Kahn. Mailaddress: dkahn400@yahoo.co.uk ***** ***** ----------------------------------------------------- ***** fSudoFm cf e workstn usropn fSudo2fm cf e workstn usropn rename(dtl01 : dtl201) d sudor pr d mode 1a d sudor pi d mode 1a d CloseFiles pr d closestCell pr 3i 0 d countFilled pr d displayBoard pr d extend pr d 3i 0 value d extendRow pr d 3i 0 value d extendCol pr d 3i 0 value d extendBox pr d 3i 0 value d haveAGuess pr d initPoss pr d openFiles pr d PossCount pr 3i 0 d 3i 0 value d reducePoss pr d reGuess pr d setCell pr d 3i 0 value d showBoardPoss pr d switchMode pr d possibilities ds d cellPoss 9 dim(81) d possArr ds d poss n dim( 9) d bPossArr ds d bPoss 1 dim( 9) d preGuessBoard s 81 dim(81) d preGuessPoss s 729 dim(81) d changeCount s 3i 0 d guessCount s 3i 0 d filledCount s 3i 0 d guessAllowed s n d crunchTime s n d Board ds d r1c1 d r1c2 d r1c3 d r1c4 d r1c5 d r1c6 d r1c7 d r1c8 d r1c9 d r2c1 d r2c2 d r2c3 d r2c4 d r2c5 d r2c6 d r2c7 d r2c8 d r2c9 d r3c1 d r3c2 d r3c3 d r3c4 d r3c5 d r3c6 d r3c7 d r3c8 d r3c9 d r4c1 d r4c2 d r4c3 d r4c4 d r4c5 d r4c6 d r4c7 d r4c8 d r4c9 d r5c1 d r5c2 d r5c3 d r5c4 d r5c5 d r5c6 d r5c7 d r5c8 d r5c9 d r6c1 d r6c2 d r6c3 d r6c4 d r6c5 d r6c6 d r6c7 d r6c8 d r6c9 d r7c1 d r7c2 d r7c3 d r7c4 d r7c5 d r7c6 d r7c7 d r7c8 d r7c9 d r8c1 d r8c2 d r8c3 d r8c4 d r8c5 d r8c6 d r8c7 d r8c8 d r8c9 d r9c1 d r9c2 d r9c3 d r9c4 d r9c5 d r9c6 d r9c7 d r9c8 d r9c9 d cell 1 81s 0 dim(81) d storeBoard s like(board) d boardPoss ds d possr1c1 d possr1c2 d possr1c3 d possr1c4 d possr1c5 d possr1c6 d possr1c7 d possr1c8 d possr1c9 d possr2c1 d possr2c2 d possr2c3 d possr2c4 d possr2c5 d possr2c6 d possr2c7 d possr2c8 d possr2c9 d possr3c1 d possr3c2 d possr3c3 d possr3c4 d possr3c5 d possr3c6 d possr3c7 d possr3c8 d possr3c9 d possr4c1 d possr4c2 d possr4c3 d possr4c4 d possr4c5 d possr4c6 d possr4c7 d possr4c8 d possr4c9 d possr5c1 d possr5c2 d possr5c3 d possr5c4 d possr5c5 d possr5c6 d possr5c7 d possr5c8 d possr5c9 d possr6c1 d possr6c2 d possr6c3 d possr6c4 d possr6c5 d possr6c6 d possr6c7 d possr6c8 d possr6c9 d possr7c1 d possr7c2 d possr7c3 d possr7c4 d possr7c5 d possr7c6 d possr7c7 d possr7c8 d possr7c9 d possr8c1 d possr8c2 d possr8c3 d possr8c4 d possr8c5 d possr8c6 d possr8c7 d possr8c8 d possr8c9 d possr9c1 d possr9c2 d possr9c3 d possr9c4 d possr9c5 d possr9c6 d possr9c7 d possr9c8 d possr9c9 d boardPossArr 1 729 dim(81) ******************************************************* /free openFiles (); initPoss (); dou *inlr; displayBoard (); if *in03 or *in12; *inlr = *on; elseif *in05; initPoss (); elseif *in08; switchMode (); else; reducePoss (); countFilled (); if filledCount < 81 and changeCount = *zero and guessAllowed; haveAGuess (); endif; endif; enddo; closeFiles (); /end-free ******************************************************* p displayBoard b d displayBoard pi /free eval(h) pctcmp = filledCount * 100 / 81; numchg = changeCount; numges = guessCount; storeBoard = board; if not crunchTime or filledCount = 81 or *in40; showBoardPoss (); if mode = '0'; exfmt dtl01; else; exfmt dtl201; endif; endif; crunchTime = *in20; /end-free p e ******************************************************* p showBoardPoss b d showBoardPoss pi d ix s 3i 0 d iy s 3i 0 /free for ix = 1 to 81; if cell (ix) = *zero; bPossArr = boardPossArr (ix); possArr = cellPoss (ix); for iy = 1 to 9; if poss (iy); bposs (iy) = %char(iy); else; bposs (iy) = *blank; endif; endfor; boardPossArr (ix) = bPossArr; else; boardPossArr (ix) = *blank; endif; endfor; /end-free p e ******************************************************* p countFilled b d countFilled pi d ix s 3i 0 /free filledCount = *zero; for ix = 1 to 81; if cell (ix) <> *zero; filledCount = filledCount + 1; endif; endfor; /end-free p e ******************************************************* p reducePoss b d reducePoss pi d ix s 3i 0 d iy s 3i 0 /free changeCount = *zero; if board = storeBoard; guessAllowed = *on; else; guessAllowed = *off; storeBoard = board; initPoss (); board = storeBoard; endif; for ix = 1 to 81; if cell (ix) <> *zero; possArr = cellPoss (ix); if poss (cell (ix)) = *off; cell (ix) = *zero; // Invalid - undo // cellPoss (ix) = *all'1'; else; possArr = *zero; poss (cell (ix)) = *on; cellPoss (ix) = possArr; extend (ix); endif; elseif possCount (ix) = 1; setCell (ix); elseif possCount (ix) = *zero; if guessCount = *zero; *in40 = *on; else; reGuess (); endif; endif; endfor; /end-free p e ******************************************************* p extend b d extend pi d currCell 3i 0 value /free extendRow (currCell); extendCol (currCell); extendBox (currCell); /end-free p e ******************************************************* p extendRow b d extendRow pi d currCell 3i 0 value d ix s 3i 0 d left s 3i 0 d right s 3i 0 /free left = currCell - %rem(currCell + 8 : 9); right = left + 8; for ix = left to right; if ix <> currCell; possArr = cellPoss (ix); poss (cell (currCell)) = *off; cellPoss (ix) = possArr; endif; endfor; /end-free p e ******************************************************* p extendCol b d extendCol pi d currCell 3i 0 value d ix s 3i 0 /free for ix = %rem(currCell + 8 : 9) + 1 by 9 to 81; if ix <> currCell; possArr = cellPoss (ix); poss (cell (currCell)) = *off; cellPoss (ix) = possArr; endif; endfor; /end-free p e ******************************************************* p extendBox b d extendBox pi d currCell 3i 0 value d ix s 3i 0 d column s 3i 0 d topLeft s 3i 0 /free column = %rem(currCell + 8 : 9) + 1; if column < 4; if currCell < 28; topLeft = 1; elseif currCell < 55; topLeft = 28; else; topLeft = 55; endif; elseif column < 7; if currCell < 28; topLeft = 4; elseif currCell < 55; topLeft = 31; else; topLeft = 58; endif; else; if currCell < 28; topLeft = 7; elseif currCell < 55; topLeft = 34; else; topLeft = 61; endif; endif; for ix = topLeft to topleft + 2; if ix <> currCell; possArr = cellPoss (ix); poss (cell (currCell)) = *off; cellPoss (ix) = possArr; endif; endfor; for ix = topLeft +9 to topleft + 11; if ix <> currCell; possArr = cellPoss (ix); poss (cell (currCell)) = *off; cellPoss (ix) = possArr; endif; endfor; for ix = topLeft + 18 to topleft + 20; if ix <> currCell; possArr = cellPoss (ix); poss (cell (currCell)) = *off; cellPoss (ix) = possArr; endif; endfor; /end-free p e ******************************************************* p possCount b d possCount pi 3i 0 d currCell 3i 0 value d ix s 3i 0 d count s 3i 0 /free possArr = cellPoss (currCell); count = *zero; for ix = 1 to 9; if poss (ix); count = count + 1; endif; endfor; return (count); /end-free p e ******************************************************* p setCell b d setCell pi d currCell 3i 0 value d ix s 3i 0 /free possArr = cellPoss (currCell); for ix = 1 to 9; if poss(ix); if cell (currCell) <> ix; changeCount = changeCount + 1; cell (currCell) = ix; extend (currCell); leave; endif; endif; endfor; /end-free p e ******************************************************* p haveAGuess b d haveAGuess pi d ix s 3i 0 d iy s 3i 0 /free ix = closestCell (); if ix <> *zero; possArr = cellPoss (ix); for iy = 1 to 9; if poss (iy); poss (iy) = *off; // Prevent this being re-guessed cellPoss (ix) = possArr; guessCount = guessCount + 1; preGuessBoard (guessCount) = board; preGuessPoss (guessCount) = possibilities; possArr = *zeros; poss (iy) = *on; // But for now the only possibility cellPoss (ix) = possArr; setCell (ix); leave; endif; endfor; endif; /end-free p e ******************************************************* p reGuess b d reGuess pi d ix s 3i 0 /free board = preGuessBoard (guessCount); possibilities = preGuessPoss (guessCount); guessCount = guessCount - 1; haveAGuess (); /end-free p e ******************************************************* p closestCell b d closestCell pi 3i 0 d ix s 3i 0 d iy s 3i 0 d leastFree s 3i 0 d lowestSoFar s 3i 0 /free lowestSoFar = *hival; leastFree = *zero; for ix = 1 to 81; possArr = cellPoss (ix); iy = possCount (ix); if iy > 1 and iy < lowestSoFar; lowestSoFar = iy; leastFree=ix; if lowestSoFar = 2; leave; endif; endif; endfor; return (leastFree); /end-free p e ******************************************************* p initPoss b d initPoss pi d ix s 3i 0 /free board = *zeros; *in40 = *off; guessCount = *zero; filledCount = *zero; changeCount = *zero; possibilities = *all'1'; /end-free p e ******************************************************* p openFiles b d openFiles pi /free if mode = '0'; open sudofm; else; open sudo2fm; endif; /end-free p e ******************************************************* p CloseFiles b d CloseFiles pi /free if mode = '0'; close sudofm; else; close sudo2fm; endif; /end-free p e ******************************************************* p SwitchMode b d SwitchMode pi /free closeFiles (); if mode = '0'; mode = '1'; else; mode = '0'; endif; openFiles (); /end-free p e DDS - SUDOFM A*%%TS SD 20051107 093922 DKA00 REL-V5R3M0 5722-WDS A* Copyright (c) 2005 Dave Kahn. - All rights reserved. A* A* Redistribution and use in source and binary forms, with or without A* modification, are permitted provided that the following conditions A* are met: A* 1. Redistributions of source code must retain the above copyright A* notice, this list of conditions and the following disclaimer. A* 2. Redistributions in binary form must reproduce the above copyright A* notice, this list of conditions and the following disclaimer in the A* documentation and/or other materials provided with the distribution. A* A* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND A* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE A* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR A* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE A* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR A* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF A* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS A* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN A* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF A* THE POSSIBILITY OF SUCH DAMAGE. A*%%EC A DSPSIZ(24 80 *DS3) A CA03(03) A CA12(12) A R DTL01 A*%%TS SD 20051107 093922 DKA00 REL-V5R3M0 5722-WDS A CA05(05 'Refresh') A CA08(08 'Change Mode') A CF20(20 'Crunch') A 2 28'Dave''s Sudoku Solver' A DSPATR(HI) A R1C1 1Y 0B 4 29EDTCDE(Z) A R1C2 1Y 0B 4 31EDTCDE(Z) A R1C3 1Y 0B 4 33EDTCDE(Z) A R1C4 1Y 0B 4 36EDTCDE(Z) A R1C5 1Y 0B 4 38EDTCDE(Z) A R1C6 1Y 0B 4 40EDTCDE(Z) A R1C7 1Y 0B 4 43EDTCDE(Z) A R1C8 1Y 0B 4 45EDTCDE(Z) A R1C9 1Y 0B 4 47EDTCDE(Z) A R2C1 1Y 0B 5 29EDTCDE(Z) A R2C2 1Y 0B 5 31EDTCDE(Z) A R2C3 1Y 0B 5 33EDTCDE(Z) A R2C4 1Y 0B 5 36EDTCDE(Z) A R2C5 1Y 0B 5 38EDTCDE(Z) A R2C6 1Y 0B 5 40EDTCDE(Z) A R2C7 1Y 0B 5 43EDTCDE(Z) A R2C8 1Y 0B 5 45EDTCDE(Z) A R2C9 1Y 0B 5 47EDTCDE(Z) A R3C1 1Y 0B 6 29EDTCDE(Z) A R3C2 1Y 0B 6 31EDTCDE(Z) A R3C3 1Y 0B 6 33EDTCDE(Z) A R3C4 1Y 0B 6 36EDTCDE(Z) A R3C5 1Y 0B 6 38EDTCDE(Z) A R3C6 1Y 0B 6 40EDTCDE(Z) A R3C7 1Y 0B 6 43EDTCDE(Z) A R3C8 1Y 0B 6 45EDTCDE(Z) A R3C9 1Y 0B 6 47EDTCDE(Z) A R4C1 1Y 0B 8 29EDTCDE(Z) A R4C2 1Y 0B 8 31EDTCDE(Z) A R4C3 1Y 0B 8 33EDTCDE(Z) A R4C4 1Y 0B 8 36EDTCDE(Z) A R4C5 1Y 0B 8 38EDTCDE(Z) A R4C6 1Y 0B 8 40EDTCDE(Z) A R4C7 1Y 0B 8 43EDTCDE(Z) A R4C8 1Y 0B 8 45EDTCDE(Z) A R4C9 1Y 0B 8 47EDTCDE(Z) A R5C1 1Y 0B 9 29EDTCDE(Z) A R5C2 1Y 0B 9 31EDTCDE(Z) A R5C3 1Y 0B 9 33EDTCDE(Z) A R5C4 1Y 0B 9 36EDTCDE(Z) A R5C5 1Y 0B 9 38EDTCDE(Z) A R5C6 1Y 0B 9 40EDTCDE(Z) A R5C7 1Y 0B 9 43EDTCDE(Z) A R5C8 1Y 0B 9 45EDTCDE(Z) A R5C9 1Y 0B 9 47EDTCDE(Z) A R6C1 1Y 0B 10 29EDTCDE(Z) A R6C2 1Y 0B 10 31EDTCDE(Z) A R6C3 1Y 0B 10 33EDTCDE(Z) A R6C4 1Y 0B 10 36EDTCDE(Z) A R6C5 1Y 0B 10 38EDTCDE(Z) A R6C6 1Y 0B 10 40EDTCDE(Z) A R6C7 1Y 0B 10 43EDTCDE(Z) A R6C8 1Y 0B 10 45EDTCDE(Z) A R6C9 1Y 0B 10 47EDTCDE(Z) A R7C1 1Y 0B 12 29EDTCDE(Z) A R7C2 1Y 0B 12 31EDTCDE(Z) A R7C3 1Y 0B 12 33EDTCDE(Z) A R7C4 1Y 0B 12 36EDTCDE(Z) A R7C5 1Y 0B 12 38EDTCDE(Z) A R7C6 1Y 0B 12 40EDTCDE(Z) A R7C7 1Y 0B 12 43EDTCDE(Z) A R7C8 1Y 0B 12 45EDTCDE(Z) A R7C9 1Y 0B 12 47EDTCDE(Z) A R8C1 1Y 0B 13 29EDTCDE(Z) A R8C2 1Y 0B 13 31EDTCDE(Z) A R8C3 1Y 0B 13 33EDTCDE(Z) A R8C4 1Y 0B 13 36EDTCDE(Z) A R8C5 1Y 0B 13 38EDTCDE(Z) A R8C6 1Y 0B 13 40EDTCDE(Z) A R8C7 1Y 0B 13 43EDTCDE(Z) A R8C8 1Y 0B 13 45EDTCDE(Z) A R8C9 1Y 0B 13 47EDTCDE(Z) A R9C1 1Y 0B 14 29EDTCDE(Z) A R9C2 1Y 0B 14 31EDTCDE(Z) A R9C3 1Y 0B 14 33EDTCDE(Z) A R9C4 1Y 0B 14 36EDTCDE(Z) A R9C5 1Y 0B 14 38EDTCDE(Z) A R9C6 1Y 0B 14 40EDTCDE(Z) A R9C7 1Y 0B 14 43EDTCDE(Z) A R9C8 1Y 0B 14 45EDTCDE(Z) A R9C9 1Y 0B 14 47EDTCDE(Z) A 17 6'Percent complete. . .:' A PCTCMP 4Y 1O 17 29EDTCDE(3) A 18 6'Number of changes . .:' A NUMCHG 2Y 0O 18 29EDTCDE(3) A 18 42'Press Enter to step through' A COLOR(BLU) A 19 6'Number of guesses . .:' A NUMGES 2Y 0O 19 29EDTCDE(3) A 19 42'or select Crunch to go for it' A COLOR(BLU) A 40 21 28'***** No Solution *****' A DSPATR(HI) A 23 3'F3=Exit' A COLOR(BLU) A 23 15'F5=Refresh' A COLOR(BLU) A 23 29'F8=Change mode' A COLOR(BLU) A 23 47'F12=Cancel' A COLOR(BLU) A 23 61'F20=Crunch' A COLOR(BLU) DDS - SUDO2FM A*%%TS SD 20051107 095051 DKA00 REL-V5R3M0 5722-WDS A* Copyright (c) 2005 Dave Kahn/Gerald Magnuson. - All rights reserved. A* A* Redistribution and use in source and binary forms, with or without A* modification, are permitted provided that the following conditions A* are met: A* 1. Redistributions of source code must retain the above copyright A* notice, this list of conditions and the following disclaimer. A* 2. Redistributions in binary form must reproduce the above copyright A* notice, this list of conditions and the following disclaimer in the A* documentation and/or other materials provided with the distribution. A* A* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND A* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE A* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR A* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE A* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR A* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF A* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS A* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN A* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) A* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF A* THE POSSIBILITY OF SUCH DAMAGE. A*%%EC A DSPSIZ(27 132 *DS4) A CA03(03) A CA12(12) A R DTL01 A*%%TS SD 20051107 095051 DKA00 REL-V5R3M0 5722-WDS A CA05(05 'Refresh') A CA08(08 'Switch Mode') A CF20(20 'Crunch') A 1 50'Dave''s Sudoku Solver' A DSPATR(HI) A****** A POSSR1C1 9A O 3 6COLOR(BLU) A POSSR1C2 9A O 3 17COLOR(BLU) A POSSR1C3 9A O 3 28COLOR(BLU) A POSSR1C4 9A O 3 44COLOR(BLU) A POSSR1C5 9A O 3 55COLOR(BLU) A POSSR1C6 9A O 3 66COLOR(BLU) A POSSR1C7 9A O 3 81COLOR(BLU) A POSSR1C8 9A O 3 92COLOR(BLU) A POSSR1C9 9A O 3103COLOR(BLU) A R1C1 1Y 0B 4 10EDTCDE(Z) A R1C2 1Y 0B 4 21EDTCDE(Z) A R1C3 1Y 0B 4 32EDTCDE(Z) A R1C4 1Y 0B 4 48EDTCDE(Z) A R1C5 1Y 0B 4 59EDTCDE(Z) A R1C6 1Y 0B 4 70EDTCDE(Z) A R1C7 1Y 0B 4 85EDTCDE(Z) A R1C8 1Y 0B 4 96EDTCDE(Z) A R1C9 1Y 0B 4107EDTCDE(Z) A POSSR2C1 9A O 5 6COLOR(BLU) A POSSR2C2 9A O 5 17COLOR(BLU) A POSSR2C3 9A O 5 28COLOR(BLU) A POSSR2C4 9A O 5 44COLOR(BLU) A POSSR2C5 9A O 5 55COLOR(BLU) A POSSR2C6 9A O 5 66COLOR(BLU) A POSSR2C7 9A O 5 81COLOR(BLU) A POSSR2C8 9A O 5 92COLOR(BLU) A POSSR2C9 9A O 5103COLOR(BLU) A R2C1 1Y 0B 6 10EDTCDE(Z) A R2C2 1Y 0B 6 21EDTCDE(Z) A R2C3 1Y 0B 6 32EDTCDE(Z) A R2C4 1Y 0B 6 48EDTCDE(Z) A R2C5 1Y 0B 6 59EDTCDE(Z) A R2C6 1Y 0B 6 70EDTCDE(Z) A R2C7 1Y 0B 6 85EDTCDE(Z) A R2C8 1Y 0B 6 96EDTCDE(Z) A R2C9 1Y 0B 6107EDTCDE(Z) A POSSR3C1 9A O 7 6COLOR(BLU) A POSSR3C2 9A O 7 17COLOR(BLU) A POSSR3C3 9A O 7 28COLOR(BLU) A POSSR3C4 9A O 7 44COLOR(BLU) A POSSR3C5 9A O 7 55COLOR(BLU) A POSSR3C6 9A O 7 66COLOR(BLU) A POSSR3C7 9A O 7 81COLOR(BLU) A POSSR3C8 9A O 7 92COLOR(BLU) A POSSR3C9 9A O 7103COLOR(BLU) A R3C1 1Y 0B 8 10EDTCDE(Z) A R3C2 1Y 0B 8 21EDTCDE(Z) A R3C3 1Y 0B 8 32EDTCDE(Z) A R3C4 1Y 0B 8 48EDTCDE(Z) A R3C5 1Y 0B 8 59EDTCDE(Z) A R3C6 1Y 0B 8 70EDTCDE(Z) A R3C7 1Y 0B 8 85EDTCDE(Z) A R3C8 1Y 0B 8 96EDTCDE(Z) A R3C9 1Y 0B 8107EDTCDE(Z) A POSSR4C1 9A O 10 6COLOR(BLU) A POSSR4C2 9A O 10 17COLOR(BLU) A POSSR4C3 9A O 10 28COLOR(BLU) A POSSR4C4 9A O 10 44COLOR(BLU) A POSSR4C5 9A O 10 55COLOR(BLU) A POSSR4C6 9A O 10 66COLOR(BLU) A POSSR4C7 9A O 10 81COLOR(BLU) A POSSR4C8 9A O 10 92COLOR(BLU) A POSSR4C9 9A O 10103COLOR(BLU) A R4C1 1Y 0B 11 10EDTCDE(Z) A R4C2 1Y 0B 11 21EDTCDE(Z) A R4C3 1Y 0B 11 32EDTCDE(Z) A R4C4 1Y 0B 11 48EDTCDE(Z) A R4C5 1Y 0B 11 59EDTCDE(Z) A R4C6 1Y 0B 11 70EDTCDE(Z) A R4C7 1Y 0B 11 85EDTCDE(Z) A R4C8 1Y 0B 11 96EDTCDE(Z) A R4C9 1Y 0B 11107EDTCDE(Z) A POSSR5C1 9A O 12 6COLOR(BLU) A POSSR5C2 9A O 12 17COLOR(BLU) A POSSR5C3 9A O 12 28COLOR(BLU) A POSSR5C4 9A O 12 44COLOR(BLU) A POSSR5C5 9A O 12 55COLOR(BLU) A POSSR5C6 9A O 12 66COLOR(BLU) A POSSR5C7 9A O 12 81COLOR(BLU) A POSSR5C8 9A O 12 92COLOR(BLU) A POSSR5C9 9A O 12103COLOR(BLU) A R5C1 1Y 0B 13 10EDTCDE(Z) A R5C2 1Y 0B 13 21EDTCDE(Z) A R5C3 1Y 0B 13 32EDTCDE(Z) A R5C4 1Y 0B 13 48EDTCDE(Z) A R5C5 1Y 0B 13 59EDTCDE(Z) A R5C6 1Y 0B 13 70EDTCDE(Z) A R5C7 1Y 0B 13 85EDTCDE(Z) A R5C8 1Y 0B 13 96EDTCDE(Z) A R5C9 1Y 0B 13107EDTCDE(Z) A POSSR6C1 9A O 14 6COLOR(BLU) A POSSR6C2 9A O 14 17COLOR(BLU) A POSSR6C3 9A O 14 28COLOR(BLU) A POSSR6C4 9A O 14 44COLOR(BLU) A POSSR6C5 9A O 14 55COLOR(BLU) A POSSR6C6 9A O 14 66COLOR(BLU) A POSSR6C7 9A O 14 81COLOR(BLU) A POSSR6C8 9A O 14 92COLOR(BLU) A POSSR6C9 9A O 14103COLOR(BLU) A R6C1 1Y 0B 15 10EDTCDE(Z) A R6C2 1Y 0B 15 21EDTCDE(Z) A R6C3 1Y 0B 15 32EDTCDE(Z) A R6C4 1Y 0B 15 48EDTCDE(Z) A R6C5 1Y 0B 15 59EDTCDE(Z) A R6C6 1Y 0B 15 70EDTCDE(Z) A R6C7 1Y 0B 15 85EDTCDE(Z) A R6C8 1Y 0B 15 96EDTCDE(Z) A R6C9 1Y 0B 15107EDTCDE(Z) A POSSR7C1 9A O 17 6COLOR(BLU) A POSSR7C2 9A O 17 17COLOR(BLU) A POSSR7C3 9A O 17 28COLOR(BLU) A POSSR7C4 9A O 17 44COLOR(BLU) A POSSR7C5 9A O 17 55COLOR(BLU) A POSSR7C6 9A O 17 66COLOR(BLU) A POSSR7C7 9A O 17 81COLOR(BLU) A POSSR7C8 9A O 17 92COLOR(BLU) A POSSR7C9 9A O 17103COLOR(BLU) A R7C1 1Y 0B 18 10EDTCDE(Z) A R7C2 1Y 0B 18 21EDTCDE(Z) A R7C3 1Y 0B 18 32EDTCDE(Z) A R7C4 1Y 0B 18 48EDTCDE(Z) A R7C5 1Y 0B 18 59EDTCDE(Z) A R7C6 1Y 0B 18 70EDTCDE(Z) A R7C7 1Y 0B 18 85EDTCDE(Z) A R7C8 1Y 0B 18 96EDTCDE(Z) A R7C9 1Y 0B 18107EDTCDE(Z) A POSSR8C1 9A O 19 6COLOR(BLU) A POSSR8C2 9A O 19 17COLOR(BLU) A POSSR8C3 9A O 19 28COLOR(BLU) A POSSR8C4 9A O 19 44COLOR(BLU) A POSSR8C5 9A O 19 55COLOR(BLU) A POSSR8C6 9A O 19 66COLOR(BLU) A POSSR8C7 9A O 19 81COLOR(BLU) A POSSR8C8 9A O 19 92COLOR(BLU) A POSSR8C9 9A O 19103COLOR(BLU) A R8C1 1Y 0B 20 10EDTCDE(Z) A R8C2 1Y 0B 20 21EDTCDE(Z) A R8C3 1Y 0B 20 32EDTCDE(Z) A R8C4 1Y 0B 20 48EDTCDE(Z) A R8C5 1Y 0B 20 59EDTCDE(Z) A R8C6 1Y 0B 20 70EDTCDE(Z) A R8C7 1Y 0B 20 85EDTCDE(Z) A R8C8 1Y 0B 20 96EDTCDE(Z) A R8C9 1Y 0B 20107EDTCDE(Z) A POSSR9C1 9A O 21 6COLOR(BLU) A POSSR9C2 9A O 21 17COLOR(BLU) A POSSR9C3 9A O 21 28COLOR(BLU) A POSSR9C4 9A O 21 44COLOR(BLU) A POSSR9C5 9A O 21 55COLOR(BLU) A POSSR9C6 9A O 21 66COLOR(BLU) A POSSR9C7 9A O 21 81COLOR(BLU) A POSSR9C8 9A O 21 92COLOR(BLU) A POSSR9C9 9A O 21103COLOR(BLU) A R9C1 1Y 0B 22 10EDTCDE(Z) A R9C2 1Y 0B 22 21EDTCDE(Z) A R9C3 1Y 0B 22 32EDTCDE(Z) A R9C4 1Y 0B 22 48EDTCDE(Z) A R9C5 1Y 0B 22 59EDTCDE(Z) A R9C6 1Y 0B 22 70EDTCDE(Z) A R9C7 1Y 0B 22 85EDTCDE(Z) A R9C8 1Y 0B 22 96EDTCDE(Z) A R9C9 1Y 0B 22107EDTCDE(Z) A 24 4'Press Enter to step through' A DSPATR(HI) A COLOR(WHT) A 24 32'or select Crunch to go for it' A COLOR(WHT) A 24 70'Percent complete. . .:' A PCTCMP 4Y 1O 24 93EDTCDE(3) A 25 70'Number of changes . .:' A NUMCHG 2Y 0O 25 96EDTCDE(3) A 26 4'F3=Exit' A COLOR(BLU) A 26 13'F5=Refresh' A COLOR(BLU) A 26 25'F8=Switch Mode' A COLOR(BLU) A 26 42'F12=Cancel' A COLOR(BLU) A 26 54'F20=Crunch' A COLOR(BLU) A 26 70'Number of guesses . .:' A NUMGES 2Y 0O 26 96EDTCDE(3) A 40 27 43'***** No Solution *****' A DSPATR(HI) CMD - SUDOKU /* To create this command use */ /* */ /* CRTCMD xxxxxxxxxx/SUDOKU PGM(SUDOR) */ /* */ /* where xxxxxxxxxx is the target library. */ /* */ /* Copyright (c) 2005 Dave Kahn. - All rights reserved. */ /* */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in */ /* the documentation and/or other materials provided with the */ /* distribution. */ /* */ /* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND */ /* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE */ /* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS */ /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, */ /* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT */ /* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */ /* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */ /* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE */ /* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */ /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ CMD PROMPT('Sudoku Solver') PARM KWD(MODE) TYPE(*CHAR) LEN(1) RSTD(*YES) + DFT(0) VALUES(0 1) PROMPT('DISPLAY MODE + 0=24X80, 1=27X132')