Mercurial > emacs
annotate lisp/play/mpuz.el @ 107521:54f3a4d055ee
Document font-use-system-font.
* cmdargs.texi (Font X): Move most content to Fonts.
* frames.texi (Fonts): New node. Document font-use-system-font.
* emacs.texi (Top):
* xresources.texi (Table of Resources):
* mule.texi (Defining Fontsets, Charsets): Update xrefs.
| author | Chong Yidong <cyd@stupidchicken.com> |
|---|---|
| date | Sat, 20 Mar 2010 13:24:06 -0400 |
| parents | 1d1d5d9bd884 |
| children | cc035ccb9275 376148b31b5e |
| rev | line source |
|---|---|
|
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
232
diff
changeset
|
1 ;;; mpuz.el --- multiplication puzzle for GNU Emacs |
|
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
232
diff
changeset
|
2 |
|
101004
6f10422080eb
Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
3 ;; Copyright (C) 1990, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, |
| 106815 | 4 ;; 2009, 2010 Free Software Foundation, Inc. |
| 838 | 5 |
| 19963 | 6 ;; Author: Philippe Schnoebelen <phs@lsv.ens-cachan.fr> |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
7 ;; Overhauled: Daniel Pfeiffer <occitan@esperanto.org> |
|
791
203c23c9f22c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
8 ;; Keywords: games |
|
203c23c9f22c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
9 |
| 142 | 10 ;; This file is part of GNU Emacs. |
| 11 | |
|
94675
949bd6ad1ba4
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
|
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
|
94675
949bd6ad1ba4
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
|
949bd6ad1ba4
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
15 ;; (at your option) any later version. |
| 142 | 16 |
|
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
|
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
20 ;; GNU General Public License for more details. |
|
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
21 |
|
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
4400
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
|
94675
949bd6ad1ba4
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
| 142 | 24 |
|
2308
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1217
diff
changeset
|
25 ;;; Commentary: |
|
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1217
diff
changeset
|
26 |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
27 ;; `M-x mpuz' generates a random multiplication puzzle. This is a |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
28 ;; multiplication example in which each digit has been consistently replaced |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
29 ;; with some letter. Your job is to reconstruct the original digits. Type |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
30 ;; `?' while the mode is active for detailed help. |
|
2308
f287613dfc28
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1217
diff
changeset
|
31 |
|
791
203c23c9f22c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
32 ;;; Code: |
|
203c23c9f22c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
33 |
| 21363 | 34 (defgroup mpuz nil |
| 35 "Multiplication puzzle." | |
| 36 :prefix "mpuz-" | |
| 37 :group 'games) | |
| 38 | |
| 142 | 39 (random t) ; randomize |
| 40 | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
41 (defcustom mpuz-silent 'error |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
42 "Set this to nil if you want dings on inputs. |
|
50861
0d21b78dd68e
(mpuz-silent): Don't quote nil and t in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents:
45113
diff
changeset
|
43 t means never ding, and `error' means only ding on wrong input." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
44 :type '(choice (const :tag "No" nil) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
45 (const :tag "Yes" t) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
46 (const :tag "If correct" error)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
47 :group 'mpuz) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
48 |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
49 (defcustom mpuz-solve-when-trivial t |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
50 "Solve any row that can be trivially calculated from what you've found." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
51 :type 'boolean |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
52 :group 'mpuz) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
53 |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
54 (defcustom mpuz-allow-double-multiplicator nil |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
55 "Allow 2nd factors like 33 or 77." |
| 21363 | 56 :type 'boolean |
| 57 :group 'mpuz) | |
| 142 | 58 |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
59 (defface mpuz-unsolved |
|
43825
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
60 '((((class color)) (:foreground "red1" :bold t)) |
|
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
61 (t (:bold t))) |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
62 "Face to use for letters to be solved." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
63 :group 'mpuz) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
64 |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
65 (defface mpuz-solved |
|
43825
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
66 '((((class color)) (:foreground "green1" :bold t)) |
|
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
67 (t (:bold t))) |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
68 "Face to use for solved digits." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
69 :group 'mpuz) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
70 |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
71 (defface mpuz-trivial |
|
43825
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
72 '((((class color)) (:foreground "blue" :bold t)) |
|
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
73 (t (:bold t))) |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
74 "Face to use for trivial digits solved for you." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
75 :group 'mpuz) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
76 |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
77 (defface mpuz-text |
|
43825
5f6458644514
Use defface instead of facemenu-get-face.
Eli Zaretskii <eliz@gnu.org>
parents:
43770
diff
changeset
|
78 '((t (:inherit variable-pitch))) |
|
104848
1382a0cd8022
Remove leading * from defcustom and defface docs.
Glenn Morris <rgm@gnu.org>
parents:
104390
diff
changeset
|
79 "Face to use for text on right." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
80 :group 'mpuz) |
| 142 | 81 |
| 82 | |
| 83 ;; Mpuz mode and keymaps | |
| 84 ;;---------------------- | |
| 21363 | 85 (defcustom mpuz-mode-hook nil |
| 86 "Hook to run upon entry to mpuz." | |
| 87 :type 'hook | |
| 88 :group 'mpuz) | |
| 142 | 89 |
| 90 (defvar mpuz-mode-map nil | |
| 91 "Local keymap to use in Mult Puzzle.") | |
| 92 | |
| 93 (if mpuz-mode-map nil | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
94 (setq mpuz-mode-map (make-sparse-keymap)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
95 (define-key mpuz-mode-map "a" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
96 (define-key mpuz-mode-map "b" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
97 (define-key mpuz-mode-map "c" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
98 (define-key mpuz-mode-map "d" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
99 (define-key mpuz-mode-map "e" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
100 (define-key mpuz-mode-map "f" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
101 (define-key mpuz-mode-map "g" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
102 (define-key mpuz-mode-map "h" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
103 (define-key mpuz-mode-map "i" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
104 (define-key mpuz-mode-map "j" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
105 (define-key mpuz-mode-map "A" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
106 (define-key mpuz-mode-map "B" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
107 (define-key mpuz-mode-map "C" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
108 (define-key mpuz-mode-map "D" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
109 (define-key mpuz-mode-map "E" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
110 (define-key mpuz-mode-map "F" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
111 (define-key mpuz-mode-map "G" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
112 (define-key mpuz-mode-map "H" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
113 (define-key mpuz-mode-map "I" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
114 (define-key mpuz-mode-map "J" 'mpuz-try-letter) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
115 (define-key mpuz-mode-map "\C-g" 'mpuz-offer-abort) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
116 (define-key mpuz-mode-map "?" 'describe-mode)) |
| 142 | 117 |
| 118 (defun mpuz-mode () | |
|
1217
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
119 "Multiplication puzzle mode. |
| 142 | 120 |
| 232 | 121 You have to guess which letters stand for which digits in the |
|
1217
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
122 multiplication displayed inside the `*Mult Puzzle*' buffer. |
| 142 | 123 |
|
1217
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
124 You may enter a guess for a letter's value by typing first the letter, |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
125 then the digit. Thus, to guess that A=3, type `A 3'. |
| 142 | 126 |
|
1217
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
127 To leave the game to do other editing work, just switch buffers. |
|
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
128 Then you may resume the game with M-x mpuz. |
|
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
129 You may abort a game by typing \\<mpuz-mode-map>\\[mpuz-offer-abort]." |
| 142 | 130 (interactive) |
| 62770 | 131 (kill-all-local-variables) |
| 142 | 132 (setq major-mode 'mpuz-mode |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
133 mode-name "Mult Puzzle" |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
134 tab-width 30) |
| 142 | 135 (use-local-map mpuz-mode-map) |
| 62770 | 136 (run-mode-hooks 'mpuz-mode-hook)) |
| 142 | 137 |
| 138 | |
| 139 ;; Some variables for statistics | |
| 140 ;;------------------------------ | |
| 141 (defvar mpuz-nb-errors 0 | |
| 232 | 142 "Number of errors made in current game.") |
| 142 | 143 |
| 144 (defvar mpuz-nb-completed-games 0 | |
| 232 | 145 "Number of games completed.") |
| 142 | 146 |
| 147 (defvar mpuz-nb-cumulated-errors 0 | |
| 148 "Number of errors made in previous games.") | |
| 149 | |
| 150 | |
| 151 ;; Some variables for game tracking | |
| 152 ;;--------------------------------- | |
| 153 (defvar mpuz-in-progress nil | |
| 154 "True if a game is currently in progress.") | |
| 155 | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
156 (defvar mpuz-found-digits (make-bool-vector 10 nil) |
| 142 | 157 "A vector recording which digits have been decrypted.") |
| 158 | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
159 (defvar mpuz-trivial-digits (make-bool-vector 10 nil) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
160 "A vector recording which digits have been solved for you.") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
161 |
| 142 | 162 (defmacro mpuz-digit-solved-p (digit) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
163 `(or (aref mpuz-found-digits ,digit) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
164 (aref mpuz-trivial-digits ,digit))) |
| 142 | 165 |
| 166 | |
| 167 ;; A puzzle uses a permutation of [0..9] into itself. | |
| 168 ;; We use both the permutation and its inverse. | |
| 169 ;;--------------------------------------------------- | |
| 170 (defvar mpuz-digit-to-letter (make-vector 10 0) | |
| 171 "A permutation from [0..9] to [0..9].") | |
| 172 | |
| 173 (defvar mpuz-letter-to-digit (make-vector 10 0) | |
| 174 "The inverse of mpuz-digit-to-letter.") | |
| 175 | |
| 176 (defmacro mpuz-to-digit (letter) | |
| 177 (list 'aref 'mpuz-letter-to-digit letter)) | |
| 178 | |
| 179 (defmacro mpuz-to-letter (digit) | |
| 180 (list 'aref 'mpuz-digit-to-letter digit)) | |
| 181 | |
| 182 (defun mpuz-build-random-perm () | |
| 183 "Initialize puzzle coding with a random permutation." | |
| 184 (let ((letters (list 0 1 2 3 4 5 6 7 8 9)) ; new cons cells, because of delq | |
| 185 (index 10) | |
| 186 elem) | |
| 187 (while letters | |
| 4400 | 188 (setq elem (nth (random index) letters) |
| 142 | 189 letters (delq elem letters) |
| 190 index (1- index)) | |
| 191 (aset mpuz-digit-to-letter index elem) | |
| 192 (aset mpuz-letter-to-digit elem index)))) | |
| 193 | |
| 194 | |
|
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2451
diff
changeset
|
195 ;; A puzzle also uses a board displaying a multiplication. |
| 142 | 196 ;; Every digit appears in the board, crypted or not. |
| 197 ;;------------------------------------------------------ | |
| 198 (defvar mpuz-board (make-vector 10 nil) | |
|
4345
49e68bc65e26
* mpuz.el (mpuz-board): Doc fix.
Jim Blandy <jimb@redhat.com>
parents:
3591
diff
changeset
|
199 "The board associates to any digit the list of squares where it appears.") |
| 142 | 200 |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
201 (defun mpuz-put-number-on-board (number row &rest l) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
202 "Put (last digit of) NUMBER on ROW and COLUMNS of the puzzle board." |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
203 (let (digit) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
204 (while l |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
205 (setq digit (% number 10) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
206 number (/ number 10)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
207 (aset mpuz-board digit `((,row . ,(car l)) ,@(aref mpuz-board digit))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
208 (setq l (cdr l))))) |
| 142 | 209 |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
210 (defun mpuz-check-all-solved (&optional row col) |
| 142 | 211 "Check whether all digits have been solved. Return t if yes." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
212 (catch 'solved |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
213 (let (A B1 B2 C D E squares) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
214 (and mpuz-solve-when-trivial |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
215 (not row) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
216 (while |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
217 (cond ((or (and (setq B1 (or B1 (mpuz-check-all-solved 4 7)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
218 B2 (or B2 (mpuz-check-all-solved 4 9)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
219 E (or E (mpuz-check-all-solved 10)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
220 A (or A (mpuz-check-all-solved 2))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
221 B1 B2) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
222 (and E (or A (and B1 B2)))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
223 (mpuz-solve) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
224 (mpuz-paint-board) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
225 (throw 'solved t)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
226 ((and (setq D (or D (mpuz-check-all-solved 8)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
227 C (or C (mpuz-check-all-solved 6))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
228 D (not E)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
229 (mpuz-solve 10)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
230 ((and E (not (eq C D))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
231 (mpuz-solve (if D 6 8))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
232 ((and A (not (eq B2 C))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
233 (mpuz-solve (if C 4 6) (if C 9))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
234 ((and A (not (eq B1 D))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
235 (mpuz-solve (if D 4 8) (if D 7))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
236 ((and (not A) (or (and B2 C) (and B1 D))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
237 (mpuz-solve 2))))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
238 (mpuz-paint-board) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
239 (mapc (lambda (digit) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
240 (and (not (mpuz-digit-solved-p digit)) ; unsolved |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
241 (setq squares (aref mpuz-board digit)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
242 (if row |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
243 (if col |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
244 (member (cons row col) squares) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
245 (assq row squares)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
246 squares) ; and appearing in the puzzle! |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
247 (throw 'solved nil))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
248 [0 1 2 3 4 5 6 7 8 9])) |
| 142 | 249 t)) |
| 250 | |
| 251 | |
| 252 ;; To build a puzzle, we take two random numbers and multiply them. | |
| 253 ;; We also take a random permutation for encryption. | |
| 254 ;; The random numbers are only use to see which digit appears in which square | |
| 255 ;; of the board. Everything is stored in individual squares. | |
| 256 ;;--------------------------------------------------------------------------- | |
| 257 (defun mpuz-random-puzzle () | |
| 258 "Draw random values to be multiplied in a puzzle." | |
| 259 (mpuz-build-random-perm) | |
| 260 (fillarray mpuz-board nil) ; erase the board | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
261 ;; A,B,C,D & E, are the five rows of our multiplication. |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
262 ;; Choose random values, discarding cases with leading zeros in C or D. |
|
75669
6986faa706ca
(mpuz-random-puzzle): Fix potential lockup when
David Kastrup <dak@gnu.org>
parents:
75347
diff
changeset
|
263 (let* ((A (if mpuz-allow-double-multiplicator (+ 112 (random 888)) |
|
6986faa706ca
(mpuz-random-puzzle): Fix potential lockup when
David Kastrup <dak@gnu.org>
parents:
75347
diff
changeset
|
264 (+ 125 (random 875)))) |
|
6986faa706ca
(mpuz-random-puzzle): Fix potential lockup when
David Kastrup <dak@gnu.org>
parents:
75347
diff
changeset
|
265 (min (1+ (/ 999 A))) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
266 (B1 (+ min (random (- 10 min)))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
267 B2 C D E) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
268 (while (if (= B1 (setq B2 (+ min (random (- 10 min))))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
269 (not mpuz-allow-double-multiplicator))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
270 (setq C (* A B2) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
271 D (* A B1) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
272 E (+ C (* D 10))) |
| 14040 | 273 ;; Individual digits are now put on their respective squares. |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
274 ;; [NB: A square is a pair (row . column) of the screen.] |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
275 (mpuz-put-number-on-board A 2 9 7 5) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
276 (mpuz-put-number-on-board (+ (* B1 10) B2) 4 9 7) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
277 (mpuz-put-number-on-board C 6 9 7 5 3) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
278 (mpuz-put-number-on-board D 8 7 5 3 1) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
279 (mpuz-put-number-on-board E 10 9 7 5 3 1))) |
| 142 | 280 |
| 281 ;; Display | |
| 282 ;;-------- | |
| 283 (defconst mpuz-framework | |
| 284 " | |
| 285 . . . | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
286 Number of errors (this game): 0 |
| 142 | 287 x . . |
| 288 ------- | |
| 289 . . . . | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
290 Number of completed games: 0 |
| 142 | 291 . . . . |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
292 --------- Average number of errors: 0.00 |
| 142 | 293 . . . . ." |
| 294 "The general picture of the puzzle screen, as a string.") | |
| 295 | |
| 296 (defun mpuz-create-buffer () | |
| 297 "Create (or recreate) the puzzle buffer. Return it." | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
298 (let ((buf (get-buffer-create "*Mult Puzzle*")) |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
299 (face '(face mpuz-text)) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
300 buffer-read-only) |
|
105829
328150f0cf76
* url-util.el (url-insert-entities-in-string):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104848
diff
changeset
|
301 (with-current-buffer buf |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
302 (erase-buffer) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
303 (insert mpuz-framework) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
304 (set-text-properties 13 42 face) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
305 (set-text-properties 79 105 face) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
306 (set-text-properties 128 153 face) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
307 (mpuz-paint-board) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
308 (mpuz-paint-errors) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
309 (mpuz-paint-statistics)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
310 buf)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
311 |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
312 (defun mpuz-paint-number (n &optional eol words) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
313 (end-of-line eol) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
314 (let (buffer-read-only) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
315 (delete-region (point) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
316 (progn (backward-word (or words 1)) (point))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
317 (insert n))) |
| 142 | 318 |
| 319 (defun mpuz-paint-errors () | |
| 320 "Paint error count on the puzzle screen." | |
| 321 (mpuz-switch-to-window) | |
|
104390
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
322 (goto-char (point-min)) |
|
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
323 (forward-line 2) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
324 (mpuz-paint-number (prin1-to-string mpuz-nb-errors))) |
| 142 | 325 |
| 326 (defun mpuz-paint-statistics () | |
| 327 "Paint statistics about previous games on the puzzle screen." | |
|
104390
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
328 (goto-char (point-min)) |
|
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
329 (forward-line 6) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
330 (mpuz-paint-number (prin1-to-string mpuz-nb-completed-games)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
331 (mpuz-paint-number |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
332 (format "%.2f" |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
333 (if (zerop mpuz-nb-completed-games) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
334 0 |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
335 (/ (+ 0.0 mpuz-nb-cumulated-errors) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
336 mpuz-nb-completed-games))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
337 3 2)) |
| 142 | 338 |
| 339 (defun mpuz-paint-board () | |
| 340 "Paint board situation on the puzzle screen." | |
| 341 (mpuz-switch-to-window) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
342 (mapc 'mpuz-paint-digit [0 1 2 3 4 5 6 7 8 9]) |
| 142 | 343 (goto-char (point-min))) |
| 344 | |
| 345 (defun mpuz-paint-digit (digit) | |
| 346 "Paint all occurrences of DIGIT on the puzzle board." | |
| 347 (let ((char (if (mpuz-digit-solved-p digit) | |
| 348 (+ digit ?0) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
349 (+ (mpuz-to-letter digit) ?A))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
350 (face `(face |
|
63238
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
351 ,(cond ((aref mpuz-trivial-digits digit) 'mpuz-trivial) |
|
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
352 ((aref mpuz-found-digits digit) 'mpuz-solved) |
|
5592f504d53f
Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-398
Miles Bader <miles@gnu.org>
parents:
62770
diff
changeset
|
353 ('mpuz-unsolved)))) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
354 buffer-read-only) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
355 (mapc (lambda (square) |
|
104390
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
356 (goto-char (point-min)) |
|
c6ae8d43800c
Use forward-line, not goto-line.
Glenn Morris <rgm@gnu.org>
parents:
101004
diff
changeset
|
357 (forward-line (1- (car square))) ; line before column! |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
358 (move-to-column (cdr square)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
359 (insert char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
360 (set-text-properties (1- (point)) (point) face) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
361 (delete-char 1)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
362 (aref mpuz-board digit)))) |
| 142 | 363 |
| 364 (defun mpuz-get-buffer () | |
| 365 "Get the puzzle buffer if it exists." | |
| 366 (get-buffer "*Mult Puzzle*")) | |
| 367 | |
| 368 (defun mpuz-switch-to-window () | |
| 369 "Find or create the Mult-Puzzle buffer, and display it." | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
370 (let ((buf (mpuz-get-buffer))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
371 (or buf (setq buf (mpuz-create-buffer))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
372 (switch-to-buffer buf) |
|
45113
f929d5e6ced1
(mpuz-switch-to-window): Set buffer-read-only directly.
Richard M. Stallman <rms@gnu.org>
parents:
43825
diff
changeset
|
373 (setq buffer-read-only t) |
| 142 | 374 (mpuz-mode))) |
| 375 | |
| 376 | |
| 377 ;; Game control | |
| 378 ;;------------- | |
| 379 (defun mpuz-start-new-game () | |
| 380 "Start a new puzzle." | |
| 381 (message "Here we go...") | |
| 382 (setq mpuz-nb-errors 0 | |
| 383 mpuz-in-progress t) | |
| 384 (fillarray mpuz-found-digits nil) ; initialize mpuz-found-digits | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
385 (fillarray mpuz-trivial-digits nil) |
| 142 | 386 (mpuz-random-puzzle) |
| 387 (mpuz-switch-to-window) | |
| 388 (mpuz-paint-board) | |
| 389 (mpuz-paint-errors) | |
| 390 (mpuz-ask-for-try)) | |
| 391 | |
|
1217
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
392 ;;;###autoload |
|
d0b19afef0ae
Fix setup of mpuz-read-map not to depend on keymap format.
Richard M. Stallman <rms@gnu.org>
parents:
838
diff
changeset
|
393 (defun mpuz () |
| 142 | 394 "Multiplication puzzle with GNU Emacs." |
| 395 ;; Main entry point | |
| 396 (interactive) | |
| 397 (mpuz-switch-to-window) | |
| 398 (if mpuz-in-progress | |
| 399 (mpuz-offer-abort) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
400 (mpuz-start-new-game))) |
| 142 | 401 |
| 402 (defun mpuz-offer-abort () | |
| 403 "Ask if user wants to abort current puzzle." | |
| 404 (interactive) | |
|
65689
96187e7edd1b
2005-09-25 Romain Francoise <romain@orebokech.com>
Romain Francoise <romain@orebokech.com>
parents:
64993
diff
changeset
|
405 (if (y-or-n-p "Abort game? ") |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
406 (let ((buf (mpuz-get-buffer))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
407 (message "Mult Puzzle aborted.") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
408 (setq mpuz-in-progress nil |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
409 mpuz-nb-errors 0) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
410 (fillarray mpuz-board nil) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
411 (if buf (kill-buffer buf))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
412 (mpuz-ask-for-try))) |
| 142 | 413 |
| 414 (defun mpuz-ask-for-try () | |
| 415 "Ask for user proposal in puzzle." | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
416 (message "Your try?")) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
417 |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
418 (defun mpuz-ding (error) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
419 "Dings, unless global variable `mpuz-silent' forbids it." |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
420 (cond ((eq mpuz-silent t)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
421 ((not mpuz-silent) (ding t)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
422 (error (ding t)))) |
| 142 | 423 |
| 424 (defun mpuz-try-letter () | |
| 425 "Propose a digit for a letter in puzzle." | |
| 426 (interactive) | |
| 427 (if mpuz-in-progress | |
| 428 (let (letter-char digit digit-char message) | |
|
101004
6f10422080eb
Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
429 (setq letter-char (upcase last-command-event) |
| 142 | 430 digit (mpuz-to-digit (- letter-char ?A))) |
| 431 (cond ((mpuz-digit-solved-p digit) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
432 (message "%c already solved." letter-char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
433 (mpuz-ding t)) |
| 142 | 434 ((null (aref mpuz-board digit)) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
435 (message "%c does not appear." letter-char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
436 (mpuz-ding t)) |
|
2451
a149f1464f40
(mpuz-try-letter): Use read-char to read digit.
Richard M. Stallman <rms@gnu.org>
parents:
2308
diff
changeset
|
437 ((progn (message "%c = " letter-char) |
| 142 | 438 ;; <char> has been entered. |
| 439 ;; Print "<char> =" and | |
| 440 ;; read <num> or = <num> | |
|
2451
a149f1464f40
(mpuz-try-letter): Use read-char to read digit.
Richard M. Stallman <rms@gnu.org>
parents:
2308
diff
changeset
|
441 (setq digit-char (read-char)) |
|
a149f1464f40
(mpuz-try-letter): Use read-char to read digit.
Richard M. Stallman <rms@gnu.org>
parents:
2308
diff
changeset
|
442 (if (eq digit-char ?=) |
|
a149f1464f40
(mpuz-try-letter): Use read-char to read digit.
Richard M. Stallman <rms@gnu.org>
parents:
2308
diff
changeset
|
443 (setq digit-char (read-char))) |
| 142 | 444 (or (> digit-char ?9) (< digit-char ?0))) ; bad input |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
445 (message "%c = %c" letter-char digit-char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
446 (mpuz-ding t)) |
| 142 | 447 (t |
| 448 (mpuz-try-proposal letter-char digit-char)))) | |
|
65689
96187e7edd1b
2005-09-25 Romain Francoise <romain@orebokech.com>
Romain Francoise <romain@orebokech.com>
parents:
64993
diff
changeset
|
449 (if (y-or-n-p "Start a new game? ") |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
450 (mpuz-start-new-game) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
451 (message "OK. I won't.")))) |
| 142 | 452 |
| 453 (defun mpuz-try-proposal (letter-char digit-char) | |
| 454 "Propose LETTER-CHAR as code for DIGIT-CHAR." | |
| 455 (let* ((letter (- letter-char ?A)) | |
| 456 (digit (- digit-char ?0)) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
457 (correct-digit (mpuz-to-digit letter)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
458 (game mpuz-nb-completed-games)) |
| 142 | 459 (cond ((mpuz-digit-solved-p correct-digit) |
|
24859
0291983fe62f
(mpuz-try-proposal): Fix message call.
Karl Heuer <kwzh@gnu.org>
parents:
21363
diff
changeset
|
460 (message "%c has already been found." (+ correct-digit ?0))) |
|
0291983fe62f
(mpuz-try-proposal): Fix message call.
Karl Heuer <kwzh@gnu.org>
parents:
21363
diff
changeset
|
461 ((mpuz-digit-solved-p digit) |
|
0291983fe62f
(mpuz-try-proposal): Fix message call.
Karl Heuer <kwzh@gnu.org>
parents:
21363
diff
changeset
|
462 (message "%c has already been placed." digit-char)) |
| 142 | 463 ((= digit correct-digit) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
464 (message "%c = %c correct!" letter-char digit-char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
465 (mpuz-ding nil) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
466 (aset mpuz-found-digits digit t) ; Mark digit as solved |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
467 (and (mpuz-check-all-solved) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
468 (mpuz-close-game))) |
| 142 | 469 (t ;;; incorrect guess |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
470 (message "%c = %c incorrect!" letter-char digit-char) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
471 (mpuz-ding t) |
| 142 | 472 (setq mpuz-nb-errors (1+ mpuz-nb-errors)) |
| 473 (mpuz-paint-errors))))) | |
| 474 | |
| 475 (defun mpuz-close-game () | |
| 476 "Housecleaning when puzzle has been solved." | |
| 477 (setq mpuz-in-progress nil | |
| 478 mpuz-nb-cumulated-errors (+ mpuz-nb-cumulated-errors mpuz-nb-errors) | |
| 479 mpuz-nb-completed-games (1+ mpuz-nb-completed-games)) | |
| 480 (mpuz-paint-statistics) | |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
481 (let ((message (format "Puzzle solved with %d error%s. That's %s" |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
482 mpuz-nb-errors |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
483 (if (= mpuz-nb-errors 1) "" "s") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
484 (cond ((= mpuz-nb-errors 0) "perfect!") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
485 ((= mpuz-nb-errors 1) "very good!") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
486 ((= mpuz-nb-errors 2) "good.") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
487 ((= mpuz-nb-errors 3) "not bad.") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
488 ((= mpuz-nb-errors 4) "not too bad...") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
489 ((< mpuz-nb-errors 10) "bad!") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
490 ((< mpuz-nb-errors 15) "awful.") |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
491 (t "not serious."))))) |
|
87170
e50a2e215441
* erc-stamp.el (erc-echo-timestamp):
David Kastrup <dak@gnu.org>
parents:
78227
diff
changeset
|
492 (message "%s" message) |
| 142 | 493 (sit-for 4) |
|
65689
96187e7edd1b
2005-09-25 Romain Francoise <romain@orebokech.com>
Romain Francoise <romain@orebokech.com>
parents:
64993
diff
changeset
|
494 (if (y-or-n-p (concat message " Start a new game? ")) |
| 142 | 495 (mpuz-start-new-game) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
496 (message "Good Bye!")))) |
| 142 | 497 |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
498 (defun mpuz-solve (&optional row col) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
499 "Find solution for autosolving." |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
500 (mapc (lambda (digit) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
501 (or (mpuz-digit-solved-p digit) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
502 (if row |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
503 (not (if col |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
504 (member (cons row col) (aref mpuz-board digit)) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
505 (assq row (aref mpuz-board digit))))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
506 (aset mpuz-trivial-digits digit t))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
507 [0 1 2 3 4 5 6 7 8 9]) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
508 t) |
| 142 | 509 |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
510 (defun mpuz-show-solution (row) |
| 142 | 511 "Display solution for debugging purposes." |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
512 (interactive "P") |
| 142 | 513 (mpuz-switch-to-window) |
|
43770
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
514 (mpuz-solve (if row (* 2 (prefix-numeric-value row)))) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
515 (mpuz-paint-board) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
516 (if (mpuz-check-all-solved) |
|
a6103ef77add
(mpuz-unsolved-face, mpuz-solved-face)
Eli Zaretskii <eliz@gnu.org>
parents:
42206
diff
changeset
|
517 (mpuz-close-game))) |
| 142 | 518 |
| 18383 | 519 (provide 'mpuz) |
| 520 | |
|
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
87649
diff
changeset
|
521 ;; arch-tag: 2781d6ba-89e7-43b5-85c7-5d3a2e73feb1 |
|
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
232
diff
changeset
|
522 ;;; mpuz.el ends here |
