code: def _do_action_left(self, state):
          
  
          reward = 0
  
          for row in range(4):
              # Always the rightmost tile in the current row that was already moved
              merge_candidate = -1
              merged = np.zeros((4,), dtype=np.bool)
  
              for col in range(4):
                  if state[row, col] == 0:
                      continue
  
                  if (merge_candidate != -1 and
                          not merged[merge_candidate] and
                          state[row, merge_candidate] == state[row, col]):
                      # Merge tile with merge_candidate
                      state[row, col] = 0
                      merged[merge_candidate] = True
                      state[row, merge_candidate] += 1
                      reward += 2 ** state[row, merge_candidate]
  
                  else:
                      # Move tile to the left
                      merge_candidate += 1
                      if col != merge_candidate:
                          state[row, merge_candidate] = state[row, col]
                          state[row, col] = 0
  
          return reward
docs: Executes action 'Left'.