| 12345678910111213141516171819202122232425 |
- #!/usr/bin/env python3
- def fill(seed, target):
- curve = [False] * target
- for i, bit in enumerate(seed):
- curve[i] = bit == '1'
- length = len(seed)
- while length < target:
- for i in range(max(0, length * 2 + 1 - target), length):
- curve[length * 2 - i] = not curve[i]
- length = length * 2 + 1
- return curve
- def checksum(curve):
- length = len(curve)
- while length % 2 == 0:
- for i in range(length // 2):
- curve[i] = curve[i * 2] == curve[i * 2 + 1]
- length >>= 1
- return curve[:length]
- def joinbits(curve):
- return ''.join('01'[bit] for bit in curve)
- print(joinbits(checksum(fill('01110110101001000', 272))))
- print(joinbits(checksum(fill('01110110101001000', 35651584))))
|