Turm der Saiten


20

Geben Sie eine Textfolge als "Turm" aus.

Jedes Stück der Zeichenfolge (des Formulars 0:n) wird mehrmals wiederholt 5*n, sodass das erste Zeichen fünfmal, dann das erste und das zweite zehnmal usw. wiederholt wird.

Beispiele:

'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']  

Regeln:

Sie können jede Ebene als Liste von Zeichen oder nur als Zeichenfolge ausgeben.


Willkommen bei PPCG! Schöne Herausforderung.
Giuseppe

Ich habe versucht, die Formatierung zu bereinigen und die Herausforderung ein bisschen besser zu erklären. Habe ich die Herausforderung richtig verstanden?
Freitag,

2
Können wir die Eingabe als eine Liste von Zeichen nehmen?
JayCe

5
Können wir ein 2D-Array von Strings Ausgabe wie folgt: [["c","c","c","c","c"],["ca","ca","ca","ca","ca","ca","ca","ca","ca","ca"],...]?
Shaggy

3
Sind Ausgaben mit führenden oder nachfolgenden Zeilenumbrüchen akzeptabel? Können wir annehmen, dass Eingaben keine Zeilenumbrüche enthalten?
Redundanz

Antworten:


11

R , 48 Bytes

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

Probieren Sie es online!

Gibt eine Liste von Zeichenfolgen zurück.


Ich hatte das offensichtliche Golf hier verpasst! schöne lösung Ich habe verschiedene Ansätze ausprobiert, aber bisher sind alle viel länger als diese.
JayCe

7

05AB1E , 6 Bytes

ηā5*ÅΓ

Probieren Sie es online!

Gibt eine Liste mit Zeichenfolgen zurück.

Erläuterung

     ÅΓ # Run-length decode...
η       # ... the prefixes of the input
 ā5*и   # ... with the length range multiplied by 5 -- [5, 10, 15, 20, 25]

@KevinCruijssen Danke, dass du das bemerkt hast! Ich sollte morgens nicht ohne Kaffee golfen :-(
Kaldo

1
Bei Verwendung der Lauflängendekodierung werden 3 Bytes gespart:ηā5*ÅΓ
Adnan

@Adnan Genial, danke! Ich denke, es hat seine eigene Antwort verdient, Sie haben die Anzahl der Bytes um 33% reduziert ... Ich werde zu meiner ursprünglichen Lösung zurückkehren, wenn Sie sich dazu entschließen, sie selbst zu veröffentlichen.
Kaldo

Schön, ich hatte ηvyg5*Fy=für 8.
Magic Octopus Urn



5

TI-Basic (TI-84 Plus CE), 29 Byte (27 Token)

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

Erläuterung:

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

5

Retina , 15 Bytes

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

Probieren Sie es online! Link enthält Testfälle. Erläuterung:

.

Entspricht jedem Zeichen in der Zeichenfolge.

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

$`ist das Präfix des Matches. Retina stellt dann zwei Modifikatoren zur Verfügung und >ändert sie so, dass sie zwischen aufeinanderfolgenden Übereinstimmungen im Kontext der Zeichenfolge steht, während sie .die Länge annimmt. Wir beginnen daher mit dem Präfix des Suffix, das der Übereinstimmung einschließlich des Präfixes entspricht. Dies spart 2 Bytes bei überlappenden Übereinstimmungen. Das $(verkettet dann das mit einer neuen Zeile, das 5*wiederholt es, und das $.>`wiederholt es ein weiteres Mal, das durch seine Länge gegeben wird.




5

Cubix ,  44  40 Bytes

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

Probieren Sie es online!

Dies hat noch viele No-Ops, aber es ist ein bisschen besser als zuvor.

Als sehr kurze Beschreibung wird ein Zeichen aus der Eingabe genommen und auf EOI (-1) getestet. Ist dies der Fall, halten Sie an. Der Stapel wird dann umgekehrt. Ermitteln Sie die Anzahl der Elemente auf dem Stapel und multiplizieren Sie diese mit -5. Lass das auf den Boden des Stapels fallen und räum auf. Durchlaufen Sie den Stapel und drucken Sie, bis eine negative Zahl angezeigt wird. Drucken Sie eine neue Zeile, erhöhen Sie die Zahl, wenn 0 die Null senkt, kehren Sie den Stapel um und beginnen Sie erneut mit der Eingabe. Andernfalls durchlaufen Sie den Stapel, und drucken Sie, bis eine negative Zahl ... ad nauseum ist

Kubifiziert sieht es aus

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

Schau es dir online an



4

JavaScript, 48 46 Bytes

(danke @redundancy)

Edit: Der Autor hat geklärt und diese Antwort ist jetzt nicht gültig, aber ich werde sie hier unverändert lassen.

Gibt ein Array von mehrzeiligen Zeichenfolgen zurück.

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

Versuch es

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

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

Mögliche Strategie:

Es hat mir nicht viel geholfen, aber vielleicht kann jemand das benutzen:

Die Anzahl der Zeichen in der (0-indizierten) Zeile iist floor(sqrt(2/5*i+1/4)+1/2), die in JavaScript als golfen wird(.4*i+.25)**.5+.5|0 .

Für eine Reihe von Längen ngibt es n*(n+1)*5/2Linien.

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


1
Angenommen, Ihr Ausgabeformat ist entsprechend der Herausforderung gültig, können Sie 2 Byte speichern, wie hier gezeigt: Probieren Sie es online aus!
Redundanz



2

Schale , 8 Bytes

ΣzoR*5Nḣ

Probieren Sie es online!

Erläuterung

Σ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"]

2

Haskell, 46 43 42 Bytes

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

Probieren Sie es online!

Benötigt initsleider import Data.Listso

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

mit seinen 45 bytes ist es länger.

Edit: -1 Byte dank @BWO.


2

Holzkohle , 11 Bytes

F⊕LθE×⁵ι…θι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die Ausgabe enthält 0 Wiederholungen der Teilzeichenfolge mit der Länge Null. Erläuterung:

   θ          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


1

MATL , 12 Bytes

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

Probieren Sie es 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

1

V , 17 Bytes

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

Erwartet Eingaben ohne Zeilenumbrüche und Ausgaben mit überflüssigen führenden Zeilenumbrüchen.

Ich kann diesen Eintrag entfernen, wenn die Eingabe / Ausgabe die Herausforderungsspezifikation verletzt.

Probieren Sie es online!

21 Bytes

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

Erwartet Eingaben ohne Zeilenumbrüche, aber Ausgaben mit nur einer führenden und nachfolgenden Zeile.

Erläuterung

Unterschiedliche Teilzeichenfolgen werden durch zwei aufeinanderfolgende Zeilenumbrüche getrennt, sodass die zeilenweise Duplizierung nur für Zeilen gilt, die mit dem regulären Ausdruck übereinstimmen $\n\n.

Wenn der Befehl duplication ( Ä) eine Zählung liefert, zB (glaube ich), löscht er die aktuelle Zeile vor dem Einfügen von nZeiten und erscheint somit nur zum Anhängen von n - 1Kopien.

ò         | 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


1

Perl 6 , 25 Bytes

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

Probieren Sie es online!

Anonymer Codeblock, der eine Liste mit Zeichenfolgen zurückgibt.

Wenn Sie es als 1D-Array haben möchten, können Sie es wie folgt voranstellen flat:

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

Probieren Sie es online!

Erläuterung:

{                       }  # 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.

Alternative,

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

Probieren Sie es online!

Funktioniert auch für die gleiche Anzahl von Bytes.


1

Japt, 10 Bytes

Warten auf Bestätigung, ob das Ausgabeformat akzeptabel ist (+2 Byte, wenn nicht).

å+ £T±5 ÇX

Versuch es


Die Ausgabe erscheint mir vernünftig, gut gemacht.
Nit


1

JavaScript, 76 Bytes

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")


Hallo und willkommen bei PPCG.
Jonathan Frech

i=1;i<=s.length;i++kann sein i=0;++i<=s.length;.
Jonathan Frech

1

Viertens (viertens) , 48 Bytes

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

Probieren Sie es online!

Erläuterung

  1. Schleife von 1 bis String-Länge
  2. für jede Iteration:
    1. Schleifenzeiten (5 * Schleifenindex)
    2. Zeichenfolge vom Anfang bis zum äußeren Schleifenindex drucken

Code-Erklärung

: 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

1

Java 10, 120 92 90 89 Bytes

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 Bytes dank @ OlivierGrégoire .
-1 Byte dank @ceilingcat .

Probieren Sie es online aus.

Erläuterung:

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`

1
92 Bytes :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 Danke! Und ich konnte 2 weitere Bytes Golf spielen, indem ich >=und ?j=1:0anstelle von <und wechselte ?0:+(j=1).
Kevin Cruijssen

Gut! Ich habe versucht, es loszuwerden, aber ich hatte immer wieder Kompilierungsprobleme. Ich habe nicht daran gedacht, den Zustand wiederherzustellen. Gut gemacht! ;)
Olivier Grégoire

@ceilingcat Danke
Kevin Cruijssen

1

PowerShell , 40 bis 20 Byte

Score halbiert dank mazzy

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

Probieren Sie es online!

Übernimmt die Eingabe per Splatting. Erstellen Sie die Zeichenfolge, indem Sie das nächste Zeichen zu sich selbst hinzufügen, es in ein Array mit einem Element konvertieren und es dann fünfmal wiederholen.


1
paramist sehr teuer. Versuchen Sie es zu vermeiden
mazzy

@mazzy Dang, der Versuch, den Index anstelle des Zeichens selbst zu speichern, hat mich in die Irre geführt. Vielen Dank.
Veskah



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.