줄을 철거하세요! Pr

도전

문자열이 입력되면 철거 된 버전을 출력합니다.

과정

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

규칙

  • 표준 허점은 금지되어 있습니다.
  • 후행 및 선행 개행이 허용됩니다.
  • 프로그램에서 문자열 / 등가를 인쇄하거나 반환 할 수 있습니다.
  • 출력이 결정적이지 않아야합니다 (입력을 철거 할 수없는 경우 제외).

이것은 이므로 언어에서 가장 작은 바이트 수를 가진 제출물이 승리합니다!



답변

파이썬 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]

온라인으로 사용해보십시오!


답변