PythonChallenge
Python シロートなりに挑戦
Zope の中でちょこっとしかつかったことないけど、まぁ、時間かければできるかもしれないってことで
Q.0
やや?と思ったが、長整数ってことか?
さすがにすぐクリアできた
ねたばれちゅういにつきずどーんとハコを置くデス。バッチリ答が書いてありまっする
Q.1
いわゆるシーザ暗号かな?
ずらし枠をどうやってつくるかなぁ。ベタに書くとどうだ?(それしかできないくせに)
:
a="abcdefghijklmnopqrstuvwxyz"
a=a+a
def d(x, shift=2):
try:
y = a.index(x)
except:
return x
return a[y+shift]
while 1:
c = raw_input()
print str(map(d, c))
map 使って書いたら、なるほど、そういうことね。
:
import string
a="abcdefghijklmnopqrstuvwxyz"
a=a+a
shift=2
b=a[shift:]
a=a[:26]
b=b[:26]
t=string.maketrans(a,b)
while 1:
c = raw_input()
print c.translate(t)
でもういちど考えろ、と。そうくるんだ。とりあえず、もっと美しいコードにならんかな?なるうんだろうけど。
Q.2
ソースを見ろって、ぉぃ。これをどうしろと・・・
もしかして、pickle ? つかったことないや・・・
とりあえずぜんぜん違うので、ヒントにしたがって・・・ってどうする?度数分布でもつくるか?
:
#!/usr/local/bin/python
f = open("./2.dat", "r")
i = 0
j = {}
while 1:
x = f.readline()
if not x:
break
for y in list(x):
if y in j.keys():
j[y] += 1
else:
j[y] = 1
i += 1
f.close()
for x in j.keys():
print x, j[x]
って、おやぁ(笑)、そういうのあり? ::
:
#!/usr/local/bin/python
f = open("./2.dat", "r")
for x in f.readlines():
for y in list(x):
if y.isalpha():
print y
f.close()
ううむ。そういうことか・・・しかし、readlines() ってメモリどうなんだろ
Q.3
title でいきなり、アレを使えっていってるわけ
しかし、スクラッチで書いたことないから勉強になるなぁ
とりあえず、ヒント通りに書いてみる
:
#!/usr/local/bin/python
import re
f = open("./3.dat", "r")
for x in f.readlines():
for y in re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]', x):
print y
f.close()
なるほど、 () でグルーピングするとfindall の戻り値が \1 になるのね。
しないと全部くる。まぁ、次に進むとこはそれでもわかるんだけど・・・
Q.4
こんどはurllib を使えと。なるほど。よくわからんが書いてみますか。
:
#!/usr/local/bin/python
import urllib
import re
path="http://www.pythonchallenge.com/pc/def/linkedlist.php"
num = 12345
for i in range(300):
params = urllib.urlencode({'nothing': num})
f = urllib.urlopen("%s?%s" % (path,params))
x = f.read()
print i, x
old = num
for y in re.findall('([0-9]+)', x):
num = int(y)
if num == old:
try:
x.index('html')
break
except:
pass
num /= 2
とりあえず通過(^^;;
Q.5
発音せよ・・・って、どうやって(汗)。
もしかしてこんどこそ pickle ? ・・・エラーがでないんでそうらしいが・・・
:
import pickle
f = open("./5.dat", "r")
x = pickle.load(f)
print repr(x)
f.close()
しかしこれをどうしろと・・・あ、もしかして
:
f = open("./5.dat", "r")
x = pickle.load(f)
f.close()
for y in x:
s = ''
for z in y:
(c, n) = z
s += c*n
print s
そうきますか・・・
Q.6
おーい。どうすんだこれ?なにをそうすればいいのだ?
やっとわかったけど、そりゃないよー
:
#!/usr/local/bin/python
from zipfile import ZipFile
x =ZipFile("./channel.zip", "r")
z = {}
for y in x.infolist():
if y.comment.isalpha():
if y.comment in z.keys():
pass
else:
z[y.comment] = 1
x.close()
for x in z.keys():
print x
zip って zip() じゃないのね・・・そっちかよ。
で、それを並べかえる?と、まぁ、ほかに単語っぽいのはないな。
Q.7
また画像問題?なにすんだこれ。モザイクじゃないけどここがあやしいのは明確だな。
PILのダウンロードとインストールが問題だったけど、あとは簡単
:
import Image
x = Image.open("./oxygen.png")
s = ""
for y in range(90):
z = "%c"%x.getpixel((y*7, 43))[0]
s += z
if z == ']':
break
x = s.index('[')
s = s[x:]
x = eval(s)
s = ""
for y in x:
s += "%c"%y
print s
7は適当・・・不定長かと思ったが、そうすると、後半でしくじるのでいい加減に決めてみた(笑)
Q.8
うーん。これか?
ストリングの頭でピンとくればすぐでしょう
:
import bz2
print 'user:',bz2.decompress(un)
print 'pass:',bz2.decompress(pw)
Q.0 以外では一番簡単だったかも
Q.9
PILって高性能なんだ・・・
:
import Image, ImageDraw
i = Image.open("./good.jpg")
d = ImageDraw.Draw(i)
d.line(first, fill=(220,20,120))
d.line(second, fill=(220,20,120))
del d
i.show()
Q.10
なんだ?・・・
ヒントみてしまった。Morris ってしらなかったよ・・・
:
s = '1'
d = lambda a, b:"%s%s"%(b,a)
for i in range(30):
(n, c) = (None, 0)
l = list(s)
s = ''
for x in l:
if n == x:
c += 1
else:
if n:
s += d(n, c)
(n, c) = (x, 1)
else:
s += d(n, c)
print len(s)
Q.11
二枚が重なってるのか?さて、どうしたものか
あー、odd even ってそういうことかぁ?めんどうなので画像ソフトで(笑)
おお、答はわかった。python でどうかくかだな
:
import Image, ImageDraw, ImageEnhance
i = Image.open("./cave.jpg")
ds = []
for x in i.size:
ds.append(x / 2)
j = i.resize(ds)
e = ImageEnhance.Brightness(j)
e.enhance(2.5).show()
こんなんでよいのかな。とりあえず見えるけど・・・
Q.12
dealing evil? ううん・・・
deal ってそーゆーいみ?うーむ(^_^;
で、その指示?にしたがって・・・なんかダウソできたな・・・
で、なんじゃこりゃ・・・バイナリエディタ・・・もしかして
:
import Image
f = open("./evil2.gfx")
s = f.read()
f.close()
t = []
for y in range(5):
t.append("")
i = 0
for x in list(s):
t[i%5] += x
i += 1
for y in range(5):
outstr = "12_%s"%y
f = open(outstr, "w")
f.write(t[y])
f.close()
i = Image.open(outstr)
try:
i.show()
except:
print y
4つめのPNG はなんかエラーがでる・・・。しかたないのでxv でみるか。
Q.13
???
正直なはなし、まったくわからん・・・xml? rpc? あとなにか置き換えとかあるのか?・・・
xml-rpc・・・あー、ライブラリがあるのね(-_-;;;
:
from xmlrpclib import ServerProxy
phonebook = "http://www.pythonchallenge.com/pc/phonebook.php"
s = ServerProxy(phonebook)
print s.phone("****")
しかしこれをどうするのだ。
うう・・・
おもいつきゃなんてことないんだが・・・
Q.14
バーコード???
うぁー、そうくるのか・・・
:
import Image
a = Image.open("./wire.png")
b = Image.new("RGB", (100,100))
s = ""
lim = 100.0
(x, y) = (0, 0)
for i in xrange(10000):
if y%2:
if int(y/2)%2:
b.putpixel((int(y/4), 98 - x - int(y/4)), a.getpixel((i, 0)))
else:
b.putpixel((99 - int(y/4), 1 + x + int(y/4)), a.getpixel((i, 0)))
else:
if int(y/2)%2:
b.putpixel((98 - x - int(y/4), 99 - int(y/4)), a.getpixel((i, 0)))
else:
b.putpixel((int(y/4)+x, y/4), a.getpixel((i, 0)))
x += 1
if x >= int(lim):
y += 1
x = 0
lim -= 0.5
b.show()
ぐるぐるってどうかけばいいのかしらん
Q.15
???なんのこっちゃ???
もしかして・・・そうするとカレンダーが見えるのか・・・(画像の処理ばかりしていた(笑))
:
import calendar
l = []
for x in range(10): l.append(106+x*10)
for x in range(100): l.append(1006+x*10)
for x in l:
if calendar.weekday(x, 1, 26) == 0:
if calendar.isleap(x):
print "%04d/01/26"%x
#print "cal -3 1 %s"%x
# cal だと修正グレゴリオ歴以前のはそれ以前で出るらしい
# だれの?とあるのであとは日付をぐーぐるさんに聞く。
次に行けたけど・・・一日違わないか?
Q.16
またまたなんのこっちゃ・・・
しかし、どーみてもマーカっぽいのがある。ソートしてみっか?
:
a = Image.open("./mozart.gif")
l = a.tostring()
x = {}
for y in range(480):
p = float(l.find('\303\303\303\303\303'))
while x.has_key("%s"%p):
p += 0.01
x["%s"%p] = l[:640]
l = l[640:]
k = list(x.keys())
k.sort(lambda x ,y : cmp(float(y), float(x)))
z = ""
for y in k:
z += x[y]
b = Image.fromstring(a.mode, a.size, z)
b.show()
まったくわけわか。てゆーか、これがストレートになるかと思ったが違うようだ
んじゃ、マーカのとこで・・・
:
a = Image.open("./mozart.gif")
(ax, ay) = a.size
b = Image.new("P", (ax, ay*2))
(bx, by) = (0, 0)
lc = None
mm = 1
for y in range(ay):
for x in range(ax):
c = a.getpixel((x, y))
if bx >= ax or (lc != c and c == 195):
bx = 0
by += 1
b.putpixel((bx, by), c)
bx += 1
lc = c
b.show()
読めることは読めるんだが、どうやら、右側の処理がちょっと違うようだな・・・
まぁとりあえず読めたってことで(ぉ_ぃ)
Q.17
:: ::