단어 구름 옮김


18

배경

나는 다음과 같이 예쁜 단어 구름을 만들고 싶었다.

these    are
    words   

  floating  

나는 (x,y)각 단어의 첫 글자의 좌표를 계산하여 단어 구름 생성기에 꽂아서 그 일을하도록했습니다. 그러나 실수로 (y,x)좌표를 사용 했으므로 결과는 다음과 같습니다.

these      

   floating

 words     



are        

좌표를 다시 계산하기에는 너무 게으 르기 때문에 클라우드라는 단어를 바꿉니다.

입력

입력은 소문자 ASCII 문자와 공백으로 구성된 사각형 격자입니다. 이것은 모든 행이 같은 길이를 갖도록 공백으로 채워짐을 의미합니다. 입력은 여러 줄 문자열 또는 문자열 배열로 사용할 수 있습니다.

단어는 문자의 수평 세그먼트이며, 그 위치 는 IS (x,y)의 왼쪽 문자, 그리드 존재의 왼쪽 상단의 -coordinates (0,0). 단어는 항상 하나 이상 있으며 공백으로 된 행이나 열은 없습니다. 그러나 선행 행 또는 열의 공백이있을 수 있습니다.

산출

출력은 위치 (x,y)가있는 모든 단어를 위치 로 이동하여 얻은 또 다른 직사각형 문자 격자입니다 (y,x). 출력에 추가 행 또는 열의 공백이 없어야 합니다. 선행 행과 열은 유지 되어야 하고 출력 은 직사각형이어야합니다 .

이 변환은 겹치는 단어를 만들지 않고 여러 단어를 하나로 병합하지 않는다고 가정 할 수 있습니다. 즉, 출력에서 ​​프로그램을 실행하면 원래 입력이 생성됩니다.

규칙과 득점

전체 프로그램이나 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점은 허용되지 않습니다.

테스트 사례

명확성을 기하기 위해 (그리고 Stack Exchange는 공백 전용 행을 싫어하므로) 모든 행은 파이프 문자로 끝납니다 |. 이들은 실제 입력 또는 출력의 일부가 아니므로 제거해야합니다. 각 출력에서 ​​프로그램을 실행하면 해당 입력이 생성됩니다.

Input:
oneword|
Output:
oneword|

Input:
  spaces|
Output:
      |
      |
spaces|

Input:
   |
row|
Output:
 row|

Input:
these    are|
    words   |
            |
  floating  |
Output:
these      |
           |
   floating|
           |
 words     |
           |
           |
           |
are        |

Input:
   same|
 the   |
       |
same   |
Output:
   same|
 the   |
       |
same   |

Input:
  some |
words k|
       |
       |
       |
  still|
Output:
 words    |
          |
some still|
          |
          |
          |
 k        |

Input:
   hello   |
  world hey|
what   up  |
Output:
  what|
      |
 world|
hello |
      |
      |
      |
  up  |
 hey  |

Input:
  a b  a d cc|
 g h  huh nng|
  ye dunnn   |
    dud  yo  |
 wha   g     |
  huh heh hah|
Output:
        |
 g  wha |
a ye huh|
 h      |
b  dud  |
  dunnn |
 huh heh|
a   g   |
        |
d  yo   |
 nng hah|
cc      |

답변:


7

펄, 58 바이트

에 +2 추가 -lp

STDIN에 입력하고 다음과 같이 실행하십시오. perl -lp wordcloud.pl

wordcloud.pl:

s/\w+/$l|=$a[pos]|=$"x~-$..$&/eg}for(@a){$_|=$l=~y// /cr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.