잠깐만 ….. 이것은 트롤링이 아니다.
배경
요즘 YouTube에서는 댓글 섹션에 다음과 같은 패턴이 있습니다.
S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S
where String
는 단순한 자리 표시 자이며 문자 조합을 나타냅니다. 이러한 패턴에는 대개 하나 It took me a lot of time to make this, pls like
이상의 무언가가 수반되며 OP는 종종 여러 가지 좋아요를 모으는 데 성공합니다.
작업
매력적인 골프 기술로 PPCG에 대한 찬성 투표에 큰 재능이 있지만 YouTube 댓글 섹션에서 재치있는 말을하거나 밈을 참조하기위한 최고의 선택은 아닙니다. 따라서 고의로 생각한 의견은 YouTube에서 ‘좋아요’에 불과합니다. 이 변경을 원합니다. 따라서, 당신은 궁극적 인 야망을 이루기 위해 위에서 언급 한 진부한 패턴을 만드는 데 의존하지만, 수동으로 글을 쓰려고 노력하는 데 시간을 낭비하지 않습니다.
간단히 말해서 , 다음 패턴을 준수하기 위해 문자열, 예를 들어 s
, 개행 문자로 구분 된의 2*s.length - 1
하위 문자열을 출력 s
하는 것입니다.
(for s
= “안녕하세요”)
H
He
Hel
Hell
Hello
Hell
Hel
He
H
입력
하나의 문자열 s
. 커뮤니티의 입력 기본값이 적용됩니다. 입력 문자열에 인쇄 가능한 ASCII 문자 만 포함되어 있다고 가정 할 수 있습니다.
산출
여러 줄이 개행으로 분리되어 위에서 설명한대로 적절한 패턴을 구성합니다. 커뮤니티의 출력 기본값이 적용됩니다. 출력에서 선행 및 후행 공백 (공백과 같이 볼 수없는 문자 또는 문자를 포함하지 않음) 행이 허용됩니다.
테스트 사례
여러 단어로 된 테스트 사례 :
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
위 테스트 사례의 출력 형태에는 명백한 왜곡이 있습니다 (예를 들어, 출력의 라인 2와 라인 3은 동일하게 나타남). 그것들은 후행 공백을 볼 수 없기 때문입니다. 프로그램은 이러한 왜곡을 고치려고하지 않아도됩니다.
승리 기준
이것은 code-golf 이므로 각 언어에서 가장 짧은 바이트 코드가 이깁니다!
답변
brainfuck , 32 바이트
,[[<]>[.>]++++++++++.,[>>]<[-]<]
패턴의 양쪽 절반에 동일한 루프가 사용됩니다.
설명:
, 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
]
답변
자바 스크립트 (ES6), 36 바이트
f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s
댓글
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
답변
05AB1E (레거시) , 4 3 바이트
밖으로 교차하는 것은 4
더 이상 4입니다 🙂
η.∊
온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .
설명:
η # 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)
05AB1E의 새 버전에서는. 다음에 명시 적이 »
필요 η
하므로 여기에서 05AB1E의 레거시 버전을 사용하여 바이트를 저장합니다.
답변
IBM PC DOS, 8088 어셈블리, 44 43
d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24
미 조립 :
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,'$'
설명
2 * input length - 1
각 행에 대해 루프하십시오 . DOS API의 문자열 표시 기능 ( INT 21H,9
)은 $
화면에 종료 문자열을 작성 하므로 루프를 통해 매번 마지막에 표시되는 문자가 문자열 끝 종료 자로 바뀝니다.
루프 카운터는 문자열 길이와 비교되며, 길이가 더 큰 경우 (출력의 오름차순을 의미) 문자열 / 스왑 위치가 증가하고 그렇지 않으면 감소합니다 (실제로 -1-1+1
는 if / else 분기 구조보다 바이트 수가 더 적습니다).
독립 실행 형 프로그램으로 명령 줄에서 입력 문자열을 가져옵니다.
산출
- gastropner 덕분에 -1 바이트 !
답변
파이썬 2 , 60 52 바이트
f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]
Python 3.8 (시험판) , 50 바이트
f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]
답변
MATL , 8 바이트
nZv"G@:)
:)
코드 에서 스마일 에 대한이 게시물처럼 제게 많은 시간이 걸렸습니다.
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
답변
J , 11 바이트
익명의 암묵적 접두사 기능. 공백으로 채워진 문자 행렬을 반환합니다.
[:(}:,|.)]\
]\
접두사 목록
[:(
… )
그 목록에 다음 기능을 적용하십시오
|.
반대 목록
,
접두사
}:
축소 된 (마지막 항목없이) 목록