2014年5月1日 星期四

PyCon APAC 2014 魏老師的挑戰狀2

Ref.: 魏老師的挑戰狀2 - pycontw.hackpad.com

請寫出程式, 將字串 s 每四個字元為一組反序呈現 (s 的長度是 4 的倍數)

挑戰 1:
應觀眾要求, 下修至 45 chars
用一行少於 50 45 個字元的 Python code 實現
挑戰 2:
可用多行 Python code 但總字數至多
30 個字元 (一個換行或一層縮排算一個字元)

最簡單的做法應該是 在 interpreter 下打

''.join([s[::-1][i::4]for i in range(len(s))])

但是這要 46 個字元, 過不了更改後的挑戰1. 最後我改成 40 個字元. 但是30個字元的解法我想不出來.

''.join(sum(zip(*[iter(s)]*4)[::-1],()))

公佈的解答 在 挑戰二解答集.py

最短的解法是利用 exception, 但是我覺得這不太合理 XD
# 28 會 throw exception, 結果在 t
t=''
while 1:t=s[len(t)^3]+t
30個字元的解法如下:
# 30 (by changyuheng, inspired by someone else, 不知道這樣算不算?)
S=''
while s:S=s[:4]+S;s=s[4:]
有幾個解法蠻有趣的
# 40 (By apua)
f=lambda s:s[-4:]+(s and f(s[:-4]));f(s)
# 34 (by tjw) python 2 only
reduce(lambda a,b:s[len(a)^3]+a,s)
我有嘗試用 reduce 去寫, 但是沒想到這樣做XD

沒有留言: