Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^4: Challenge: Algorithm To Generate Bubble Blast 2 Puzzles With Difficulty

by MidLifeXis (Prior)
on Sep 11, 2013 at 12:42 UTC ( #1053483=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Challenge: Algorithm To Generate Bubble Blast 2 Puzzles With Difficulty
in thread Challenge: Algorithm To Generate Bubble Blast 2 Puzzles With Difficulty

It has been a number of years since I have done anything of significance in C, so some best practices may have changed, but from a quick glance, I see a couple of things:

  • If you are looping through a list of items for, say, a 0-based copy, you may get better results from something like: for (j=maxval; j; j--) {...}
  • The main function is a bit long for my tastes, although I understand that you are trying to do this for performance, so removing the function calls might make sense.
  • Some of the repeated board manipulations or constants should probably be put into macros. The loop for copying the board is used at least twice and could be macro-ized, and many of the constants are just magic numbers as I read through.

Other than that, do you have a profiler that shows any hotspots?

--MidLifeXis


Comment on Re^4: Challenge: Algorithm To Generate Bubble Blast 2 Puzzles With Difficulty
Select or Download Code
Re^5: Challenge: Algorithm To Generate Bubble Blast 2 Puzzles With Difficulty
by Limbic~Region (Chancellor) on Sep 11, 2013 at 15:54 UTC
    MidLifeXis,
    The main function is a bit long for my tastes

    I agree. It grew over time. I am also more verbose than I need to be. I am using -O3 for gcc which I believe inlines whatever it can. I am potentially considering a new direction entirely so if I touch it again, I will certainly make more use of functions.

    Some of the repeated board manipulations or constants should probably be put into macros

    Macros are incredibly powerful but if you don't code enough in C to make them second nature they can have the opposite effect as intended (making code harder to understand rather than easier). I prefer to explicitly say what I am doing when working in a language I am not comfortable in so that I understand the code when I come back to it later. As far as magic numbers - yeah. I started to make variables to give them meaning but wasn't consistent as I tried to finish the code. In a re-write I would probably have some global static variables defined outside of main.

    Other than that, do you have a profiler that shows any hotspots?

    No. I was expecting someone to look at the way I copy one array to another and say a far more efficent way of doing that was memcopy with a working example but alas, no such luck.

    Cheers - L~R

      Some of the repeated board manipulations or constants should probably be put into macros

      Macros are incredibly powerful but if you don't code enough in C to make them second nature they can have the opposite effect as intended

      Don't use macros, use functions marked inline instead:

      inline int func( int arg ) { // stuff return 1; }

      All the benefits of macros with none of the nasty side-effects or opacity.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1053483]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (6)
As of 2014-07-29 22:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (229 votes), past polls