가위 애니메이션을 만드십시오!


21

간단한 ASCII 가위 애니메이션을 만들어보십시오!

도전

모든 입력은 정수 -31에서 31까지입니다.

출력은 애니메이션이됩니다 ( 이전 프레임이 교체 되는 한 어딘가에 출력 됩니다. GIF는 허용됩니다).

입력 ( n)이 양수인 경우 :

  • 애니메이션은 8<AKA 오픈 가위로 시작해야합니다 .
  • 다음 프레임은 8=입니다. 가위 "절단"을 보여줍니다.
  • 가위 뒤에 대시 (잘라 내기 표시)가 추가되고 n대시 가 나타날 때까지 애니메이션이 반복됩니다 .

입력이 음수 인 경우 :

  • 다음 위 오픈 (이 추천 왼쪽 향 시작 >8하여) n그것의 앞에 공간.
  • 가위가 닫히고 왼쪽을 향합니다 ( =8).
  • 공간이 제거되고 가위 뒤에 대시가 추가되면 가위가 다시 열립니다.

입력이 0 인 경우 :

  • 가위 개폐 만 10 프레임 출력합니다. 일관된 한 어느 방향 으로든 향할 수 있습니다.

이것은 이므로 바이트 단위로 가장 짧은 제출이 이깁니다. (새로운 종류의 "골프 언어"로 인해 출품작이 분명히 이길 수없는 경우에도 우리는 그것을보고 싶습니다.)

오류 메시지 자체가 애니메이션을 방해하지 않는 한 오류 메시지가 허용됩니다.

입력 및 출력 쌍 예 :

(명확하게하기 위해 프레임을 분리했지만 각 프레임 사이에 약 0.25 초가 있어야합니다)

Input: 1
Output: 
8<
8=
-8<

Input: 2
Output:
8<
8=
-8<
-8=
--8<

Input: 5
Output:
8<
8=
-8<
-8=
--8<
--8=
---8<
---8=
----8<
----8=
-----8<

Input: 0
Output:
8<
8=
8<
8=
8<
8=
8<
8=
8<
8=

Input: -2
Output:
  >8
  =8
 >8-
 =8-
>8--

Input: -3
Output:
   >8
   =8
  >8-
  =8-
 >8--
 =8--
>8---

즐겨!


그렇습니다. 추가하겠습니다.
iPhoenix

글꼴이 고정 폭이어야합니까?
OUurous

@ Οurous 당신의 언어가 그것을 지원한다면, 그렇습니다. 그렇지 않으면 아닙니다.
iPhoenix

답변:



5

MATL , 59 58 57 바이트

|EQG~10*+:"&FXx45@q2/kGg*XHY"8Vh61@oGO<Eq*+h4M?G|H-Z"hP]D

MATL Online 에서 사용해보십시오 ! 또는 오프라인 컴파일러에서 실행되는 예제를 참조하십시오.

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


나일지도 모르지만 닫힌 가위 애니메이션은 열린 가위 애니메이션보다 길다. 이것은 언어 처리 때문입니까?
iPhoenix

1
나는 그것을 알아 차리지 못했지만 그럴 수 있습니다. 내가 주목하는 것은 왼쪽의 것이 조금 느리다는 것입니다. 처리가 더 많기 때문에 이치에 맞습니다. 어쨌든, 당연히 도전은 1 / 4 분의 1로 분리되어 있기 때문에 허용되는 것 같습니다.
Luis Mendo

MATL을 아는 사람을 발견했으며 코드에서 수행 한 작업을 보여 주었고 괜찮은 것 같습니다.)
iPhoenix

@iPhoenix 설명을 추가해야합니다 :-)
Luis Mendo

4

자바 스크립트 (ES2017) + HTML, 165 + 10 바이트

@Shaggy의 -16 바이트

n=>(g=i=>i<-~(n?2*m:9)&&setTimeout(g,250,i+1,s=8+"<>="[i%2?2:n<0|0],o=("-".repeat(i/2)+s).padEnd(m+2),e.innerHTML=(n?n<0?[...o].reverse().join``:o:s)))(0,m=n<0?-n:n)
<pre id=e>

아래 스 니펫에서 사용해보십시오.

let globalTimeout;
const _setTimeout = setTimeout;
window.setTimeout = function(){ globalTimeout = _setTimeout.apply(this, arguments); }
// Code above is to support user input

f=
n=>(g=i=>i<-~(n?2*m:9)&&setTimeout(g,250,i+1,s=8+"<>="[i%2?2:n<0|0],o=("-".repeat(i/2)+s).padEnd(m+2),e.textContent=(n?n<0?[...o].reverse().join``:o:s)))(0,m=n<0?-n:n)

// Code below is to support user input
f(10)
const $inp = document.getElementById("inp");
inp.addEventListener("change", ()=>{
  clearTimeout(globalTimeout);
  f(+inp.value);
});
<input type="number" id="inp" min="-31" max="31" value="10" />

<pre id=e>


1
빠른 절감에 당신을 얻기 위해 157 바이트 단지 JS를 사용하여. ( alert각 "프레임"이 사양을 준수하지 않을 수도 있지만 이에 대한 설명을 원할 수도 있습니다.)
Shaggy

@Shaggy 개선에 감사드립니다! alert요구 사항은 프레임이 ~ 0.25 초 간격이어야 하기 때문에 의도적으로 사용하지 않았으므로 alert추가 사용자 입력 없이는 지원되지 않습니다.
Birjolaxew

2

TI-BASIC, 173 바이트

:"-
:For(X,1,5
:Ans+Ans
:End
:For(X,1,32
:" "+Ans+" →Str1
:End
:ClrHome
:Input N
:N<0→X
:For(A,not(N),abs(N+5not(N
:For(B,4-3X,6-3X-(A=abs(N)),2
:33X-Anot(not(N
:Output(1,16,sub(Str1,33X+32,abs(Ans-1)-NX-31X)+sub(">8=8<8=",B,2)+sub(Str1,Ans+32,1
:rand(11
:End
:End

다른 입력과 다른 프레임에서 0 입력을 종료하는 것은 매우 흥미로운 장애물이었습니다!

TI-BASIC은 빈 줄을 좋아하지 않기 때문에 가위 왼쪽에 하나 이상의 더미 문자를 유지합니다. 첫 번째 문자는 항상 공백입니다. 희망적으로 이것을 n의 일부로 계산하지 않도록하십시오.음수 입력을 위해 공간의 .이 프로그램은 첫 번째 행의 가장 오른쪽 열에서 인쇄를 시작한 다음 실제 문자열을 시작하기 위해 나머지 문자열을 아래로 감습니다. 첫 번째 열.

이국적인 장치에 대한 참고 사항 : TI-BASIC 코드 크기는 문자가 아니라 토큰으로 측정됩니다. 일관된 교차 계산기 비교를 위해 일반적으로 헤더 길이를 처리하는 바이트 수를 무시합니다 (예 : PROGRAM : SCISSORS에서 8을 뺍니다). 또한 홈 화면에서 완벽하게 동작하는 루틴 (대부분의 경우 제어 구조가 부족한 루틴)의 경우 빈 프로그램의 크기를 제거하여 9 바이트를 "저장"합니다. 이 프로그램은 특히 홈 화면에서 입력 할 수 없으므로 자유를 얻지 못합니다.


TI-BASIC (연구실, 내 CE. 다른 곳에서는?)에서이 도전을 시도했는데, 그 생각은 적어도 두 배나 컸습니다. 잘 했어.
iPhoenix

2

옥타브 , 190 186 바이트

k=32+~e((a=abs(n=(z=input(''))+~z*10))+1,1);for i=1:a
clc
k(i:i+1)=[56,61-(s=sign(n))];q=@(m)fprintf(rot90([m ''],s));q(k)
if(i-a)pause(.25)
clc
k(i+1)+=s;q(k)
pause(.25);k(i)=45;end
end

온라인으로 사용해보십시오! (참고 : clcTIO에서는 작동하지 않으므로 순차적으로 출력되는 모든 애니메이션 프레임 일뿐입니다). e(...)Octave 의 기능을 알려주는 @LuisMendo에게 감사 합니다 exp(1)*ones(...).

인라인 할당은 전체 배열이 아닌 변경된 배열 항목 만 반환합니다. 이것은 같은 구성 q(k(i+1)+=s)이 불가능하다는 것을 의미 하므로 프로그램은 거의 MATLAB과 같습니다. 실제로 MATLAB 항목은 약간 길지만

MATLAB, 198195 바이트

n=input('');n=n+~n*10;a=abs(n);s=sign(n);k=zeros(a+1,1);q=@(k)fprintf(rot90([k ''],s));for i=1:a
k(i:i+1)=[56 61-s];clc
q(k)
if(i-a)pause(.25);
k(i+1)=k(i+1)+s;clc
q(k)
pause(.25)
k(i)=45;end
end

옥타브, 나는 당신이 바꿀 수 있다고 생각 +ones추악한에 의해 +~e. 또한, 옥타브와 매트랩, 교체 [i i+1]에 의해 i:i+1.
Luis Mendo

@LuisMendo 지구상에서 무엇을 사용 e(...)하고 있습니까? 나는 mxn 행렬의 필요성을 느낀 적이 없다고 생각합니다 e. 그래도 좋은 골프를 만듭니다.
Sanchises 2018 년

아마도 옥타브 개발자들은 코드 골프를 염두에 두었을 것입니다. haha
Luis Mendo

1

클린 , 294 바이트

import StdEnv,System.Time,ArgEnv,System._Unsafe
Start#n=toInt(select(getCommandLine)1)
=[?k l\\k<-[1..]&l<-if(n==0)(flatten o$5)(init)[$(abs n+2)'\b'++if(n<0)(rjustify(abs n+2))reverse[c,'8': $i'-']\\i<-[0..abs n],c<-[if(n<0)'>''<','=']]]
?t#(Clock n)=accUnsafe clock
|n>t*250=id= ?t
$ =repeatn

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

이 기능은 TIO에서는 작동하지 않으며 링크는 단지 프레젠테이션 용입니다.

x86 Windows Clean의 기본값 CLOCK_PER_TICK이외 의 상수 가 있으면 결과가 다를 수 있습니다 1000.


0

파이썬 2 , 170 바이트

import time
n=input()
a=abs(n);s=a and n/a
for i in range([a-~a,10][a<1]):print'\n'*30+(a-i/2)*-s*' '+i/2*s*'-'+'>='[i%2]*(s<1)+'8'+'<='[i%2]*s+i/2*-s*'-';time.sleep(.25)

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


(approximately) 1 quarter of a second; 왜 휴면 시간을 사용하지 않고 .2바이트를 저장하지 않습니까?
Jonathan Frech

0

루비, 169 바이트

->x{i="";o=?=;(x!=0&&x.abs*2+1||10).times{|l|o=o[?=]?x>0?"8<":">8":x>0?"8=":"=8";f=?\s*(x<0&&-x-l/2||0);system"cls";puts x>0?i+o:f+o+i;i+=?-if(l).odd?&&x!=0;sleep 0.25}}

내 의견으로는, 그것에 대해 파헤칠 때 거의 자기 설명이 있습니다. cls 명령 / 별명을 사용하여 컴퓨터에서 프로그램을 실행해야합니다.

온라인으로 사용해보십시오! (위에서 언급 한 제한 때문에이 스크립트에 대해서만 system () 메소드를 덮어 써야했습니다.)

나는 사용하려고했다

puts `cls`, ...

그러나 그것은 보이지 않는 캐릭터를 인쇄했습니다.

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