fork download
  1. """
  2. プログラミングのお題スレ Part17
  3. https://m...content-available-to-author-only...h.net/test/read.cgi/tech/1584031367/
  4.  
  5. 826 名前:デフォルトの名無しさん[] 投稿日:2020/06/07(日) 00:53:20.20 ID:Trgw7Kao
  6. >>795
  7. お題:ソートされたパスの一覧を構造化して出力してください
  8. 入力:
  9. フグ亜目
  10. フグ亜目\ハリセンボン科
  11. フグ亜目\ハリセンボン科\ハリセンボン属
  12. フグ亜目\ハリセンボン科\ハリセンボン属\ハリセンボン
  13. フグ亜目\マンボウ科
  14. フグ亜目\マンボウ科\クサビフグ属
  15. フグ亜目\マンボウ科\クサビフグ属\クサビフグ
  16. フグ亜目\マンボウ科\マンボウ属
  17. フグ亜目\マンボウ科\マンボウ属\ウシマンボウ
  18. フグ亜目\マンボウ科\マンボウ属\カクレマンボウ
  19. フグ亜目\マンボウ科\マンボウ属\マンボウ
  20. フグ亜目\マンボウ科\ヤリマンボウ属
  21. フグ亜目\マンボウ科\ヤリマンボウ属\ヤリマンボウ
  22.  
  23. 出力:
  24. フグ亜目
  25.   ハリセンボン科
  26.     ハリセンボン属
  27.       ハリセンボン
  28.   マンボウ科
  29.     クサビフグ属
  30.       クサビフグ
  31.     マンボウ属
  32.       ウシマンボウ
  33.       カクレマンボウ
  34.       マンボウ
  35.     ヤリマンボウ属
  36.       ヤリマンボウ
  37. """
  38. import sys
  39.  
  40.  
  41. class Node:
  42. def __init__(self):
  43. self.name = None
  44. self.childs = []
  45.  
  46. def insert(self, toks, i=0):
  47. if i >= len(toks):
  48. return False
  49.  
  50. tok = toks[i]
  51. if self.name == tok:
  52. for child in self.childs:
  53. if child.insert(toks, i + 1):
  54. return True
  55. child = Node()
  56. self.childs.append(child)
  57. return child.insert(toks, i + 1)
  58. elif self.name is None:
  59. self.name = tok.strip()
  60. self.insert(toks, i + 1)
  61. return True
  62. else:
  63. return False
  64.  
  65. def dump(self, dep=0):
  66. if self.name:
  67. print(dep * ' ' + self.name)
  68. dep += 1
  69.  
  70. for child in self.childs:
  71. child.dump(dep)
  72.  
  73.  
  74. def main():
  75. node = Node()
  76. for line in sys.stdin.readlines():
  77. toks = line.split('\\')
  78. node.insert(toks)
  79.  
  80. node.dump()
  81.  
  82.  
  83. if __name__ == '__main__':
  84. main()
  85.  
Success #stdin #stdout 0.02s 9164KB
stdin
フグ亜目
フグ亜目\ハリセンボン科
フグ亜目\ハリセンボン科\ハリセンボン属
フグ亜目\ハリセンボン科\ハリセンボン属\ハリセンボン
フグ亜目\マンボウ科
フグ亜目\マンボウ科\クサビフグ属
フグ亜目\マンボウ科\クサビフグ属\クサビフグ
フグ亜目\マンボウ科\マンボウ属
フグ亜目\マンボウ科\マンボウ属\ウシマンボウ
フグ亜目\マンボウ科\マンボウ属\カクレマンボウ
フグ亜目\マンボウ科\マンボウ属\マンボウ
フグ亜目\マンボウ科\ヤリマンボウ属
フグ亜目\マンボウ科\ヤリマンボウ属\ヤリマンボウ
stdout
フグ亜目
    ハリセンボン科
        ハリセンボン属
            ハリセンボン
    マンボウ科
        クサビフグ属
            クサビフグ
        マンボウ属
            ウシマンボウ
            カクレマンボウ
            マンボウ
        ヤリマンボウ属
            ヤリマンボウ