zip

class ZIPCode:
	def __init__(self, zip):
		self._zip = zip
		self.checkRep()

	def zip(self):
		return self._zip()

	def checkRep(self):
		assert len(self.zip()) == 5
		for i in range(0, 5):
			assert '0' <= self.zip()[i] <= '9'
import re

def test(s):

	if re.search("]*>", s) >= 0:
		return "FAIL"
	else
		return "PASS"

def ddmin(s):
	assert test(s) == "FAIL"

	n = 2
	while len(s) >= 2:
		start = 0
		subset_length = len(s) / n
		some_complement_is_failing = False

		while start < len(s):
			compleent = s[:start] + [start + subset_length:]
			if test(complement) == "FAIL":
				s = complement
				n = max(n - 1, 2)
				some_complement_is_failing = True
				break

			start = start + subset_length

		if not some_complement_is_failing:
			n = min( n * 2, len(s))
			if n == len(s):
				break

	return s
import random

def fuzzer():
	string_length = int(random.random() * 1024)
	out = ""
	for i in range(0, string_length):
		c = chr(int(random.random() * 96 + 32))
		out = out + c

	return out
print fuzzer()
patches = [1, 2, 3, 4, 5, 6, 7, 8]

def test(s):
	print repr(s), len(s),
	if 3 in s and 6 in s:
		print "FAIL"
		return "FAIL"
	else:
		print "PASS"
		return "PASS"

print ddmin(patches, test)