zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    分治与线段树
    PAT甲级 1006
    PAT甲级 1001
    单源最短路 Dijkstra
    图的邻接矩阵与邻接表
    Huffman树 建树方法代码实现
    小根堆模板类
    二叉搜索树的搜索和插入与删除算法优化
    完全二叉树模板
    二叉树模板及二叉树的无递归遍历
  • 原文地址:https://www.cnblogs.com/valaxy/p/3391097.html
Copyright © 2011-2022 走看看