はさみアニメーションを作成します!


21

シンプルなASCIIアートはさみアニメーションを作成してみてください!

チャレンジ

すべての入力は整数-31〜31です。

出力は、アニメーション(1つ前のフレームが置き換えられる限り、どこかに出力されます。GIFが許可されます)で、1/4秒(約)で区切られます。

入力(n)が正の場合:

  • アニメーションは8<、オープンハサミで始まる必要があります。
  • 次のフレームは8=です。これは、ハサミが「切断」していることを示しています。
  • はさみの後ろにダッシュ(カットマーク)が追加され、nダッシュが現れるまでアニメーションが繰り返されます。

入力が負の場合:

  • :ハサミは(このようなオープン起動し、左の方を向く>8と、)nの前にスペース。
  • はさみは閉じて、左に向けたままです(=8)。
  • スペースが削除されると、ハサミが再び開き、ハサミの後ろにダッシュが追加されます。

入力がゼロの場合:

  • 10フレームの開閉はさみだけを出力します。一貫している限り、どちらの方向を向いていてもかまいません。

これはであるため、バイト単位の最短の送信が優先されます。(もしあなたのエントリーが何らかの新しい「ゴルフ言語」のせいで明らかに勝てない場合でも、私たちはそれを見たいと思っています。)

エラーメッセージ自体がアニメーションに干渉しない限り、エラーメッセージは許可されます。

入力と出力のペアの例:

(わかりやすくするためにフレームを分離しましたが、各フレームの間に約.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

フォントは等幅である必要がありますか?
18年

@Οurousあなたの言語がそれをサポートしていれば、はい。そうでなければ、いいえ。
iPhoenix

回答:



5

MATL59 58 57バイト

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

MATL Online試しくださいまたは、オフラインコンパイラから実行された例を参照してください。

ここに画像の説明を入力してください


私だけかもしれませんが、閉じたシザーアニメーションは開いたシザーアニメーションよりも長いようです。これは単に言語の処理によるものですか?
iPhoenix

1
私はそれに気づいていませんでしたが、そうかもしれません。私が気づいたのは、左向きのものが少し遅いことです。さらに処理が必要なので、それは理にかなっています。とにかく、念のために言っておくと、チャレンジは(約)1/4秒で区切られていると言っているので、許容範囲内だと思いますよね?
ルイスメンドー

:)私はMATLを知っていた人を発見し、彼らはあなたのコードがやっていた私のものを示し、それは罰金だ
iPhoenix

@iPhoenix説明を追加する必要がありました:-)
ルイスメンドー

4

JavaScript(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
JSだけを使用して157バイトまで減らすためのいくつかの簡単な節約。(各「フレーム」は仕様に準拠していない場合がありますが、その点について明確にしたい場合があります。)alert
シャギー

@Shaggy改善をありがとう!alert要件は、フレームが約0.25秒の間隔で来ることであるため、意図的に使用しませんでした。これalertは、ユーザー入力がなければサポートされません。
ビルジョラクセフ

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は空の文字列を好まないため、これはハサミの左側に少なくとも1つのダミー文字を維持します。最初のダミー文字は常にスペースです。これを負の入力のnスペースの一部としてカウントしないように、このプログラムは最初の行の右端の列から印刷を開始し、そこから実際のアニメーションのフィールドを開始するために文字列の残りを下に折り返します最初の列。

エキゾチックなデバイスに関する注意事項:TI-BASICコードサイズは、文字ではなくトークンで測定されます。計算機間の一貫した比較のために、通常、ヘッダーの長さを扱うバイトカウントを無視します(たとえば、PROGRAM:SCISSORSから8を減算します)。さらに、ホーム画面上で完全に適切に動作するルーチン(ほとんどの場合、制御構造が不足しているルーチン)については、空のプログラムのサイズをさらに削除して、9バイトも「保存」します。特に、このプログラムはホーム画面に入力できないため、自由は奪われません。


TI-BASIC(私の研究室のCEホール。他のどこにありますか?)でこの挑戦を考えましたが、私のプログラムは少なくとも2倍の大きさでした。よくやった。
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では機能しないため、順次出力されるすべてのアニメーションフレームのみです)。@LuisMendoにe(...)、Octave の機能を知らせてくれてありがとうexp(1)*ones(...)

インライン割り当てでは、配列全体ではなく、変更された配列エントリのみが返されることがわかりました。つまり、次のような構成q(k(i+1)+=s)は不可能であるため、プログラムはほとんどMATLABに似ています。実際、MATLABエントリはわずかに長くなっていますが、

MATLAB、198 195バイト

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

Octaveでは+ones、ugいものに置き換えることができると思います+~e。また、オクターブにし、Matlabの中で、交換してください[i i+1]によるi:i+1
ルイスメンドー

@LuisMendo e(...)そのようなものの使用は一体何ですか?のm行n列の行列の必要性を感じたことはないと思いますe。しかし良いゴルフになります。
-Sanchises

おそらく、オクターブの開発者はコードゴルフを念頭に置いていたと思います(笑)
ルイスメンドー

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

ルビー、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.