伊莉討論區

標題: python求助(參考codewars) [打印本頁]

作者: dinofree0618    時間: 2018-4-21 09:49 PM     標題: python求助(參考codewars)

正在練習python這塊
Challenge :
You are given an integer n as input. Your job is to create a diamond that is 2x the given number n.
D(3) :
+++
    +
  +++
+++++
+++++
  +++
    +

如果不限制code的長度我沒問題
但現在被限制在89
而我的code在91
D=lambda n:"+"*n+"".join("
"+" "*(n-j-1)+"+"*(2*j+1)for i in [1,-1]for j in range(n)[::i])

完全沒有頭緒怎麼再縮短
我是猜測for i in [1,-1] for j in range(n)[::i]可以再減短一些
可是怎麼試都不成功
請問一下我該怎麼改


補充內容 (2018-4-29 05:00 PM):
謝謝,已經解決了
作者: abcd6891    時間: 2018-4-28 03:04 PM

本帖最後由 abcd6891 於 2018-4-28 04:33 PM 編輯

D=lambda n:"+"*n+"".join("\n"+abs(j)//2*" "+"*"*(2*n-abs(j))for j in range(-2*n+1,2*n,2))以上錯誤示範

原本以為89就好了
問題本身要小於89

作者: abcd6891    時間: 2018-4-28 03:21 PM

本帖最後由 abcd6891 於 2018-4-28 05:32 PM 編輯

我去把題目來源挖出來了

問題本身的網址在這邊,大家可以去挑戰看看
https://www.codewars.com/kata/one-line-task-diamond-creator-pro/train/python
解完以後可以按 solution 可以看到更多更強的寫法

這邊有討論你可以看
https://codegolf.stackexchange.com/questions/162798/diamond-creator

有技巧可以再縮短
把 2*i+1 換成 i-~i

Python 3.6.0
上網找到的答案,看不太懂
  1. D=lambda n:"\n".join(['+'*n]+[' '*(n+~i)+'+'*(i-~i)for i in[*range(n),*range(n)[::-1]]])
複製代碼



作者: dinofree0618    時間: 2018-4-29 05:03 PM

abcd6891 發表於 2018-4-28 03:04 PM
D=lambda n:"+"*n+"".join("\n"+abs(j)//2*" "+"*"*(2*n-abs(j))for j in range(-2*n+1,2*n,2))以上錯誤示 ...

傑克,真的是太神奇了
我試了很久
沒有想過要用絕對值來解
真的是太感激了




歡迎光臨 伊莉討論區 (http://s03.p01.eyny.com/) Powered by Discuz!