एक कैंची एनीमेशन बनाएँ!


21

एक साधारण ASCII कला कैंची एनीमेशन बनाने की कोशिश करें!

चुनौती

सभी इनपुट 31 के माध्यम से पूर्णांक -31 होंगे।

आउटपुट एक एनीमेशन होगा ( कहीं भी आउटपुट किया जा सकता है , जब तक कि पिछले फ्रेम को बदल दिया जाता है। GIF को अनुमति दी जाती है।), एक सेकंड के 1 चौथाई (लगभग) द्वारा अलग किया जाता है।

यदि इनपुट ( 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---

का आनंद लें!


हाँ यही है। मैं उसे जोड़ दूंगा।
21 फरवरी को iPhoenix

क्या फ़ॉन्ट को मोनोपोज़ करने की आवश्यकता है?
.urous

@ .Urous यदि आपकी भाषा इसका समर्थन करती है, तो हाँ। नहीं तो नहीं।
iPhoenix

जवाबों:



5

MATL , 59 58 57 बाइट्स

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

MATL ऑनलाइन पर यह कोशिश करो ! या ऑफ़लाइन संकलक से एक उदाहरण देखें:

यहाँ छवि विवरण दर्ज करें


यह सिर्फ मैं ही हो सकता हूं, लेकिन ऐसा प्रतीत होता है कि बंद कैंची एनिमेशन खुले कैंची वाले की तुलना में लंबे होते हैं। क्या यह सिर्फ भाषा के प्रसंस्करण के कारण है?
iPhoenix

1
मैंने उस पर ध्यान नहीं दिया है, लेकिन यह हो सकता है। मैं जो नोटिस करता हूं, वह वामपंथी थोड़ा धीमा है; और यह समझ में आता है क्योंकि उनके पास कुछ और प्रसंस्करण है। वैसे भी, बस सुनिश्चित होना, क्योंकि चुनौती कहती है कि (लगभग) एक दूसरे के 1 तिमाही से अलग मुझे लगता है कि यह स्वीकार्य है, है ना?
लुइस मेंडो

मुझे कोई ऐसा व्यक्ति मिला जो MATL जानता था, और उन्होंने मुझे दिखाया कि आपका कोड क्या कर रहा था, और यह ठीक लगता है :)
iPhoenix

@iPhoenix मुझे एक स्पष्टीकरण जोड़ना चाहिए था :-)
लुइस

4

जावास्क्रिप्ट (ES2017) + HTML, 165 + 10 बाइट्स

-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 बाइट्स तक पहुंचाने के लिए कुछ त्वरित बचत । (हालांकि प्रत्येक "फ्रेम" आईएनजी युक्ति का पालन नहीं कर सकता है, आप उस पर स्पष्टीकरण प्राप्त करना चाह सकते हैं।)alert
झबरा

@ सुधार के लिए धन्यवाद! मैंने जानबूझकर उपयोग नहीं किया alertक्योंकि आवश्यकताएं हैं कि फ्रेम ~ 0.25s के अंतराल पर आते हैं, जो alertआगे उपयोगकर्ता इनपुट के बिना समर्थन नहीं करेगा।
बिरजोलैक्स्यू

2

टीआई-बेसिक, 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 कोड आकार को टोकन में मापा जाता है, वर्णों पर नहीं। लगातार क्रॉस-कैलकुलेटर तुलना के लिए, हम आम तौर पर हेडर लंबाई के साथ काम करने वाले बाइट काउंट्स को अनदेखा करते हैं (उदाहरण के लिए, हम प्रोग्राम 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

इसे ऑनलाइन आज़माएं! (ध्यान दें: clcटीआईओ में काम नहीं करता है, इसलिए यह केवल सभी एनीमेशन फ्रेम हैं जो क्रमिक रूप से आउटपुट होते हैं)। e(...)ऑक्टेव में फ़ंक्शन के बारे में मुझे अवगत कराने के लिए @LuisMendo के लिए धन्यवाद , जो इसके बराबर है 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

ऑक्टेव में, मुझे लगता है कि आप +onesबदसूरत से बदल सकते हैं +~e। इसके अलावा, ऑक्टेव में और मतलाब में, [i i+1]द्वारा प्रतिस्थापित किया जाता है i:i+1
लुइस मेन्डो

@LuisMendo पृथ्वी पर e(...)उस तरह का उपयोग क्या है? मुझे नहीं लगता कि मुझे कभी भी m-by-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 विंडोज क्लीन के लिए डिफ़ॉल्ट के 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सेकंड के एक नींद समय का उपयोग करें और एक बाइट बचा?
जोनाथन फ्रीच

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 कमांड / उर्फ ​​के साथ चलना होगा।

इसे ऑनलाइन आज़माएं! (सिस्टम को अधिलेखित करना था () विधि, इस स्क्रिप्ट के लिए, ऊपर उल्लिखित सीमाओं के कारण।)

मैंने इस्तेमाल करने की कोशिश की

puts `cls`, ...

लेकिन यह सिर्फ एक अदृश्य चरित्र छपा, किसी को भी पता है क्यों?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.