|  | @@ -54,11 +54,8 @@ type Beam struct {
 | 
	
		
			
				|  |  |  	wasHere map[Point]bool
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (b *Beam) canContinue(board [][]byte, height int, width int, pastBeams map[Point]bool) []Beam {
 | 
	
		
			
				|  |  | +func (b *Beam) directions(board [][]byte, height int, width int, pastBeams map[Point]bool) []Beam {
 | 
	
		
			
				|  |  |  	var beams []Beam
 | 
	
		
			
				|  |  | -	if b.wasHere[b.pos] || b.pos.x < 0 || b.pos.x >= width || b.pos.y < 0 || b.pos.y >= height {
 | 
	
		
			
				|  |  | -		return beams
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	switch board[b.pos.y][b.pos.x] {
 | 
	
		
			
				|  |  |  	case Horizontal:
 | 
	
	
		
			
				|  | @@ -121,18 +118,28 @@ func (b *Beam) canContinue(board [][]byte, height int, width int, pastBeams map[
 | 
	
		
			
				|  |  |  func (b *Beam) move(board [][]byte, height int, width int, pastBeams map[Point]bool) []Beam {
 | 
	
		
			
				|  |  |  	b.wasHere[b.pos] = true
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	switch b.pos.direction {
 | 
	
		
			
				|  |  | -	case North:
 | 
	
		
			
				|  |  | -		b.pos.y--
 | 
	
		
			
				|  |  | -	case South:
 | 
	
		
			
				|  |  | -		b.pos.y++
 | 
	
		
			
				|  |  | -	case East:
 | 
	
		
			
				|  |  | -		b.pos.x++
 | 
	
		
			
				|  |  | -	case West:
 | 
	
		
			
				|  |  | -		b.pos.x--
 | 
	
		
			
				|  |  | +	var beams []Beam
 | 
	
		
			
				|  |  | +	directions := b.directions(board, height, width, pastBeams)
 | 
	
		
			
				|  |  | +	for i := range directions {
 | 
	
		
			
				|  |  | +		switch directions[i].pos.direction {
 | 
	
		
			
				|  |  | +		case North:
 | 
	
		
			
				|  |  | +			directions[i].pos.y--
 | 
	
		
			
				|  |  | +		case South:
 | 
	
		
			
				|  |  | +			directions[i].pos.y++
 | 
	
		
			
				|  |  | +		case East:
 | 
	
		
			
				|  |  | +			directions[i].pos.x++
 | 
	
		
			
				|  |  | +		case West:
 | 
	
		
			
				|  |  | +			directions[i].pos.x--
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if directions[i].wasHere[directions[i].pos] || directions[i].pos.x < 0 || directions[i].pos.x >= width || directions[i].pos.y < 0 || directions[i].pos.y >= height {
 | 
	
		
			
				|  |  | +			continue
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		beams = append(beams, directions[i])
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	return b.canContinue(board, height, width, pastBeams)
 | 
	
		
			
				|  |  | +	return beams
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func emptyBoard(height int, width int) [][]byte {
 |