前回のエントリーのスクリプトがgmkzでかつ人様に迷惑をかけていたので,せめて人様に迷惑をかけない仕様に変更しました.
概要
- 突然アナグラムの文字列を送られて解読に困った時に役立つスクリプト
使い方
下記のソースコードをコピペしてanagram.pyみたいな名前で保存して,下記を実行
python anagram.py epapl
epapl may be estimated -> appel apple
注意点
- このスクリプトを実行するためには以下のモジュールのインストールが必要な可能性があります.
sudo easy_install -Z pyobjc sudo easy_install -Z pyobjc-framework-DictionaryServices
- 4文字の場合でも 4!= 24回辞書へのアクセスしてるので,長い文字列を入力すると死にたくなりますorz
前回からの変更点
- 内部辞書を参照しているのでオフライン環境でも動く
ソースコード
#!/usr/local/bin/python #coding: UTF-8from elementtree.ElementTree import * from DictionaryServices import * #import urllib import itertools import sys
def has_on_dic(word): result = DCSCopyTextDefinition(None, word, (0, len(word))) if result != None: return True else: return False
def get_word_by_numbers(word,numbers): converted_word = "" for i in numbers: converted_word += word[i] return converted_word
def main(): search_word = sys.argv[1].decode('utf-8') proposed_word = []
<span class="synStatement">for</span> c <span class="synStatement">in</span> itertools.permutations(<span class="synIdentifier">range</span>(<span class="synIdentifier">len</span>(search_word))): anagramed_word = get_word_by_numbers(search_word,c) <span class="synStatement">if</span> has_on_dic(anagramed_word ) <span class="synStatement">and</span> <span class="synStatement">not</span> anagramed_word <span class="synStatement">in</span> proposed_word: proposed_word.append(anagramed_word) <span class="synIdentifier">print</span> search_word+<span class="synConstant">" may be estimated ->"</span>, <span class="synStatement">for</span> word <span class="synStatement">in</span> proposed_word: <span class="synIdentifier">print</span> word,
if name == 'main': main()