I quite appreciate the expressive power of Haskell, but of course it's
quite useless for real applications.

There's provocation for you! What I should say, is that it is too slow
for my application, which is to play the ancient game of Chu Shogi
(Middle Japanese Chess).

Anyway, a problem has turned up that causes me to pose a challenge for
computer science - to distinguish between good and bad taste. If you
can crack that with Haskell, then I shall be really impressed.
(it may be that these questions have already been solved - if so,
please point me to a source, and I'll shut up).

To fully appreciate the particular problem, then you need to learn to
play Chu Shogi (download my my program from
http://www.colina.demon.co.uk/chu.html to learn the easy way), but I
can describe the nature of the problem in general terms, as follows:

I was using the program to solve a mating problem (dated from 1746,
and previously unsolved). The program (written in C++) solved the
problem alright, (took about 12 hours on a 450MHz Pentium II), but
included a move in the solution that is considered to be bad taste.

To explain further, the convention is that the best defensive line
in a mating problem, is that which delays mate for the longest
possible number of moves. The computer is programmed to do just that. 

However, there is another convention that says you should not delay
the mate simply by interposing with a piece that can be captured, with
no other effect on the solution. This is considered bad taste.

In some cases, it is rather hard for a human (well, me anyway, and I'm
the European Champion at this game) to tell whether the interposition
and capture has any other effect or not - but in this particular case
it's very clear.

Anyway, I don't know how to go about programming this, but if anyone
is still reading:


The problem concerned can be downloaded from the same web page (from
C36.caf within the file C.zip). The solution follows (note (4)
indicates the bad taste move).


1. +DK 8h - 6f, +DH x 6f  (1)
2. Ln - 9f,     +DH x 9f  (2)
3. +DK - 6f,    +DH x 6f  (3)
4. FK - 12h,    +DH - 10f (4)
5. FK x 10f,    K - 9c
6. FK - 9e,     K - 10c
7. +P - 10d,    K - 11b
8. +P - 11c,    K - 12a
9. +P - 12b Mate in 17.

Notes:
(1) if K - 9c, then 2. FK - 9l, K - 10c 3.+P - 10d, K - 11b (or K x 10d, Ln - 11f and
       Lion Mate follows) 4. +DK - 11f, K - 12a/b/c 5. FK - 12l Mate.
    if K - 7c, then 2. +DK 5g x 5e, C x 5e (or K - 6b, 3. +DK - 5c,
                                               K - 7c (not K - 6a as 4. FK - 2e then 
Mate)
                                               4. +DK 6f - 5e, C x 5e
                                               5. FK x 5e, K - 8d
                                               6. Ln - 10f, K - 9c
                                               7. FK - 9i and Lion
                                               Mate follows very swiftly)
                    3. +DK x 5e, K - 6b (not K - 8d as 4. Ln - 10f,
                                         K - 9d 5. FK - 9l etc.)
                    4. +DK - 5c, K - 7c (if K - 6a, 5. FK - 2e and Mate)
                    5. Ln - 10f, K - 9c 6. FK - 9l, K - 10c
                    6. Ln - 11d Mate
(2) if K - 9c, then 3. Ln - 11d Mate
    if K - 7c, then 3. Ln - 9e, K - 6b 4. +DK - 5c, K - 6a
                    5. FK - 2e and Mate next move.
(3) if K - 7c, then 4. FK - 12h and Mate follows.
    if K - 9c, then 4. +DK x 9f, K - 10c (if K - 8d, then 5. +DK - 9e Mate)
                    5. +P - 10d and Mate follows simply with FK and +DK.
(4) Bad taste!                       

-- 
Colin Paul Adams
Preston Lancashire

Reply via email to