중간을 찾는 애니메이션


10

비어 있지 않은 문자열이 주어지면 한두 문자가 될 때까지 첫 번째 문자와 마지막 문자를 제거하십시오.

예를 들어, 문자열이 인 경우 abcde프로그램은 다음을 인쇄해야합니다.

abcde
 bcd
  c

그러나 인 경우 abcdef두 문자로 중지해야합니다.

abcdef
 bcde
  cd

각 줄 끝의 후행 줄 바꿈 및 후행 공백은 선택 사항입니다. 원하는만큼 가질 수 있습니다.

테스트 사례

ABCDEFGHIJKLMNOPQRSTUVWXYZ -> ABCDEFGHIJKLMNOPQRSTUVWXYZ
                               BCDEFGHIJKLMNOPQRSTUVWXY 
                                CDEFGHIJKLMNOPQRSTUVWX  
                                 DEFGHIJKLMNOPQRSTUVW   
                                  EFGHIJKLMNOPQRSTUV    
                                   FGHIJKLMNOPQRSTU     
                                    GHIJKLMNOPQRST      
                                     HIJKLMNOPQRS       
                                      IJKLMNOPQR        
                                       JKLMNOPQ         
                                        KLMNOP          
                                         LMNO           
                                          MN            

ABCDEFGHIJKLMNOPQRSTUVWXYZ! -> ABCDEFGHIJKLMNOPQRSTUVWXYZ!
                                BCDEFGHIJKLMNOPQRSTUVWXYZ 
                                 CDEFGHIJKLMNOPQRSTUVWXY  
                                  DEFGHIJKLMNOPQRSTUVWX   
                                   EFGHIJKLMNOPQRSTUVW    
                                    FGHIJKLMNOPQRSTUV     
                                     GHIJKLMNOPQRSTU      
                                      HIJKLMNOPQRST       
                                       IJKLMNOPQRS        
                                        JKLMNOPQR         
                                         KLMNOPQ          
                                          LMNOP           
                                           MNO            
                                            N             

A -> A

AB -> AB

이것은 이므로 바이트 수가 가장 적은 코드가 승리합니다.


문자열을 인쇄하는 대신 출력이 문자열 목록이 될 수 있습니까?
Greg Martin

@GregMartin 예.
Oliver Ni

1
각 줄에 선행 공백이 필요합니까?
ETHproductions

@ETHproductions 예.
Oliver Ni

9
@Oliver 중요한 정보입니다. 텍스트에 포함시켜야합니다
Luis Mendo

답변:


11

V , 10 바이트

ò^llYpr $x

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

설명:

ò^ll         " While there are at least two non-whitespace characters on the current line
    Y        " Yank this line
     p       " Paste it below
      r      " Replace the first character with a space
        $    " Move to the end of the line
         x   " Delete a character

6

파이썬, 45 바이트

f=lambda s,p='\n ':s and s+p+f(s[1:-1],p+' ')

문자열, 줄 바꿈, 다음 줄의 선행 공백, 접두사에 여분의 공백이있는 단축 된 문자열의 반복 결과를 반복적으로 출력합니다.

선행 줄 바꿈이 허용되면 바이트를 절약 할 수 있습니다.

f=lambda s,p='\n':s and p+s+f(s[1:-1],p+' ')

프로그램과 비교하십시오 (Python 2에서 49 바이트) :

s=input();p=''
while s:print p+s;s=s[1:-1];p+=' '

6

ES6 (자바 스크립트) 47, 48, 43 바이트

편집 : 삼항 연산자를 &&로 바꾸고 접두사가 붙은 패딩 문자열을 줄 바꿈으로 바꿨습니다. 훌륭한 조언을 해주신 @Neil에게 감사드립니다!

편집 : 리터럴 줄 바꿈을 사용하여 1 바이트를 제거하고 재귀 호출의 함수 이름을 포함했습니다.

골프

R=(s,p=`
 `)=>s&&s+p+R(s.slice(1,-1),p+' ')

테스트

R=(s,p=`
 `)=>s&&s+p+R(s.slice(1,-1),p+' ')

console.log(R("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

ABCDEFGHIJKLMNOPQRSTUVWXYZ
 BCDEFGHIJKLMNOPQRSTUVWXY
  CDEFGHIJKLMNOPQRSTUVWX
   DEFGHIJKLMNOPQRSTUVW
    EFGHIJKLMNOPQRSTUV
     FGHIJKLMNOPQRSTU
      GHIJKLMNOPQRST
       HIJKLMNOPQRS
        IJKLMNOPQR
         JKLMNOPQ
          KLMNOP
           LMNO
            MN

console.log(R("ABCDEFGHIJKLMNOPQRSTUVWXYZ!"))

ABCDEFGHIJKLMNOPQRSTUVWXYZ!
 BCDEFGHIJKLMNOPQRSTUVWXYZ
  CDEFGHIJKLMNOPQRSTUVWXY
   DEFGHIJKLMNOPQRSTUVWX
    EFGHIJKLMNOPQRSTUVW
     FGHIJKLMNOPQRSTUV
      GHIJKLMNOPQRSTU
       HIJKLMNOPQRST
        IJKLMNOPQRS
         JKLMNOPQR
          KLMNOPQ
           LMNOP
            MNO
             N

1
@xnor p는 줄 바꿈과 공백으로 시작 합니다. 어쩌면 그것은 당신에게도 도움이 될 수 있습니다.
Neil

1
아, s&&대신 사용할 수도 있습니다 s?...:''.

4

파이썬 2, 50 바이트

def f(i,j=0):
 print' '*j+i
 if i:f(i[1:-1],j+1)

문자열이 사라질 때까지 줄을 짧게 유지하는 간단한 재귀 함수.

f ( 'string')으로 호출

산출

string
 trin
  ri

4

펄, 31 바이트

30 바이트의 코드 + -p플래그

s/( *)\S(.+).$/$& 
 $1$2/&&redo

그것을 실행하려면 :

perl -pE 's/( *)\S(.+).$/$&
 $1$2/&&redo' <<< "abcdef"

설명 다음 \S.$첫 번째와 마지막 문자에 해당하는, (.+)중간 및 ( *)우리가 처음부터 하나 개의 문자를 제거 할 때마다 추가되는 후행 공백을. 따라서 정규 표현식은 처음부터 끝까지 한 문자를 제거하고 매번 선행 공백을 하나씩 추가합니다.


4

Brainfuck , 67 바이트

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

이것은 모든 brainfuck 풍미에 작동해야합니다.

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

Ungolfed 코드 :

# Print and read input_string into memory
>>,[.>,]<
while input_string is not empty [
    # Print newline
    >+++++ +++++.<
    # Remove last character
    [-]
    # GOTO start of input_string
    <[<]>
    # Remove first character
    [-]
    # Add space to space_buffer
    +++++ +++[-<++++>]
    # GOTO start of space_buffer
    <[<]>
    # Print space_buffer
    [.>]
    # Print input_string
    >[.>]
<]

여기에서 잘라낼 바이트가 여전히 있어야합니다. 나는 최근에 brainfuck을 사용하기 시작했기 때문에 포인터 이동이 매우 비효율적입니다.


2

MATL , 9 바이트

tg!*YRPRc

이것은 후행 공백과 줄 바꾸기를 생성합니다.

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

설명

t      % Input string implicitly. Duplicate
g!     % Convert to logical and transpose: gives a column vector of ones
*      % Multiply with broadcast. This gives a square matrix with the string's
       % ASCII codes on each row
YR     % Lower triangular part: make elements above the diagonal 0
P      % Flip vertically
R      % Upper triangular part: make elements below the diagonal 0
c      % Convert to char. Implicitly display, with char 0 shown as space

2

배치, 92 바이트

@set/ps=
@set t=
:g
@echo %t%%s%
@set t= %t%
@set s=%s:~1,-1%
@if not "%s%"=="" goto g

STDIN에서 입력을받습니다.


2

C, 73 바이트

f(char*s){char*b=s,*e=s+strlen(s)-1;while(e-b>-1)puts(s),*b++=32,*e--=0;}

언 골프 드 :

f(char*s) {
  char *b=s,
       *e=s+strlen(s)-1;
  while (e-b>-1)
    puts(s),
    *b++=32,
    *e--=0;
}

용법:

main(){
  char a[] = "abcde";
  f(a);
}

2

05AB1E , 8 바이트

암호:

ÐvNú,¦¨D

설명:

Ð          # Triplicate the input
 v         # Length times do...
  Nú,      # Prepend N spaces and print with a newline
     ¦¨    # Remove the first and the last character
       D   # Duplicate that string

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!



2

하스켈, 47 43 바이트

f s@(a:b:c)=s:map(' ':)(f.init$b:c)
f s=[s]

Ideone에서 사용해보십시오 . 출력은 챌린지의 의견에 허용 된 문자열 목록입니다. 인쇄하려면 (putStr.unlines.f)그냥 대신에 실행하십시오 f.

편집 : 후행 공백이 허용되었음을 알면 4 바이트를 저장했습니다.

Prelude> (putStr.unlines.f)"codegolf"
codegolf
 odegol
  dego
   eg
               --(trailing whitespace)

2

펄 6 , 42 바이트

for get,{S/\w(.*)./ $0/}.../\s..?$/ {.put}

넓히는:

for

  # generate the sequence
  get,       # get a line from the input

  {          # bare block lambda with implicit parameter 「$_」
             # used to produce the rest of the sequence

    S/       # replace
      \w     # a word character ( to be removed )
      (      # set 「$0」
        .*   # any number of any characters
      )
      .      # any character ( to be removed )
    / $0/    # append a space

  }

  ...        # repeat that until

  /          # match
    \s       # whitespace
    .        # any character
    .?       # optional any character
    $        # end of string
  /

{
  .put       # print $_ with trailing newline
}

1

GNU sed 24 바이트

에 +2 포함 -rn

:
p
s/[^ ](.+)./ \1/
t

공백이 아닌 첫 번째 문자를 인쇄하고 공백으로 바꾸고 아무 것도 변경되지 않을 때까지 마지막 문자를 삭제합니다.



0

C ++ 14, 117 바이트

auto f(auto s){decltype(s)r;auto b=s.begin();auto e=s.rbegin();while(e.base()-b>0)r+=s+"\n",*b++=32,*e++=0;return r;}

입력 s이 a라고 가정 std::string하고 애니메이션 텍스트를 반환합니다.

언 골프 드 :

auto f(auto s){
  decltype(s)r;
  auto b=s.begin();
  auto e=s.rbegin();
  while(e.base()-b>0){
    r+=s+"\n";
    *b++=32;
    *e++=0;
  }
  return r;
}

용법:

main(){
  std::string a{"abcdef"};
  std::cout << f(a);
  std::string b{"abcde"};
  std::cout << f(b);
}

0

Vim-14 번의 키 스트로크

qqYp^r $x@qq@q


설명:

qq  -- record a macro named 'q'
Y   -- Copy current line
p   -- Paste it
^r  -- Replace the first non-space character on the new line with a space
$x  -- Delete the last character on the line
@q  -- Recursively call the 'q' macro
q   -- Stop recording the 'q' macro
@q  -- Run the 'q' macro

Vim은 문자가 없으면 매크로를 자동으로 종료합니다.


0

스냅! -16 블록

스냅!

출력은 자체 중심입니다. '대기'는 인간을위한 것입니다.


0

PHP, 91 바이트

<?for(;$i<.5*$l=strlen($s=$_GET[s]);$i++)echo str_pad(substr($s,$i,$l-$i*2),$l," ",2)."\n";

사용법 : 파일로 저장하고 브라우저에서 호출하십시오.

http://localhost/codegolf/string-middle.php?s=ABCDEFGHIJKLMNOPQRSTUVWXYZ

Raw output:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
 BCDEFGHIJKLMNOPQRSTUVWXY 
  CDEFGHIJKLMNOPQRSTUVWX  
   DEFGHIJKLMNOPQRSTUVW   
    EFGHIJKLMNOPQRSTUV    
     FGHIJKLMNOPQRSTU     
      GHIJKLMNOPQRST      
       HIJKLMNOPQRS       
        IJKLMNOPQR        
         JKLMNOPQ         
          KLMNOP          
           LMNO           
            MN            


http://localhost/codegolf/string-middle.php?s=1ABCDEFGHIJKLMNOPQRSTUVWXYZ

Raw output:
1ABCDEFGHIJKLMNOPQRSTUVWXYZ
 ABCDEFGHIJKLMNOPQRSTUVWXY 
  BCDEFGHIJKLMNOPQRSTUVWX  
   CDEFGHIJKLMNOPQRSTUVW   
    DEFGHIJKLMNOPQRSTUV    
     EFGHIJKLMNOPQRSTU     
      FGHIJKLMNOPQRST      
       GHIJKLMNOPQRS       
        HIJKLMNOPQR        
         IJKLMNOPQ         
          JKLMNOP          
           KLMNO           
            LMN            
             M             

0

Mathematica, 71 바이트

Table[#~StringTake~{i,-i},{i,Ceiling[StringLength@#/2]}]~Column~Center&

애니메이션 찾기-중간

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