Transponuj chmurę słów

18

tło

Chciałem stworzyć ładną chmurę słów, taką jak ta:

these    are
    words   

  floating  

I obliczane na (x,y)-coordinates z pierwszej litery każdego słowa, podłączyć je do mojego Word chmura generatora, i niech się wykonywać swoje zadania. Jednak przypadkowo użyłem (y,x)współrzędnych, więc wynik wygląda następująco:

these      

   floating

 words     



are        

Ponieważ jestem zbyt leniwy, aby ponownie obliczyć współrzędne, potrzebuję, abyś przetransponował dla mnie chmurę słów.

Wejście

Twoje dane wejściowe to prostokątna siatka małych liter ASCII i spacji. Oznacza to, że każdy rząd jest wypełniony spacjami, aby mieć tę samą długość. Dane wejściowe można traktować jako ciąg wielu wierszy lub tablicę ciągów.

Słowo to poziomy segment pism, a jego pozycja jest (x,y)-coordinates jej skrajnej lewej list, w lewym górnym rogu istoty siatki (0,0). Zawsze będzie co najmniej jedno słowo i nie będzie żadnych końcowych wierszy ani kolumn spacji. Jednak mogą występować wiodące wiersze lub kolumny spacji.

Wynik

Twój wynik to kolejna prostokątna siatka znaków, uzyskana przez przeniesienie każdego słowa z pozycji (x,y)do pozycji (y,x). Twój wynik nie może zawierać dodatkowych końcowych wierszy lub kolumn spacji. Wiodące wiersze i kolumny muszą zostać zachowane, a dane wyjściowe muszą być prostokątne .

Możesz założyć, że ta transformacja nie tworzy nakładających się słów i nie łączy kilku słów w jedno. Oznacza to, że uruchomienie programu na wyjściu powinno wygenerować oryginalne wejście.

Zasady i punktacja

Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.

Przypadki testowe

Dla przejrzystości (a ponieważ Stack Exchange nie lubi wierszy zawierających tylko spacje), każdy wiersz kończy się znakiem potoku |. Nie są one częścią rzeczywistych danych wejściowych lub wyjściowych i należy je usunąć. Zauważ ponownie, że uruchomienie programu na każdym wyjściu powinno również generować odpowiednie dane wejściowe.

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      |
Zgarb
źródło

Odpowiedzi:

7

Perl, 58 bajtów

Dodano +2 do -lp

Podaj dane wejściowe STDIN, uruchom jako perl -lp wordcloud.pl

wordcloud.pl:

s/\w+/$l|=$a[pos]|=$"x~-$..$&/eg}for(@a){$_|=$l=~y// /cr
Ton Hospel
źródło