Transposisi kata cloud

18

Latar Belakang

Saya ingin membuat kata cloud yang cantik, seperti ini:

these    are
    words   

  floating  

Saya menghitung (x,y)-koordinat huruf pertama dari setiap kata, menyambungkannya ke generator kata cloud saya, dan membiarkannya melakukan tugasnya. Namun, saya tidak sengaja menggunakan (y,x)-coordinate, jadi hasilnya terlihat seperti ini:

these      

   floating

 words     



are        

Karena saya terlalu malas untuk menghitung ulang koordinat, saya ingin Anda mengubah kata cloud untuk saya.

Memasukkan

Input Anda adalah kotak persegi panjang huruf dan spasi ASCII kecil. Ini berarti bahwa setiap baris diisi dengan spasi untuk memiliki panjang yang sama. Input dapat diambil sebagai string multi-line atau array string.

Sebuah kata adalah segmen huruf horizontal, dan posisinya adalah (x,y)-koordinat huruf paling kiri, sudut kiri atas grid sedang (0,0). Akan selalu ada setidaknya satu kata, dan tidak ada baris atau kolom spasi tambahan. Namun, baris atau kolom spasi mungkin ada.

Keluaran

Output Anda adalah kotak karakter persegi panjang lain, diperoleh dengan menggerakkan setiap kata dengan posisi (x,y)ke posisi (y,x). Output Anda tidak boleh mengandung baris atau kolom spasi tambahan tambahan. Baris dan kolom terkemuka harus dipertahankan, dan hasilnya harus persegi panjang .

Anda dapat mengasumsikan bahwa transformasi ini tidak menciptakan kata-kata yang tumpang tindih, dan tidak menggabungkan beberapa kata menjadi satu. Ini berarti bahwa menjalankan program pada output harus menghasilkan input asli.

Aturan dan penilaian

Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.

Uji kasus

Untuk kejelasan (dan karena Stack Exchange tidak menyukai garis spasi saja), setiap baris berakhir dengan karakter pipa |. Ini bukan bagian dari input atau output aktual , dan Anda harus menghapusnya. Perhatikan lagi bahwa menjalankan program pada setiap output juga harus menghasilkan input yang sesuai.

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
sumber

Jawaban:

7

Perl, 58 byte

Menambahkan +2 untuk -lp

Berikan masukan pada STDIN, jalankan sebagai perl -lp wordcloud.pl

wordcloud.pl:

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