aboutsummaryrefslogtreecommitdiff
path: root/min_domino_rotation_eq_row.py
blob: 03766f443d7581ac14ec109599b4856bc2724487 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1007. Minimum Domino Rotations For Equal Row
from functools import reduce

"""
in a row of dominoes, 'tops[i]' and 'bottoms[i]' represents the top and
bottom halves of the i'th domino. we may rotate the i'th domino so that
'tops[i]' and 'bottoms[i]' swap values. return the minimum number of
rotations so that all values in 'tops' are the same, or all values in
'bottoms' are the same. if it cannot be done, return -1.
"""


class Solution(object):
    def minDominoRotations(self, tops, bottoms):
        """
        :type tops: List[int]
        :type bottoms: List[int]
        :rtype: int
        """
        s = reduce(set.__and__, (set(i) for i in zip(tops, bottoms)))
        if not s:
            return -1
        x = s.pop()
        return min(len(tops) - tops.count(x), len(bottoms) - bottoms.count(x))


if __name__ == "__main__":
    obj = Solution()
    print(obj.minDominoRotations(tops=[2, 1, 2, 4, 2, 2], bottoms=[5, 2, 6, 2, 3, 2]))
    print(obj.minDominoRotations(tops=[3, 5, 1, 2, 3], bottoms=[3, 6, 3, 3, 4]))