Re: [問題] 針對題目 看否幫忙想出簡潔的python 感恩

作者: ddavid (謊言接線生)   2020-07-06 16:03:28
※ 引述《hodwaylin (aaboy)》之銘言:
: Hi 各位python 高手們
: 最近在自學python, 請教下面這遊戲題目
: 可否有大大願意分享一下 這題要如何寫出簡潔的python 語法 供小弟練習參考用
: 感恩喔
: https://i.imgur.com/UeEZHYz.jpg
: https://i.imgur.com/uGLFK5E.jpg
: https://i.imgur.com/Q0GqzhW.jpg
雖然怎麼看都是作業題,不過今天我想到某個有趣的事情,所以寫了這東西:
def func(n,m,k):return (a:=[*range(1,n+1)],(i:=0),[(a:=a[:(i:=(i+m-1)%
((n:=n-1)+1))]+a[i+1:],i,a[i%n]) for x in range(k)])[-1][-1][-1]
請全部縮成一行才會正確。然後這Code限定Python 3.8以後版本才跑得動。保證
簡潔,一行就能完成。
>>> func(5,2,2)
5
>>> func(5,2,4)
3
>>> func(5,3,4)
4
最可怕的是改一下還可以trace每一步驟的狀況。
def func(n,m,k):return (b:=(a:=[*range(1,n+1)],(i:=0),[(a:=a[:(i:=(i+m-1)%
((n:=n-1)+1))]+a[i+1:],i,a[i%n]) for x in range(k)])[-1],[(x[0],x[2])
for x in b])[-1]
同樣請縮成一行。
>>> func(5,2,2)
[([1, 3, 4, 5], 3), ([1, 3, 5], 5)]
>>> func(5,2,4)
[([1, 3, 4, 5], 3), ([1, 3, 5], 5), ([3, 5], 3), ([3], 3)]
>>> func(5,3,4)
[([1, 2, 4, 5], 4), ([2, 4, 5], 2), ([2, 4], 2), ([4], 4)]
結果是個list,其中每一個元素都是(list, int),前面的list表示每一步後剩
下的編號,後面的int表示該步後的幸運者。
結論是list comprehension + walrus operator有夠變態。不少人認為walrus
operator會成為亂源不是沒有道理的XDDD
作者: max36067 (圍巾喵)   2020-07-06 19:38:00
水哦 有夠簡潔
作者: OrzOGC (洞八達人.拖哨天王)   2020-07-06 20:17:00
看到這種我都很頭痛...QQ
作者: as30385438 (LCT)   2020-07-06 22:12:00
這個code review大概不會過
作者: alvinlin (林矜業)   2020-07-06 23:20:00
很簡潔但我看不懂。不過謝謝分享。給推
作者: benchen0812 (あBen)   2020-07-07 10:42:00
突然有點理解為啥學JAVA的朋友罵我用PYTHON亂源xd
作者: bugbug777 (sil)   2020-07-07 14:05:00
海象可愛
作者: s860134 (s860134)   2020-07-08 01:06:00
海象這種東西個人只會在 判斷式用, e.g. re.match
作者: HYDE1986 (足球就是我的呼吸)   2020-07-08 10:41:00
也太簡潔XDDDDD

Links booklink

Contact Us: admin [ a t ] ucptt.com