Ich habe viel Zeit gebraucht, um das zu machen. (YouTube-Kommentare Nr. 1)


84

Warte ... das ist kein Trolling.


Hintergrund

In diesen Tagen sind die Kommentarbereiche auf YouTube mit folgenden Mustern übersät:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

Wo Stringist ein bloßer Platzhalter und bezieht sich auf eine beliebige Kombination von Zeichen. Diese Muster werden normalerweise von einem It took me a lot of time to make this, pls likeoder etwas begleitet, und oft gelingt es dem OP, eine Reihe von Likes zu sammeln.


Die Aufgabe

Obwohl Sie eine große Begabung dafür haben, mit Ihren bezaubernden Golfkünsten Aufwertungen bei PPCG zu erzielen, sind Sie definitiv nicht die erste Wahl, um witzige Bemerkungen zu machen oder Memes in YouTube-Kommentarbereichen zu referenzieren. So sammeln Ihre konstruktiven Kommentare, die Sie mit Bedacht abgegeben haben, auf YouTube ein paar „Gefällt mir nicht“. Sie möchten, dass sich dies ändert. Sie greifen also auf die oben genannten Klischeemuster zurück, um Ihr letztendliches Ziel zu erreichen, ohne jedoch Zeit damit zu verschwenden, sie manuell zu schreiben.

Einfach ausgedrückt, besteht Ihre Aufgabe darin, eine Zeichenfolge zu nehmen sund 2*s.length - 1Teilzeichenfolgen von s, die durch eine neue Zeile begrenzt sind, auszugeben, um dem folgenden Muster zu entsprechen:

(für s= "Hallo")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Eingang

Eine einzelne Zeichenfolge s. Es gelten die Eingabestandards der Community. Sie können davon ausgehen, dass die Eingabezeichenfolge nur druckbare ASCII-Zeichen enthält.


Ausgabe

Mehrere durch einen Zeilenumbruch getrennte Zeilen bilden ein geeignetes Muster, wie oben erläutert. Es gelten die Ausgabestandards der Community. Führende und nachfolgende Leerzeichen (die keine oder nicht sichtbare Zeichen wie Leerzeichen enthalten) sind in der Ausgabe zulässig.


Testfall

Ein Testfall mit mehreren Wörtern:

Input => "Oh yeah yeah"

Output =>

O
Oh
Oh 
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah 
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah 
Oh yeah
Oh yea
Oh ye
Oh y
Oh 
Oh
O

Beachten Sie, dass die Form der Ausgabe des obigen Testfalls offensichtlich verzerrt ist (z. B. erscheinen Zeile zwei und Zeile drei der Ausgabe gleich). Das liegt daran, dass wir die nachgestellten Leerzeichen nicht sehen können. Ihr Programm muss NICHT versuchen, diese Verzerrungen zu beheben.


Gewinnkriterium

Das ist , also gewinnt der kürzeste Code in Bytes in jeder Sprache!


19
Ich plane, in Zukunft weitere Herausforderungen im Zusammenhang mit YouTube-Kommentaren zu stellen. daher der YouTube Comments #1im Titel.
Arjun

1
Ist die Rückgabe eines Zeilenarrays zulässig?
jemand

2
Können wir Eingaben als ein Array von Zeichen annehmen und ein Array von Arrays von Zeichen zurückgeben?
Shaggy


3
Kann die Eingabe sein ""? Wie wäre es mit einem einzelnen Charakter "H"? Wenn ja, welche Ausgabe sollte in beiden Fällen erfolgen?
AdmBorkBork

Antworten:


103

Brainfuck , 32 Bytes

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

Probieren Sie es online!

Die gleiche Schleife wird für beide Hälften des Musters verwendet.

Erläuterung:

,             Take first input character as initial line
[             Until line to output is empty:
  [<]>        Move to beginning of line
  [.>]        Output all characters in line
  ++++++++++. Output newline
  ,           Input next character
  [>>]        Move two cells right if input character nonzero
  <[-]        Otherwise remove last character in line
  <           Move to new last character in line
]

2
Das ist einfach großartig. Ich habe versucht, etwas in Brainfuck zu machen, aber es kam ungefähr zehnmal so lange heraus und funktionierte immer noch nicht richtig.
ElPedro

34
Ich hätte nie gedacht, dass ich eine Herausforderung sehen würde, bei der die Brainfuck-Antwort tatsächlich wettbewerbsfähig war. Tolle Arbeit!
Fragezeichen

54

JavaScript (ES6), 36 Byte

f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s

Probieren Sie es online!

Kommentiert

f = (             // f is a recursive function taking:
                  //   the input string split into:
  [c,             //     c   = next character (may be undefined if we've reached the end)
      ...r],      //     r[] = array of remaining characters
  s = `\n`        //   the output string s, initialized to a linefeed
) =>              // 
  c ?             // if c is defined:
    s +           //   append s (top of the ASCII art)
    f(r, s + c) + //   append the result of a recursive call to f, using r[] and s + c
    s             //   append s again (bottom of the ASCII art)
  :               // else:
    s             //   append s just once (this is the final middle row) and stop recursion

3
sehr nette
antwort

10
@MartinBarker Unter Windows verwende ich Notepad ++ mit der Standardeinstellung "Zeilenende" Unix (LF). Problem ein für allemal gelöst. :)
Arnauld

3
Genial! Können Sie eine Erklärung dafür für diejenigen schreiben, die JS-Neulinge sind?
Akhoy

3
@Akhoy Ich habe eine kommentierte Version hinzugefügt.
Arnauld

3
Danke. Viel klarer jetzt.
Akhoy

47

05AB1E (Legacy) ,  4  3 Bytes

Durchgestrichen &nbsp;4&nbsp;ist nicht mehr 4 :)

η.∊

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

η     # Get the prefixes of the (implicit) input-string
 .∊   # Vertically mirror everything with the last line overlapping
      # (which implicitly joins by newlines in the legacy version of 05AB1E)
      # (and output the result implicitly)

In der neuen Version von 05AB1E »ist nach dem expliziten und erforderlich η, weshalb ich hier die Legacy-Version von 05AB1E verwende, um ein Byte zu speichern.


7
Hmm, dies scheint 6 Bytes in UTF8:\xce\xb7\x2e\xe2\x88\x8a
Rubenvb

10
@ Rubenvb In UTF-8 ist es in der Tat mehr. 05AB1E verwendet, genau wie einige der in anderen Antworten verwendeten Programmiersprachen (z. B. Jelly; Japt; Charcoal), einen eigenen Quellcode ( im Fall von 05AB1E CP-1252 ), in dem jedes der 256 bekannten Zeichen a ist einzelnes Byte.
Kevin Cruijssen

Alles klar, fair genug :).
Rubenvb

@ KevinCruijssen PHP scheint zu denken, dass diese Zeichen für CP-1252 ungültig sind, könnte aber nur ein PHP-Fehler sein: 3v4l.org/UC1QE
hanshenrik

7
@ Hanshenrik Gute Frage. Es handelt sich in der Tat nicht um CP-1252, sondern um die 05AB1E-Codierung , bei der es sich um die benutzerdefinierte Codierung handelt. Die Bytes dieses Codes in hex sind 08 2e 17, die Sie ausführen und mit dem --osabieFlag überprüfen können : tio.run/…
Adnan

21

IBM PC DOS, 8088-Assembly,  44  43

d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24

Zerlegt:

    SHR  SI, 1              ; point SI to DOS PSP at 80H (SI intialized at 100H)
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  DX, SI             ; save start of string pointer
    MOV  AH, 9              ; DOS API display string function
    DEC  AX                 ; remove leading space from string length
    MOV  BH, AL             ; save string len in BH (AL gets mangled by INT 21H,9)
    MOV  CL, AL             ; set up loop counter in CL
    SHL  CL, 1              ; number of lines = 2 * string length - 1
    DEC  CX
    MOV  BL, '$'            ; end of string marker
LINE_LOOP:
    CMP  CL, BH             ; if CL >= string length, ascend
    JGE  ASCEND
    DEC  SI                 ; descend by backing up two places (always increments)
    DEC  SI                 ; (this is fewer bytes than 'SUB SI, 2' or two branches)
ASCEND:
    INC  SI                 ; increment current string position
    XCHG BL, [SI]           ; swap current string byte with end of string delimiter
    INT  21H                ; write substring to console
    XCHG BL, [SI]           ; restore string byte
    PUSH DX                 ; save output string pointer
    MOV  DX, OFFSET CRLF    ; load CRLF string
    INT  21H                ; write to console
    POP  DX                 ; restore output string pointer
    LOOP LINE_LOOP          ; move to next line
    RET
CRLF DB 0DH,0AH,'$'

Erläuterung

Schleife 2 * input length - 1für jede Reihe. Die String-Anzeigefunktion ( INT 21H,9) der DOS-API schreibt einen durch $-terminierten String auf den Bildschirm, sodass jedes Mal, wenn die Schleife durchlaufen wird, das Zeichen nach dem zuletzt anzuzeigenden mit dem Endterminator des Strings ausgetauscht wird.

Der Schleifenzähler wird mit der Länge der Zeichenfolge verglichen, und wenn er größer ist (dh der aufsteigende Teil der Ausgabe), wird die Zeichenfolge / Swap-Position inkrementiert, andernfalls wird sie dekrementiert (tatsächlich sind es -1-1+1weniger Bytes als bei einer if / else-Verzweigungsstruktur).

Ein eigenständiges ausführbares Programm, das die Eingabezeichenfolge von der Befehlszeile übernimmt.

Ausgabe

Bildbeschreibung hier eingeben

YT2.COM herunterladen (43 bytes)


1
Die meisten DOS-Versionen haben beim Laden einer COM-Datei eine SI = 100h. Dadurch können Sie ein Byte sparen, indem Sie die erste Anweisung durch ersetzen SHR SI, 1.
Gastropner

@gastropner sehr schlau! Es stellt sich heraus, dass das Original unter DOS 1.0 sowieso nicht ausgeführt werden kann, da CH 0 ist (die Initialisierung kostet +2 Byte, was sich nicht nur für DOS 1 lohnt). Aktualisiert mit neuer Version!
640 KB,

Müssen Sie das Datum jedes Mal eingeben, wenn Sie das Terminal öffnen?
user14492

1
@ user14492 ha, nein! Ich habe nur vergessen, diesen Teil aus dem DOS-Screenshot auszuschneiden!
2.

19

Python 2 , 60 52 Bytes

f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]

Probieren Sie es online!

Python 3.8 (Vorabversion) , 50 Byte

f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]

Probieren Sie es online!


2
Hängt dies von einer bevorstehenden Version von 3.8 ab? Welches Feature?
alexis

7
@alexis Dies wird mit einem Zuweisungsausdruck : x:=s[:n].
Arnauld

1
Ah, ich sehe es jetzt danke :-) Ich habe über die Funktion schon einmal gelesen und freue mich darauf. Vermisse es immer noch von meinen C Tagen ...
Alexis

1
Diese drucken die Ausgabe jedoch nicht. Sie machen einfach das Array, oder?
Jaden Travnik

@JadenTravnik Python duppt automatisch das letzte Ausdrucksergebnis, wenn es interaktiv über eine Konsole ausgeführt wird
Xeverous

18

MATL , 8 Bytes

nZv"G@:)

Probieren Sie es online!

Bitte mag diesen Beitrag für den Smiley :)im Code, für dessen Erstellung ich viel Zeit gebraucht habe.

n  % Length of the input string
Zv % Symmetric range ([1 2 ... n ... 1])
"  % For each k in above range
G  % Push input
@: % Push [1 2 ... k]
)  % Index

17

J , 11 Bytes

Anonyme implizite Präfixfunktion. Gibt eine mit Leerzeichen aufgefüllte Zeichenmatrix zurück.

[:(}:,|.)]\

Probieren Sie es online!

]\ die Liste der Präfixe

[:() Wende die folgende Funktion auf diese Liste an

|. die umgekehrte Liste

, vorangestellt mit

}: die verkürzte (ohne letzten Punkt) Liste


18
[:(und }:,|sieh so traurig aus ...
Adám

Aber es ist (}:
Was

13

Perl 6 , 31 Bytes

{[\~](@_)[0...@_-1...0]}o*.comb

Probieren Sie es online!

Anonymer Codeblock, der eine Zeichenfolge akzeptiert und eine Liste von Zeilen zurückgibt.

Erläuterung:

{                      }o*.comb   # Pass the list of characters into the codeblock
 [\~](@_)                 # Triangular reduce by concatenation
                          # e.g. The list [1,2,3,4] turns into [1,12,123,1234]
         [0...@_-1        # Return the elements from 0 to length of string minus 1
                  ...0]   # And back down to 0

5
Es ist lustig, dass heutzutage sogar Golfspieler Perl zu den am besten lesbaren Teilnehmern zählt.
hörte auf, sich

7
@ceasedtoturncounterclockwis Nun, das ist Perl 6. Die Antwort auf Perl 5 ist immer noch nicht lesbar
Jo King

12

Japt- R , 4 Bytes

å+ ê

Kumulative Reduzierung einer Zeichenfolge.

-1 Byte dank @Shaggy

Probieren Sie es online!


Skeptisch gegenüber dem "-R", das in der Zeichenfolge enthalten sein muss (ohne das die Ausgabe nicht funktioniert)
Flying Thunder

3
@FlyingThunder Sei kein Skeptiker mehr :) siehe hier
Quintec

@Quintec, ich habe versucht, die Flags in meinen Lösungsheadern mit diesem Metapost zu verknüpfen, um diese Art von Kommentaren zu verhindern.
Shaggy

1
Die Konvention ist ziemlich sicher <language> + -flagoder <language> -flag. Auch: | Ich habe vergessen, dass das kumulative Reduzieren eine Sache ist. Ich schwöre, ich habe es jedes Mal übersprungen, wenn ich es gesehen habe
ASCII-

@ ASCII-only Das gleiche, ich erinnerte mich nur daran, weil ich darüber nachdachte, wie ich das in APL lösen würde und sagte: "Ich frage mich, ob Japt dieses eingebaut hat." Habe ich auch nicht <language> benutzt -flag?
Quintec

11

Japt -R , 9 7 Bytes

-2 Bytes dank Shaggy

Êõ@¯XÃê

Probieren Sie es online!



1
@ Shaggy oh warte ... Ãist eine Sache
ASCII

Weitere 300 Mitarbeiter sind unterwegs, sobald diese Frage für eine Prämie in Frage kommt.
Shaggy


1
@Quintec, kumulative Reduzierung wirkt sich auch auf Zeichenfolgen aus, sodass Sie nicht zu Beginn aufteilen müssen. Ich würde auch sagen, das ist anders genug, um es selbst zu veröffentlichen.
Shaggy


10

Haskell, 52 50 44 Bytes

f x=unlines$init<>reverse$scanr(\_->init)x x

Probieren Sie es online!


Willkommen auf der Seite. initserfordert, dass ein Import verwendet wird, damit Sie ihn hinzufügen müssen, import Data.Listoder etwas Ähnliches.
Weizen-Assistent

@ SriotchilismO'Zaic War nicht sicher, ob das nötig war, um zu zählen oder nicht. Hinzugefügt, danke!
Joseph Sible

4
Außerdem sollte ich erwähnen, dass wir einen Chatroom haben, in dem wir über Haskell-Golf reden können. Wenn Sie irgendwelche Gedanken oder Fragen haben, ist dies ein großartiger Ort.
Weizen-Zauberer

1
Ich kann nicht glauben, dass Sie genau das gefunden haben, was ich posten wollte:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R , 79 65 62 58 Byte

write(substring(s<-scan(,""),1,c(1:(r=nchar(s)),r-1:r)),1)

Probieren Sie es online!

-14 durch Giuseppes überlegenes Funktionswissen

-3 mit sauberer Indexierung

-4 dank Nick Kennedy und Giuseppes Umzug zu scanundwrite

Schleifen (und substr) zu vermeiden ist schön.


2
Schleifen sind völlig unnötig, so wie es ist sapply- substringtun, was Sie wollen (mit einer zusätzlichen nachgestellten Leerzeile) und für 65 Bytes ! Ich hätte definitiv nicht daran gedacht, substringwenn ich nicht gesehen hätte, wie gut du es substrhier benutzt hast .
Giuseppe

1
Haha, guter Fang! Ich denke, ich habe durch Ihre Bearbeitungen mehr über alternative Funktionen für den gleichen Job gelernt als irgendwo sonst an diesem Punkt.
CriminallyVulgar

2
Haha, R hat eine blöde Menge an Synonymen mit subtilen Unterschieden. Jedes Mal, wenn ich das beste Werkzeug für den Job kenne, finde ich in einem seltsamen Fall etwas Besseres ...
Giuseppe

3
Wie wäre es online versuchen! mit scanund write? Nur 59 Bytes!
Nick Kennedy

1
@NickKennedy 58 Bytes , wenn Sie ersetzen ""mit 1.
Giuseppe

7

Gelee , 5 4 Bytes

-1 Byte Danke an @JonathanAllan !

¹ƤŒḄ

Probieren Sie es online! Ich denke, das ist meine zweite Gelee-Antwort? Ich weiß nicht, ob das optimal ist. Ich bin mehr davon überzeugt, dass es optimal ist. Gibt ein Array von Zeilen zurück.

Erläuterung

¹ƤŒḄ     input: "Hi!"
¹Ƥ       prefixes of the input: [["H"], ["H", "i"], ["H", "i", "!"]]
  ŒḄ     bounce, using each array: [["H"], ["H", "i"], ["H", "i", "!"], ["H", "i"], ["H"]]

Ein weiterer Ansatz, der von @JonathanAllan vorgeschlagen wurde, besteht darin ;\ŒḄ, die \Verkettung ( ;) kumulativ zu reduzieren , was eine weitere Möglichkeit darstellt, Präfixe zu generieren.


Wir dürfen eine Reihe von Zeilen ausgeben, so dass Sie Yaus dem Code herausspringen können (ich würde die Fußzeile entweder machen ÇYoder ÇŒṘden impliziten Abdruck eines Vollprogramms vermeiden). Nebenbei bemerkt ist dies auch äquivalent ;\ŒḄzu der gleichen Byteanzahl implementiert (Sie können das Argument auch übergeben, "blah"wenn Jelly dies als eine Liste von Zeichen interpretiert - wie Sie sehen werden, handelt es sich bei Ihrer tatsächlich um eine Liste von Zeichenlisten wenn Sie die Fußzeile machen ÇŒṘ)
Jonathan Allan

@ JonathanAllan danke! sehr interessant :)
Conor O'Brien

7

Python 3.8 (Vorabversion) , 48 Byte

lambda s,r='':(l:=[r:=r+c for c in s])+l[-2::-1]

Probieren Sie es online!

Verwendet Zuweisungsausdrücke mit :=, um eine Liste von Präfixen zu erstellen und das Ergebnis dann erneut zu speichern, um seine Umkehrung zu verketten (ohne das erste Zeichen).

Python 2 , 51 Bytes

f=lambda s,l=[]:s and f(s[:-1],[s]+l)or l+l[-2::-1]

Probieren Sie es online!

Wir haben fast die folgende schöne 45-Byte-Lösung, aber es hat die ursprüngliche Zeichenfolge zweimal und ich sehe keinen kurzen Weg, um dies zu beheben.

f=lambda s,l=[]:s and f(s[:-1],[s]+l+[s])or l

Probieren Sie es online!


Müssen Sie keine Zeilenumbrüche hinzufügen und drucken, um die gewünschte Ausgabe zu erhalten?
Jaden Travnik

So etwas wie print('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik Die Community-Standardeinstellungen (denen diese Herausforderung folgt) ermöglichen Funktionen zusätzlich zu Programmen. Und der Herausforderungsautor sagte in den Kommentaren, dass sie mit einer Liste von Strings innerhalb des Beitritts in Ordnung sind , wie dies standardmäßig erlaubt ist , obwohl ich dies selbst nicht als Standard mag und es abgelehnt habe. Siehe auch die Zusammenfassung der Python-Regeln .
3.

Huh. Ok, danke, dass du darauf hingewiesen hast. Ich bin neu ¯_ (ツ) _ / ¯. Wenn das der Fall ist, ist hier eine konkurrierende 45-Byte-Lösung:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@JadenTravnik Kein Problem, die Regeln sind leider über den Platz verteilt. Ihr Beispiel ist jedoch ein Ausschnitt, der nicht erlaubt ist. Es muss Eingabe und Ausgabe wie tun s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Sehen Sie sich die Beispiele oben an .
3.

6

Kohle , 5 Bytes

G^Lθθ

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung: Zeichnet ein gefülltes Polygon, ^gibt an, dass die Seiten rechts und links unten sind (das Polygon schließt sich dann automatisch selbst), Lθgibt die Länge dieser Seiten als Länge der ursprünglichen Eingabe an und das Endergebnis θgibt die Füllzeichenfolge an.




5

Brachylog (v2), 6 Bytes

a₀ᶠ⊆.↔

Probieren Sie es online!

Funktionsübergabe, die ein Array von Zeilen zurückgibt. Lose basierend auf der Antwort von @ Fatalize .

Erläuterung

a₀ᶠ⊆.↔
    .↔  Find a palindrome
   ⊆      that contains, in order,
  ᶠ       all
a₀        prefixes of {the input}

Die Tiebreak-Reihenfolge wird hier durch die festgelegt , die bei Verwendung dieses Flussmusters die kürzestmögliche Ausgabe bevorzugt , wobei die Tiebroken durch die frühestmögliche Platzierung der angegebenen Elemente erfolgen . Die kürzestmögliche Ausgabe ist das, was wir hier wollen (da keine doppelten Präfixe möglich sind). Wenn Sie die angegebenen Elemente (dh die Präfixe) so früh wie möglich platzieren, werden sie in der ersten Hälfte (aufgerundet) der Ausgabe. Da wir auch verlangen, dass sie in der gleichen Reihenfolge angeordnet werden, erhalten wir zufällig genau das Muster, das wir benötigen, obwohl die Beschreibung, die wir Brachylog gegeben haben, sehr allgemein ist. Die Tiebreaks funktionieren genau richtig, sodass Brachylog die Ausgabe auswählt, die wir möchten, und nicht irgendeine andere Ausgabe, die der Beschreibung entspricht.


5

PowerShell, 89 87 66 Bytes

-2 Bytes dank @AdmBorkBork

param($a)0..($d=$a.Length-1)|%{$b+=,-join$a[0..$_]};$b+$b[--$d..0]

Probieren Sie es online!

Es hat tatsächlich nicht wie angegeben funktioniert, sorry! Ich habe es bearbeitet und es auch geschafft, einige Bytes weg zu rasieren.


Sie können --$dstattdessen ($d-1)ein Paar am Ende retten.
AdmBorkBork

@AdmBorkBork Danke.
Gabriel Mills

Dies funktioniert leider nicht für die Eingabe einzelner Zeichen.
AdmBorkBork


4

APL (Dyalog Unicode) , 9 Byte SBCS

Anonyme implizite Präfixfunktion. Gibt eine Liste von Zeichenfolgen zurück.

(⊢,1↓⌽),\

Probieren Sie es online!

,\ die Liste der Präfixe (beleuchtet, die kumulative Verkettung)

() Wende die folgende Funktion auf diese Liste an:

 die umgekehrte Liste

1↓ Lass den ersten Gegenstand fallen

, voranstellen

 die unveränderte Liste




4

SNOBOL4 (CSNOBOL4) , 118 Bytes

	N =INPUT
	L =1
1	X =LT(X,SIZE(N)) X + 1	:F(D)
O	N ARB . OUTPUT POS(X)	:($L)
D	X =GT(X) X - 1	:F(END)
	L ='D'	:(O)
END

Probieren Sie es online!

Es scheint einen Fehler in dieser Implementierung von SNOBOL zu geben. Der Versuch, das Etikett Ddurch das Etikett zu ersetzen, 2führt zu einem Fehler, obwohl das Handbuch für Vanilla SNOBOL dies anzeigt (Hervorhebung hinzugefügt).

Wenn eine Beschriftung vorhanden ist, muss sie mit dem ersten Zeichen der Zeile beginnen. Beschriftungen geben einen Namen für die Anweisung an und dienen als Ziel für die Übertragung der Kontrolle aus dem GOTO-Feld einer Anweisung. Beschriftungen müssen mit einem Buchstaben oder einer Ziffer beginnen, optional gefolgt von einer beliebigen Zeichenfolge. Das Beschriftungsfeld wird mit einem Leerzeichen, einem Tabulator oder einem Semikolon abgeschlossen. Wenn das erste Zeichen einer Zeile leer oder ein Tabulator ist, fehlt das Beschriftungsfeld.

Ich gehe davon aus, dass der CSNOBOL-Interpreter nur eine einzige Bezeichnung unterstützt, die mit einer Ganzzahl beginnt.


4

APL + WIN, 31 Bytes

Eingabeaufforderung für Zeichenfolge:

 ⊃((⍳n),1↓⌽⍳n)↑¨(¯1+2×n←⍴s)⍴⊂s←⎕

Erläuterung:

(¯1+2×n←⍴s)⍴⊂s create a nested vector of the string of length =1+2x length of string

((⍳n),1↓⌽⍳n)↑¨ progressively select elements from each element of the nested vector 
              following the pattern 1  2 ...to n to n-1 ... 1

⊃ convert nested vector into a 2d array.

4

F # (.NET Core) , 67 61 Bytes

let l=s.Length
[1..l*2-1]|>Seq.map(fun i->s.[..l-abs(i-l)-1])

Probieren Sie es online!

Input ist a stringund Output ist aseq<string>

Eine andere Lösung könnte let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]für 80ish Bytes sein ... Ich bin nicht sicher, ob es sich lohnt, sie zu untersuchen.


4

sed , 31 35 bytes

:x
h
s/.\n.*\|.$//
/^$/{x;q}
H
G
bx

Probieren Sie es online!

Erläuterung

Zu Beginn jeder Iteration der Schleife ist der Musterraum ein "zentraler Teil" der gewünschten Ausgabe, und jede Schleife fügt eine verkürzte Kopie oben und unten hinzu.

:x                 
h                  Copy the current chunk to hold space
s/.\n.*\|.$//      Remove the last letter of the first line, and all other lines (if there are any)
/^$/{x;q}          If pattern space is empty we're done; output hold space
H                  Add the shortened line to the end of hold space
G                  and add the new hold space to pattern space.
bx                 

1
Schön, aber die mittlere Zeile (die vollständige Originaleingabe) scheint dreimal ausgegeben zu werden. Zumindest mit GNU sed. Gleiches gilt für TIO. Welche sedImplementierung benutzt Du und wie übergibst Du ihm die Eingabe? (Übrigens, die Substitution zu ändern, um s/.\n.*\|.$//es zu
beheben

2
Ah, du hast recht. Es ist kein Problem mit meiner sedImplementierung (mit GNU Version 4.2.1), ich habe den Fehler einfach nicht bemerkt. Ich habe mit einigen anderen Korrekturen herumgespielt und kann nichts finden, das weniger als vier Bytes hinzufügt, also übernehme ich Ihre Korrektur, danke.
Sophia Lechner

4

Python 2 , 131 100 84 Bytes

Meine erste Antwort auf Code Golf!

-47 Bytes insgesamt dank @ SriotchilismO'Zaic

a,b=[],len(x)
for i in range(2*b-1):
 if i<b:a+=x[i]
 else:a=a[:-1]
 print''.join(a)

Probieren Sie es online!


1
Willkommen bei PCG! Lesen Sie unbedingt die Tour und den Verhaltenskodex . Gute Lösung!
Akozi

2
Für Python können Sie ;s anstelle von Zeilenumbrüchen verwenden, um Einrückungen zu vermeiden. Auch keine Leerzeichen zwischen printund''
Wheat Wizard

Vielen Dank für die Tipps @ SriotchilismO'Zaic, hat wirklich dazu beigetragen, meine Byteanzahl zu reduzieren!
Yoni Matz

2
Und eine letzte Sache, wenn Sie aeine Zeichenfolge anstatt einer Liste erstellen, brauchen Sie die joinüberhaupt nicht mehr und Sie können einfach print a.
Weizen-Assistent

4
Ungültig, es muss sich um ein vollständiges Programm oder eine vollständige Funktion handeln, während Sie davon ausgehen, dass die Eingabe in ist x.
Nur ASCII

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.