# It took me a lot of time to make this, pls like. (YouTube Comments #1)

Hold up..... this isn't trolling.

# Background

These days on YouTube, comment sections are littered with such patterns:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S


where String is a mere placeholder and refers to any combination of characters. These patterns are usually accompanied by a It took me a lot of time to make this, pls like or something, and often the OP succeeds in amassing a number of likes.

Although you've got a great talent of accumulating upvotes on PPCG with your charming golfing skills, you're definitely not the top choice for making witty remarks or referencing memes in YouTube comment sections. Thus, your constructive comments made with deliberate thought amass a few to no 'likes' on YouTube. You want this to change. So, you resort to making the abovementioned clichéd patterns to achieve your ultimate ambition, but without wasting any time trying to manually write them.

Simply put, your task is to take a string, say s, and output 2*s.length - 1 substrings of s, delimited by a newline, so as to comply with the following pattern:

(for s = "Hello")

H
He
Hel
Hell
Hello
Hell
Hel
He
H


# Input

A single string s. Input defaults of the community apply. You can assume that the input string will only contain printable ASCII characters.

# Output

Several lines separated by a newline, constituting an appropriate pattern as explained above. Output defaults of the community apply. Leading and trailing blank (containing no characters or characters that cannot be seen, like a space) lines in the output are permitted.

# Test Case

A multi-word test case:

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


Note that there are apparent distortions in the above test case's output's shape (for instance, line two and line three of the output appear the same). Those are because we can't see the trailing whitespaces. Your program need NOT to try to fix these distortions.

# Winning Criterion

This is , so the shortest code in bytes in each language wins!

• I am planning to make some more YouTube comments related challenges in the future; hence the YouTube Comments #1 in the title. – Arjun Feb 27 at 10:31
• Is returning a array of lines allowed? – someone Feb 27 at 11:00
• Can we take input as an array of characters and return an array of arrays of characters? – Shaggy Feb 27 at 11:43
• Closely related – Giuseppe Feb 27 at 15:49
• Can the input be ""? What about a single character like "H"? If so, what should be the output for both of those cases? – AdmBorkBork Feb 27 at 20:41

# Red, 78 bytes

func[s][repeat n l: length? s[print copy/part s n]loop l[take/last s print s]]


Try it online!

# x86 machine code (Linux), 53 bytes

00000000: 89cf 31d2 4252 e814 0000 005a 803c 1100  ..1.BR.....Z.<..
00000010: 75f2 4a52 e806 0000 005a 09d2 75f4 c36a  u.JR.....Z..u..j
00000020: 015b 6a04 58cd 806a 0ab2 0189 e1b0 04cd  .[j.X..j........
00000030: 805e 89f9 c3                             .^...


Assembly:

section .text
global func
func:				;Main function with args: char* ecx
;Clear registers
mov edi, ecx			;push pointer to original string
xor edx, edx			;message length, start at 0
loop_a:				;Increasing length loop:
inc edx				;increment message length
push edx			;save message length
call print_text			;print string with newline
pop edx				;get message length
cmp byte [ecx + edx], 0		;If not at end of string:
jne loop_a			;continue looping
loop_b:				;Decreasing length loop:
dec edx				;decrement message length
push edx			;save message length
call print_text			;print string with newline
pop edx				;get message length
or edx, edx			;If edx != 0:
jne loop_b			;Continue loop
ret

print_text:			;Function to print string (pointer in ecx) with newline:
push 1
pop ebx				;fd of stdout
push 4
pop eax				;syscall #4 (write)
int 0x80			;run syscall (msg is in ecx)
push 0xA			;push newline
mov dl, 1			;set message length to 1
mov ecx, esp			;set pointer for syscall to top of stack
mov al, 4			;syscall #4 (write)
int 0x80			;run syscall
pop esi				;reset stack pointer
mov ecx, edi			;get pointer to original string
ret


Try it online!

• Tip: try and merge the increasing and decreasing length loops, like i did in my x64 answer. – moonheart08 Mar 6 at 23:47

# SAP ABAP (Unicode), 143 bytes

FORM i USING s.DATA(w) = 2 * strlen( s ).WHILE w > 0.w = w - 1.IF w < strlen( s ).WRITE:/ s(w).ELSE.WRITE:/ s(sy-index).ENDIF.ENDWHILE.ENDFORM.


Pretty straightforward subroutine. I'm using ABAP's substring access var+offset(length) and the system variable sy-index, which represents the index of the current loop. Other than that it's probably pretty self-explanatory, even though it's ABAP.

# SAP ABAP (Non-Unicode), 141 bytes

FORM i USING s.DATA(w) = 2 * strlen( s ).WHILE w > 0.w = w - 1.IF w < strlen( s ).WRITE:/ s(w).ELSE.WRITE:/ s(sy(10)).ENDIF.ENDWHILE.ENDFORM.


Saving two bytes here by accessing the index component of sy like a substring, despite it being an integer value. In Unicode systems, characters are obviously multi-byte values, therefore using offsets is not allowed in mixed-type structures like sy. However, in a non-Unicode (ASCII-based) system, both digits of a number and characters are represented as one byte each, and offsets are allowed for structures like sy.

Conveniently index is the first 10-byte component of structure sy, so we don't need to use an offset. Otherwise we'd not be able to save anything here, as sy+x(10) is just as long as sy-index - or even longer if the offset was >= 10.

Output of both programs is obviously the same, screenshot below.

# Java 8, 92 91 bytes

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


Try it online!

-1 byte by using a for loop instead of a while

# Husk, 6 bytes

S+o↔hḣ


Try it online!

Takes input as an argument.

S      Apply the first argument to the third argument and to the second argument applied to the third argument:
+     concatenation,
o     the composition of
↔    reversal
h    with removal of the last element,
ḣ     every prefix of
the input.


...I may need to not try to explain combinators in plain English.

• I feel like there might be a way to shave a byte off this on account of this having used both S and o, but I'm not sure... – Unrelated String Mar 20 at 6:12

# T-SQL query, 119 bytes

SELECT left(@,n)FROM(SELECT*,number/2+1n,len(@)k,number%2-.5m
FROM spt_values)x
WHERE type='P'and n+m<k
ORDER BY(n-k)*m


Try it online

# Gaia, 3 bytes

…ṫṣ


Try it online!

As simple as it gets.

…	| prefixes
ṫ	| palindromize
ṣ	| join with newlines


## protected by Community♦Feb 28 at 17:45

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).