Wieża sznurków

22

Biorąc pod uwagę ciąg tekstu, wyślij go jako „wieżę”.

Każdy plasterek łańcucha (formy 0:n) jest powtarzany 5*nrazy, więc pierwszy znak jest powtarzany 5 razy, a następnie pierwszy i drugi 10 razy itp.

Przykłady:

'hello' ->

['h']  
['h']  
['h']  
['h']  
['h']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  
['h', 'e', 'l', 'l', 'o']  


'cat' ->

['c']  
['c']  
['c']  
['c']  
['c']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  
['c', 'a', 't']  

Zasady:

Możesz wyprowadzić każdą warstwę jako listę znaków lub tylko ciąg ich połączonych ze sobą.

Whalalalalalala CHen
źródło
Witamy w PPCG! Niezłe wyzwanie.
Giuseppe,
Próbowałem wyczyścić formatowanie i nieco lepiej wyjaśnić wyzwanie. Czy dobrze zrozumiałem wyzwanie?
Rɪᴋᴇʀ
2
Czy możemy przyjąć dane wejściowe jako listę znaków?
JayCe,
5
Możemy wyprowadzać 2D tablicę ciągów tak: [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]?
Kudłaty
3
Czy wyniki z wiodącymi lub końcowymi znakami nowej linii są dopuszczalne? Czy możemy założyć, że dane wejściowe nie zawierają nowych linii?
redundancja

Odpowiedzi:

12

R , 48 bajtów

function(s)substring(s,1,rep(x<-1:nchar(s),x*5))

Wypróbuj online!

Zwraca listę ciągów.

Giuseppe
źródło
Brakowało mi tutaj oczywistego golfa! fajne rozwiązanie Próbowałem różnych podejść, ale jak dotąd wszystkie są znacznie dłuższe.
JayCe,
8

05AB1E , 6 bajtów

ηā5*ÅΓ

Wypróbuj online!

Zwraca listę ciągów znaków.

Wyjaśnienie

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]
Kaldo
źródło
@KevinCruijssen Dzięki za zauważenie tego! Nie powinienem rano grać w golfa bez kawy :-(
Kaldo,
1
Zastosowanie dekodowania długości przebiegu pozwala zaoszczędzić 3 bajty:ηā5*ÅΓ
Adnan
@Adnan Brilliant, dzięki! Myślę, że zasługuje na swoją własną odpowiedź, zmniejszyłeś liczbę bajtów o 33% ... Wrócę do mojego oryginalnego rozwiązania, jeśli zdecydujesz się opublikować go samodzielnie.
Kaldo,
Fajny, miałem ηvyg5*Fy=na 8.
Magic Octopus Urn
6

Stax , 8 bajtów

äï▄;♫├W^

Uruchom i debuguj

Rozpakowane, niepolowane i skomentowane, wygląda to tak.

|[F for each prefix of the input
  i^5*  5*(i+1) where i is the iteration index
  DQ    that many times, peek and print to output

Uruchom ten

rekurencyjny
źródło
6

TI-Basic (TI-84 Plus CE), 29 bajtów (27 tokenów)

For(A,1,length(Ans
For(B,1,5A
Disp sub(Ans,1,A
End
End

Wyjaśnienie:

For(A,1,length(Ans # 9 bytes, 8 tokens: for A from 1 to the length of the string
For(B,1,5A         # 8 bytes, 8 tokens:  5*A times
Disp sub(Ans,1,A   # 9 bytes, 8 tokens:   Print the first A characters of the string 
End                # 2 bytes, 2 tokens:  end loop
End                # 1 byte,  1 token:  end loop
pizzapanty184
źródło
6

Siatkówka , 15 bajtów

.
$.>`*5*$($>`¶

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

.

Dopasuj każdy znak w ciągu.

$.>`*5*$($>`¶

$`jest prefiksem dopasowania. Następnie Retina zapewnia dwa modyfikatory, >modyfikuje go tak, aby znajdował się w kontekście ciągu między kolejnymi dopasowaniami, przy czym .zajmuje długość. Dlatego zaczynamy od prefiksu sufiksu, który jest równoważny dopasowaniu, w tym jego prefiksowi. To oszczędza 2 bajty dzięki nakładającym się dopasowaniom. Te $(następnie Łączy że przy nowej linii, w 5*powtarza, a następnie $.>`powtarza się dalszą ilość razy podanych przez jego długość.

Neil
źródło
6

Brachylog , 15 bajtów

a₀ᶠ⟨gj₎{l×₅}⟩ᵐc

Wypróbuj online!

Finał cmożna usunąć, jeśli OP odpowie pozytywnie na pytanie o wyprowadzanie tablic 2D.

sundar - Przywróć Monikę
źródło
6

Cubix ,  44  40 bajtów

i.!?@UBqwW_#/>u...;B^...?qo;;q*n5;oN/./)

Wypróbuj online!

To wciąż ma wiele braków, ale jest trochę lepsze niż wcześniej.

Jako bardzo krótki opis, postać jest pobierana z danych wejściowych i testowana pod kątem EOI (-1), zatrzymaj się, jeśli tak jest. Stos jest następnie odwracany. Uzyskaj liczbę przedmiotów na stosie i pomnóż przez -5. Upuść to na spód stosu i posprzątaj. Pętlę przez stos, drukując, aż do liczby ujemnej. Wydrukuj nowy wiersz, zwiększ liczbę, jeśli 0 upuści zero, odwróć stos i zacznij od wejścia ponownie, w przeciwnym razie przejdź przez stos, drukuj, aż do liczby ujemnej ... ad nauseum

Wygląda na skostniały

      i . !
      ? @ U
      B q w
W _ # / > u . . . ; B ^
. . . ? q o ; ; q * n 5
; o N / . / ) . . . . .
      . . .
      . . .
      . . .

Obejrzyj online

MickyT
źródło
5

JavaScript, 48 46 bajtów

(dzięki @redundancy)

Edycja: autor wyjaśnił i ta odpowiedź jest teraz nieprawidłowa, ale zostawię ją tutaj bez zmian.

Zwraca tablicę ciągów wieloliniowych.

s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`)

Spróbuj

f = s=>[...s].map(c=>(q+=c).repeat(5*++i),i=q=`
`);

console.log( f("hello").join`` );

Potencjalna strategia:

Nie pomogło mi to zbytnio, ale może ktoś może użyć tego:

Liczba znaków w wierszu (indeksowanym 0) iwynosi floor(sqrt(2/5*i+1/4)+1/2), która jest oznaczona w JavaScript jako (.4*i+.25)**.5+.5|0.

Dla ciągu długości nistnieją n*(n+1)*5/2linie.

Być może: s=>{for(i=0;(n=(.4*i+++.25)**.5+.5|0)<=s.length;)console.log(s.slice(0,n))}

MattH
źródło
1
Zakładając, że format wyjściowy jest prawidłowy zgodnie z wyzwaniem, możesz zapisać 2 bajty, jak pokazano tutaj: Wypróbuj online!
redundancja
4

Python 3 , 43 41 bajtów

Dzięki ovs za oszczędność 2 bajtów!

Kod

f=lambda x:[*x]and f(x[:-1])+[x]*5*len(x)

Wypróbuj online!

Adnan
źródło
3

Łuska , 8 bajtów

ΣzoR*5Nḣ

Wypróbuj online!

Wyjaśnienie

Σz(R*5)Nḣ  -- example input: "ab"
        ḣ  -- non-empty prefixes: ["a","ab"]
 z(   )N   -- zip with [1..]
    *5     -- | multiply by 5
   R       -- | replicate
           -- : [["a","a","a","a","a"],["ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]]
Σ          -- concat: ["a","a","a","a","a","ab","ab","ab","ab","ab","ab","ab","ab","ab","ab"]
ბიმო
źródło
3

Haskell, 46 43 42 bajtów

f s=do n<-[1..length s];take n s<$[1..n*5]

Wypróbuj online!

Niestety tak initswymagaimport Data.List

import Data.List
((<$)<*>(>>[1..5])=<<).inits

z 45 bajtami jest dłuższy.

Edycja: -1 bajt dzięki @BWO.

nimi
źródło
3

Węgiel drzewny , 11 bajtów

F⊕LθE×⁵ι…θι

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjście zawiera 0 powtórzeń podciągu o zerowej długości. Wyjaśnienie:

   θ          Input string
  L           Length
 ⊕            Incremented
F             Loop over implicit range
      ⁵       Literal 5
       ι      Current index
     ×        Multiply
    E         Map over implicit range
         θ    Input string
          ι   Current index
        …     Chop to length
              Implicitly print each string on its own line
Neil
źródło
3

PowerShell , 40 20 25 bajtów

Wynik przecięty na pół dzięki mazzy
+5 bajtów dzięki AdmBorkBork wskazującemu specyfikacje

$args|%{,($s+=$_)*5*++$i}

Wypróbuj online!

Pobiera dane wejściowe poprzez rozpryskiwanie. Działa poprzez budowanie łańcucha przez dodanie następnego znaku do siebie, konwertuje go na tablicę jednoelementową, a następnie powtarza go 5*irazy.

Veskah
źródło
1
paramjest bardzo drogi. Staraj się tego unikać
mazzy
@ mazzy Dang, próba zapisania indeksu zamiast samego char doprowadziła mnie na manowce. Dzięki.
Veskah
@AdmBorkBork Ha ha, ups. Należy naprawić teraz
Veskah
2

MATL , 12 bajtów

f"G@:)@5*1X"

Wypróbuj online!

f               % Get the indices of input i.e. range 1 to length(input)
 "              % For loop over that
   G            % Push input string
    @           % Push current loop index
     :          % Range 1 to that
      )         % Index at those positions (substring 1 to i)
       @5*      % Multiply loop index by 5
          1X"   % Repeat the substring that many times rowwise
                % Results collect on the stack and are 
                %  implicitly output at the end
sundar - Przywróć Monikę
źródło
2

V , 17 bajtów

òïç$îî/6Ä
Hl$xòxú

Oczekuje danych wejściowych bez nowych linii i danych wyjściowych ze zbędnymi nowymi liniami.

Mogę usunąć ten wpis, jeśli wejście / wyjście narusza specyfikację wyzwania.

Wypróbuj online!

21 bajtów

òïç$îî/6Ä
Hl$xòxíîî/ò

Oczekuje danych wejściowych bez znaków nowej linii, ale dane wyjściowe mają tylko jedną wiodącą i końcową linię nowego wiersza.

Wyjaśnienie

Różne podciągi są oddzielone dwoma kolejnymi znakami nowej linii, dzięki czemu powielanie linii ma zastosowanie tylko do linii pasujących do wyrażenia regularnego $\n\n .

Kiedy podano polecenie duplikacji ( Ä), np. (Myślę), usuwa on bieżący wiersz przed wklejeniem n, a więc pojawia się tylko w celu dołączenia n - 1kopii.

ò         | recursively...
 ï        | . append newline
  ç       | . globally search lines matching...
   $îî    | . . compressed version of $\n\n regex
      /6Ä | . . duplicate to create 6 copies
H         | . go to first line
 l        | . move cursor right 1 char
          | . . if current line is 1 char long, errors out of recursion
  $x      | . delete 1 char from end of current line
    ò     | ...end
     x    | delete extra 1-char substring
      ú   | sort so that newlines rise to top
nadmiar
źródło
1

Perl 6 , 25 bajtów

{(1..*X*5)RZxx[\~] .comb}

Wypróbuj online!

Anonimowy blok kodu, który zwraca listę ciągów znaków.

Jeśli chcesz, aby była to tablica 1D, możesz dołączyć flatz przodu w następujący sposób:

{flat (1..*X*5)RZxx[\~] .comb}

Wypróbuj online!

Wyjaśnienie:

{                       }  # Anonymous code block
                   .comb   # Split the string into a list of characters
              [\~]         # Triangular reduce the list of characters with the concatenate operator
          RZxx             # Multiply each list by:
 (1..*X*5)                 # A sequence of 5,10,15 etc.

Alternatywnie,

{($+=5)xx*RZxx[\~] .comb}

Wypróbuj online!

Działa również dla tej samej ilości bajtów.

Jo King
źródło
1

Japt, 10 bajtów

Oczekiwanie na potwierdzenie, czy format wyjściowy jest akceptowalny (+2 bajty, jeśli nie).

å+ £T±5 ÇX

Spróbuj

Kudłaty
źródło
Wydajność wydaje mi się rozsądna, ładnie wykonana.
Nit,
1

JavaScript, 76 bajtów

s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f=s=>{for(i=1;i<=s.length;i++)for(j=0;j<5*i;j++)console.log(s.substring(0,i))}

f("cat")

Medude
źródło
Witam i witam w PPCG.
Jonathan Frech,
i=1;i<=s.length;i++może być i=0;++i<=s.length;.
Jonathan Frech,
1

Dalej (gforth) , 48 bajtów

: f 1+ 1 do i 5 * 0 do dup j type cr loop loop ;

Wypróbuj online!

Wyjaśnienie

  1. Pętla od 1 do długości struny
  2. dla każdej iteracji:
    1. Czasy pętli (5 * indeks pętli)
    2. Wydrukuj ciąg od początku do indeksu pętli zewnętrznej

Objaśnienie kodu

: f                \ start a new word definiton
  1+ 1             \ set up to the loop paramers from 1 to str-length
  do               \ start a counted loop
    i 5 * 0 do     \ start a second counted loop from 0 to 5*index - 1
      dup j        \ duplicate the string address and set the length to the outer index
      type         \ print character from start of string to loop index
      cr           \ output a newline
    loop           \ end inner counted loop
  loop             \ end outer counted loop
;                  \ end word definition
reffu
źródło
1

Java 10, 120 92 90 89 bajtów

s->{for(int j=1,i=1;i<=s.length();i+=++j>i*5?j=1:0)System.out.println(s.substring(0,i));}

-28 bajtów dzięki @ OlivierGrégoire .
-1 bajt dzięki @ceilingcat .

Wypróbuj online.

Wyjaśnienie:

s->{                      // Method with String parameter and no return-type
  for(int j=1,            //  Repeat-integer, starting at 1
      i=1;i<=s.length()   //  Loop `i` in the range [1,length_input]
      ;                   //    After every iteration:
       i+=++j>i*5?        //     Increase `j` by 1 first with `++j`
                          //     If `j` is now larger than `i` multiplied by 5:
           j=1            //      Increase `i` by 1, and reset `j` to 1
          :               //     Else:
           0)             //      Leave `i` the same by increasing it with 0
    System.out.println(   //   Print with trailing newline:
      s.substring(0,i));} //    The prefix of size `i`
Kevin Cruijssen
źródło
1
92 bajty :s->{for(int i=1,j=1;i<=s.length();i+=j++<i*5?0:+(j=1))System.out.println(s.substring(0,i));}
Olivier Grégoire,
@ OlivierGrégoire Thanks! I byłem w stanie zagrać w golfa jeszcze 2 bajty, zmieniając za pomocą >=i ?j=1:0zamiast <i ?0:+(j=1).
Kevin Cruijssen,
Dobry! Próbowałem się go pozbyć, ale ciągle miałem problemy z kompilacją. Nie myślałem o przywróceniu stanu. Dobra robota! ;)
Olivier Grégoire,
@ceilingcat Thanks
Kevin Cruijssen
1

pieprzenie mózgu , 40 bajtów

++++++++++>,[>>+++++[<<[<]>[.>]>>+<-]<,]

Wypróbuj online!

[Tape: 10 (newline), [characters], 0, rowcounter]

++++++++++> 10 (newline)
,[          for each input character
  >>+++++     add 5 to number of rows
  [           for each row
    <<[<]       go to start
    >[.>]       print newline and all previous characters
    >>+         add 1 to next rowcounter cell
    <-          decrement current rowcounter cell
  ]
  <,          input next character
]
dorycki
źródło
1

APL (Dyalog Unicode) , 14 bajtów SBCS

{↑(5×⍳≢⍵)/,\⍵}

Wypróbuj online!

Mój pierwszy apl post, więc proszę dać mi znać, jeśli masz jakieś sugestie

Jak to działa:

{↑(5×⍳≢⍵)/,\⍵}
          ,\⍵  - Prefixes of the input
         /      - Repeated
     ⍳≢⍵        - By a list of indices the same length as the input
   5×           - Times 5
               - Separate into rows         
szczery
źródło
tak naprawdę nie jest rozdzielany na rzędy, ale raczej Łączy [listę list] w rzędy [matrycy] , lub bardziej technicznie Zwiększa rangę kosztem głębokości .
Adám