Transponiere eine Wortwolke

18

Hintergrund

Ich wollte eine hübsche Wortwolke machen, so:

these    are
    words   

  floating  

Ich berechnete die (x,y)Koordinaten des ersten Buchstabens jedes Wortes, steckte sie in meinen Wortwolkengenerator und ließ ihn seinen Job machen. Ich habe jedoch versehentlich (y,x)-koordinaten verwendet, sodass das Ergebnis so aussieht:

these      

   floating

 words     



are        

Da ich zu faul bin, um die Koordinaten neu zu berechnen, müssen Sie die Wortwolke für mich transponieren.

Eingang

Ihre Eingabe ist ein rechteckiges Raster aus ASCII-Kleinbuchstaben und Leerzeichen. Dies bedeutet, dass jede Zeile mit Leerzeichen von gleicher Länge aufgefüllt wird. Die Eingabe kann als mehrzeilige Zeichenfolge oder als Array von Zeichenfolgen erfolgen.

Ein Wort ist ein horizontales Buchstabensegment, und seine Position entspricht den (x,y)Koordinaten des am weitesten links stehenden Buchstabens, wobei die obere linke Ecke des Gitters angezeigt wird (0,0). Es wird immer mindestens ein Wort geben und es gibt keine nachgestellten Zeilen oder Spalten mit Leerzeichen. Es können jedoch führende Zeilen oder Spalten von Leerzeichen vorhanden sein.

Ausgabe

Ihre Ausgabe ist ein weiteres rechteckiges Zeichenraster, das durch Verschieben jedes Wortes von Position (x,y)zu Position erhalten wird (y,x). Ihre Ausgabe darf keine zusätzlichen nachgestellten Zeilen oder Spalten mit Leerzeichen enthalten. Führende Zeilen und Spalten müssen beibehalten werden, und die Ausgabe muss rechteckig sein .

Sie können davon ausgehen, dass diese Umwandlung keine überlappenden Wörter erzeugt und nicht mehrere Wörter zu einem zusammenfügt. Dies bedeutet, dass das Ausführen des Programms auf der Ausgabe die ursprüngliche Eingabe erzeugen sollte.

Regeln und Wertung

Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.

Testfälle

Aus Gründen der Übersichtlichkeit (und da Stack Exchange Zeilen mit Leerzeichen nicht mag) endet jede Zeile mit einem Pipe-Zeichen |. Diese sind nicht Teil der tatsächlichen Eingabe oder Ausgabe , und Sie sollten sie entfernen. Beachten Sie erneut, dass das Ausführen des Programms auf jedem Ausgang auch den entsprechenden Eingang erzeugen sollte.

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
quelle

Antworten:

7

Perl, 58 Bytes

+2 für hinzugefügt -lp

Geben Sie STDIN ein und führen Sie es als aus perl -lp wordcloud.pl

wordcloud.pl:

s/\w+/$l|=$a[pos]|=$"x~-$..$&/eg}for(@a){$_|=$l=~y// /cr
Tonne Hospel
quelle