User talk:Ffivaz
Appearance
Go examples/solutions
Welcome to RosettaCode and thanks for adding some missing Go example/solutions.
I made some changes to the Flipping bits game#Go that I'd thought I'd explain here FYI. Some of these are very minor and I wouldn't have bothered to change them if I wasn't already making other changes.
- Ran go fmt.
- Used <lang go> vs <lang Go>, I'm not sure if the wiki cares, but "officially" the syntax tag for Go is the former.
- Removed leading and trailing blank line from the lang block (unlike pre if you do <lang go>\npackage foo"… it leaves a blank line).
- Used the {{out}} template instead of "Example:" or "Output:".
- Since you made a type I turned several of the types into methods instead including adding a String method so that the type implements fmt.String. Since the type is an array I also made (most) of these use a *matrix rather than matrix to avoid copying the array (for small arrays of 3×3 it's a wash but for anything larger passing a reference is better IMO).
- "Fixed" setting current:
- not calling rand.Intn(100) each time through the loop
- making sure the start position is never the target position as required by the task (this is the whole reason I started making changes at all; the very first time I tried the original code it said "You won!" followed by the prompt of what to flip :))
- including row 3 and column 3 in the selection of what to randomly flip (in hind sight I should have used len(current) and len(current[0]) rather than a literal 3 here)
- not re-seeding each time randMatrix is called and removing the unnecessary call to time.UTC.
- Combined the initial and per-move printing of the boards to avoid code duplication as well as eliminating the break by moving the condition into the for loop.
- Removed use of bufio.Scanner. It's inappropriate to make a new scanner each time through the loop and ignore Scanner.Err (in particular, it's documented as "the reader may have advanced arbitrarily far past the last token."). (Using a simple fmt.Scanf still isn't great but is fine for the purpose of RosettaCode).
- Removed unnecisary braces from the switch block.
- Used range in many places instead of explicit hard coded 3. At a minimum it should have been len(m) or len(m[i]) (which for arrays is a constant and the compiler optimizes it as such) but range is more idiomatic.
- Replace conditions in flip* with the bitwise XOR assignment operator (^=) to flip the least significant bit.
Thanks again for adding the solution, don't let my changes discourage you from adding more missing solutions. —dchapes (talk | contribs) 20:26, 14 November 2014 (UTC)