Consistent quotes. I prefer doublequotes as Coffeescript assigns
them a consistent meaning. Changed the 'BINGO' algorithm to use just numeric coordinates, converting exactly once from the BINGO to 0..4. Changed the test-if-won algorithm to create scoped tests with consistent signatures. This let me catch an error I missed with the first pass.
This commit is contained in:
		
							parent
							
								
									173727ef39
								
							
						
					
					
						commit
						17c8a86bb8
					
				
							
								
								
									
										58
									
								
								bingo.coffee
								
								
								
								
							
							
						
						
									
										58
									
								
								bingo.coffee
								
								
								
								
							|  | @ -1,62 +1,60 @@ | ||||||
| #!/usr/bin/coffee | #!/usr/bin/coffee | ||||||
| 
 | 
 | ||||||
| io = require 'socket.io-client' | io = require "socket.io-client" | ||||||
| _ = require 'underscore' | _ = require "underscore" | ||||||
| 
 | 
 | ||||||
| bingo = ['B', 'I', 'N', 'G', 'O'] | bingo = ["B", "I", "N", "G", "O"] | ||||||
| state = 'lost' | coors = [0..4] | ||||||
|  | state = "lost" | ||||||
| 
 | 
 | ||||||
| snum = (n) -> if n < 10 then " #{n}" else "#{n}" | snum = (n) -> if n < 10 then " #{n}" else "#{n}" | ||||||
| fnum = (j) -> if j.found then "[" + snum(j.n) + "]" else " " + snum(j.n) + " " | fnum = (j) -> if j.found then "[#{fnum(j.n)}]" else " #{fnum(j.n)} " | ||||||
| 
 | 
 | ||||||
| socket = io.connect 'ws://yahoobingo.herokuapp.com' | socket = io.connect "ws://yahoobingo.herokuapp.com" | ||||||
| socket.on 'connect', -> | socket.on "connect", -> | ||||||
| 
 | 
 | ||||||
|     card = {} |     card = {} | ||||||
| 
 | 
 | ||||||
|     socket.on 'card', (data) -> |     socket.on "card", (data) -> | ||||||
|         for i in bingo |         card = for i in bingo | ||||||
|             card[i] = ({n: j, found: false} for j in data.slots[i]) |             ({n: j, found: false} for j in data.slots[i]) | ||||||
| 
 | 
 | ||||||
|     socket.on 'number', (ball) -> |     socket.on "number", (ball) -> | ||||||
|         m = ball.match /([BINGO])(\d+)/ |         m = ball.match /([BINGO])(\d+)/ | ||||||
|         card[m[1]] = for j in card[m[1]] |         row = bingo.indexOf(m[1]) | ||||||
|  |         card[row] = for j in card[row] | ||||||
|             if j.found or j.n != +m[2] then j else {n: j.n, found: true} |             if j.found or j.n != +m[2] then j else {n: j.n, found: true} | ||||||
| 
 | 
 | ||||||
|         may = (m, cond) -> if cond.found then m+1 else m |         may = (m, cond) -> if cond.found then m+1 else m | ||||||
| 
 | 
 | ||||||
|         f = (-> |         f = (-> | ||||||
|             for i in bingo |             for i in coors | ||||||
|                 if 5 == _.reduce card[m[1]], ((m, i) -> may m, i), 0 |                 for test in [((m, j) -> may m, card[i][j]), ((m, j) -> may m, card[j][i])] | ||||||
|  |                     if 5 == _.reduce coors, test, 0 | ||||||
|                         return true |                         return true | ||||||
| 
 | 
 | ||||||
|             for i in [0..4] |  | ||||||
|                 if 5 == _.reduce bingo, ((m, j) -> may m, card[j][i]), 0 |  | ||||||
|                     return true |  | ||||||
| 
 | 
 | ||||||
|             if 5 == _.reduce [0..4], ((m, j) -> may m, card[bingo[j]][j]), 0 |             for test in [((m, j) -> may m, card[j][j]), ((m, j) -> may m, card[j][4 - j])] | ||||||
|                 return true |                 if 5 == _.reduce coors, test, 0 | ||||||
| 
 |  | ||||||
|             if 5 == _.reduce [0..4], ((m, j) -> may m, card[bingo[j]][4 - j]), 0 |  | ||||||
|                     return true |                     return true | ||||||
| 
 | 
 | ||||||
|             false)() |             false)() | ||||||
| 
 | 
 | ||||||
|         console.log "\n\nBALL: #{ball}\n" |         console.log "\n\nBALL: #{ball}\n" | ||||||
|         for i in bingo |         for i in coors | ||||||
|             console.log(card[i].map(fnum).join(" ")) |             console.log(card[i].map(fnum).join(" ")) | ||||||
|         if f |         if f | ||||||
|             console.log "Looks like you won." |             console.log "Looks like you won." | ||||||
|             socket.emit 'bingo' |             socket.emit "bingo" | ||||||
| 
 | 
 | ||||||
|     socket.on 'win', -> state = 'won' |     socket.on "win", -> state = "won" | ||||||
|     socket.on 'lose', -> state = 'lost' |     socket.on "lose", -> state = "lost" | ||||||
| 
 | 
 | ||||||
|     socket.on 'disconnect', -> |     socket.on "disconnect", -> | ||||||
|         console.log "You appear to have #{state}." |         console.log "You appear to have #{state}." | ||||||
|         process.exit() |         process.exit() | ||||||
| 
 | 
 | ||||||
|     socket.emit 'register', |     socket.emit "register", | ||||||
|         name: 'Elf M. Sternberg' |         name: "Elf M. Sternberg" | ||||||
|         email: 'elf.sternberg@gmail.com' |         email: "elf.sternberg@gmail.com" | ||||||
|         url: 'https://github.com/elfsternberg/yahoobingo' |         url: "https://github.com/elfsternberg/yahoobingo" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue