이것을 만드는 데 많은 시간이 걸렸습니다. (YouTube 댓글 # 1)


84

잠깐만 ..... 이것은 트롤링이 아니다.


배경

요즘 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은 동일하게 나타남). 그것들은 후행 공백을 볼 수 없기 때문입니다. 프로그램은 이러한 왜곡을 고치려고하지 않아도됩니다.


승리 기준

이것은 이므로 각 언어에서 가장 짧은 바이트 코드가 이깁니다!


19
앞으로 YouTube에 더 많은 의견을 제기 할 계획입니다. 따라서 YouTube Comments #1제목에서.
Arjun

1
행 배열을 반환 할 수 있습니까?
누군가

2
문자 배열로 입력을 받아서 문자 배열을 반환 할 수 있습니까?
얽히고 설킨


3
입력이 될 수 ""있습니까? 단일 문자는 "H"어떻습니까? 그렇다면 두 경우 모두의 결과는 무엇입니까?
AdmBorkBork

답변:


103

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
]

2
그건 정말 대단합니다. 나는 brainfuck에서 무언가를하려고했지만이 길이가 약 10 번 나왔지만 여전히 제대로 작동하지 않았습니다.
ElPedro

34
나는 brainfuck 답변이 실제로 경쟁에서 점수를 매기는 도전을 볼 수 있다고 생각하지 않았습니다!
물음표

54

자바 스크립트 (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

3
매우 좋은 답변 : D
lois6b

10
@MartinBarker Windows에서는 기본 줄 끝이로 설정된 상태에서 메모장 ++를 사용하고 Unix (LF)있습니다. 한 번에 문제가 해결되었습니다. :)
Arnauld

3
대박! JS를 처음 접하는 사람들을 위해 이에 대한 설명을 쓸 수 있습니까?
Akhoy

3
@Akhoy 나는 댓글 버전을 추가했습니다.
Arnauld

3
감사합니다. 지금 훨씬 더 명확합니다.
Akhoy

47

05AB1E (레거시) ,  4  3 바이트

밖으로 교차하는 것은 &nbsp;4&nbsp;더 이상 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의 레거시 버전을 사용하여 바이트를 저장합니다.


7
흠, 이것은 UTF8에서 6 바이트로 보인다 :\xce\xb7\x2e\xe2\x88\x8a
rubenvb

10
@rubenvb UTF-8에서는 실제로 더 많습니다. 05AB1E는 다른 답변에 사용되는 일부 프로그래밍 언어 (예 : Jelly; Japt; Charcoal)와 마찬가지로 자체 소스 코드 ( 05AB1E의 경우 CP-1252 )를 사용합니다. 여기서 256 개의 문자는 단일 바이트.
Kevin Cruijssen

좋아, 충분히 공평 해 :).
rubenvb

@KevinCruijssen PHP는 이러한 문자가 CP-1252에 유효하지 않다고 생각하는 것 같지만 PHP 버그 일 수 있습니다. 3v4l.org/UC1QE
hanshenrik

7
@hanshenrik 좋은 질문입니다. 실제로 CP-1252는 아니지만 실제로 사용되는 사용자 지정 인코딩 인 05AB1E encoding 입니다. 16 진수로 된이 코드의 바이트는 다음 플래그로 08 2e 17실행하고 확인할 수 있습니다 --osabie. tio.run/…
Adnan

21

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 분기 구조보다 바이트 수가 더 적습니다).

독립 실행 형 프로그램으로 명령 줄에서 입력 문자열을 가져옵니다.

산출

여기에 이미지 설명을 입력하십시오

YT2.COM 다운로드 (43 바이트)


1
COM 파일을로드 할 때 대부분의 DOS 특징 은 SI = 100h입니다. 첫 번째 명령어를로 바꾸면 바이트를 절약 할 수 있습니다 SHR SI, 1.
gastropner

@ gastropner 매우 영리한! CH가 0으로 계산되기 때문에 어쨌든 DOS 1.0에서 원본이 실행되지 않습니다. 새 버전으로 업데이트되었습니다!
640KB

터미널을 열 때마다 날짜를 입력해야합니까?
user14492

1
@ user14492 하, 아니! 방금 DOS 스크린 샷에서 해당 부분을 자르는 것을 잊었습니다!
640KB

19

파이썬 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]

온라인으로 사용해보십시오!


2
이것은 3.8의 향후 기능에 의존합니까? 어떤 기능?
Alexis

7
@alexis 할당 식을 사용하고 있습니다 : x:=s[:n].
Arnauld

1
아, 이제 감사합니다. :-) 이전에이 기능에 대해 읽었으며 기대하고 있습니다. 아직도 내 C 날에서 그것을 그리워 ...
알렉시스

1
그러나 출력을 인쇄하지 않습니다. 그들은 단지 배열을 만듭니다.
Jaden Travnik

@JadenTravnik Python은 콘솔을 통해 대화식으로 실행되는 경우 마지막 표현식 결과를 자동으로 dupms
Xeverous

18

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

17

J , 11 바이트

익명의 암묵적 접두사 기능. 공백으로 채워진 문자 행렬을 반환합니다.

[:(}:,|.)]\

온라인으로 사용해보십시오!

]\ 접두사 목록

[:() 그 목록에 다음 기능을 적용하십시오

|. 반대 목록

, 접두사

}: 축소 된 (마지막 항목없이) 목록


18
[:(}:,|보면 너무 슬퍼 ...
아담

그러나 그것은 (} : 멋진 수염을 가진 행복한 사람입니다
DonFusili

13

펄 6 , 31 바이트

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

온라인으로 사용해보십시오!

문자열을 가져와 줄 목록을 반환하는 익명 코드 블록입니다.

설명:

{                      }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
요즘 골프 펄조차도 가장 잘 읽을 수있는 참가자 중 하나입니다.
반 시계를 돌리지

7
@ceasedtoturncounterclockwis 글쎄요, 이것은 Perl 6입니다. Perl 5 답변 은 여전히 ​​읽을 수 없습니다
Jo King

12

Japt -R , 4 바이트

å+ ê

줄에서 누적 감소.

@Shaggy 덕분에 -1 바이트

온라인으로 사용해보십시오!


문자열에 포함되어야하는 "-R"에 대한 회의론 (출력이 작동하지 않음)
Flying Thunder

3
수 @FlyingThunder 회의론자 더 : 여기를 참조
Quintec

@Quintec, 솔루션 헤더의 플래그를 메타 게시물에 연결하여 이러한 종류의 주석을 선점하려고했습니다.
얽히고 설킨

1
컨벤션은 <language> + -flag또는 <language> -flag입니다. 또한 : | 나는 누적 감소라는 것을 잊었다. 나는 그것을 볼 때마다 그것을 건너 뛰었다 고 맹세한다
ASCII-only

@ ASCII-only APL에서이 문제를 어떻게 해결할지 생각하고 "Japt에이 내장 기능이 있는지 궁금합니다"라고 생각했기 때문에 기억했습니다. 또한 <language>를 사용하지 않았 -flag습니까?
Quintec

11

apt -R , 9 7 바이트

Shaggy 덕분에 -2 바이트

Êõ@¯XÃê

온라인으로 사용해보십시오!



1
@Shaggy 아 잠깐만 ... Ã일입니다
ASCII 전용

이 질문에 현상금이 지급 되 자마자 또 다른 300 명의 담당자가 출발합니다.
얽히고 설킨


1
@Quintec, 누적 축소 작업도 문자열에서 작동하므로 처음에 분할 할 필요가 없습니다. 또한 본인이 직접 게시 할 수있을만큼 다르다고 말하고 싶습니다.
얽히고 설킨


10

하스켈, 52 50 44 바이트

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

온라인으로 사용해보십시오!


사이트에 오신 것을 환영합니다. inits가져 오기를 사용해야하므로 추가 import Data.List하거나 이와 유사한 것을 사용해야합니다 .
밀 마법사

@ SriotchilismO'Zaic 그것이 계산에 필요한지 확실하지 않았습니다. 감사합니다!
Joseph Sible

4
또한 Haskell 골프와 대화 할 수 있는 대화방이 있습니다 . 생각이나 질문이 있으면 좋은 곳입니다.
밀 마법사

1
나는 당신이 내가 올릴 것을 정확히 생각해 낼 수 없다 :import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6

9

R , 79 65 62 58 바이트

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

온라인으로 사용해보십시오!

주세페의 뛰어난 기능 지식으로 -14

클리너 인덱싱이있는 -3

에 닉 케네디와 주세페의 움직임에 -4 감사 scanwrite

루프 (및 substr)를 피하는 것이 좋습니다.


2
루프는 한, 철저하게 필요하지 않습니다 sapply- substring당신이, 그리고에 대한 (빈 줄을 뒤에 추가로) 원하는 것을 할 것입니다 65 바이트 ! 나는 substring당신의 좋은 사용법을 보지 못했다면 분명히 생각하지 못했을 것 substr입니다.
주세페

1
하하, 잘 잡아! 이 시점에서 다른 곳보다 편집에서 동일한 작업의 대체 기능에 대해 더 많이 배웠습니다.
CriminallyVulgar

2
하하 R은 미묘한 차이가있는 어리석은 양의 동의어를 가지고 있습니다. 작업에 가장 적합한 도구를 알고 있다고 생각 될 때마다 이상한 경우에 약간 더 좋은 것을 발견합니다.
Giuseppe

3
방법에 대해 온라인으로보십시오! 사용 scan하고 write? 59 바이트 만!
Nick Kennedy

1
@NickKennedy로 바꾸면 58 바이트 ""입니다 1.
주세페

7

젤리 , 5 4 바이트

@JonathanAllan 덕분에 -1 바이트 !

¹ƤŒḄ

온라인으로 사용해보십시오! 나는 이것이 나의 두 번째 젤리 대답이라고 생각합니까? 이것이 최적인지 모르겠습니다. 나는 그것이 최적이라고 확신합니다. 행 배열을 반환합니다.

설명

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

@JonathanAllan이 제안한 또 다른 접근법 은 접두사를 생성하는 또 다른 방법 인 연결 ( ) ;\ŒḄ을 누적 적으로 줄입니다 ( \) ;.


우리는 줄의 배열을 만들 수 있으므로 Y코드에서 벗어날 수 있습니다 (바닥 글을 만들 ÇY거나 ÇŒṘ전체 프로그램의 암시 적 스매싱 인쇄를 피하기 위해). 부수적으로 이것은 ;\ŒḄ동일한 바이트 수에 대해서도 동일하게 구현됩니다 (또한 "blah"Jelly가 이것을 문자 목록으로 해석하는 것처럼 인수를 전달할 수 있습니다 -실제로는 문자 목록으로 표시됩니다) 바닥 글을 만들면 ÇŒṘ)
Jonathan Allan

@JonathanAllan 감사합니다! 매우 흥미로운 :)
코너 오브라이언

7

Python 3.8 (시험판) , 48 바이트

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

온라인으로 사용해보십시오!

사용 할당 식 으로 :=하는 접두사의 목록을 축적 한 후 다시 (첫 번째 문자없이) 그 역을 연결하는 결과를 저장합니다.

파이썬 2 , 51 바이트

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

온라인으로 사용해보십시오!

우리는 다음과 같은 멋진 45 바이트 솔루션을 거의 가지고 있지만 원래 문자열이 두 번 있으며이를 해결할 수있는 짧은 방법이 없습니다.

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

온라인으로 사용해보십시오!


원하는 출력을 얻기 위해 줄 바꿈을 추가하고 인쇄 할 필요가 없습니까?
Jaden Travnik

같은 것 print('\n'.join(f(s))) ?
Jaden Travnik

@JadenTravnik 커뮤니티 기본값 (이 도전이 따르는) 프로그램 외에도 기능허용 합니다. 그리고 도전 과제 작성자는 기본적 으로 허용 되는대로 문자열 목록이 결합되어 있으면 괜찮습니다. 하지만 기본적으로 마음에 들지 않고 다운 보텀을 사용했습니다. Python 규칙 요약 도 참조하십시오 .
xnor

허. 좋아요, 지적 해 주셔서 감사합니다. 새로운 ¯_ (ツ) _ / ¯. 이 경우 경쟁 45 바이트 솔루션은 다음과 같습니다.x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik

@JadenTravnik 문제 없습니다, 규칙은 불행히도 그 곳에 퍼져 있습니다. 그러나 귀하의 예는 허용되지 않는 스 니펫입니다. 다음과 같은 입력 및 출력을 수행해야합니다 s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. 여기 상단예를 참조 하십시오 .
xnor

6

, 5 바이트

G^Lθθ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명 : 채워진 다각형을 그립니다. ^면이 오른쪽 아래로 왼쪽으로 Lθ지정되고 (다각형은 자동으로 자체 닫힙니다), 해당면의 길이는 원래 입력의 길이로 θ지정되고 마지막 은 채우기 문자열을 지정합니다.




5

Brachylog (v2), 6 바이트

a₀ᶠ⊆.↔

온라인으로 사용해보십시오!

함수 제출, 라인 배열 반환 @Fatalize의 답변을 느슨하게 기반으로 합니다.

설명

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

여기서 Tiebreak 순서는 이 흐름 패턴과 함께 사용될 때 주어진 요소를 가능한 한 빨리 배치하여 가능한 가장 짧은 출력을 선호 합니다 . 가능한 가장 짧은 출력은 우리가 원하는 것입니다 (중복 접두사를 가질 수 없기 때문에), 주어진 요소 (즉 접두사)를 가능한 한 빨리 배치하면 첫 번째 반 (반올림)에 배치됩니다 산출. 동일한 순서로 배치해야한다는 점을 감안할 때 Brachylog에 대한 설명이 매우 일반적이더라도 필요한 패턴을 정확하게 얻습니다. 타이 브레이크는 정확히 올바르게 작동하여 Brachylog가 설명에 따르는 다른 출력보다는 원하는 출력을 선택하게합니다.


5

PowerShell, 89 87 66 바이트

@AdmBorkBork 덕분에 -2 바이트

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

온라인으로 사용해보십시오!

실제로 이전에 지정한대로 작동하지 않았습니다. 죄송합니다. 나는 그것을 편집하고 일부 바이트를 깎을 수 있었다.


당신은 할 수 --$d대신의 ($d-1)말에 몇 저장합니다.
AdmBorkBork

@AdmBorkBork 감사합니다.
가브리엘 밀스

슬프게도 단일 문자 입력에는 작동하지 않습니다.
AdmBorkBork





4

SNOBOL4 (CSNOBOL4) , 118 바이트

	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

온라인으로 사용해보십시오!

이 SNOBOL 구현에는 버그가있는 것 같습니다. Vanilla SNOBOL 설명서에 다음과 같이 표시되어 있지만 D레이블을 레이블로 바꾸려고하면 2오류가 발생합니다 (강조 추가).

레이블이 있으면 행의 첫 문자로 시작해야합니다. 레이블은 명령문의 이름을 제공하며 명령문의 GOTO 필드에서 제어를 전송하는 대상으로 사용됩니다. 레이블은 문자 나 숫자로 시작해야하며 선택적으로 임의의 문자열이 뒤 따릅니다. 레이블 필드는 공백, 탭 또는 세미콜론 문자로 끝납니다. 줄의 첫 문자가 비어 있거나 탭이면 레이블 필드가 없습니다.

CSNOBOL 인터프리터는 정수로 시작하는 단일 레이블 만 지원한다고 가정합니다.


4

APL + WIN, 31 바이트

문자열 입력을위한 프롬프트 :

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

설명:

(¯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 코어) , 67 61 바이트

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

온라인으로 사용해보십시오!

입력은 a string이고 출력은 aseq<string>

또 다른 해결책은 let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]80ish 바이트 일 수 있습니다 ... 조사 할 가치가 있는지 확실하지 않습니다.


4

sed , 31 35 바이트

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

온라인으로 사용해보십시오!

설명

루프의 각 반복이 시작될 때 패턴 공간은 원하는 출력의 "중앙 청크"이며 각 루프는 상단 및 하단에 단축 사본을 추가합니다.

: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
좋은 점이지만 중간 줄 (전체 원본 입력)이 3 번 출력되는 것 같습니다. 적어도 GNU에서는 sed. TIO에서도 마찬가지입니다. 어떤 sed구현을 사용하고 어떻게 입력을 전달합니까? (BTW, 대체를 s/.\n.*\|.$//수정 하여 수정)
manatwork

2
아 맞아. 내 sed구현 (GNU 버전 4.2.1 사용)에 문제 가 아니며 버그를 발견하지 못했습니다. 나는 다른 수정 프로그램을 가지고 놀았으며 4 바이트 미만을 추가하는 것을 찾을 수 없으므로 수정 프로그램을 채택하고 있습니다. 감사합니다.
소피아 레크 너

4

파이썬 (2) , 131 (100) 84 바이트

Code Golf에 대한 첫 번째 답변!

@ SriotchilismO'Zaic 덕분에 전체 -47 바이트

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

온라인으로 사용해보십시오!


1
PCG에 오신 것을 환영합니다! 둘러보기행동 강령을 반드시 읽으십시오 . 좋은 해결책!
akozi

2
파이썬의 ;경우 들여 쓰기를 피하기 위해 줄 바꿈 대신 s를 사용할 수 있습니다 . 또한 사이의 공간이 필요하지 않습니다 print''
밀 마법사

@ SriotchilismO'Zaic 팁에 감사드립니다. 내 바이트 수를 줄이는 데 정말로 도움이되었습니다!
Yoni Matz

2
그리고 마지막으로, a목록이 아닌 문자열을 만들면 더 이상 필요하지 않으며 join그냥 할 수 있습니다 print a.
밀 마법사

4
입력이에 있다고 가정하지만 전체 프로그램 또는 함수 여야합니다 x.
ASCII 전용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.