Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Try it online: https://tio.run##bVNNj9owEL3nV4zCYW0V0aq9oXLtDYlDb9sKOfFk8WJsxx9o6YrfTsdOAmm1kSJ55o3fmy@7SzxY8@22hQ3UomllXSU6fq322bGvq0qEgD6CRsMCRrblHDabYm75BH6B75DoH7y3ztsTqEiItTqAOjlLQQ79KUURlTVhCa09NcoMVlXtSE2rENk8KGtVlcQOnA1BNRr3Z6ETBub4ugKo61poPYJKq6gwQLTQaeUonVZ4SeIGHAVSeGd9gfbKSNVigeZZMC/MC7Jcg@N8CamIAPT33Hix5zz4llnmrMMduvX8iPlNDPvivyjUEmJyGllPxXWEvF@rFFCOtZEjtzljpOMy/W49Zt@Xaj7sBYDqCDc25pgZ35TPzLUSUmb1AeieXc6vH83GozjSGXXANSxI9nM@FnSc9g9BDliQGASrU24epZeMrIZpqZCF1CjH3BL6kqPHmLwBRrOhDepXLd2JbM@BuPBNtFFf7mMTHktbHcoxMRBGwjCcaQF7Dv@D2wIm@AQhnZjYbJrSObFscl/@KEfp9LTCC7DxgH6mlkx7yAtw1wOgIVQL@HnAR50qQKmN2t0BMVAj8uXoE66n1xBo21GyrqQyGjteGBeQ2wPUJWVQAhHGzI4RbPfPA5k/u@5ecN6MbjUOnnMOj29kbtQrtlGdcSKgF8I@GkhpSz6VBV7Raz1lSqrYeUVjqX@ZevVqFcnX709Pw/HIr2u4W2d@rQvNcQnnTDMVfmfj/Hb7Cw
- from itertools import permutations, combinations
- M = "abcd"
- u = 2
- P = list(permutations(M))
- def possible_values(p):
- """all possibilities to flip u cards in p"""
- for flip_indices in combinations(range(len(p)), u):
- q = list(p)
- for flip_index in flip_indices:
- q[flip_index] = _
- yield tuple(q)
- f = {}
- used_values = set()
- for p in P:
- for q in possible_values(p):
- if q not in used_values:
- used_values.add(q)
- f[p] = q
- break
- else: #for/else, not if/else
- assert False # no solution found
- def is_valid_value(p, q):
- return ( u == q.count(_) # exactly u cards are flipped
- and len(p) == len(q)
- and len(M) == u + sum(a==b for a,b in zip(p,q)) # other cards are unchanged
- )
- # The solution is valid iff these are true:
- assert sorted(f) == sorted(P) # f is defined on the set of permutations
- assert len(f) == len(set(f.values())) # f is bijective
- assert all(is_valid_value(p, q) for p, q in f.items())
- print("\n".join(f"{''.join(k)}: {''.join(v)}" for k, v in sorted(f.items())))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement