.txt 파일의 프레임 표시 프레임을 터미널에 인쇄하는

작업:

주어진 .txtASCII 아트 프레임 파일로 분리 각각 \n초당 1 개 프레임과 프레임 (가 불분명 한 경우 본 실시 예 참조)를 출력 동화상한다.

\n마지막 프레임 에는 후행이 있습니다.

각 프레임 치수는 다음과 같습니다.

  • X <80
  • Y <20

규칙

  • 다음 프레임이 표시되기 전에 이전 프레임을 삭제해야하므로 각 프레임을 터미널에 인쇄하는 것만으로는 정답이 아닙니다.
  • 새로운 기능 변수에 저장되거나 sys args에서 원하는 파일 이름을 얻을 수 있습니다.
  • 새로운 이미지는 무한정 반복되어야합니다
  • 이것은 코드 골프입니다 : 가장 작은 프로그램이 이깁니다.

입력

0   0
0   0
00000
0   0
0   0

00000
0
00000
0
00000

0   0
 0 0
  0
  0
  0

산출

언 골프

import curses, time

stdscr = curses.initscr()

Frames = file.read(file('Frames.txt')).split('\n')
while True:
    y = 0
    for i in range(len(Frames)):
        stdscr.addstr(y,0,Frames[i])
        stdscr.refresh()
        y += 1
        if Frames[i] == '':
            y = 0
            stdscr.clear()
            time.sleep(1)


답변

수학, 41 바이트

Import@f~StringSplit~"\n\n"~ListAnimate~1

파일 이름이 variable에 저장 될 것으로 예상합니다 f.

이것은 Mathematica의 우선 순위 규칙이 처음 @이며 .~.~.내가 필요한 방식입니다.

Btw,이 스 니펫은 파일 확장자가 .txt(Mathematica가 그에 따라 가져 오기를 수행하는 방법을 추측하려고하기 때문에) 이외의 것이면 끔찍하게 잘못 될 수 있지만 운 좋게도 파일 끝은 도전 사양의 일부입니다.


답변

배쉬, 82

IFS=
clear
for((;;)){
while read a;do
[ "$a" ]&&echo $a||(sleep 1;clear)
done<$1
}

.txt 파일의 파일 이름이 스크립트의 첫 번째 인수로 제공되었다고 가정합니다.

이 작업을 수행하려면 .txt 파일 끝에 빈 줄이 있어야합니다.

@professorfish와 @DigitalTrauma에게 특별한 감사를드립니다.


답변

루비, 88 86 56 55 자

$<.read.split($/*2).cycle{|i|system'cls';$><<i;sleep 1}

이 프로그램은 파일 이름이 첫 번째 인수로 주어진다고 가정합니다.

개선 사항을 공유해 주신 Ventero에게 감사드립니다!

언 골프 :

$<.read.split($/*2).cycle{ |i|   # read file, split by two newlines, and loop
    system 'cls'   # clear screen
    $><<i   # print the current array item
    sleep 1   # sleep one second
}

이 프로그램은 파일을 읽고 청크로 분할 한 후 화면을 지운 후 각 청크를 개별적으로 인쇄합니다. clsWindows에서만 작동합니다. 의 변형 clear은 57 자입니다.


답변

디아 로그 APL (64)

(이번 Mathematica를 이길 수는 없습니다. 모든 것이 내장되어있는 것 같습니다.)

{⎕ML←3⋄{⎕SM←1 1,⍨⊂⊃⍵⊂⍨~⍵∊⎕TC⋄⎕DL 1}¨M⊂⍨~(4/1)⍷⎕TC∊⍨M←80 ¯1⎕MAP⍵}

파일 이름을 인수로 사용하는 함수입니다. 파일이 Windows ( \r\n) 형식 이라고 가정 합니다.

설명:

  • ⎕ML←3: 마이그레이션 레벨을 3으로 설정 ( APL2의 분할 기능으로 사용 가능)
  • M←80 ¯1⎕MAP⍵: 올바른 인수로 지정된 파일을 ASCII 파일로 읽고 내용을에 저장하십시오 M.
  • M⊂⍨~(4/1)⍷⎕TC∊⍨M: 4 개의 연속적인 터미널 제어 문자를 모두 찾아서 분할 M합니다. 이것은 각 프레임을 제공합니다.
  • {:이 각각에 대해 …
    • ⊂⊃⍵⊂⍨~⍵∊⎕TC: 터미널 제어 문자에서 인수 (= 한 프레임)를 분할 한 다음 벡터 벡터를 행렬로 변환합니다 (따라서 각 행을 별도의 행에 표시 ⎕SM합니다. 제어 문자를 이해하지 못하기 때문에 필요 합니다).
    • ⎕SM←1 1,⍨: ⎕SM창 왼쪽 위에 표시합니다 .
    • ⎕DL 1다음 1 초 동안 기다립니다.

답변

어, 53

BEGIN{RS=RS RS}{system("clear")}1;{system("sleep 1")}


새로운 규칙 :

어, 74

BEGIN{RS=z}{a[NR]=$0}END{while(!system("sleep 1;clear"))print a[i++%NR+1]}

답변

펄, 40

seek ARGV,0,!eof;sleep 1;system clear

로 실행

perl -p00 frames.pl < animation.txt

(즉, STDIN을 통해 애니메이션 파일을 읽습니다). 계산에 3 바이트 p00가 추가되었습니다. Windows 대신 2 자 (즉 , Windows에서 38 자)보다 짧습니다 . 또는 휴대가 가능합니다.clsclear

seek ARGV,0,!eof;sleep 1;system$^O=~/Win/?cls:clear

또는 규칙을 약간 늘리면 (그리고 31 + 3 = 34 ) :

seek ARGV,sleep(1)&`reset`,!eof

답변

리볼, 74

forever[foreach s split to-string read f"^/^/"[call"clear"print s wait 1]]

파일 이름이 variable에 저장 될 것으로 예상합니다 f. 아래는 골프화되지 않은 예입니다.

f: %ascii-art.txt

forever [
    foreach s split to-string read f "^/^/" [
        call "clear"
        print s
        wait 1
    ]
]