If the Black knight (at h4) must stay immobile and cannot be captured, how can you get the White king (at h2) to the empty f1 square by making consecutive White moves within the portion of the board shown? At any time, the White King may not move into check.
![](http://perplexus.info/images/perplexus/problem/kingf1_a.jpg)
(In reply to
Solution by Dej Mar)
:bf1:qg2:kh3:bh2:rg1:qh1:bg2:rf1:bg1:kh2:bh3:qg2:kh1:bh2:rg1:qf1:rg2:bg1:rh2:bg2:rh3:bh2:kg1:bh1:qg2:kf1
found by
Dim b$(8, 8), emptyX, emptyY, lvl, h$
Private Sub Start_Click()
emptyX = 6: emptyY = 1
b$(7, 1) = "b": b$(7, 2) = "b"
b$(8, 1) = "r": b$(8, 2) = "k": b$(8, 3) = "q"
moveIt
Print "end"
End Sub
Sub moveIt()
DoEvents
lvl = lvl + 1
If lvl = 15 Then Text1.Text = h$
If b$(6, 1) = "k" Then
Text2.Text = Text2.Text & h$ & Chr$(13) & Chr$(10): Exit Sub
End If
If lvl > 27 Then lvl = lvl - 1: Exit Sub
Select Case 10 * emptyX + emptyY
Case 61
If b$(7, 2) = "b" Or b$(7, 2) = "q" Then sendX = 7: sendY = 2: GoSub tryIt
If b$(7, 1) = "r" Or b$(7, 1) = "q" Or b$(7, 1) = "k" Then sendX = 7: sendY = 1: GoSub tryIt
Case 71
If b$(6, 1) = "r" Or b$(6, 1) = "q" Then sendX = 6: sendY = 1: GoSub tryIt
If b$(7, 2) = "r" Or b$(7, 2) = "q" Then sendX = 7: sendY = 2: GoSub tryIt
If b$(8, 1) = "r" Or b$(8, 1) = "q" Or b$(8, 1) = "k" Then sendX = 8: sendY = 1: GoSub tryIt
If b$(8, 2) = "b" Or b$(8, 2) = "q" Or b$(8, 2) = "k" Then sendX = 8: sendY = 2: GoSub tryIt
Case 72
If b$(7, 1) = "r" Or b$(7, 1) = "q" Then sendX = 7: sendY = 1: GoSub tryIt
If b$(6, 1) = "b" Or b$(6, 1) = "q" Then sendX = 6: sendY = 1: GoSub tryIt
If b$(8, 1) = "b" Or b$(8, 1) = "q" Then sendX = 8: sendY = 1: GoSub tryIt
If b$(8, 3) = "b" Or b$(8, 3) = "q" Then sendX = 8: sendY = 3: GoSub tryIt
If b$(8, 2) = "r" Or b$(8, 2) = "q" Then sendX = 8: sendY = 2: GoSub tryIt
Case 81
If b$(8, 2) = "r" Or b$(8, 2) = "q" Or b$(8, 2) = "k" Then sendX = 8: sendY = 2: GoSub tryIt
If b$(7, 1) = "r" Or b$(7, 1) = "q" Or b$(7, 1) = "k" Then sendX = 7: sendY = 1: GoSub tryIt
If b$(7, 2) = "b" Or b$(7, 2) = "q" Then sendX = 7: sendY = 2: GoSub tryIt
Case 82
If b$(8, 1) = "r" Or b$(8, 1) = "q" Or b$(8, 1) = "k" Then sendX = 8: sendY = 1: GoSub tryIt
If b$(8, 3) = "r" Or b$(8, 3) = "q" Or b$(8, 3) = "k" Then sendX = 8: sendY = 3: GoSub tryIt
If b$(7, 2) = "r" Or b$(7, 2) = "q" Then sendX = 7: sendY = 2: GoSub tryIt
If b$(7, 1) = "b" Or b$(7, 1) = "q" Or b$(7, 1) = "k" Then sendX = 7: sendY = 1: GoSub tryIt
Case 83
If b$(8, 2) = "r" Or b$(8, 2) = "q" Or b$(8, 2) = "k" Then sendX = 8: sendY = 2: GoSub tryIt
If b$(7, 2) = "b" Or b$(7, 2) = "q" Then sendX = 7: sendY = 2: GoSub tryIt
End Select
lvl = lvl - 1
Exit Sub
tryIt:
m$ = b$(sendX, sendY) + Mid$("abcdefgh", emptyX, 1) + LTrim$(Str$(emptyY))
If Right$(h$, 2) <> Mid$("abcdefgh", sendX, 1) + LTrim$(Str$(sendY)) Then
h$ = h$ + ":" + m$
saveEmptyX = emptyX: saveEmptyY = emptyY
b$(emptyX, emptyY) = b$(sendX, sendY)
b$(sendX, sendY) = ""
emptyX = sendX: emptyY = sendY
moveIt
emptyX = saveEmptyX: emptyY = saveEmptyY
b$(sendX, sendY) = b$(emptyX, emptyY)
b$(emptyX, emptyY) = ""
h$ = Left$(h$, Len(h$) - 4)
End If
Return
End Sub
Challenge:
What's the cheat in the program?
|
Posted by Charlie
on 2008-07-24 15:07:28 |