首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >爆炸猫!

爆炸猫!
EN

Code Golf用户
提问于 2016-01-23 23:55:46
回答 1查看 605关注 0票数 18

挑战

您将生成一个程序/函数,该程序/函数接受长度为n的字符串输入,并且:

  1. kth字符放在空间的中心,其中k = (n+1)/2。这将是你的地面零点的位置。
  2. 把其余的非空白字符随机安排在地面0附近。毕达哥拉斯距离煤焦的距离不得超过n
  3. 输出结果。

如果您需要澄清,请参见下面的示例.

规则

  • 适用标准漏洞!
  • I/O必须以字符串的形式出现。
  • 输入将始终是奇怪的,以确保您有一个中央字符放置在地面零。
  • 每个有效的输出都应该以非零的概率发生。

这是密码-高尔夫;以字节表示的最短代码将获胜!

示例

输入:qwert

从地面零点发出的爆炸的边界(x的标记,其他字符的有效位置):

代码语言:javascript
复制
     x
  xxxxxxx
 xxxxxxxxx
 xxxxxxxxx
 xxxxxxxxx
xxxxxexxxxx
 xxxxxxxxx
 xxxxxxxxx
 xxxxxxxxx
  xxxxxxx
     x

示例输出:

代码语言:javascript
复制
       t
     r

q    e


      w
EN

回答 1

Code Golf用户

发布于 2018-03-20 22:04:38

Python 3,286个字节

代码语言:javascript
复制
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" -也增加了换行。退货。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/69965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档