Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import chain
- import operator
- import random
- def missing1(a, n, seq):
- if n == 1:
- return a
- x = reduce(operator.xor, xrange(a, a + n))
- x = reduce(operator.xor, seq, x)
- return x
- def missing2(a, n, seq):
- if n == 2:
- return (a, a + 1)
- x = reduce(operator.xor, xrange(a, a + n))
- x = reduce(operator.xor, seq, x)
- h_bit = 1 << (x.bit_length() - 1)
- a1, a2 = 0, 0
- for x in xrange(a, a + n):
- if x & h_bit:
- a1 ^= x
- else:
- a2 ^= x
- for x in seq:
- if x & h_bit:
- a1 ^= x
- else:
- a2 ^= x
- if a1 > a2:
- return (a2, a1)
- return (a1, a2)
- def main():
- for _ in xrange(1000):
- n = random.randint(1, 50000)
- a = random.randint(0, 2147483647 - n + 1)
- pick = random.randint(a, a + n - 1)
- ary = range(a, pick) + range(pick + 1, a + n)
- random.shuffle(ary)
- assert missing1(a, n, ary) == pick, (a, n, pick)
- for _ in xrange(1000):
- n = random.randint(2, 50000)
- a = random.randint(0, 2147483647 - n + 1)
- pick1 = random.randint(a, a + n - 1)
- pick2 = random.randint(a, a + n - 2)
- if pick2 >= pick1:
- pick2 += 1
- else:
- pick1, pick2 = pick2, pick1
- ary = list(
- chain(xrange(a, pick1),
- xrange(pick1 + 1, pick2),
- xrange(pick2 + 1, a + n)))
- random.shuffle(ary)
- assert missing2(a, n, ary) == (pick1, pick2), ((a, n), (pick1, pick2))
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement