問3解答あたり修正(途中経過のものをコピペしてた)
最初に感想とか
- id:Voluntas師匠に「是非チャレンジしてみてくださいw」と言われて安請け合い。
- うーん。問一、二と問三の難易度にかなりの差があると思われ。(問一、二 <<<<<<<< 問三)
- もしくは自分アホなのかと(ry
- こういうのやり始めるとムキになって仕事に支障が(ry
- これで問三の解答が間違っててももう知らんよ、もぉー(´・ω・`)
問一
print "".join(chr(ord(x) + 1) for x in *****)
*****の部分に適当なコードを入れてpyspaと表示されるようにせよ
問一の解答
print "".join(chr(ord(x) - 1) for x in 'pyspa') #-> oxro`
なので
print "".join(chr(ord(x) + 1) for x in 'oxro`') #-> pyspa
問二
import os print "".join(os.__doc__[x] for x in[os.__doc__.*****(x) for x in "pyspa"])
問二の解答
4つあるとのことなので
import os print "".join(os.__doc__[x] for x in[os.__doc__.find(x) for x in "pyspa"]) print "".join(os.__doc__[x] for x in[os.__doc__.index(x) for x in "pyspa"]) print "".join(os.__doc__[x] for x in[os.__doc__.rfind(x) for x in "pyspa"]) print "".join(os.__doc__[x] for x in[os.__doc__.rindex(x) for x in "pyspa"]) #-> pyspa #-> pyspa #-> pyspa #-> pyspa
一番短いのだから
import os print "".join(os.__doc__[x] for x in[os.__doc__.find(x) for x in "pyspa"]) #-> pyspa
問三
import os os.system("python -m ***** | python -c 'import sys;(lambda x=sys.stdin.read():[sys.stdout.write(x[i]) for i in [67, 12, 31, 67, 36]])()'")
問三の解答までの道程(かなり省略)
- 「python -m module」なのでモジュール名が入るはず。
- 適当にモジュール名いれて実行したら、エラーでたり・止まったり・稀に文字でたり?
- スマートな方法が思いつかなかったのでチカラ技で。
- 実行して止まったら(error?)出力結果から"pyspa"を検索、なければindex_numで次を指定してまた実行。
- MacportsでいれたPython使ってるので「path = '/opt/local/lib/python2.5'」
- 関数all_filesはPython Cookbookからそのまま流用
- 正直こんなのありえねーと思ったー。これ正解なのか?
とりあえずモジュール名からチカラ技で正解を導きだすはずのスクリプト
#!/usr/bin/env python # *-# -*- coding: utf-8 -*- import glob import os import os.path #Macportsのpythonからモジュールのパスを取得してリストに path = '/opt/local/lib/python2.5' def all_files(pattern, search_path, pathsep=os.pathsep): for path in search_path.split(pathsep): for match in glob.glob(os.path.join(path, pattern)): yield match file_path_lst = list(all_files('*.py', path)) #file_path_lstのインデックスナンバー。指定したナンバー以降を実行。 index_num = 138 for i,filepath in enumerate(file_path_lst[index_num:]): filename = os.path.basename(filepath)[:-3] print i + index_num ,filename try: os.system("python -m %s | python -c 'import sys;(lambda x=sys.stdin.read():[sys.stdout.write(x[i]) for i in [67, 12, 31, 67, 36]])()'" % filename) except: pass
こんなの出力(一部抜粋)
: 161 textwrap Traceback (most recent call last): File "", line 1, in File " ", line 1, in IndexError: string index out of range 162 this pyspa163 threading o co.164 timeit Traceback (most recent call last): File " ", line 1, in File " ", line 1, in IndexError: string index out of range 165 toaiff :
あったぁぁぁ(・∀・)b
問三の解答
import os os.system("python -m this | python -c 'import sys;(lambda x=sys.stdin.read():[sys.stdout.write(x[i]) for i in [67, 12, 31, 67, 36]])()'") #-> pyspa
っていうかthisってなんだー?
なんかスッキリしないけど出来たー━━━━(゚∀゚)━━━━ッ!!
それから(追記)
出題者から解答
- pyspa challenge1 解答編 - 西尾泰和のはてなダイアリー
- importするとZen of Pythonでてくるのかー。ソース見てもわけわかんなかった(´・ω・`)
- Zen of Python和訳すばらしい希ガス(・∀・)。
- モジュールの存在を知らない時のスマートな解決方法が知りたいなー。
挑戦者の解答
- pyspa challenge 第1回やってみた - はてブロ@ama-ch
- 解答きちんと解説してて素晴らしい。おいら勘で(ry