Based on [this kata, Connect Four.](https://www.codewars.com/kata/connect-four-1)
In this kata we play a modified game of connect four. It's connect X, and there can be multiple players.
Write the function ```whoIsWinner(moves,connect,size)```.
```2 <= connect <= 10```
```2 <= size <= 52```
Each column is identified by a character, A-Z a-z:  
``` ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ```
Moves come in the form:
```
['C_R','p_Y','s_S','I_R','Z_Y','d_S']
```
* Player R puts on C
* Player Y puts on p
* Player S puts on s
* Player R puts on I
* ...
The moves are in the order that they are played. 
The first player who connect ``` connect ``` items in same color is the winner. 
Note that a player can win before all moves are done. You should return the first winner.
If no winner is found, return "Draw".
A board with size 7, where yellow has connected 4:
All inputs are valid, no illegal moves are made.
![alt text](https://i.imgur.com/xnJEsIx.png)
columns = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

def parseMove(move):
  (loc, player) = move.split("_")
  return (columns.index(loc), player)

def placeMove(move, board):
  (loc, player) = parseMove(move)
  board[loc].append(player)

def isConnect(loc, dir, connect, board):
  count = 1
  (x,y) = loc
  player = board[x][y]

  s = 1
  isCheckForward = True
  isCheckBack = True

  while count < connect and (isCheckForward or isCheckBack):
    (sx,sy) = tuple(e * s for e in dir)
    
    if (isCheckForward and 
        x+sx < len(board) and x+sx >= 0 and 
        y+sy < len(board[x+sx]) and y+sy >= 0 and
        board[x+sx][y+sy] == player):
      count += 1
    else:
      isCheckForward = False

    if (isCheckBack and 
        x-sx >= 0 and x-sx < len(board) and
        y-sy >= 0 and y-sy < len(board[x-sx]) and
        board[x-sx][y-sy] == player):
      count += 1
    else:
      isCheckBack = False

    s += 1

  return count >= connect


def findWinner(move, connect, board):
  (x, player) = parseMove(move)
  y = len(board[x]) - 1
  loc = (x,y)

  for d in [(1,0), (0,1), (1,1), (1, -1)]:
    if isConnect(loc, d, connect, board):
      return player

  return None

def whoIsWinner(moves,connect,size):
  board = [[] for _ in range(size)]
  winner = None

  while not winner and len(moves) > 0:
    move = moves.pop(0)
    placeMove(move, board)
    winner = findWinner(move, connect, board)

  return winner if winner else "Draw"


columns = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

def parseMove(move):
  (loc, player) = move.split("_")
  return (columns.index(loc), player)

def placeMove(move, board):
  (loc, player) = parseMove(move)
  board[loc].append(player)

def isConnect(loc, dir, connect, board):
  count = 1
  (x,y) = loc
  player = board[x][y]

  s = 1
  isCheckForward = True
  isCheckBack = True

  while count < connect and (isCheckForward or isCheckBack):
    (sx,sy) = tuple(e * s for e in dir)
    
    if (isCheckForward and 
        x+sx < len(board) and x+sx >= 0 and 
        y+sy < len(board[x+sx]) and y+sy >= 0 and
        board[x+sx][y+sy] == player):
      count += 1
    else:
      isCheckForward = False

    if (isCheckBack and 
        x-sx >= 0 and x-sx < len(board) and
        y-sy >= 0 and y-sy < len(board[x-sx]) and
        board[x-sx][y-sy] == player):
      count += 1
    else:
      isCheckBack = False

    s += 1

  return count >= connect


def findWinner(move, connect, board):
  (x, player) = parseMove(move)
  y = len(board[x]) - 1
  loc = (x,y)

  for d in [(1,0), (0,1), (1,1), (1, -1)]:
    if isConnect(loc, d, connect, board):
      return player

  return None

def whoIsWinner(moves,connect,size):
  board = [[] for _ in range(size)]
  winner = None

  while not winner and len(moves) > 0:
    move = moves.pop(0)
    placeMove(move, board)
    winner = findWinner(move, connect, board)

  return winner if winner else "Draw"

