Re: [問題] 如何能做到字母進位呢?

作者: xatier (一切重來就好了...)   2014-12-13 04:44:55
: 想不到怎麼壓到一行 XD
你的好做
(lambda s:
lambda sFixed=s.rstrip('z'):
lambda lz=len(s)-len(sFixed):
(sFixed[:-1] + chr(ord(sFixed[-1])+1) if sFixed else 'a') + 'a'*lz)
('a')()()
不過我也在想我的作法一行要怎麼壓 XD
不過 baseN 操作沒辦法偷偷藏在 lambda 裏面w 所以只好拿出來 QQ
baseN = lambda n,b=26,d="abcdefghijklmnopqrstuvwxyz":
(not n and d[0]) or (baseN(n // b, b, d).lstrip(d[0]) + d[n % b])
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('az')
'ba'
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('aa')
'ab'
(lambda s : (lambda x=(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in
enumerate(s)])+1) : lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('at')
'au'
作法基本上就是換 26 進位然後加一
不過最內層考慮到 leading zero 會是 'a' 但還是要補上去
(lambda s :
(lambda x=
(sum([(26**(len(s)-_-1)*(ord(c)-ord('a'))) for _,c in enumerate(s)])+1) :
# 26 進位換算 ( Σ 26 的幾次方 * 係數 )
lambda bx=baseN(x): 'a'*(len(s)-len(bx))+bx)()())('at')
# 補個 0 ,如果原本有的話
<del>其實我們在寫 Scheme 對吧 </del>
作者: yauhh (小y寶貝)   2014-12-13 08:19:00
但你知道嗎,functional language中所謂的行數少,不是以行數為根據,而是以計算的次數為根據。而且你可以寫成一行但是終究因為這一行太長,必須折行。
作者: xatier (一切重來就好了...)   2014-12-13 08:58:00
折行的話沒差阿,只是用同個 lambda 寫起來就會覺得比用多個 function 拼起來漂亮 XDs/同個 lambda/多個 lambda/

Links booklink

Contact Us: admin [ a t ] ucptt.com