Personal tools
You are here: Home Wiki PythonChallenge

PythonChallenge

Document Actions
last edited 7 years ago by jack

Python シロートなりに挑戦

Zope の中でちょこっとしかつかったことないけど、まぁ、時間かければできるかもしれないってことで

Q.0

やや?と思ったが、長整数ってことか?

さすがにすぐクリアできた

ねたばれちゅういにつきずどーんとハコを置くデス。バッチリ答が書いてありまっする

本当にバリバリのネタバレだからね!!
解いてないひとは見ないでね!!
なんであるかっつーと自分が覚えてられないの!!
とりあえず、Foreground と Background を同色にしておこう

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

:: ::

 
そちらのOSの時刻なので 正確性はあなた次第
 
こういう意味のないの好き
 
本をお勧め中
 
CDもお勧め中
のだめカンタービレ ベスト100
ドラマの演奏とは違います。でもこの感じでこの価格ならアリかと
 
消耗品や家電
 
よく使うサイト
社名ロゴ88×631
 
ぐぐってみる
 
誰が使うんだろう
 

Powered by Plone