Bir kelime bulutu aktarın


18

Arka fon

Böyle güzel bir kelime bulutu yapmak istedim:

these    are
    words   

  floating  

(x,y)Her kelimenin ilk harfinin koordinatlarını hesapladım, kelime bulutu üreticime bağladım ve işini yapmasına izin verdim. Ancak, yanlışlıkla- (y,x)koordinatları kullandım , sonuç şu şekilde görünüyor:

these      

   floating

 words     



are        

Koordinatları yeniden hesaplamak için çok tembel olduğum için, bulut kelimesini benim için aktarmanıza ihtiyacım var.

Giriş

Girişiniz, küçük ASCII harfleri ve boşluklarının dikdörtgen şeklinde bir ızgarasıdır. Bu, her sıranın aynı uzunlukta boşluklarla doldurulduğu anlamına gelir. Giriş, çok satırlı bir dize veya bir dizi dizisi olarak alınabilir.

Bir kelime , harflerin yatay bir bölümüdür ve konumu , en (x,y)soldaki harfin, kılavuzun sol üst köşesi olan koordinatlarıdır (0,0). Her zaman en az bir kelime olacaktır ve sondaki satır veya boşluk sütunu yoktur. Ancak, önde gelen satırlar veya boşluk sütunları bulunabilir.

Çıktı

İşletme çıkış pozisyonu ile her kelime hareket ile elde edilen karakter bir dikdörtgen bir ızgara, bir (x,y)konuma (y,x). Çıktınız içermemelidir ekstra sondaki satır veya boşluk sütunlar. Öndeki satırlar ve sütunlar korunmalı ve çıktı dikdörtgen olmalıdır .

Bu dönüşümün çakışan kelimeler oluşturmadığını ve birkaç kelimeyi bir araya getirmediğini varsayabilirsiniz. Bu, programın çıktı üzerinde çalıştırılmasının orijinal girdiyi üretmesi gerektiği anlamına gelir.

Kurallar ve puanlama

Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez.

Test senaryoları

Anlaşılır olması için (ve Yığın Değişimi yalnızca boşluk satırlarını sevmediğinden), her satır bir satır karakteriyle biter |. Bunlar gerçek giriş veya çıkışın bir parçası değildir ve bunları kaldırmanız gerekir. Programı her çıkışta çalıştırmanın aynı zamanda ilgili girişi üretmesi gerektiğini unutmayın.

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      |

Yanıtlar:


7

Perl, 58 bayt

İçin +2 eklendi -lp

STDIN'de giriş verin, şu şekilde çalıştırın perl -lp wordcloud.pl

wordcloud.pl:

s/\w+/$l|=$a[pos]|=$"x~-$..$&/eg}for(@a){$_|=$l=~y// /cr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.