SRM144 DIV1 300

一般的编程题,注意考虑边界情况和各种约束的完备性,详情见测试用例

 1 class BinaryCode:
 2 
 3     def decode(self, message):
 4         enc = [int(ch) for ch in message]
 5         return (self._decodeBy(enc,0), self._decodeBy(enc,1))
 6 
 7     def _conact(self, nlist):
 8         s = ''
 9         for i in nlist:
10             s = s + str(i)
11         return s
12 
13     def _get(self, a, i):
14         if 0 <= i < len(a):
15             return a[i]
16         else:
17             return 0
18 
19     def _decodeBy(self, enc, first):
20         ori = [first] 
21         for i in range(1, len(enc)):
22             x = enc[i-1] - self._get(ori,i-1) - self._get(ori,i-2)
23             if not x in [0, 1]:
24                 return 'NONE'
25             ori.append(x)
26 
27         if enc[-1] != self._get(ori, len(ori)-1) + self._get(ori, len(ori)-2):
28             return 'NONE'
29 
30         return self._conact(ori)
31 
32 # test
33 o = BinaryCode()
34 
35 # test: len(message) = 1
36 assert(('0', 'NONE') == o.decode("0"))
37 
38 # test: 最后一个数的推导受到2个条件的约束, 是否都进行了验证
39 assert(('NONE', 'NONE') == o.decode("112"))
40 
41 # test: 是否每个数都进行了01验证
42 assert(('NONE', 'NONE') == o.decode("932"))
43 
44 # test case
45 assert(( "011100011",  "NONE" ) == o.decode("123210122"))
46 assert(( "01",  "10" ) == o.decode("11"))
47 assert(("NONE",  "NONE") == o.decode("123210120"))
48 assert(("NONE",  "NONE") == o.decode("3"))
49 assert(("01101001101101001101001001001101001",
50   "10110010110110010110010010010110010") == o.decode("12221112222221112221111111112221111"))
View Code
原文地址:https://www.cnblogs.com/valaxy/p/3391097.html