old_contents: # Time:  O(1)
  # Space: O(1)
  
  # Given the coordinates of four points in 2D space,
  # return whether the four points could construct a square.
  #
  # The coordinate (x,y) of a point is represented by an integer array with two integers.
  #
  # Example:
  # Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
  # Output: True
  # Note:
  #
  # All the input integers are in the range [-10000, 10000].
  # A valid square has four equal sides with positive length
  # and four equal angles (90-degree angles).
  # Input points have no order.
  
  class Solution(object):
      def validSquare(self, p1, p2, p3, p4):
          """
          :type p1: List[int]
          :type p2: List[int]
          :type p3: List[int]
          :type p4: List[int]
          :rtype: bool
          """
          def dist(p1, p2):
              return (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2
  
          counter = collections.Counter([dist(p1, p2), dist(p1, p3),\
                                         dist(p1, p4), dist(p2, p3),\
                                         dist(p2, p4), dist(p3, p4)])
          return 0 not in counter and len(counter) == 2
  
new_contents: # Time:  O(1)
  # Space: O(1)
  
  # Given the coordinates of four points in 2D space,
  # return whether the four points could construct a square.
  #
  # The coordinate (x,y) of a point is represented by an integer array with two integers.
  #
  # Example:
  # Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
  # Output: True
  # Note:
  #
  # All the input integers are in the range [-10000, 10000].
  # A valid square has four equal sides with positive length
  # and four equal angles (90-degree angles).
  # Input points have no order.
  
  class Solution(object):
      def validSquare(self, p1, p2, p3, p4):
          """
          :type p1: List[int]
          :type p2: List[int]
          :type p3: List[int]
          :type p4: List[int]
          :rtype: bool
          """
          def dist(p1, p2):
              return (p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2
  
          counter = collections.Counter([dist(p1, p2), dist(p1, p3),\
                                         dist(p1, p4), dist(p2, p3),\
                                         dist(p2, p4), dist(p3, p4)])
          return counter[0] == 0 and len(counter) == 2
  
subject: Update valid-square.py