[Challenge] Cookie Monster!

L

Lee Jarvis

Perhaps this isn't the correct place for this. Although I didn't feel
it was enough of a challenge to submit to RubyQuiz.. So I apologise
for my arrogance if that isn't so.

I had this challenge from a friend some time ago and thought I would
share it with others to see how everyone else would do it as I enjoyed
it.. So here goes..

Cookie Monster is trying to walk through the Cookie Forest and consume
as many cookies as possible. However, there are many different paths
that Cookie Monster can take, and he isn't sure which way is the best
way. Help him eat as many cookies as possible by writing a program
which finds the optimal path from the upper left part of the forest to
the bottom right. Cookie Monster can only move south and east. There
are also several thorn patches through which he cannot cross. The
forest can be represented as a grid of numbers, where the number
represents the amount of cookies in that acre and -1 represents an
impassible thorn patch. An example forest is provided below:

1 3 0 5 -1 7 -1 -1 0 4 2 1
-1 3 2 1 -1 4 -1 5 3 -1 1 0
5 4 8 -1 3 2 2 -1 4 -1 0 0
2 1 0 4 1 -1 8 0 2 -1 2 5
1 4 0 1 -1 0 3 2 2 4 1 4
0 1 4 1 1 6 1 4 5 2 1 0
3 2 5 2 0 7 -1 2 1 0 -1 3
0 -1 4 -1 -1 3 5 1 4 2 1 2
5 4 8 -1 3 2 2 -1 4 -1 0 0
2 1 0 4 1 -1 8 0 2 -1 2 5
1 3 0 5 -1 7 -1 -1 0 4 2 1
0 0 3 1 5 2 1 5 4 1 3 3

Thought it might be an interesting challenge for some. I for one would
love to see different ways of solving this.. Again sorry if this
challenge doesn't fit here.

Regards,
Lee
 
J

Jesús Gabriel y Galán

Perhaps this isn't the correct place for this. Although I didn't feel
it was enough of a challenge to submit to RubyQuiz.. So I apologise
for my arrogance if that isn't so.

I think it's a perfect quiz for Ruby Quiz.

Jesus.
 
L

Lee Jarvis

Seems like a comp sci homework problem to me, as it is a classic example
of where you can use dynamic programming.  Seehttp://en.wikipedia.org/wiki/Dynamic_programming

Actually It's not homework. You don't normally get homework at my age.
Just something I thought would be interesting..
I think it's a perfect quiz for Ruby Quiz.

Ah ok, shows how wrong I was.. I'll submit something to Ruby Quiz.
Thanks.

Lee.
 
K

Kai Krakow

Seems like a comp sci homework problem to me, as it is a classic example=
wiki/Dynamic_programming

Actually It's not homework. You don't normally get homework at my age.
Just something I thought would be interesting..


Ah ok, shows how wrong I was.. I'll submit something to Ruby Quiz.
Thanks.

Shouldn't this easily and optimally solvable with Dijkstra's
algorithm:
http://en.wikipedia.org/wiki/Dijkstra's_algorithm

Dijkstra solves the problem bottom-up, solving smaller problems first
and then solve the next bigger problem. One just has to make sure to
negate the optimizer condition and to walk north and west (because
Dijkstra's algorithm returns the previous nodes of the path, not the
next nodes). This should be in sense of "dynamic programming" as
mentioned before.

Regards,
Kai
 
R

Robert Klemme

2008/5/9 Kai Krakow said:
Shouldn't this easily and optimally solvable with Dijkstra's
algorithm:
http://en.wikipedia.org/wiki/Dijkstra's_algorithm

Dijkstra solves the problem bottom-up, solving smaller problems first
and then solve the next bigger problem. One just has to make sure to
negate the optimizer condition and to walk north and west (because
Dijkstra's algorithm returns the previous nodes of the path, not the
next nodes). This should be in sense of "dynamic programming" as
mentioned before.

I did a rather straightforward backtracking implementation:

14:54:06 OZ-27759$ time /c/Temp/cookie.rb
#<struct Path
cookies=74,
coords=
[[0, 0],
[0, 1],
[1, 1],
[2, 1],
[2, 2],
[3, 2],
[4, 2],
[5, 2],
[6, 2],
[7, 2],
[8, 2],
[9, 2],
[9, 3],
[10, 3],
[11, 3],
[11, 4],
[11, 5],
[11, 6],
[11, 7],
[11, 8],
[11, 9],
[11, 10],
[11, 11]]>

real 0m0.495s
user 0m0.436s
sys 0m0.061s
14:54:33 OZ-27759$ wc /c/Temp/cookie.rb
76 295 1617 /c/Temp/cookie.rb
14:55:06 OZ-27759$

Kind regards

robert
 
Q

Quentin Sabah

Here is the result of my dynamic-programmed cookie monster:

$ time ruby challenge.rb
ESSESSSSSSESSEESEEEEEE = 74

real 0m0.022s
user 0m0.012s
sys 0m0.008s
(ibook G4)

$ wc -lc challenge.rb
50 1521 challenge.rb

Same path as in Robert's solution.

regards,
quentin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top