Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
Cheap ruby block templating
Bindings on caller
Initial script execution very slow and skewing results
suppress ERB newlines
Keeping the database clean
Arrays, loops, strings...
Similar virtual attributes and their getters/setter
Check type is XML Serializable
Serena Collage slideshow
Shortest regular expression for matching a subdomain.
Popular
Caching Methods
How to find max, min of three numbers?
Similar virtual attributes and their getters/setter
Shortest regular expression for matching a subdomain.
Arrays, loops, strings...
Cheap ruby block templating
Check type is XML Serializable
Bindings on caller
Apache log file sorting
Tab-Switching in jQuery
Pastable version of
connect-four
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155</pre> <pre class="sunburst"><span style="color:#E28964;">class</span> <span style="text-decoration:underline;">ConnectFourBoard</span> <span style="color:#3E87E3;">AIM</span> <span style="color:#E28964;">=</span> <span style="color:#3387CC;">4</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> number of neighbouring tokens to obtain</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">initialize</span>(<span style="color:#3E87E3;">rows<span style="color:#3E87E3;">,</span>columns</span>) <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span> <span style="color:#E28964;">=</span> rows <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> number of rows</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>columns</span> <span style="color:#E28964;">=</span> columns <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> number of columns</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span> <span style="color:#E28964;">=</span> <span style="color:#9B859D;">Array</span>.<span style="color:#89BDFF;">new</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>columns</span>) <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> A player drop a token in the board at a certain position</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">drop_token</span>(<span style="color:#3E87E3;">player<span style="color:#3E87E3;">,</span>column</span>) <span style="color:#E28964;">if</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>[column] <span style="color:#E28964;">==</span> <span style="color:#3387CC;">nil</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>[column] <span style="color:#E28964;">=</span> <span style="color:#9B859D;">Array</span>.<span style="color:#89BDFF;">new</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">if</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>[column].<span style="color:#89BDFF;">length</span> <span style="color:#E28964;">==</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span> <span style="color:#E28964;">raise</span> <span style="color:#3E87E3;">RuntimeException</span> <span style="color:#E28964;">end</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>[column].<span style="color:#89BDFF;">push</span>(<span style="color:#9B859D;">Token</span>.<span style="color:#89BDFF;">new</span>(player)) <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> check the presencd of a token at a certain position in the board</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">position</span>(<span style="color:#3E87E3;">row<span style="color:#3E87E3;">,</span>column</span>) col <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>[column] <span style="color:#E28964;">if</span> <span style="color:#E28964;">!</span>col.<span style="color:#89BDFF;">nil?</span> position <span style="color:#E28964;">=</span> col[row]; <span style="color:#E28964;">else</span> <span style="color:#E28964;">return</span> <span style="color:#3387CC;">nil</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> empty board</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">reset</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">column</span>| column <span style="color:#E28964;">=</span> <span style="color:#3387CC;">nil</span> <span style="color:#E28964;">end</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span> <span style="color:#E28964;">=</span> <span style="color:#3387CC;">nil</span> <span style="color:#E28964;">initialize</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span>,<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>columns</span>) <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> check if a player has won</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">check_winner</span>(<span style="color:#3E87E3;">player</span>) win <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">vertical_count</span>(player) <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">horizontal_count</span>(player) <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">diagonal_count</span>(player) <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">back_diagonal_count</span>(player) <span style="color:#E28964;">end</span> <span style="color:#E28964;">private</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> check if there was a victory in vertical direction of board</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">vertical_count</span>(<span style="color:#3E87E3;">player</span>) win <span style="color:#E28964;">=</span> <span style="color:#3387CC;">false</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">column</span>| counter <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> <span style="color:#E28964;">if</span> column.<span style="color:#89BDFF;">nil?</span> <span style="color:#E28964;">next</span> <span style="color:#E28964;">end</span> column.<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">position</span>| counter <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">increment</span>(position,player,counter) win <span style="color:#E28964;">=</span> win <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">win</span>(counter) <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span>if won it stays won</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> win <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> return if won</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"> <span style="color:#AEAEAE;font-style:italic;">#</span> check if there was a victory in the horizontal direction of board</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">horizontal_count</span>(<span style="color:#3E87E3;">player</span>) win <span style="color:#E28964;">=</span> <span style="color:#3387CC;">false</span> (<span style="color:#3387CC;">0</span>..<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span>).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">row</span>| counter <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>.<span style="color:#89BDFF;">each_with_index</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">column</span>,<span style="color:#3E87E3;">column_index</span>| <span style="color:#E28964;">if</span> column.<span style="color:#89BDFF;">nil?</span> counter <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> <span style="color:#E28964;">end</span> position <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">position</span>(row,column_index) counter <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">increment</span>(position,player,counter) win <span style="color:#E28964;">=</span> win <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">win</span>(counter) <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> if won it stays won</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> win <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> return if won</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> back_diagonal_count counts the tokens from a same player in diagonal line</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> the "back" stands for \ (backslash) as in the direction of the diagonal</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">back_diagonal_count</span>(<span style="color:#3E87E3;">player</span>) win <span style="color:#E28964;">=</span> <span style="color:#3387CC;">false</span> (<span style="color:#3E87E3;">AIM</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span>..<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>columns</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span>).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">i</span>| counter <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> rowlimit <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span> <span style="color:#E28964;">></span> i <span style="color:#E28964;">?</span> i : <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span> (<span style="color:#3387CC;">0</span>..rowlimit).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">j</span>| position <span style="color:#E28964;">=</span> position (j,i<span style="color:#E28964;">-</span>j) counter <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">increment</span>(position,player,counter) win <span style="color:#E28964;">=</span> win <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">win</span>(counter) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> win <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> return if won</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> diagonal_count counts the tokens from a same player in diagonal line</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> the counting happens in the / direction (slash) = direction of the diagonal </span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">diagonal_count</span>(<span style="color:#3E87E3;">player</span>) win <span style="color:#E28964;">=</span> <span style="color:#3387CC;">false</span> (<span style="color:#3387CC;">0</span>..<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>columns</span><span style="color:#E28964;">-</span><span style="color:#3E87E3;">AIM</span>).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">i</span>| counter <span style="color:#E28964;">=</span> <span style="color:#3387CC;">0</span> rowlimit <span style="color:#E28964;">=</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span><span style="color:#E28964;">-</span>i (<span style="color:#3387CC;">0</span>..rowlimit).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">j</span>| position <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">position</span>(j,i<span style="color:#E28964;">+</span>j) counter <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">increment</span>(position,player,counter) win <span style="color:#E28964;">=</span> win <span style="color:#E28964;">||</span> <span style="color:#89BDFF;">win</span>(counter) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> win <span style="color:#E28964;">end</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">increment</span>(<span style="color:#3E87E3;">position<span style="color:#3E87E3;">,</span>player<span style="color:#3E87E3;">,</span>counter</span>) <span style="color:#E28964;">if</span> position <span style="color:#E28964;">&&</span> position.<span style="color:#89BDFF;">player</span> <span style="color:#E28964;">==</span> player <span style="color:#E28964;">return</span> counter.<span style="color:#89BDFF;">next</span> <span style="color:#E28964;">else</span> <span style="color:#E28964;">return</span> <span style="color:#3387CC;">0</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">win</span>(<span style="color:#3E87E3;">counter</span>) <span style="color:#E28964;">if</span> counter <span style="color:#E28964;">>=</span> <span style="color:#3E87E3;">AIM</span> <span style="color:#E28964;">return</span> <span style="color:#3387CC;">true</span> <span style="color:#E28964;">else</span> <span style="color:#E28964;">return</span> <span style="color:#3387CC;">false</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> for debugging purposes: to display the board as 0 and 1 </span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">board_debug</span> (<span style="color:#3387CC;">0</span>..<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span>).<span style="color:#89BDFF;">each</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">row</span>| <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>board</span>.<span style="color:#89BDFF;">each_with_index</span> <span style="color:#E28964;">do </span>|<span style="color:#3E87E3;">column</span>,<span style="color:#3E87E3;">index</span>| position <span style="color:#E28964;">=</span> <span style="color:#89BDFF;">position</span>(<span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>rows</span><span style="color:#E28964;">-</span><span style="color:#3387CC;">1</span><span style="color:#E28964;">-</span>row,index) <span style="color:#E28964;">if</span> position <span style="color:#89BDFF;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DAEFA3;"><span style="color:#DAEFA3;">#{</span>position<span style="color:#DAEFA3;"><span style="color:#DAEFA3;">.</span><span style="color:#89BDFF;">player</span></span><span style="color:#DAEFA3;"><span style="color:#DAEFA3;">.</span><span style="color:#89BDFF;">to_i</span></span><span style="color:#DAEFA3;">}</span></span><span style="color:#65B042;">"</span></span>) <span style="color:#E28964;">else</span> <span style="color:#89BDFF;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span> <span style="color:#65B042;">"</span></span>) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#89BDFF;">printf</span>(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\n</span><span style="color:#65B042;">"</span></span>) <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">#</span> class token in board</span> <span style="color:#E28964;">class</span> <span style="text-decoration:underline;">Token</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">initialize</span>(<span style="color:#3E87E3;">player</span>) <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>player</span> <span style="color:#E28964;">=</span> player <span style="color:#E28964;">end</span> <span style="color:#E28964;">def</span> <span style="color:#89BDFF;">player</span> <span style="color:#3E87E3;"><span style="color:#3E87E3;">@</span>player</span> <span style="color:#E28964;">end</span> <span style="color:#E28964;">end</span> </pre> </div> </div> <a href="http://refactormycode.com/codes/201-connect-four" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>