혼란스런 ASCII 아트를 만드십시오!


11

다음과 같은 ASCII 아트 문자열이 제공됩니다 (ASCII 아트는 아니지만 예제를 위해 수행됩니다).

abc
d e
fgh

다음과 같이 한 줄에 한 문자 씩 화면에 표시되는 것처럼 뒤섞입니다.

a
b
c
d

e
f
g
h

결과를 인쇄하고 1 초, ± 0.5 초 동안 기다렸다가 터미널과 인쇄를 지우고 동일한 것을 인쇄하되 1 개가 아닌 한 줄에 2자가 표시됩니다. 기본적으로 디스플레이의 너비는 1에서 2로 바뀝니다.

ab
c
d 
e
fg
h

뒤에 공백이 d있습니다. 입력 한 텍스트가 출력 될 때까지 기다렸다가 한 줄에 추가 문자로 인쇄를 반복하십시오.

문자를 인쇄하려고 할 때 줄 끝을 누르면 줄 바꿈을 삽입하고이 규칙에 따라 나머지 줄을 인쇄합니다. 예를 들어 입력 :

abcdefg
ab

디스플레이 길이가 4 일 때 다음을 인쇄합니다.

abcd
efg
ab

https://repl.it/GoeU/1 에서 터미널 크기 조정의 효과를 확인할 수 있습니다. . 프로그램을 실행 한 다음 텍스트 편집기에서 터미널을 분리하는 것을 앞뒤로 드래그하십시오.

설명:

줄이 정확히 입력 된대로 나타나면, 줄당 문자 수가 더 많아 지도록 해당 줄을 그대로 둘 수 있습니다.

abc
ab

인쇄해야합니다

ab
c
ab

문장 길이가 2 일 때


이것은 이므로 바이트 수가 가장 적습니다!

규칙 :

  • 유일한 출력으로 STDOUT에 인쇄해야합니다.
  • 터미널을 지우거나 빈 줄을 150 개 정도 추가하여 터미널을 지우는 환상을 만들어야합니다.
  • 표준 방법을 통해 입력 할 수 있습니다.
  • 기본 허점이 적용됩니다.
  • 텍스트로 후행하는 것은 괜찮습니다.

이 아이디어는 ASCII 아트가있는 터미널의 크기를 조정할 때 나에게 왔습니다. 흥미로워 보였기 때문에 도전하기로 결정했습니다.


테스트 사례 :

각 테스트 사례의 각 단계를 개별적으로 표시하기에는 너무 많은 작업이 필요하므로 각 답변을 검토하여 그것이 유효한지 확인합니다. 답변이 테스트 사례를 처리 할 수 ​​있는지 확인하십시오.

 ______   ______     __     __   __     ______      __    __     ______    
/\  == \ /\  == \   /\ \   /\ "-.\ \   /\__  _\    /\ "-./  \   /\  ___\   
\ \  _-/ \ \  __<   \ \ \  \ \ \-.  \  \/_/\ \/    \ \ \-./\ \  \ \  __\   
 \ \_\    \ \_\ \_\  \ \_\  \ \_\\"\_\    \ \_\     \ \_\ \ \_\  \ \_____\ 
  \/_/     \/_/ /_/   \/_/   \/_/ \/_/     \/_/      \/_/  \/_/   \/_____/ 

이 pastebin .

                        __/\__
                        \    /
                  __/\__/    \__/\__
                  \                /
                  /_              _\
                    \            /
      __/\__      __/            \__      __/\__
      \    /      \                /      \    /
__/\__/    \__/\__/                \__/\__/    \__/\__

답변:


2

배시 (GNU coreutils 사용), 69 바이트

n=`tee x|wc -L`;for i in `seq 1 $n`;do fold -w$i x;sleep 1;clear;done

입력이 임시 파일에 저장합니다 x(GNU의로 coreutils는 '다음 긴 줄을 계산 wc-L이것에 대한 플래그를) 가장 긴 라인 길이 1에서 각 콘솔의 폭 반복합니다. fold, sleep그리고 clear마법의 나머지 부분을 수행합니다.


3

파이썬 3.6, 124 바이트

officialaimm의 솔루션과 같은 입력 문자열 길이에 대한 루프

import re,time
def d(s):
 for i in range(len(s)):print(*'\n'*75,*re.split(f'(.{{1,{i+1}}})',s)[1::2],sep='\n');time.sleep(1)

143 바이트는 가장 긴 행의 너비로만 이동합니다.

import re,time
def d(s):
 for i in range(max(map(len,s.split()))):print(*'\n'*75,*re.split(f'(.{{1,{i+1}}})', s)[1::2],sep='\n');time.sleep(.5)

"re.split ((. {1, i + 1}))"을 사용하여 문자열을 문자 그룹으로 나눕니다. 때문에 '.' '\ n'과 일치하지 않으면 그룹이 한 줄에서 다음 줄로 줄 바꿈되지 않습니다. 정규식이 캡처 그룹을 사용하는 경우 re.split ()은 홀수 인덱스에서 일치하는 그룹이있는 목록을 반환합니다. 이들은 [1 :: 2]로 검색됩니다.

python 3.6 f-string을 사용하여 그룹 패턴 i에 따라 패턴을 변경합니다.

re.split () 앞의 *는 python 3.6 unpacking을 사용하여 목록을 print 문에 대한 인수로 바꿉니다. 마찬가지로 * '\ n'* 75는 print 문에 75 개의 '\ n'인수로 바뀝니다. print 키워드 인수 sep = '\ n'을 사용하면 약 150 개의 빈 줄을 인쇄하여 화면을 비운 다음 각 문자 그룹을 별도의 줄에 인쇄합니다.


이것은 내 것보다 더 좋고 짧습니다. 잘 했어! (y)
officialaimm

2

3.5 파이썬 ( 238 233 229 225 223 222 바이트)

-Windows 터미널에서 잘 작동합니다. 시스템 별 os.system ( "cls") 명령으로 인해 다른 플랫폼에 대해서는 확실하지 않습니다.

-전달 된 문자열은 줄 바꿈을 위해 \ n으로 표시해야합니다. 예 : 'abc \ nd efgh \ n'

import os,time 
def b(s):
 p=len(s);z=print;r=range
 for i in r(1,p):
  os.system("cls");l=0
  for j in r(p):
   z(s[j],end="");l+=1
   if(s[j]=='\n'):l=0
   if(j+1<p and l==i and s[j+1]!='\n'):z();l=0
  z();time.sleep(.5)
  • 5 바이트 절약 : 불필요한 공백 제거
  • 4 바이트 절약 : len (s) 단축
  • 4 바이트 저장 : sparklepony 덕분에 (인쇄 단축)
  • 2 바이트 저장 : sparklepony 덕분에 (r은 r, r (0, i)는 range (i)로 단축 됨)
  • 1 바이트 저장 : steve 덕분에 0.5 (0.5는 0.5)

1
멋있는! z=print상단 의 코드 를 사용하고의 다른 모든 인스턴스를 print()로 변경 하여 일부 바이트를 줄일 수 있다고 생각합니다 z().
동지 SparklePony

1
난 당신이했던 같은 일을 할 콜드 생각 print과 함께 range, 대신의 range(0,3)사용 range(3).
동지 SparklePony

1
sleep(0.5)단순히 다음과 같이 다시 쓸 수 있습니다sleep(.5)
steve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.