code: def make_zigzag(points, num_cols):
      
      new_points = []
      points_size = len(points)
      forward = True
      idx = 0
      rev_idx = -1
      while idx < points_size:
          if forward:
              new_points.append(points[idx])
          else:
              new_points.append(points[rev_idx])
              rev_idx -= 1
          idx += 1
          if idx % num_cols == 0:
              forward = False if forward else True
              rev_idx = idx + num_cols - 1
  
      return new_points
docs: Converts linear sequence of points into a zig-zag shape.
  
      This function is designed to create input for the visualization software. It orders the points to draw a zig-zag
      shape which enables generating properly connected lines without any scanlines. Please see the below sketch on the
      functionality of the ``num_cols`` parameter::
  
               num cols
          <-=============->
          ------->>-------|
          |------<<-------|
          |------>>-------|
          -------<<-------|
  
      Please note that this function does not detect the ordering of the input points to detect the input points have
      already been processed to generate a zig-zag shape.
  
      :param points: list of points to be ordered
      :type points: list
      :param num_cols: number of elements in a row which the zig-zag is generated
      :type num_cols: int
      :return: re-ordered points
      :rtype: list