はてブロ@ama_ch

https://twitter.com/ama_ch

すべての文字を各1回使ってできる文字列パターン

codeなにがし::すべての文字を各一回使ってできる文字列のパターン
回答者様の答え(アルゴリズム)がとても綺麗だったので、勉強がてらPythonで書いてみました。

#!usr/bin/env python
# -*- coding: utf-8 -*-

def pat(arr, level=0, base=""):
    num = len(arr)
    if num == 0:
        print base
    for i in range(num + level):
        if num > i:
            arrclone = arr.replace(arr[i], "")
            pat(arrclone, level+1, base+arr[i])

tmp = "abcdefgh"
pat(tmp)


最初は元のPHPソースをそのままPythonに置き換えてコピーしていたんですが、そうすると空文字列に対してインデックスを用いて存在を確認するという処理ができませんでした。
こんな風にエラーになります

>>> a = ""
>>> a[0] != ""  #空文字列にインデックスを指定
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> b = "abc"
>>> b[0] != ""  #空じゃないと大丈夫
True

この辺をどう直していいかわからなくて、5時間くらい格闘してた>< ばかすぎる><
最終的には空文字列に対してインデックスを指定しないように条件を考え直しただけです。


それにしても綺麗な再帰アルゴリズムだなぁ・・・こんなの僕じゃ思いつきません!
もっと綺麗な書き方もあるのかな?