Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-advanced-reader.ss" "lang")((modname |32.3|) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;A solitaire board (board) is a (vectorof (vectorof booleans)), where true represents a filled square, false an empty square. In particular, for any given board, the n-th element is a vector containing n booleans. We call a triangular board with n-pegs to a side a size-n triangle. For example, the representation of a size-4 equilaterial triangular board:
5 12687dd9 2023-08-04 jrmu
6 12687dd9 2023-08-04 jrmu ;(vector (vector false)
7 12687dd9 2023-08-04 jrmu ; (vector true true)
8 12687dd9 2023-08-04 jrmu ; (vector true true true)
9 12687dd9 2023-08-04 jrmu ; (vector true true true true))
10 12687dd9 2023-08-04 jrmu
11 12687dd9 2023-08-04 jrmu ;enabled? : posn board -> boolean
12 12687dd9 2023-08-04 jrmu ;Determines whether or not the peg specified by aposn is enabled in aboard (enabled means that the peg is capable of jumping). The top position of the board has the index (make-posn 1 1). The vertical axis is denoted by y, the horizontal by x.
13 12687dd9 2023-08-04 jrmu
14 12687dd9 2023-08-04 jrmu ;next-peg-x represents the x-index where the peg will jump to if it jumps to the right
15 12687dd9 2023-08-04 jrmu ;next-peg-y represents the y-index where the peg will jump to if it jumps down
16 12687dd9 2023-08-04 jrmu ;prev-peg-x represents the x-index ... if the peg jumps to the left
17 12687dd9 2023-08-04 jrmu ;prev-peg-x represents the y-index ... if the peg jumps up
18 12687dd9 2023-08-04 jrmu ;need-length-x represents the necessary horizontal length of the board to jump to the right
19 12687dd9 2023-08-04 jrmu ;need-length-y represents the necessary vertical length of the board to jump down
20 12687dd9 2023-08-04 jrmu ;next-peg-x-removes represents the x-index of the peg that will be removed if the peg is jumped, etc.
21 12687dd9 2023-08-04 jrmu
22 12687dd9 2023-08-04 jrmu (define (enabled? aposn aboard)
23 12687dd9 2023-08-04 jrmu (local ((define peg-x (sub1 (posn-x aposn)))
24 12687dd9 2023-08-04 jrmu (define peg-y (sub1 (posn-y aposn)))
25 12687dd9 2023-08-04 jrmu (define next-peg-x-removes (+ peg-x 1))
26 12687dd9 2023-08-04 jrmu (define next-peg-y-removes (+ peg-y 1))
27 12687dd9 2023-08-04 jrmu (define prev-peg-x-removes (- peg-x 1))
28 12687dd9 2023-08-04 jrmu (define prev-peg-y-removes (- peg-y 1))
29 12687dd9 2023-08-04 jrmu (define next-peg-x (+ peg-x 2))
30 12687dd9 2023-08-04 jrmu (define next-peg-y (+ peg-y 2))
31 12687dd9 2023-08-04 jrmu (define prev-peg-x (- peg-x 2))
32 12687dd9 2023-08-04 jrmu (define prev-peg-y (- peg-y 2)))
33 12687dd9 2023-08-04 jrmu (cond
34 12687dd9 2023-08-04 jrmu ;;first, is there even a peg?
35 12687dd9 2023-08-04 jrmu ;;if so, test jump down, jump right, jump up, jump left, jump diagonal (up), jump diagonal (down), in that order
36 12687dd9 2023-08-04 jrmu [(vector-ref (vector-ref aboard peg-y) peg-x)
37 12687dd9 2023-08-04 jrmu (or (jump? peg-x next-peg-y peg-x next-peg-y-removes aboard)
38 12687dd9 2023-08-04 jrmu (jump? next-peg-x peg-y next-peg-x-removes peg-y aboard)
39 12687dd9 2023-08-04 jrmu (jump? peg-x prev-peg-y peg-x prev-peg-y-removes aboard)
40 12687dd9 2023-08-04 jrmu (jump? prev-peg-x peg-y prev-peg-x-removes peg-y aboard)
41 12687dd9 2023-08-04 jrmu (jump? prev-peg-x prev-peg-y prev-peg-x-removes prev-peg-y-removes aboard)
42 12687dd9 2023-08-04 jrmu (jump? next-peg-x next-peg-y next-peg-x-removes next-peg-y-removes aboard))]
43 12687dd9 2023-08-04 jrmu [else false])))
44 12687dd9 2023-08-04 jrmu
45 12687dd9 2023-08-04 jrmu ;jump? : N N N N board-> boolean
46 12687dd9 2023-08-04 jrmu ;Given new-peg-x, new-peg-y, remove-peg-x, remove-peg-y, and aboard, determine if it is possible to make a jump. All coordinates are in terms of vector indices. E.g, 0,0 represents the first element in the first vector.
47 12687dd9 2023-08-04 jrmu
48 12687dd9 2023-08-04 jrmu (define (jump? new-peg-x new-peg-y remove-peg-x remove-peg-y aboard)
49 12687dd9 2023-08-04 jrmu (local ((define need-length-x (add1 new-peg-x))
50 12687dd9 2023-08-04 jrmu (define need-length-y (add1 new-peg-y)))
51 12687dd9 2023-08-04 jrmu (and (not (negative? new-peg-x))
52 12687dd9 2023-08-04 jrmu (not (negative? new-peg-y))
53 12687dd9 2023-08-04 jrmu (>= (vector-length aboard) need-length-y)
54 12687dd9 2023-08-04 jrmu (>= (vector-length (vector-ref aboard new-peg-y)) need-length-x)
55 12687dd9 2023-08-04 jrmu (not (vector-ref (vector-ref aboard new-peg-y) new-peg-x))
56 12687dd9 2023-08-04 jrmu (vector-ref (vector-ref aboard remove-peg-y) remove-peg-x))))
57 12687dd9 2023-08-04 jrmu
58 12687dd9 2023-08-04 jrmu ;jump : board posn -> (listof boards)
59 12687dd9 2023-08-04 jrmu ;Given aboard and aposn,
60 12687dd9 2023-08-04 jrmu (define trueboard (list (vector (vector true)
61 12687dd9 2023-08-04 jrmu (vector true true)
62 12687dd9 2023-08-04 jrmu (vector true true true)
63 12687dd9 2023-08-04 jrmu (vector true true true true)
64 12687dd9 2023-08-04 jrmu (vector true true true true true)
65 12687dd9 2023-08-04 jrmu (vector true true true true true true)
66 12687dd9 2023-08-04 jrmu (vector true true false true true true true))
67 12687dd9 2023-08-04 jrmu (vector (vector true)
68 12687dd9 2023-08-04 jrmu (vector true true)
69 12687dd9 2023-08-04 jrmu (vector true true true)
70 12687dd9 2023-08-04 jrmu (vector true true true true)
71 12687dd9 2023-08-04 jrmu (vector true true true true false)
72 12687dd9 2023-08-04 jrmu (vector true true true true true true)
73 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
74 12687dd9 2023-08-04 jrmu (vector (vector true)
75 12687dd9 2023-08-04 jrmu (vector true true)
76 12687dd9 2023-08-04 jrmu (vector true true true)
77 12687dd9 2023-08-04 jrmu (vector true true true true)
78 12687dd9 2023-08-04 jrmu (vector false true true true true)
79 12687dd9 2023-08-04 jrmu (vector true true true true true true)
80 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
81 12687dd9 2023-08-04 jrmu (vector (vector true)
82 12687dd9 2023-08-04 jrmu (vector true true)
83 12687dd9 2023-08-04 jrmu (vector true true false)
84 12687dd9 2023-08-04 jrmu (vector true true true true)
85 12687dd9 2023-08-04 jrmu (vector true true true true true)
86 12687dd9 2023-08-04 jrmu (vector true true true true true true)
87 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
88 12687dd9 2023-08-04 jrmu (vector (vector true)
89 12687dd9 2023-08-04 jrmu (vector true true)
90 12687dd9 2023-08-04 jrmu (vector true true true)
91 12687dd9 2023-08-04 jrmu (vector true true true true)
92 12687dd9 2023-08-04 jrmu (vector true true true true true)
93 12687dd9 2023-08-04 jrmu (vector true true true true true true)
94 12687dd9 2023-08-04 jrmu (vector true true true true false true true))
95 12687dd9 2023-08-04 jrmu (vector (vector true)
96 12687dd9 2023-08-04 jrmu (vector true true)
97 12687dd9 2023-08-04 jrmu (vector false true true)
98 12687dd9 2023-08-04 jrmu (vector true true true true)
99 12687dd9 2023-08-04 jrmu (vector true true true true true)
100 12687dd9 2023-08-04 jrmu (vector true true true true true true)
101 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
102 12687dd9 2023-08-04 jrmu (vector (vector true)
103 12687dd9 2023-08-04 jrmu (vector true true)
104 12687dd9 2023-08-04 jrmu (vector false true true)
105 12687dd9 2023-08-04 jrmu (vector true false false true)
106 12687dd9 2023-08-04 jrmu (vector true false true false false)
107 12687dd9 2023-08-04 jrmu (vector true false true true true true)
108 12687dd9 2023-08-04 jrmu (vector false false true false false false true))
109 12687dd9 2023-08-04 jrmu (vector (vector true)
110 12687dd9 2023-08-04 jrmu (vector true true)
111 12687dd9 2023-08-04 jrmu (vector false true true)
112 12687dd9 2023-08-04 jrmu (vector true false false true)
113 12687dd9 2023-08-04 jrmu (vector true false true true false)
114 12687dd9 2023-08-04 jrmu (vector true true true false true true)
115 12687dd9 2023-08-04 jrmu (vector false false true false false false true))))
116 12687dd9 2023-08-04 jrmu
117 12687dd9 2023-08-04 jrmu (define falseboard (list (vector (vector true)
118 12687dd9 2023-08-04 jrmu (vector true true)
119 12687dd9 2023-08-04 jrmu (vector true true true)
120 12687dd9 2023-08-04 jrmu (vector true true true true)
121 12687dd9 2023-08-04 jrmu (vector true true false true true)
122 12687dd9 2023-08-04 jrmu (vector true true true true true true)
123 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
124 12687dd9 2023-08-04 jrmu (vector (vector true)
125 12687dd9 2023-08-04 jrmu (vector true true)
126 12687dd9 2023-08-04 jrmu (vector true true true)
127 12687dd9 2023-08-04 jrmu (vector true true true true)
128 12687dd9 2023-08-04 jrmu (vector true true false true true)
129 12687dd9 2023-08-04 jrmu (vector true true true true true true)
130 12687dd9 2023-08-04 jrmu (vector true true false true true true true))
131 12687dd9 2023-08-04 jrmu (vector (vector true)
132 12687dd9 2023-08-04 jrmu (vector true true)
133 12687dd9 2023-08-04 jrmu (vector true true true)
134 12687dd9 2023-08-04 jrmu (vector true true true true)
135 12687dd9 2023-08-04 jrmu (vector true false true true true)
136 12687dd9 2023-08-04 jrmu (vector true true true true true true)
137 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
138 12687dd9 2023-08-04 jrmu (vector (vector true)
139 12687dd9 2023-08-04 jrmu (vector true true)
140 12687dd9 2023-08-04 jrmu (vector true true true)
141 12687dd9 2023-08-04 jrmu (vector true true true true)
142 12687dd9 2023-08-04 jrmu (vector true true true true true)
143 12687dd9 2023-08-04 jrmu (vector true true true true true true)
144 12687dd9 2023-08-04 jrmu (vector true false true true true true true))
145 12687dd9 2023-08-04 jrmu (vector (vector true)
146 12687dd9 2023-08-04 jrmu (vector true true)
147 12687dd9 2023-08-04 jrmu (vector true true true)
148 12687dd9 2023-08-04 jrmu (vector true true true true)
149 12687dd9 2023-08-04 jrmu (vector true true true true true)
150 12687dd9 2023-08-04 jrmu (vector true false true true true true)
151 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
152 12687dd9 2023-08-04 jrmu (vector (vector true)
153 12687dd9 2023-08-04 jrmu (vector true true)
154 12687dd9 2023-08-04 jrmu (vector false true true)
155 12687dd9 2023-08-04 jrmu (vector true false false true)
156 12687dd9 2023-08-04 jrmu (vector true false true true true)
157 12687dd9 2023-08-04 jrmu (vector true true true true true true)
158 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
159 12687dd9 2023-08-04 jrmu (vector (vector true)
160 12687dd9 2023-08-04 jrmu (vector true true)
161 12687dd9 2023-08-04 jrmu (vector false true true)
162 12687dd9 2023-08-04 jrmu (vector true false false true)
163 12687dd9 2023-08-04 jrmu (vector true false true true true)
164 12687dd9 2023-08-04 jrmu (vector true false true true true true)
165 12687dd9 2023-08-04 jrmu (vector false false true true true true true))
166 12687dd9 2023-08-04 jrmu (vector (vector true)
167 12687dd9 2023-08-04 jrmu (vector true true)
168 12687dd9 2023-08-04 jrmu (vector false true true)
169 12687dd9 2023-08-04 jrmu (vector true false false true)
170 12687dd9 2023-08-04 jrmu (vector true false true false false)
171 12687dd9 2023-08-04 jrmu (vector true false false true true true)
172 12687dd9 2023-08-04 jrmu (vector false false true true true true true))
173 12687dd9 2023-08-04 jrmu (vector (vector true)
174 12687dd9 2023-08-04 jrmu (vector true true)
175 12687dd9 2023-08-04 jrmu (vector false true true)
176 12687dd9 2023-08-04 jrmu (vector true false false true)
177 12687dd9 2023-08-04 jrmu (vector true false true false false)
178 12687dd9 2023-08-04 jrmu (vector true false false false true true)
179 12687dd9 2023-08-04 jrmu (vector false false true false false false true))
180 12687dd9 2023-08-04 jrmu (vector (vector true)
181 12687dd9 2023-08-04 jrmu (vector true true)
182 12687dd9 2023-08-04 jrmu (vector false true true)
183 12687dd9 2023-08-04 jrmu (vector true false false true)
184 12687dd9 2023-08-04 jrmu (vector true false true false false)
185 12687dd9 2023-08-04 jrmu (vector true true false false true true)
186 12687dd9 2023-08-04 jrmu (vector false false true false false false true))))
187 12687dd9 2023-08-04 jrmu
188 12687dd9 2023-08-04 jrmu
189 12687dd9 2023-08-04 jrmu (define trueboard2 (list (vector (vector true)
190 12687dd9 2023-08-04 jrmu (vector true true)
191 12687dd9 2023-08-04 jrmu (vector true true true)
192 12687dd9 2023-08-04 jrmu (vector true true true true)
193 12687dd9 2023-08-04 jrmu (vector true true true true true)
194 12687dd9 2023-08-04 jrmu (vector true true true true true true)
195 12687dd9 2023-08-04 jrmu (vector true true false true false true true))
196 12687dd9 2023-08-04 jrmu (vector (vector true)
197 12687dd9 2023-08-04 jrmu (vector true true)
198 12687dd9 2023-08-04 jrmu (vector true true true)
199 12687dd9 2023-08-04 jrmu (vector true true true true)
200 12687dd9 2023-08-04 jrmu (vector true true true true false)
201 12687dd9 2023-08-04 jrmu (vector true true true true true true)
202 12687dd9 2023-08-04 jrmu (vector true true true true true true true))))
203 12687dd9 2023-08-04 jrmu
204 12687dd9 2023-08-04 jrmu (define trueboard3 (list (vector (vector true)
205 12687dd9 2023-08-04 jrmu (vector true true)
206 12687dd9 2023-08-04 jrmu (vector false true true)
207 12687dd9 2023-08-04 jrmu (vector true true true true)
208 12687dd9 2023-08-04 jrmu (vector true true true true true)
209 12687dd9 2023-08-04 jrmu (vector true true true true true true)
210 12687dd9 2023-08-04 jrmu (vector true true false true false true true))
211 12687dd9 2023-08-04 jrmu (vector (vector true)
212 12687dd9 2023-08-04 jrmu (vector true true)
213 12687dd9 2023-08-04 jrmu (vector true true false)
214 12687dd9 2023-08-04 jrmu (vector true true true true)
215 12687dd9 2023-08-04 jrmu (vector true true true true false)
216 12687dd9 2023-08-04 jrmu (vector true true true true true true)
217 12687dd9 2023-08-04 jrmu (vector true true true true true true true))))
218 12687dd9 2023-08-04 jrmu (define trueboard4 (list (vector (vector true)
219 12687dd9 2023-08-04 jrmu (vector true true)
220 12687dd9 2023-08-04 jrmu (vector false true true)
221 12687dd9 2023-08-04 jrmu (vector true true true true)
222 12687dd9 2023-08-04 jrmu (vector true true true true true)
223 12687dd9 2023-08-04 jrmu (vector true true true true true true)
224 12687dd9 2023-08-04 jrmu (vector true true false true false true true))
225 12687dd9 2023-08-04 jrmu (vector (vector true)
226 12687dd9 2023-08-04 jrmu (vector true true)
227 12687dd9 2023-08-04 jrmu (vector true true false)
228 12687dd9 2023-08-04 jrmu (vector true true true true)
229 12687dd9 2023-08-04 jrmu (vector false true true true false)
230 12687dd9 2023-08-04 jrmu (vector true true true true true true)
231 12687dd9 2023-08-04 jrmu (vector true true true true true true true))))
232 12687dd9 2023-08-04 jrmu
233 12687dd9 2023-08-04 jrmu (define falseboard2 (list (vector (vector true)
234 12687dd9 2023-08-04 jrmu (vector true true)
235 12687dd9 2023-08-04 jrmu (vector true true true)
236 12687dd9 2023-08-04 jrmu (vector true true true true)
237 12687dd9 2023-08-04 jrmu (vector true true false true true)
238 12687dd9 2023-08-04 jrmu (vector true true true true true true)
239 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
240 12687dd9 2023-08-04 jrmu (vector (vector true)
241 12687dd9 2023-08-04 jrmu (vector true true)
242 12687dd9 2023-08-04 jrmu (vector true true true)
243 12687dd9 2023-08-04 jrmu (vector true true true true)
244 12687dd9 2023-08-04 jrmu (vector true true false true true)
245 12687dd9 2023-08-04 jrmu (vector true true true true true true)
246 12687dd9 2023-08-04 jrmu (vector true true false true true true false))
247 12687dd9 2023-08-04 jrmu (vector (vector true)
248 12687dd9 2023-08-04 jrmu (vector true true)
249 12687dd9 2023-08-04 jrmu (vector true true true)
250 12687dd9 2023-08-04 jrmu (vector true true true true)
251 12687dd9 2023-08-04 jrmu (vector true false true true true)
252 12687dd9 2023-08-04 jrmu (vector true true true true true true)
253 12687dd9 2023-08-04 jrmu (vector true true true true true false true))
254 12687dd9 2023-08-04 jrmu (vector (vector true)
255 12687dd9 2023-08-04 jrmu (vector true true)
256 12687dd9 2023-08-04 jrmu (vector true true true)
257 12687dd9 2023-08-04 jrmu (vector true true true true)
258 12687dd9 2023-08-04 jrmu (vector true true true true true)
259 12687dd9 2023-08-04 jrmu (vector true true true true false true)
260 12687dd9 2023-08-04 jrmu (vector true false true true true true true))))
261 12687dd9 2023-08-04 jrmu (define falseboard3 (list (vector (vector true)
262 12687dd9 2023-08-04 jrmu (vector true true)
263 12687dd9 2023-08-04 jrmu (vector true true true)
264 12687dd9 2023-08-04 jrmu (vector true true true true)
265 12687dd9 2023-08-04 jrmu (vector true true false true true)
266 12687dd9 2023-08-04 jrmu (vector true true true true true true)
267 12687dd9 2023-08-04 jrmu (vector true true true true true true true))
268 12687dd9 2023-08-04 jrmu (vector (vector true)
269 12687dd9 2023-08-04 jrmu (vector true true)
270 12687dd9 2023-08-04 jrmu (vector true true true)
271 12687dd9 2023-08-04 jrmu (vector true true true true)
272 12687dd9 2023-08-04 jrmu (vector true true false true true)
273 12687dd9 2023-08-04 jrmu (vector true true true true true true)
274 12687dd9 2023-08-04 jrmu (vector true false false true true true false))
275 12687dd9 2023-08-04 jrmu (vector (vector true)
276 12687dd9 2023-08-04 jrmu (vector true true)
277 12687dd9 2023-08-04 jrmu (vector true true true)
278 12687dd9 2023-08-04 jrmu (vector true true true true)
279 12687dd9 2023-08-04 jrmu (vector false false true true true)
280 12687dd9 2023-08-04 jrmu (vector false true true true true true)
281 12687dd9 2023-08-04 jrmu (vector true true true true true false true))
282 12687dd9 2023-08-04 jrmu (vector (vector true)
283 12687dd9 2023-08-04 jrmu (vector true true)
284 12687dd9 2023-08-04 jrmu (vector true true true)
285 12687dd9 2023-08-04 jrmu (vector true true true true)
286 12687dd9 2023-08-04 jrmu (vector false true false true true)
287 12687dd9 2023-08-04 jrmu (vector false true false true false true)
288 12687dd9 2023-08-04 jrmu (vector true false false true true true true))))
289 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (enabled? (make-posn 3 5) b)) trueboard)
290 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (not (enabled? (make-posn 3 5) b))) falseboard)
291 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (enabled? (make-posn 7 7) b)) trueboard2)
292 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (enabled? (make-posn 1 1) b)) trueboard3)
293 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (enabled? (make-posn 1 7) b)) trueboard4)
294 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (not (enabled? (make-posn 7 7) b))) falseboard2)
295 12687dd9 2023-08-04 jrmu (andmap (lambda (b) (not (enabled? (make-posn 1 7) b))) falseboard3)