コメントの削除

こう、Haskell の練習というか HUnit の使い方確認というか。

import Test.HUnit

removeComment :: String -> String
removeComment = outOfComment
  where
    outOfComment ('/':'*':cs) = inComment cs
    outOfComment (c:cs) = c : outOfComment cs
    outOfComment [] = []
    inComment ('*':'/':cs) = outOfComment cs
    inComment (c:cs) = inComment cs
    inComment [] = []

testData = [ t "AAA" "AAA",
             t "AAA/*BBB*/" "AAA",
             t "AAA/*BBB" "AAA",
             t "AAA/*BBB*/CCC" "AAACCC",
             t "AAA/*BBB/*CCC*/DDD*/EEE" "AAADDD*/EEE",
             t "AAA/a//*BB*B**/CCC" "AAA/a/CCC"
           ]
  where t input expected = expected ~=? removeComment input

main :: IO Counts
main = runTestTT (test testData)

uniq

ちょいとトリッキーなのと素朴で遅い奴。

def uniq(iterable):
    """
    >>> uniq([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9])
    [3, 1, 4, 5, 9, 2, 6, 8, 7]
    """
    s = set()
    return [s.add(i) or i for i in iterable if i not in s]

def uniq2(ls):
    """
    >>> uniq2([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9])
    [3, 1, 4, 5, 9, 2, 6, 8, 7]
    """
    return [ls[i] for i in xrange(len(ls)) if ls[i] not in ls[:i]]

def _test():
    import doctest
    doctest.testmod()

if __name__ == '__main__':
    _test()

公務員と労働組合

最近、年金問題がらみで社会保険庁と一緒に自治労のことが問題になっていたりするようだ。
で、自治労というのが社会保険庁労働組合、らしいのだが、自分の理解では公務員には団結権と団体交渉権がないはずで、労働組合ってのありえないと思うのだが、このへんどうなっているんだろう。教えてえらい人。

追記

単なる自分の勘違いで、一般の(地方|国家)公務員は争議権(ストライクなどをする権利)がないだけで、団結権も団体交渉権(一部制限有り)はある。ただし、警察、消防、防衛などは団結権、団体交渉権、争議権のいずれも認められていないようだ。