[racket] Request feedback on a boggle solver
Looking forward to to your followup!
Carl Eastlund
P.S. copying to the mailing list so everyone's in the loop.
On Sat, Sep 21, 2013 at 8:25 PM, Jingjing Duan <duanjingjing at gmail.com>wrote:
> Hi Carl,
>
> Thanks for your great feedback. Let me try to rewrite the code, this time
> by following the recipes from HTDP. Will send out another email once I'm
> ready!
>
> Thanks,
> Jingjing
>
>
> On Sat, Sep 21, 2013 at 10:25 AM, Carl Eastlund <cce at ccs.neu.edu> wrote:
>
>> 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/20130922/86c3e7ec/attachment-0001.html>