Mi ci è voluto molto tempo per farlo, per favore. (Commenti YouTube n. 1)


84

Hold up ..... questo non è traina.


sfondo

In questi giorni su YouTube, le sezioni dei commenti sono disseminate di tali schemi:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

dove Stringè un semplice segnaposto e si riferisce a qualsiasi combinazione di personaggi. Questi schemi sono generalmente accompagnati da una It took me a lot of time to make this, pls likeo qualcosa del genere e spesso l'OP riesce ad accumulare un numero di Mi piace.


L'obiettivo

Sebbene tu abbia un grande talento nell'accumulare voti su PPCG con le tue affascinanti abilità nel golf, non sei sicuramente la scelta migliore per fare commenti arguti o fare riferimento a meme nelle sezioni dei commenti di YouTube. Pertanto, i tuoi commenti costruttivi fatti con pensiero deliberato accumulano pochi o nessun "mi piace" su YouTube. Vuoi che questo cambi. Quindi, ricorri a creare i modelli di cliché sopra menzionati per raggiungere la tua massima ambizione, ma senza perdere tempo a cercare di scriverli manualmente.

In poche parole, il tuo compito è quello di prendere una stringa, diciamo s, e produrre 2*s.length - 1sottostringhe di s, delimitate da una nuova riga, in modo da rispettare il seguente schema:

(per s= "Ciao")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Ingresso

Una singola stringa s. Si applicano le impostazioni predefinite di input della community. Si può presumere che la stringa di input conterrà solo caratteri ASCII stampabili.


Produzione

Diverse linee separate da una nuova riga, che costituisce un modello appropriato come spiegato sopra. Si applicano le impostazioni predefinite di output della community. Sono consentite linee vuote iniziali e finali (che non contengono caratteri o caratteri che non possono essere visti, come uno spazio) nell'output.


Test Case

Un caso di test composto da più parole:

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

Si noti che ci sono distorsioni apparenti nella forma dell'output del test case sopra (ad esempio, la riga due e la riga tre dell'output appaiono uguali). Questi sono perché non possiamo vedere gli spazi bianchi finali. Il tuo programma NON deve cercare di correggere queste distorsioni.


Criterio vincente

Questo è , quindi vince il codice più breve in byte in ogni lingua!


19
Ho in programma di fare altre sfide relative ai commenti su YouTube in futuro; da qui il YouTube Comments #1nel titolo.
Arjun,

1
È consentita la restituzione di una serie di righe?
qualcuno il

2
Possiamo prendere input come una matrice di caratteri e restituire una matrice di matrici di caratteri?
Shaggy,


3
L'ingresso può essere ""? Che dire di un singolo personaggio come "H"? In tal caso, quale dovrebbe essere l'output per entrambi i casi?
AdmBorkBork,

Risposte:


103

Brainfuck , 32 byte

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

Provalo online!

Lo stesso loop viene utilizzato per entrambe le metà del motivo.

Spiegazione:

,             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
È semplicemente fantastico. Stavo cercando di fare qualcosa in Brainfuck, ma è uscito circa 10 volte così a lungo e ancora non ha funzionato correttamente.
ElPedro,

34
Non avrei mai pensato di vedere una sfida in cui la risposta di Brainfuck stava effettivamente segnando in modo competitivo, lavoro fantastico!
Punti interrogativi

54

JavaScript (ES6), 36 byte

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

Provalo online!

Commentate

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
risposta molto bella: D
lois6b,

10
@MartinBarker Su Windows, sto usando Notepad ++ con il fine riga predefinito impostato su Unix (LF). Problema risolto una volta per tutte. :)
Arnauld,

3
Eccezionale! Puoi scrivere una spiegazione per questo per coloro che sono principianti per JS?
Akhoy

3
@Akhoy Ho aggiunto una versione commentata.
Arnauld

3
Grazie. Molto più chiaro ora.
Akhoy

47

05AB1E (legacy) ,  4  3 byte

Cancellato non &nbsp;4&nbsp;è più 4 :)

η.∊

Provalo online o verifica tutti i casi di test .

Spiegazione:

η     # 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)

Nella nuova versione di 05AB1E, ed esplicito »è richiesto dopo il η, motivo per cui uso la versione legacy di 05AB1E qui per salvare un byte.


7
Hmm, questo sembra a 6 byte in UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb,

10
@rubenvb In UTF-8 è davvero di più. 05AB1E utilizza, proprio come alcuni dei linguaggi di programmazione utilizzati in altre risposte (ad esempio Jelly; Japt; Charcoal) il proprio codice sorgente (che è CP-1252 nel caso di 05AB1E), dove ciascuno dei 256 caratteri che conosce è un byte singolo.
Kevin Cruijssen,

Va bene, abbastanza giusto :).
rubenvb,

@KevinCruijssen PHP sembra pensare che questi caratteri non siano validi per CP-1252, ma potrebbe essere solo un bug PHP: 3v4l.org/UC1QE
hanshenrik

7
@hanshenrik Buona domanda. In realtà non è CP-1252, ma in realtà la codifica 05AB1E , che è la codifica personalizzata che utilizza. I byte di questo codice in esadecimale sono 08 2e 17, che puoi eseguire e verificare con la --osabiebandiera: 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

smontato:

    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,'$'

Spiegazione

Loop 2 * input length - 1per ogni riga. La funzione di visualizzazione delle stringhe dell'API DOS ( INT 21H,9) scrive una $stringa terminata sullo schermo, quindi ogni volta attraverso il ciclo il carattere dopo l'ultimo da visualizzare viene scambiato con il terminatore di fine stringa.

Il contatore di loop viene confrontato con la lunghezza della stringa e se è maggiore (ovvero la parte ascendente dell'output) la posizione stringa / scambio viene incrementata, altrimenti viene diminuita (in realtà è -1-1+1che è meno byte di una struttura ramificata if / else).

Programma eseguibile autonomo, accetta la stringa di input dalla riga di comando.

Produzione

inserisci qui la descrizione dell'immagine

Scarica YT2.COM (43 byte)


1
La maggior parte delle versioni DOS hanno SI = 100h al caricamento di un file COM. Questo può farti risparmiare un byte sostituendo la prima istruzione con SHR SI, 1.
Gastropner

@gastropner molto intelligente! Si scopre che l'originale non verrà eseguito su DOS 1.0 poiché conta su CH 0 (costerebbe +2 byte per l'inizializzazione, il che non vale la pena solo per DOS 1). Aggiornato con la nuova versione!
640 KB

Devi inserire la data ogni volta che apri il terminale?
user14492

1
@ user14492 ha, no! Ho appena dimenticato di ritagliare quella parte dallo screenshot di DOS!
640 KB

19

Python 2 , 60 52 byte

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

Provalo online!

Python 3.8 (pre-release) , 50 byte

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

Provalo online!


2
Dipende da una prossima funzionalità di 3.8? Quale caratteristica?
alexis

7
@alexis Questo utilizza un un'espressione di assegnazione : x:=s[:n].
Arnauld,

1
Ah, lo vedo ora grazie :-) Ho già letto della funzione prima, non vedo l'ora. Mi manca ancora dai miei giorni in C ...
Alexis,

1
Questi però non stampano l'output. Fanno solo l'array, giusto?
Jaden Travnik

@JadenTravnik Python duplica automaticamente il risultato dell'ultima espressione se si esegue in modo interattivo attraverso una console
Xeverous

18

MATL , 8 byte

nZv"G@:)

Provalo online!

Per favore, mi piace questo post per lo smiley :)nel codice che mi ci è voluto molto tempo per farlo.

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 byte

Funzione prefisso tacito anonimo. Restituisce una matrice di caratteri riempita di spazio.

[:(}:,|.)]\

Provalo online!

]\ l'elenco dei prefissi

[:(... ) applica la seguente funzione a quell'elenco

|. l'elenco inverso

, anteposto a

}: l'elenco ridotto (senza l'ultimo elemento)


18
[:(e }:,|sembra così triste ...
Adám,

Ma è (}: che è una persona felice con i baffi fantasiosi
DonFusili

13

Perl 6 , 31 byte

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

Provalo online!

Blocco di codice anonimo che accetta una stringa e restituisce un elenco di righe.

Spiegazione:

{                      }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
È divertente che in questi giorni anche il golf Perl sia tra i concorrenti più leggibili.
cessò di girare in senso antiorario il

7
@ceasedtoturncounterclockwis Bene, questa è Perl 6. La risposta Perl 5 è ancora illeggibile
Jo King

12

Japt -R , 4 byte

å+ ê

Riduzione cumulativa su una stringa.

-1 byte grazie a @Shaggy

Provalo online!


Scettico sul "-R" che deve essere incluso nella stringa (senza di essa l'uscita non funziona)
Flying Thunder

3
@FlyingThunder Non essere più uno scettico :) vedi qui
Quintec,

@Quintec, ho iniziato a collegare le bandiere nelle intestazioni della mia soluzione a quel meta post per cercare di anticipare questo tipo di commenti.
Shaggy,

1
La convenzione abbastanza sicura è <language> + -flago <language> -flag. Inoltre,: | Ho dimenticato che la riduzione cumulativa era una cosa, giuro che l'ho saltata ogni volta che l'ho vista
solo ASCII il

@ ASCII-only Lo stesso, me lo sono ricordato solo perché pensavo come avrei risolto questo problema in APL e ho detto "Mi chiedo se Japt abbia questo builtin". Inoltre, non ho usato <language> -flag?
Quintec,

11

Japt -R , 9 7 byte

-2 byte grazie a Shaggy

Êõ@¯XÃê

Provalo online!



1
@Shaggy oh aspetta ... Ãè una cosa
ASCII-solo il

Altri 300 rappresentanti in arrivo non appena questa domanda può beneficiare di una taglia.
Shaggy,


1
@Quintec, la riduzione cumulativa funziona anche sulle stringhe, quindi non è necessario dividerla all'inizio. Direi anche che è abbastanza diverso da giustificare la pubblicazione da soli.
Shaggy,


10

Haskell, 52 50 44 byte

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

Provalo online!


Benvenuti nel sito. initsrichiede un'importazione da utilizzare, quindi dovrai aggiungere import Data.Listqualcosa di simile.
Wheat Wizard

@ SriotchilismO'Zaic Non ero sicuro che fosse necessario contare o meno. Aggiunto grazie!
Joseph Sible,

4
Inoltre, dovrei menzionare che abbiamo una chat room per parlare del golf di Haskell. Se hai pensieri o domande, è un posto magnifico.
Wheat Wizard

1
Non riesco a credere che ti sia venuto in mente esattamente quello che avrei pubblicato: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)

Provalo online!

-14 dalla conoscenza della funzione superiore di Giuseppe

-3 con indicizzazione più pulita

-4 grazie al passaggio di Nick Kennedy e Giuseppe a scanewrite

Evitare i loop (e substr) è bello.


2
i loop sono del tutto superflui, come lo è sapply- substringfarà quello che vuoi (con un'ulteriore riga vuota in coda) e per 65 byte ! Sicuramente non ci avrei pensato substringse non avessi visto il tuo buon uso di substrqui.
Giuseppe

1
Ahah, buona cattura! Penso di aver imparato di più sulle funzioni alternative per lo stesso lavoro dalle tue modifiche che da qualsiasi altra parte a questo punto.
CriminallyVulgar

2
Haha, R ha una quantità stupida di sinonimi con sottili differenze. Ogni volta che sento di conoscere lo strumento migliore per il lavoro, trovo qualcos'altro che è leggermente migliore in uno strano caso limite ...
Giuseppe

3
Che ne dici di provarlo online! usando scane write? Solo 59 byte!
Nick Kennedy,

1
@NickKennedy 58 byte se si sostituisce ""con 1.
Giuseppe

7

Gelatina , 5 4 byte

-1 byte grazie a @JonathanAllan !

¹ƤŒḄ

Provalo online! Penso che questa sia la mia seconda risposta Jelly? Non so se sia ottimale. Sono più convinto che sia ottimale. Restituisce una matrice di linee.

Spiegazione

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

Un altro approccio, proposto da @JonathanAllan, è ;\ŒḄ, che riduce cumulativamente ( \) la concatenazione ( ;), che è un altro modo per generare prefissi.


Ci è permesso di produrre una serie di linee, in modo da poter Ycancellare il codice (farei il piè di pagina ÇYo ÇŒṘper evitare la stampa di frantumazione implicita di un programma completo). Inoltre, questo è implementato in modo equivalente come ;\ŒḄper lo stesso conteggio byte (inoltre puoi passare l'argomento "blah"poiché Jelly lo interpreta come un elenco di caratteri - il tuo è in realtà un elenco di elenchi di caratteri, come vedrai se fai il piè di pagina ÇŒṘ)
Jonathan Allan,

@JonathanAllan grazie! molto interessante :)
Conor O'Brien,

7

Python 3.8 (pre-release) , 48 byte

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

Provalo online!

Utilizza espressioni di assegnazione con :=per accumulare un elenco di prefissi e poi di nuovo per salvare il risultato per concatenare il suo contrario (senza il primo carattere).

Python 2 , 51 byte

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

Provalo online!

Abbiamo quasi la seguente bella soluzione a 45 byte, ma ha la stringa originale due volte e non vedo un modo breve per risolvere questo problema.

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

Provalo online!


Non avresti bisogno di aggiungere qualche riga nuova e stampare per ottenere l'output desiderato?
Jaden Travnik

Qualcosa del genere print('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik Le impostazioni predefinite della community (che segue questa sfida) consentono funzioni oltre ai programmi. E l'autore della sfida ha detto nei commenti che stanno bene con un elenco di stringhe all'interno del join come consentito per impostazione predefinita , anche se io stesso non mi piace questo come predefinito e lo ho sottoposto a downgrade. Vedi anche il riepilogo delle regole di Python .
xnor

Huh. Ok, grazie per averlo sottolineato. Sono nuovo ¯_ (ツ) _ / ¯. In tal caso, ecco una soluzione a 45 byte in concorrenza:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@JadenTravnik Nessun problema, purtroppo le regole sono sparse sul posto. Il tuo esempio però è uno snippet che non è consentito. Deve fare input e output come s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Vedi gli esempi in alto qui .
xnor

6

Carbone , 5 byte

G^Lθθ

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione: disegna un poligono pieno, ^specifica che i lati sono in basso a destra e in basso a sinistra (il poligono si chiude automaticamente), Lθspecifica la lunghezza di quei lati come la lunghezza dell'input originale e il finale θspecifica la stringa di riempimento.


6

C # (compilatore interattivo Visual C #) , 123 109 94 84 74 byte

Presuppone che possiamo restituire un array di array di caratteri (credo che possiamo, poiché un array di caratteri è una rappresentazione valida per una stringa e un array di stringhe è una rappresentazione valida per più righe)

a=>new int[a.Length*2-1].Select((b,i)=>a.SkipLast(Math.Abs(a.Length-i-1)))

Provalo online!


5

Attache , 15 byte

Bounce@Prefixes

Provalo online!

Abbastanza semplice. Bounces (aggiunge il rovescio senza centro) Prefixesdell'input.

In alternativa, 21 byte Bounce@{_[0..0:~-#_]} :, reimplementazione del prefisso.


5

Brachylog (v2), 6 byte

a₀ᶠ⊆.↔

Provalo online!

Invio di funzioni, restituendo una matrice di righe. Liberamente basato sulla risposta di @ Fatalize .

Spiegazione

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

L'ordine di tie-break qui è impostato da , che, se usato con questo schema di flusso, preferisce il più breve output possibile, interrotto posizionando gli elementi dati il ​​prima possibile . L'output più breve possibile è ciò che vogliamo qui (poiché non è possibile avere prefissi duplicati) e posizionando gli elementi dati (cioè i prefissi) il prima possibile li inserirai nella prima metà (arrotondata per eccesso) del produzione. Dato che stiamo anche richiedendo che vengano posizionati nello stesso ordine, ci capita di ottenere esattamente lo schema di cui abbiamo bisogno anche se la descrizione che abbiamo dato a Brachylog è molto generale; i tiebreak si risolvono esattamente, facendo sì che Brachylog scelga l'output che vogliamo piuttosto che qualche altro output che obbedisce alla descrizione.


5

PowerShell, 89 87 66 byte

-2 byte grazie a @AdmBorkBork

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

Provalo online!

In realtà non ha funzionato come specificato prima, mi dispiace per quello! L'ho modificato e sono anche riuscito a radere qualche byte.


È possibile --$dinvece di ($d-1)salvare un paio alla fine.
AdmBorkBork,

@AdmBorkBork Grazie.
Gabriel Mills,

Questo non funziona per l'inserimento di un singolo carattere, purtroppo.
AdmBorkBork,

5

PowerShell , 46 byte

($l=$args|% t*y|%{($s+=$_);++$i})+$l[$i..0]|gu

Provalo online!


PowerShell , 42 byte (YouTube Special, sporco)

È noto che la lunghezza massima di un commento su YouTube è di 10.000 caratteri. Ok, usa questo come limite superiore.

($l=$args|% t*y|%{($s+=$_)})+$l[1e4..0]|gu

Provalo online!


4

APL (Dyalog Unicode) , SBCS da 9 byte

Funzione prefisso tacito anonimo. Restituisce un elenco di stringhe.

(⊢,1↓⌽),\

Provalo online!

,\ l'elenco dei prefissi (acceso, la concatenazione cumulativa)

(... ) applica la seguente funzione a quell'elenco:

 l'elenco invertito

1↓ rilascia il primo oggetto

, anteporre

 l'elenco non modificato




4

SNOBOL4 (CSNOBOL4) , 118 byte

	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

Provalo online!

Sembra che ci sia un bug in questa implementazione di SNOBOL; il tentativo di sostituire l'etichetta Dcon l'etichetta 2provoca un errore, sebbene il manuale di Vanilla SNOBOL indichi che (enfasi aggiunta)

Se è presente un'etichetta, deve iniziare con il primo carattere della riga. Le etichette forniscono un nome per l'istruzione e fungono da destinazione per il trasferimento del controllo dal campo GOTO di qualsiasi istruzione. Le etichette devono iniziare con una lettera o una cifra, eventualmente seguita da una stringa arbitraria di caratteri. Il campo dell'etichetta viene terminato dal carattere vuoto, dalla scheda o dal punto e virgola. Se il primo carattere di una riga è vuoto o tab, il campo etichetta è assente.

La mia supposizione è che l'interprete CSNOBOL supporti solo una singola etichetta che inizia con un numero intero.


4

APL + WIN, 31 byte

Richiede l'immissione di una stringa:

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

Spiegazione:

(¯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 byte

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

Provalo online!

Input è a stringe output è aseq<string>

Un'altra soluzione potrebbe essere let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]per 80 byte ... Non sono sicuro che valga la pena esaminarlo.


4

sed , 31 35 byte

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

Provalo online!

Spiegazione

All'inizio di ogni iterazione del ciclo, lo spazio del modello è un "pezzo centrale" dell'output desiderato e ogni ciclo aggiunge una copia abbreviata all'inizio e alla fine.

: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
Bello, ma la linea mediana (l'input originale completo) sembra essere emessa 3 volte. Almeno con GNU sed. Lo stesso su TIO. Quale sedimplementazione usi e come passi l'input? (A proposito, cambiando la sostituzione per s/.\n.*\|.$//risolverlo.)
manatwork

2
Ah, hai ragione. Non è un problema con la mia sedimplementazione (usando GNU versione 4.2.1), non ho notato il bug. Ho giocato con altre correzioni e non riesco a trovare nulla che aggiunga meno di quattro byte, quindi sto adottando la tua correzione, grazie.
Sophia Lechner,

4

Python 2 , 131 100 84 byte

La mia prima risposta su Code Golf!

-47 byte complessivi grazie a @ 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)

Provalo online!


1
Benvenuti in PCG! Assicurati di leggere il tour e il codice di condotta . Buona soluzione!
akozi,

2
Per python puoi usare ;s invece di newline per evitare il rientro. Inoltre non c'è bisogno di spazi tra printe''
Wheat Wizard

Grazie per i suggerimenti @ SriotchilismO'Zaic, mi ha davvero aiutato a ridurre il mio numero di byte!
Yoni Matz,

2
E un'ultima cosa, se si crea auna stringa anziché un elenco, non è più necessario joine si può solo print a.
Wheat Wizard

4
Non valido, deve essere un programma o una funzione completi, mentre si presume che l'input sia attivo x.
ASCII

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.