Tekst sinusoidalny

30

Cel: Napisz program lub funkcję, która wypisze ciąg wejściowy w kształcie sinusoidy.

Sinusoida ASCII

Oto jeden okres sinusoidy:

         .......                                 
      ...       ...                              
    ..             ..                            
   .                 .                           
  .                   .                          
 .                     .                         
.                       .                       .
                         .                     . 
                          .                   .  
                           .                 .   
                            ..             ..    
                              ...       ...      
                                 .......         

Pamiętaj, że w każdej kolumnie jest dokładnie jedna kropka.

  • Każdy znak w ciągu wejściowym zastąpi kropkę w powyższym kształcie, od lewej do prawej.
  • Spacje na wejściu muszą być wyprowadzane jak zwykłe znaki zamiast kropki.
  • Znak początkowy odpowiada lewej kropce na powyższym rysunku.
  • To tylko jeden okres, dane wejściowe mogą być dłuższe niż liczba kropek powyżej.

Wkład

  • Dane wejściowe to ciągi znaków ASCII, które zawierają tylko znaki między dziesiętnym ASCII 32 (spacja) a dziesiętnym ASCII 126 (tylda ~).
  • Wejściami zawsze będą tylko jedna linia (bez podziałów linii).
  • Dane wejściowe mogą być pobierane przez STDIN, parametry funkcji, argumenty wiersza poleceń lub cokolwiek podobnego.

Wydajność

  • Dane wyjściowe muszą być wydrukowane dokładnie tak, jak w podanych przypadkach testowych.
  • Końcowe spacje na liniach są dozwolone, o ile długość linii z tymi końcowymi spacjami nie przekracza długości najdłuższej linii (tej z ostatnim znakiem).
  • Niedozwolona linia wiodąca / końcowa.

Przypadki testowe

  • Wkład: .................................................

Wydajność:

         .......                                 
      ...       ...                              
    ..             ..                            
   .                 .                           
  .                   .                          
 .                     .                         
.                       .                       .
                         .                     . 
                          .                   .  
                           .                 .   
                            ..             ..    
                              ...       ...      
                                 .......         
  • Wkład: Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.

Wydajność:

         ng Puzz                                         ion and                                         siasts                                          stratio           
      mmi       les                                   est        an                                   thu       and                                   egi       n r        
    ra              &                               qu             sw                               en              c                                r             eq      
   g                                                                 e                                               o                             o                 u     
  o                   C                           a                   r                           e                   d                           n                   i    
 r                     o                                                                         l                     e                                               r   
P                       d                       s                       s                       z                                               ,                       e  
                         e                     i                         i                     z                         g                     e                         d 
                                                                          t                   u                           o                   e                           .
                           G                 e                             e                 p                             l                 r                             
                            ol             ng                                f             g                                fe              f                              
                              f S       cha                                   or        min                                   rs.       00%                                
                                 tack Ex                                         program                                          It's 1                                   
  • Wkład: Short text.

Wydajność:

         t.
      tex  
    t      
   r       
  o        
 h         
S          
  • Wkład: The quick brown fox jumps over the lazy dog

Wydajność:

          brown                            
      ick       fox                        
    qu              j                      
                     u                     
  e                   m                    
 h                     p                   
T                       s                  

                          o                
                           v               
                            er             
                               th       dog
                                 e lazy    

Punktacja

To jest , więc wygrywa najkrótszy program lub funkcja w bajtach.

Fatalizować
źródło
Właśnie o tym myślałem
Beta Decay
Och, widzę, że to rzeczywiście jest trochę podobne.
Fatalize
Nawiasem mówiąc, twoja fala nie jest do końca sinusoidalna. (Oczywiście próbowałem użyć sinfunkcji, aby ją odtworzyć, ale pozycje są trochę wyłączone.)
David Z
@DavidZ To mnie nie dziwi, spojrzałem na kształt ASCII. Czy można nawet uzyskać coś sinusoidalnego bez „przerwy” w kolumnach (tj. Dokładnie jedna kropka na kolumnę)?
Fatalize
4
Spędziłem kilka minut, bawiąc się, przesuwając pasek przewijania na wyjściu przypadku testowego 2 bardzo szybko.
mbomb007

Odpowiedzi:

7

Pyth, 59 bajtów (57 znaków)

Xjb.sC.>V+R*12\ Xz\ C9*+-L12K+JsM._+6jC\཈2tP_JKlz]*dlzC9d

Demonstracja.

Binarna tablica odnośników jest zakodowana wewnątrz , która ma wartość 3912. To jest konwertowane na binarne, dając [1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0]. Jest to traktowane jako różnica między kolejnymi wysokościami. Przygotowując cyfrę 6, tworząc wszystkie prefiksy i mapując każdą z nich na sumę, generowany jest pierwszy kwartał fali.

sM._+6jC\཈2ocenia [6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12]zgodnie z powyższym opisem. Następnie kod konkatenuje na odwrocie tego ciągu, tworząc pierwszą połowę fali, a następnie odejmuje go od 12, aby dać całą falę.

Następnie tworzymy linie każdego znaku wejściowego, po których następuje 12 spacji. Linia ta jest obracana w prawo przez parametr wysokości fali odpowiadający tej lokalizacji, a następnie linie są transponowane i łączone na nowych liniach.

Następnie usuwamy wiodące i końcowe puste linie. Nie możemy jednak usunąć wiodących lub końcowych pustych linii, które mają spacje od wejścia. Jest to realizowane przez zastąpienie spacji na wejściu tabulacjami ( C9), których nie może znajdować się na wejściu, usunięcie pustych linii i zamiana tabulatorów z powrotem w spacje.

isaacg
źródło
@FryAmTheEggman Naprawiono, kosztem 16 bajtów.
isaacg
12

Python 2, 156 bajtów

l=map(int,"654322111%08d1122345"%1);l+=[12-c for c in l]
def f(t):
 h=len(t);o=bytearray(' '*h+'\n')*13;i=0
 for c in t:o[i-~h*l[i%48]]=c;i+=1
 print o[:-1]

Wyjaśnienie

  • Cały kod po prostu tworzy blok spacji ( o) i zastępuje właściwe spacje literami wejścia t.

  • Zmienna lprzechowuje listę przesunięć od góry. Tak, aby nth postać tbyła w sieci l[n].

  • Bytearray osłuży jako zmienny ciąg, ponieważ ciągi są niezmienne w Pythonie.

  • -~hjest taki sam, h+1ale oszczędza miejsce, ponieważ nie potrzebuję nawiasów.

Alex L.
źródło
7

Java, 219 209 199 bajtów

void p(char[]s){int r=6,c;String t="";for(;r>-7;r--,t+='\n')for(c=0;c<s.length;c++)t+=(s(c%48)==r?s[c]:' ');System.out.println(t);}int s(int a){return a<4?a:a<6?4:a<9?5:a<15?6:a<24?s(24-a):-s(a-24);}

Nadal jestem tutaj nowicjuszem i mam nadzieję, że jest zgodne z regułami wprowadzania podfunkcji (oczywiście, gdy liczone są bajty tej funkcji). Jeśli nie, spróbuję przekształcić sinfunkcję w sprytne wyszukiwanie tablic ...

public class SinusText
{
    public static void main(String[] args)
    {
        SinusText s = new SinusText();
        s.p(".................................................".toCharArray());
        s.p("Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It's 100% free, no registration required.".toCharArray());
        s.p("Short text.".toCharArray());
        s.p("The quick brown fox jumps over the lazy dog".toCharArray());
    }
    void p(char[]s){int r=6,c;String t="";for(;r>-7;r--,t+='\n')for(c=0;c<s.length;c++)t+=(s(c%48)==r?s[c]:' ');System.out.println(t);}int s(int a){return a<4?a:a<6?4:a<9?5:a<15?6:a<24?s(24-a):-s(a-24);}
}
Marco13
źródło
1
W przypadku niektórych wyzwań opartych na łańcuchach oszczędza się również, jeśli weźmiesz wkład jako char[]. Tutaj, to pozbyć się ()na lengthi wyeliminować charAt()jak również. Jeśli dobrze to czytam, możesz także użyć print()zamiast println()zaoszczędzić jeszcze kilka.
Geobits
@Geobits To są stopnie wolności, których nie byłem świadomy. Opis zadania mówi o „ciągu znaków”, więc pomyślałem, że musi to być „ciąg znaków” reprezentacji odpowiedniego języka. ...
Marco13,
Tak, zapytałem o to jakiś czas temu w Meta. Oto link w celach informacyjnych: meta.codegolf.stackexchange.com/q/2214/14215
Geobits
Dzięki, więc jest 209. (Może później spróbuję wycisnąć jeszcze kilka bajtów. Funkcja „grzechu” wciąż wygląda zbyt gadatliwie ...)
Marco13
1
Hmm, niezbyt duża poprawa, ale możesz wyciąć 10 wykonując cały moduł 48. Zmień koniec na ...a<24?s(24-a):-s(a-24);i wywołaj go s(c%48).
Geobits
4

Perl, 222 bajty

$n[$_%13].=substr$l[$_/13],$_%13,1for 0..13*(@l=map{(map{sprintf"%013b",$_}@t=(64,128,256,512,(1024)x2,(2048)x3),(4096)x7,reverse@u=(32,16,8,4,4,2,2,2),(1)x7,(reverse@u),@t)[$-++%48]=~s/./$&?$_:$"/egr}<>=~/./g);$,=$/;say@n

Wymaga -Edla say, przechowuje pozycje jako liczby całkowite rzutowane na liczby binarne, a przerzucanie tablicy prawdopodobnie nie jest zbyt wydajne bajtowo. Jestem też pewien, że jest wiele do zrobienia, więc będę szturchać i szturchać.

Przykładowe dane wyjściowe:

$perl -E '$n[$_%13].=substr$l[$_/13],$_%13,1for 0..13*(@l=map{(map{sprintf"%013b",$_}@t=(64,128,256,512,(1024)x2,(2048)x3),(4096)x7,reverse@u=(32,16,8,4,4,2,2,2),(1)x7,(reverse@u),@t)[$-++%48]=~s/./$&?$_:$"/egr}<>=~/./g);$,=$/;say@n' <<< '.................................................'
         .......                                 
      ...       ...                              
    ..             ..                            
   .                 .                           
  .                   .                          
 .                     .                         
.                       .                       .
                         .                     . 
                          .                   .  
                           .                 .   
                            ..             ..    
                              ...       ...      
                                 .......         

$perl -E '$n[$_%13].=substr$l[$_/13],$_%13,1for 0..13*(@l=map{(map{sprintf"%013b",$_}@t=(64,128,256,512,(1024)x2,(2048)x3),(4096)x7,reverse@u=(32,16,8,4,4,2,2,2),(1)x7,(reverse@u),@t)[$-++%48]=~s/./$&?$_:$"/egr}<>=~/./g);$,=$/;say@n' <<< 'Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It'\''s 100% free, no registration required.'
         ng Puzz                                         ion and                                         siasts                                          stratio           
      mmi       les                                   est        an                                   thu       and                                   egi       n r        
    ra              &                               qu             sw                               en              c                                r             eq      
   g                                                                 e                                               o                             o                 u     
  o                   C                           a                   r                           e                   d                           n                   i    
 r                     o                                                                         l                     e                                               r   
P                       d                       s                       s                       z                                               ,                       e  
                         e                     i                         i                     z                         g                     e                         d 
                                                                          t                   u                           o                   e                           .
                           G                 e                             e                 p                             l                 r                             
                            ol             ng                                f             g                                fe              f                              
                              f S       cha                                   or        min                                   rs.       00%                                
                                 tack Ex                                         program                                          It's 1                                   
Dom Hastings
źródło
3

JavaScript, 251 243 224 220 217

Naprawdę prosta implementacja: wykorzystuje ciąg znaków do reprezentowania pozycji y każdego znaku na fali (przesunięty o a, który jest kodem ASCII 97). Następnie iteruje wszystkie możliwe wiersze; jeśli wartość y bieżącego wiersza jest taka sama jak pozycja y na fali, zapisuje znak z ciągu. Na końcu znajduje się również czyszczenie, aby usunąć wiersz, jeśli okazał się całkowicie pusty.

Zwróć uwagę, że wydruk będzie dziwny w alert()oknie, jeśli nie używa czcionki o stałej szerokości, możesz go zmienić, console.log()aby sprawdzić, czy wydruk jest prawidłowy.

s=prompt(o=[])
for(y=i=0;y<13;++y){o[i]=""
for(x=0;x<s.length;++x)o[i]+=y=="gfedccbbbaaaaaaabbbccdefghijkklllmmmmmmmlllkkjih".charCodeAt(x%48)-97?s[x]:" "
if(o[i++].trim().length<1)o.splice(--i,1)}
alert(o.join("\n"))

EDYCJA 1: ++i --istnieją.

EDYCJA 2: Usuwanie pustej linii odbywa się teraz w tej samej pętli co reszta, oszczędzając 17 znaków. Nie potrzebowałem też tych nawiasów, na dodatkowe 2 znaki.

EDYCJA 3: Nie trzeba deklarować przebiegu jako zmiennej, oszczędzając 4 znaki.

EDYCJA 4: Jak zauważył Dom Hastings w komentarzach, liczba bajtów obejmowała powrót karetki, a także znak nowego wiersza, zaktualizowano liczbę bajtów dla wszystkich wersji, aby wykluczyć powrót karetki.

EDYCJA 5: Zaoszczędzono 3 bajty dzięki uprzejmości Dom Hastings. Nie wdrożyłem o.splicepoprawki, ponieważ nie usuwa ona pustych linii (przynajmniej po mojej stronie).

Sean Latham
źródło
1
Dobra robota! Kilka miejsc, gdzie można zaoszczędzić kilka bajtów więcej: Wymienić: if(o[i++].trim().length<1)o.splice(--i,1)z o.splice(i-(t=!o[i++].match(/\s/)),t), do -4, s=prompt() o=[]z: s=prompt(o=[])-1 i for(y=0,i=0;y<13;++y){o[i]=""z for(y=i=0;y<13;++y){o[i]="", -2. Prawdopodobnie można również połączyć swoje pętle for, aby zaoszczędzić więcej ... Na koniec warto zauważyć, że mam tylko 220 dla twojej bieżącej liczby bajtów, więc twoje 225 może być oknami \r\nzamiast tego, \nco zakładam, że możesz zignorować (proszę mnie poprawić, jeśli się mylę) ...
Dom Hastings
Dobry chwyt po powrocie karetki! Następnym razem nie będę tak bardzo ufać Notepad ++ :)
Sean Latham
Myślę, że zmniejszyłem go do 166. Czy ktoś inny może to zweryfikować? Zmieniłem zachowanie tablicy na dziennik w całym programie. Użyłem zwarcia zamiast instrukcji if i pozbyłem się nawiasów, umieszczając dziennik na końcu pierwszej pętli for. for(s=prompt(),y=0;y<13;y++,v.trim()&&console.log(v))for(v="",x=0;x<s.length;x++)v+=y=="gfedccbbbaaaaaaabbbccdefghijkklllmmmmmmmlllkkjih".charCodeAt(x%48)-97?s[x]:" "
Vartan
używając falsy zero do zastąpienia == odejmowaniem, 165 znaków for(s=prompt(y=0);y<13;y++,v.trim()&&console.log(v))for(v="",x=0;x<s.length;x++)v+="gfedccbbbaaaaaaabbbccdefghijkklllmmmmmmmlllkkjih".charCodeAt(x%48)-97-y?" ":s[x]
Vartan
Mam problem z wklejeniem go z mojego komentarza, więc oto bit pastebly.ly/1VQgGXw 217-> 166 = 76%
Vartan
3

Matlab, 133 , 130 bajtów

Jedna wkładka:

s=input('');y=ceil(5.6*sin(0:pi/24:pi-.1).^.9);l=[-y y]+7;n=numel(s);t=repmat(' ',13,n);for k=1:n;t(l(mod(k-1,48)+1),k)=s(k);end;t

I wersja rozszerzona:

function f(s)
    y=ceil(5.6*sin(0:pi/24:pi-.1).^.9);l=[-y y]+7;  %// calculate the line number for each column position
    n=numel(s);                                     %// number of character in input
    t=repmat(' ',13,n);                             %// Create a blank canvas of whitespace characters
    for k=1:n
        t(l(mod(k-1,48)+1),k)=s(k);                 %// place each input character where it should be
    end
    t                                               %// force the output display

Jedna linijka pobiera dane z konsoli ( stdin) i ma 130 bajtów. Rozszerzona wersja zastępuje dane wejściowe konsoli definicją funkcji (bajt +1), ale jest wygodniejsza w przypadku pętli testowej:


Opis:

Indeks liniowy każdego znaku jest obliczany na pół okresu, a następnie dublowany i łączony w celu uzyskania pełnego okresu.
Tworzymy puste tło z białym znakiem (taką samą długość jak łańcuch wejściowy. Każdy znak umieszczamy zgodnie z jego pozycją w odpowiednim wierszu. Jeśli łańcuch wejściowy jest dłuższy niż jeden kropka, modoperator (modulo) otacza to, więc nie „ t wyjść poza granicę, gdy żąda numeru linii.


Przypadek testowy:

Zapisz wersję funkcji textsine.mw swojej ścieżce, a następnie uruchom:

s = {'.................................................';...
    'Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It''s 100% free, no registration required.';...
    'Short text.';...
    'The quick brown fox jumps over the lazy dog'};

for txtcase=1:4
    textsine(s{txtcase,1})
end

wyświetli:

t =

         .......                                 
      ...       ...                              
    ..             ..                            
   .                 .                           
  .                   .                          
 .                     .                         
.                       .                       .
                         .                     . 
                          .                   .  
                           .                 .   
                            ..             ..    
                              ...       ...      
                                 .......         


t =

         ng Puzz                                         ion and                                         siasts                                          stratio           
      mmi       les                                   est        an                                   thu       and                                   egi       n r        
    ra              &                               qu             sw                               en              c                                r             eq      
   g                                                                 e                                               o                             o                 u     
  o                   C                           a                   r                           e                   d                           n                   i    
 r                     o                                                                         l                     e                                               r   
P                       d                       s                       s                       z                                               ,                       e  
                         e                     i                         i                     z                         g                     e                         d 
                                                                          t                   u                           o                   e                           .
                           G                 e                             e                 p                             l                 r                             
                            ol             ng                                f             g                                fe              f                              
                              f S       cha                                   or        min                                   rs.       00%                                
                                 tack Ex                                         program                                          It's 1                                   


t =

         t.
      tex  
    t      
   r       
  o        
 h         
S          








t =

          brown                            
      ick       fox                        
    qu              j                      
                     u                     
  e                   m                    
 h                     p                   
T                       s                  

                          o                
                           v               
                            er             
                               th       dog
                                 e lazy    

jeśli chcesz przetestować wersję jeden liniowej przy udziale stdin, Twój wkład musi być wpisany jako jeden pojedynczy string, więc trzeba by ująć swój wkład między 'postaciami. Przykład:

'Short text.'   %//   valid input
Short text.     %// INVALID input

Dzięki Luis Mendoza wygolenie 3 bajtów ;-)

Hoki
źródło
@LuisMendo, dzięki za 3 bajty zapisane :-). Wyjaśniłem, jak wprowadzić odpowiedni ciąg, aby prosty s=input('');działał.
Hoki,
2

Scala 377 znaków

pierwsze cięcie. Prawdopodobnie można uzyskać lepszy wzór do przetłumaczenia xdoy

(s:String)⇒s.zipWithIndex.map(t⇒(t._1,t._2,t._2%48 match{
case i if i<5⇒6-i
case 5|19⇒2
case 6|7|8|16|17|18⇒1
case i if i<16⇒0
case i if i<29⇒i%20+2
case 29|43⇒10
case 30|31|32|40|41|42⇒11
case i if i<40⇒12
case i if i>43⇒10-i%44
})).groupBy(_._3).toSeq.map{case(y,xs)⇒(""→0/:xs.sortBy(_._2)){case((p,l),(c,x,_))⇒(p+" "*(x-l-1)+c)→x}._1→y}.sortBy(_._2).map(_._1).mkString("\n")
Gilad Hoch
źródło
1

Common Lisp, 205 bajtów

(lambda(s &aux p v o)(dotimes(r 13)(setf o 0 p v v(round(*(/ 24 pi)(+(asin(-(/ r 6)1))pi))))(when p(map()(lambda(c)(princ(if(some(lambda(k)(<= p(mod k 48)(1- v)))`(,o,(- 23 o)))c" "))(incf o))s)(terpri))))

Testy

Zobacz http://pastebin.com/raw.php?i=zZ520FTU

Uwagi

Wydrukuj linię wyjściową linia po linii, obliczając indeksy w ciągach znaków, które powinny być wydrukowane przy użyciu odwrotnej funkcji sinus asin. Dane wyjściowe nie pasują dokładnie do oczekiwanych danych wejściowych w pytaniu, ale ponieważ OP potwierdza, że ​​przykładowe dane wyjściowe nie są prawdziwymi sinusoidami, myślę, że jest to w porządku. Przynajmniej dla każdej kolumny jest zawsze zapisany tylko jeden znak.

rdzeń rdzeniowy
źródło
1

Python 2, 172 bajty

To nie jest tak dobre, jak odpowiedź Alexa L. , ale jest całkiem blisko. Pobiera dane ze standardowego wejścia i najlepiej działa w .pypliku.

l=map(int,bin(9960000)[2:]);l+=[-c for c in l];s=6;o=[];i=9
for c in raw_input():b=[' ']*13;b[s]=c;o+=[b];s+=l[i%48];i+=1
print''.join(sum(zip(*o+['\n'*13])[::-1],())[:-1])

Postanowiłem zbudować transponowane dane wyjściowe (każda kolumna to wiersz), a następnie transponować wynik, ponieważ w pythonie transponowana jest macierz map(*m).

  • l: Binarna reprezentacja 9960000(po odcięciu "0b"od bin) jest 100101111111101001000000. Jest to „krok” fali sinusoidalnej w każdej kolumnie, zaczynając od ostatniego znaku najniższego punktu. Kopiuję tę listę, neguję każdą liczbę i przyczepiam ją do samego końca, aby utworzyć pochodną funkcji.
  • s: Jest to zmienna, która śledzi, do którego wiersza (kolumny w transpozycji) wstawiany jest następny znak.
  • o: Wyjście końcowe, transponowane
  • i: Śledzi okres fali sinusoidalnej. Zaczyna się od 9, ponieważ ljest nieznacznie przesunięty.

W forpętli tworzę listę 13 spacji (używałem bajtarów, ale okazuje się, że listy znaków mają krótszą instrukcję drukowania), a następnie zastępuję sznak th znakiem wejściowym. Dołącz bna końcu o, dodaj odpowiedni krok si zwiększaj i.

Miałem nadzieję, że printwypowiedź będzie tak prosta \n'.join(*zip(o)), ale bez powodzenia. zip(*o+['\n'*13])[::-1]dołącza kolumnę nowych linii, a następnie odwraca i transponuje całość (bez cofania, fala sinusoidalna jest odwrócona do góry nogami), sum(...,())łączy krotki razem w jedną kratę znaków, a następnie ''.join(...)łączy znaki i drukuje je.

Inne rzeczy, których próbowałem, to utworzenie 12-znakowego szeregu spacji i wstawienie nowej postaci w odpowiednie miejsce oraz zastąpienie l+=[-c for c in l];matematyki pewnym rodzajem pomnożenia 1iz -1wynikiem indeksowania do l, ale nic nie mogłem wymyślić z czasem był niższy.

Alex Van Liew
źródło
0

Mathematica, 131 bajtów

i=[input string];c=Characters@i;l=Length@c;StringJoin@Riffle[StringJoin@@@SparseArray[Table[{7-Round[6 Sin[.13(x-1)]],x},{x,l}]->c,{13,l}," "],"\n"]

To 131 znaków, w tym trzy dla i=foo;. Wydawało się to rozsądnym sposobem na pozyskanie informacji; Mogłem umieścić to w definicji ci zaoszczędzić kilka uderzeń, ale to jest niesprawiedliwe.

To dość proste - prawie nawet czytelne. Dzieli ciąg na listę znaków, a następnie umieszcza te znaki w rzadkiej tablicy w pozycjach określonych na podstawie Table(dowolne miejsce w tablicy, w którym znak nie ma wartości domyślnej spacji). Linie są montowane osobno, a następnie między nimi kropi się nowe linie. Ostatni StringJoin zszywa to wszystko.

Uwaga: Podobnie jak niektóre inne rozwiązania, może to nie być poprawne, ponieważ daje prawdziwy sinusoid, a nie (piękny) ręcznie wykonany przykład.

Testy:

(*i=Programming Puzzles...*)
         ng Puzz                                          on and                                          iasts                                           tration          
       mi       le                                     sti       a                                      us      and                                     is        r        
     am           s                                   e           ns                                  th            c                                 eg           eq      
    r               &                               qu              we                              en               o                               r               u     
  og                  C                                               r                                               d                            o                  ir   
 r                     o                          a                                               e                    e                          n                     e  
P                       d                       s                       si                       l                       g                                               d 
                         e                     i                          t                    zz                         o                     ,                         .
                           G                                               e                  u                            lf                 ee                           
                            o               ge                               f               p                               e               r                             
                             lf           an                                  or           g                                  rs            f                              
                                St      ch                                       p      min                                     .        0%                                
                                  ack Ex                                          rogram                                          It's 10                                  
(*i=.... ...*)
         .......                                 
       ..       ..                               
     ..           ..                             
    .               .                            
  ..                 ..                          
 .                     .                         
.                       .                       .
                         ..                    . 
                           .                  .  
                            .               ..   
                             ..           ..     
                               ...      ..       
                                  ......         
(*i= Short text.*)
         t.
       ex  
      t    
    t      
  or       
 h         
S          





(*i=The quick...*)              
          brown                            
       ck       fo                         
     ui           x                        
    q               j                      
  e                  um                    
 h                     p                   
T                       s                  
                          o                
                           v               
                            e              
                             r            g
                               the      do 
                                   lazy    
hYPotenuser
źródło