拆弦!


12

挑战

给定一个字符串输入,输出它的已删除版本。

流程

P
r      Pr       r
o       o       o
g       g       g
r       r       r      rogr         r
a  ->   a  ->   a  ->     a  ->     a  ->           ->           ->           ->           ->  
m       m       m         m         m
m       m       m         m         m         mmar         m
i       i       i         i         i         i            i           mi           m
n       n       n         n        gn        gn           gn           gn           gni         mgni
g       g      Pg        Pg      roPg      roPg         roPgmar      roPgmar      roPgmar      roPgmar
  1. 垂直放置琴弦。
  2. 1和之间以及(height of the column of characters) - 1一个随机方向(左或右)之间选择一个随机整数。
  3. 在该方向上旋转该数目的字符(如果没有占用这些空格,请转到步骤4;否则,请回到步骤2)。
  4. 让那些角色由于重力而掉落。
  5. 重复直到字符列的高度最多1大于其旁边的列的高度(即无法进一步拆除(“步骤2-4”)该列)。
  6. 如果还有另一列字符比1其周围的一个或多个周围字符的字符高(即可拆卸),请重复拆卸该列,直到不再可拆卸为止。如果有多个可拆列,则完全拆掉最高的列(如果有多个最高列,则彻底拆掉最左边的列)。
  7. 重复进行,直到所有列都无法删除。

如果输入中有空格字符,请首先将其全部删除。

C
o

d      
e  ->     oC  ->         ->  ...
       de         
G        G          G
o        o          o
l        l          l
f        f        defoC

规则

  • 禁止出现标准漏洞。
  • 尾随换行符是允许的。
  • 您的程序可能会打印或返回一个字符串/等效字符串。
  • 输出必须是不确定的(除非输入不可拆卸)。

这是,因此在其语言中具有最小字节数的提交将获胜!


1
我会怀疑这里是否真的需要随机
Keyu Gan

@KeyuGan我认为,如果人们不得不选择固定数量的字符并左右交替,挑战将是微不足道的。
JungHwan Min

4
我们仍然可以说4是随机的,并且通过掷骰子返回
我的代词是monicareinstate

@someone 4将使输出具有确定性,即不是“随机”。编辑了规则以使其明确。
JungHwan Min

@someone你是因为XKCD在4指的?
Giacomo Garabello

Answers:


5

Python 2中622 595 573 552 542 534个 527 520 515字节

from random import*
s=input()
r=range
R=choice
Z=len
L=h=Z(s)
a=[[]for _ in'  '*-~h]
S=s[::-1].split()
X=-1,1
for w in S[1:]:
 for i in r(Z(w)):a[h-~i*R(X)]+=w[i]
a[h]+=S[0]
while L:
 H=[map(Z,a[c-1:c+2])+[c]for c in r(1,h-~h)];D=L=[(min(n,m)-C,i)for n,C,m,i in H if~-C>min(n,m)]
 while D:
	_,c=min(L);n,C,m=map(Z,a[c-1:c+2]);D=X[n+2>C:1+(C-1>m)]
	if D:
	 d=R(D);l=R(r(1,C-[0,m,n][d]));w,a[c]=a[c][-l:],a[c][:-l]
	 for i in r(l):a[c-~i*d]+=w[i]
for l in zip(*[l+[' ']*max(H)[1]for l in a if l])[::-1]:print`l`[2::5]

在线尝试!



@EriktheOutgolfer谢谢:)
TF


h+R(X)*-~i可以h-~i*R(X)
乔纳森·弗雷希

L=[...];D=L可以D=L=[...]
乔纳森·弗雷奇
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.