[racket] Request feedback on a boggle solver

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Sat Sep 21 13:25:11 EDT 2013

On Sat, Sep 21, 2013 at 12:09 PM, Jingjing Duan <duanjingjing at gmail.com>wrote:

> Hi,
>
> I've been reading HTDP and I'm about half way through. To apply what I've
> learned in the book to a bigger exercise, I decided to write a boggle
> solver.
>
> You can find the code here:
> https://github.com/jduan/boggle_scheme/blob/master/boggle.rkt
>
> Any feedback is greatly appreciated. I'm specifically looking for feedback
> on:
>
> 1. Did I break the problem into right components?
> 2. How can I make the code more idiomatic?
>

If you're halfway through HtDP, you should know the value of data
definitions, contracts, and test cases.  I don't see any of those in your
program.  That makes it very hard to tell what's going on in the code, and
whether it's doing the right thing.  Adding them after the fact should
improve your code's readability.  Adding them earlier -- during the design
process of the code itself -- helps break things down into components in a
natural way.


> 3. Why is code so slow? It can take minutes to solve a 4 by 4 board. The
> same board can be solved by a ruby program I wrote in much less time, like
> a few seconds. I know recursive functions are a big reason but is there
> anything?
>

"Recursive functions" have nothing to do with the kind of slowdown you're
seeing.  Your program is simply doing too much work.  Start adding simple
test cases for your functions and you may start to get a clearer idea of
where a lot of the work is being done.  The process of adding test cases
may also suggest simpler ways to structure your program, both in terms of
making it more idiomatic and in terms of doing less work.

You might get a lot out of restarting this boggle exercise from the top
down, starting with the function find-all-words and going through the
design recipe step by step.  You may be surprised how different the result
is from what you've written, and how much more natural the solution you get
is.  In my own experience, it is also a much quicker process than taking
something written as a whole without the design steps, and trying to add
them in after the fact.

However you proceed, please feel free to share your results and any other
questions you have with the list.  We love hearing about stuff like this!

 Thanks,
> Jingjing
>

No problem.  Glad to see you're interested in HtDP and Racket!  Good luck!

--Carl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130921/cc8043a0/attachment.html>

Posted on the users mailing list.