您将生成一个程序/函数,该程序/函数接受长度为n的字符串输入,并且:
kth字符放在空间的中心,其中k = (n+1)/2。这将是你的地面零点的位置。n。这是密码-高尔夫;以字节表示的最短代码将获胜!
输入:qwert
从地面零点发出的爆炸的边界(x的标记,其他字符的有效位置):
x
xxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxexxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
xxxxxxx
x示例输出:
t
r
q e
w发布于 2018-03-20 22:04:38
import random as r
i=input()
l=len(i)
a=range(-l,l+1)
g=[(y,x)for y in a for x in a]
p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y]
m=i[l//2]
d=[*i.replace(m,"",1).center(len(p))]
r.shuffle(d)
o=""
for c in g:
o+=m if c==(0,0)else d.pop()if c in p else" "
if c[1]==l:o+="\n"
print(o)哇,由于最近的活动,我无意中发现了这件事,直到我花了好长时间才注意到它已经两年多了。嗯,有两个答案有点伤感,所以这可能是一个好主意,无论如何张贴。我确信有很多方法可以改进这一点--直到现在才注意到输入总是很奇怪的,知道这会很有帮助的。
i=input()是输入,当然,l=len(i)节省了字符串的长度,因为它被多次使用。
a=range(-l,l+1) --一个快速创建迭代器的工具,该迭代器沿一维将可用的距离与原点相隔。
g=[(y,x)for y in a for x in a]构建一个组成整个最终网格的元组坐标列表。
p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y]创建列表的一个子集,其中只包含非中心字母可能落在上面的坐标。
m=i[l//2]建立中心字符。
d=[*i.replace(m,"",1).center(len(p))] -中心人物被取出来了,留下了其他的残骸。这里的center()函数非常好,因为它允许我们删除行(默认情况下是空格),直到有一定数量的字符为止。在这里,这是字母可以落在上面的空格数,因此反映了我们需要的分布。
r.shuffle(d)自然洗牌说分发实际上是..。分发。
循环for c in g: o+=m if c==(0,0)else d.pop()if c in p else" "查看整个可行块的平方,不管是否有任何可能在其上着陆,并在必要时向输出字符串o添加一个字符。字符从我们的碎片样本中弹出,所以它们只出现一次。
if c[1]==l:o+="\n" -也增加了换行。退货。
https://codegolf.stackexchange.com/questions/69965
复制相似问题