प्रारंभिक कोड की प्रतिकृति बनाकर बढ़ते आकार का एक वर्ग बनाएं


45

आपका असाइनमेंट एक समान लंबाई का प्रोग्राम लिखना है , जो एक ASCII- कला वर्ग (नीचे वर्णित) को प्रिंट करता है, जो कि मूल स्रोत कोड को वर्तमान कोड के बीच में पेस्ट किए जाने पर हर बार 1 यूनिट तक बढ़ जाता है।

इस कार्य को बहुत अच्छी तरह से परिभाषित करना मेरे लिए काफी कठिन है, इसलिए मैं आपको एक उदाहरण दूंगा:

  • मान लें कि आपका आरंभिक कोड था CODEऔर उसने इसे मुद्रित किया:

    0
    
  • फिर, CODEबीच में डालें : आपका कोड बन जाता है COCODEDEऔर इसे प्रिंट होना चाहिए:

    00
    00
    
  • CODEबीच में फिर से डालें : आपका कोड बन जाता है COCOCODEDEDE और प्रिंट होना चाहिए:

    000
    000
    000
    
  • और इसी तरह। आपका उत्तर सैद्धांतिक रूप से किसी भी पुनरावृत्तियों के बाद काम करना चाहिए, लेकिन मुझे समझ में आता है कि, भाषा प्रदर्शन सीमाओं के कारण, यह एक निश्चित सीमा से अधिक नहीं चल सकता है।

कुछ िनयम:

  • आप किसी भी मुद्रण योग्य ASCII (32-127) को अपने वर्ग के लिए उपयोग करने वाले चरित्र के रूप में उपयोग कर सकते हैं । आपकी पसंद निरंतर होनी चाहिए (आपको प्रत्येक पुनरावृत्ति के लिए समान वर्ण का उपयोग करना चाहिए)।

  • प्रारंभिक आउटपुट वर्ग की लंबाई 1 होनी चाहिए ।

  • एक एससीआई-कला वर्ग को एन लाइनों ( एन -1 लाइनफीड / न्यूलाइन्स द्वारा अलग) के साथ एक स्ट्रिंग के रूप में परिभाषित किया गया है , और प्रत्येक पंक्ति के साथ चुने हुए चरित्र की एन प्रतियां हैं।

  • आपके आउटपुट में किसी अनुगामी व्हाट्सएप को रखने की अनुमति नहीं है, एक अनुगामी न्यूलाइन के अलावा।

  • आप इनपुट और आउटपुट के लिए चूक का उपयोग कर सकते हैं (प्रोग्राम या फ़ंक्शन की अनुमति है, लेकिन स्निपेट्स नहीं हैं)।

  • बीच अपने कोड की बात जहां स्रोत कोड को दो भागों में इस तरह है कि दो बराबर हैं में विभाजित किया जा सकता के रूप में परिभाषित किया गया है।

  • आपके उत्तर बाइट्स में आपके मूल कार्यक्रम की लंबाई से बनाए जाएंगे । सबसे कम बाइट गिनती जीतती है। यदि कोई टाई है, तो उत्तर जो पहले प्रस्तुत किया गया था वह जीत जाता है।

  • आप इस कार्यक्रम का उपयोग हाथ से करने के बिना सम्मिलन लागू करने के लिए कर सकते हैं ।


1
मुझे स्वीकार करना चाहिए कि मैं पहले से पोस्ट किए गए इस प्रश्न से प्रेरित था । अगर लोगों को लगता है कि यह बहुत करीब है, तो मैं खुशी से इसे हटा दूंगा। मुझे माफ करना अगर मैंने कोई गलती की है, तो मुझे अभी भी यहां के नियमों का अनुभव नहीं है। :)

2
PPCG में आपका स्वागत है! मैं आपके भविष्य की चुनौतियों के लिए सैंडबॉक्स का उपयोग करने का सुझाव देता हूं ।
user202729

7
साइट पर आपका स्वागत है! प्रेरणा के लिए एक और चुनौती का उत्कृष्ट उपयोग बिना डुबकी के जाल में गिरना :)
झबरा

आपका सहायक प्रोग्राम कई लाइनों वाले कार्यक्रमों के लिए काम नहीं करता है। अन्य प्रश्न से इस संशोधित संस्करण के बारे में कैसे ?
जो किंग

1
@ user77954 लेकिन मेरा दिमाग़ी कोड आपके अजगर से छोटा है :( क्या कभी किसी ने ऐसा कहा है?)
जो किंग

जवाबों:


41

अजगर , 2 बाइट्स


5

इसे ऑनलाइन आज़माएं! इसके अलावा इसे दोगुना , तिगुना करने की कोशिश करें !

वह कैसे काम करता है?

\nवह आदेश है जो एक साथ लौटते समय अपने तर्क को एक नई रूपरेखा के साथ मुद्रित करता है । इसलिए, हर बार जब आप एक प्रविष्टि करते हैं, तो आप पूर्णांक 5 को एन की 5 प्रतियों की एन प्रतियों वाली संख्या में बदल देते हैं , और प्रमुख नई सूचियां मूल रूप से यह सुनिश्चित करती हैं कि यह उचित संख्या में बार-बार मुद्रित हो, इस प्रकार इसे चौकोर रखें।


6
पवित्र फ्रिक यह छोटा है ...
ETHproductions

इष्टतमता का प्रमाण (: P): चूंकि बाइट की गिनती भी होनी चाहिए, और नकारात्मक नहीं हो सकती है, न्यूनतम संभव बाइट की संख्या 0 बाइट्स है। 0 बाइट्स का ठीक 1 प्रोग्राम है , जो कार्य पूरा नहीं करता है। इसलिए, 2 बाइट्स इष्टतम है।
श्रीमान Xcoder

10
हर कोई (विशेष रूप से HNQ मतदाता), अन्य उत्तरों को भी बढ़ाएँ और FGITW प्रभाव से बचें।
user202729

25

जावास्क्रिप्ट (ईएस 6), 42 32 30 बाइट्स

s=[this.s]+0;  console.log(s);

दूसरा पुनरावृत्ति:

s=[this.s]+0;  s=[this.s]+0;  console.log(s);console.log(s);

यह प्रत्येक बार कोड के पहले भाग को चलाने के 0लिए जोड़कर काम करता है s, और sदूसरी बार चलने पर हर बार खुद को प्रिंट करता है। जावास्क्रिप्ट के चार quirks का लाभ लेता है:

  1. वर्तमान वातावरण को संदर्भित किया जा सकता है this। यह हमें इसके this.sस्थान पर करने की अनुमति देता है s
  2. किसी त्रुटि को फेंकने के बजाय, एक संपत्ति पर पहुँच प्राप्त नहीं करने पर, जावास्क्रिप्ट को वापस करने पर जावास्क्रिप्ट रिटर्न होता है undefined
  3. एक सरणी प्लस एक संख्या एक स्ट्रिंग लौटाती है। [1,2,3] + 4 === "1,2,34"
  4. किसी सरणी undefinedको स्ट्रिंग करते समय, खाली स्ट्रिंग में बदल दिया जाता है, जिसका अर्थ है कि [undefined] + 0 === "0"

एक साथ रखो, इसका मतलब है कि हम केवल 13 बाइट्स में पहली छमाही (शून्य की एक स्ट्रिंग पैदा) व्यक्त कर सकते हैं। यदि alertइसके बजाय का उपयोग करने की console.logअनुमति है, तो हम दूसरी छमाही को छोटा करके 4 और बाइट्स बचा सकते हैं।


बधाई, मेरे द्वारा किए गए परीक्षणों को पास करता है!

1
... सरल! :)
झबरा

18

बधाई, मेरे द्वारा किए गए परीक्षणों को पास करता है!

2
TFW आप वास्तव में अधिक जटिल चीजें हैं और इस जवाब को देखते हैं ।
मैजिक ऑक्टोपस Urn



9

C (gcc) , 170 168 96 80 72 70 बाइट्स

बहुत छोटा संस्करण। फिर भी काश मैं प्रीप्रोसेसर के बिना एक समाधान पा सकता।

i;main(n){for(;i++<n;)printf
#if 0

#endif
(" %*c",n=__LINE__/4, 10);}

इसे ऑनलाइन आज़माएं!

पुराना 168 बाइट संस्करण:

#ifndef A
#define A p(c){putchar(c);}j,n;main(i){for(
#else
#define A n++,
#endif
A



#ifndef B
#define B i=++n;i--;p(10))for(j=n;j--;)p(64);}
#else
#define B
#endif
B

इसे ऑनलाइन आज़माएं!



@ user202729 आह, हाँ। सोचा मैंने एक टाइपो तय किया है लेकिन एक बग पेश किया। वापस लाया जा रहा।
गैस्ट्रोपनर

8

पायथन 2 , 30 बाइट्स

False+=1      ;print'*'*False;

इसे ऑनलाइन आज़माएं! , 2 और 3 पुनरावृति

यह इस तथ्य का उपयोग करता है कि पायथन में बूल मूल रूप से इनट्स और नाम हैं Falseऔर Trueपायथन 2 में पुन: असाइन किए गए थे।

पायथन 1 , 32 बाइट्स

exit=exit+'*'  ;print exit[30:];

इसे ऑनलाइन आज़माएं! , 2 और 3 पुनरावृति

पायथन 1 में बिलिन स्ट्रिंग्स exitऔर quitइंटरैक्टिव शेल के उपयोगकर्ता को सूचित करने के लिए मौजूद था कि इसे कैसे बाहर निकालना है। डिफ़ॉल्ट मान है "Use Ctrl-D (i.e. EOF) to exit."


1
मैं सुझाव देने जा रहा था n=False+=1;print'*'*n;, लेकिन मैं यह
भूलता


6

हास्केल , 68 बाइट्स

let s@(z:n)="0\n"in case lines<$>[]of(h:t):_->(h:h:t)>>(z:h++n);_->s

यह ऑनलाइन का प्रयास एक बार , दो बार या तीन बार

हास्केल के आलस्य के कारण एक अभिव्यक्ति के ऊपर एक फ़ंक्शन के रूप में गिना जाता है जो इस तर्क के अनुसार कोई तर्क नहीं लेता है ।


5

ब्रेनफक , 44 34 बाइट्स

पार किया गया 44 अभी भी नियमित है 44 ;;

,>-[<+>---]++++++++++[<]>[.>]<----

इसे ऑनलाइन आज़माएं!

इसे दोगुना , तिगुना करने की कोशिश करें । देखो, कोई गद्दी नहीं!

के वर्ग प्रिंट U। यह 10 +एस के बीच में नीचे विभाजित होता है ।



5

ब्रेन-फ्लैक , 74 बाइट्स

(((((()()()){}){}){}){})((()()()()()<>){})<>([]){({}[()]<(({})<>)<>>)}{}<>

इसे ऑनलाइन आज़माएं!

इसे दोगुना और तिगुना करने की कोशिश करें ।

व्याख्या

(((((()()()){}){}){}){}) # push 48 ("0") onto first stack
((()()()()()<>){})       # push 10 (\n) onto second stack
<>([]){({}[()]<          # a number of times equal to the height of the first stack:
  (({})<>)<>             #   copy the top of the first stack to the second stack
>)}{}<>                  # cleanup and return to second stack

ब्रेक प्वाइंट <>"पुश 10" अनुभाग में बीच में है। इसे तोड़कर तीसरे स्टैक पर 5 छोड़ देंगे, जब तक कि हम दूसरे हाफ में नहीं पहुंच जाते, जिस बिंदु पर 10 धकेलना फिर से शुरू होगा, जहां यह छोड़ा था।

हालांकि 22 बाइट्स में एक मुद्रण योग्य ASCII मूल्य (स्थान) को धक्का देना संभव है, इससे केंद्रीय <>को धक्का देने के बाद निष्पादित किया जाएगा 5। दो और बाइट्स जोड़कर, मैं <>इतना आगे बढ़ने में सक्षम था कि सभी प्रगति की ओर 10तीसरे स्टैक पर थे। एक बोनस के रूप में, इसने परिणामी वर्ग को और अधिक सौंदर्यवादी रूप से सुखदायक बना दिया।



4

टिनिइलिश , 112 बाइट्स

(load library) (d N((q((x)(i x(inc x)1)))(v(h(t(t(h(t(q())))))))))(join(repeat-val(string(repeat-val 42 N))N)nl)

इसे ऑनलाइन आज़माएं! साथ ही दोगुना और पांच गुना

"पहली छमाही में एक स्ट्रिंग का निर्माण करें, इसे दूसरी छमाही में प्रिंट करें" दृष्टिकोण जो कि बहुत सारी भाषाएं ले रही हैं वे टिनिस्प में काम नहीं करेंगी, क्योंकि कोई भी परिवर्तनशील चर नहीं हैं। इसके बजाय, हम कुछ गंभीर कोड नेस्टिंग करते हैं।

जब कोड की दूसरी प्रति डाली जाती है, तो इसे अंदर रखा जाता है (q()), जो इसे सूची में लपेटता है। फिर (h(t(t(h(t(...))))))उस सूची में भाग के बाद ड्रिल करता है (d N(v(...))इसका मूल्यांकन करता है; फिर हम इसे अनाम फ़ंक्शन को देते हैं (q((x)(i x(inc x)1))), जो परिणामी मान बढ़ाता है यदि यह एक संख्या है और 1 खाली सूची होने पर वापस आ जाता है। कोड के सबसे बाहरी नेस्टेड संस्करण में अंतिम परिणाम को सौंपा गया है N। संक्षेप में, हमने एक अजीब तरह की पुनरावृत्ति की स्थापना की है जो घोंसले के शिकार की संख्या को गिनाती है।

कोड की दूसरी छमाही तब Nतारांकन की एक स्ट्रिंग बनाता है , फिर Nइस तरह के तार की एक सूची , फिर नई सूची में सूची में शामिल हो जाती है। परिणाम एक अनुगामी न्यूलाइन के साथ प्रदर्शित किया जाता है।


3

आर , 44 बाइट्स

F=F+1;T=TRUE*TRUE+12;
write(strrep(1,F),"");

इसे ऑनलाइन आज़माएं!

एक अनुगामी newline के साथ प्रिंट। T=TRUE*TRUE+12बस पैड लंबाई है।

इसे दोगुना करके देखें और इसे तीन गुना करने की कोशिश करें


अर्धविराम हटाकर आप 2 बाइट्स समाप्त कर सकते हैं। मुझे लगता है कि पहली पंक्ति के अंत में एक जगह है, जिसे आप #: F=F+1;T=TRUE*TRUE+12#<newline>write(strrep(1,F),"")
Andreka Kostyrka

@ Andre @Kostyrka 43 बाइट्स होगा जो दुर्भाग्यवश भी नहीं है।
ग्यूसेप


3

SNOBOL4 (CSNOBOL4) , 130 68 बाइट्स

अब कोई टिप्पणी नहीं के साथ! पुराने एल्गोरिथ्म की व्याख्या के लिए संपादित इतिहास देखें ।

	X =X + 1
	A =ARRAY(X,DUPL(1,X));
I	I =I + 1
	OUTPUT =A<I>	:S(I)
END

इसे ऑनलाइन आज़माएं!

इसे दोगुना और तिगुना करने की कोशिश करें

स्पष्टीकरण:

	X =X + 1		;* increment X
	A =ARRAY(X,DUPL(1,X));	;* create an x-length array with 1 repeated x times for each element
I	I =I + 1		;* for i < x
	OUTPUT =A<I>	:S(I)	;* output a[i]
END

क्योंकि एक ENDलेबल की आवश्यकता होती है और पहले ENDलेबल की अनदेखी के बाद कुछ भी हो , हमें इस चुनौती के दो फायदे मिलते हैं:

  • कार्यक्रम के पहले छमाही में संचालन के लिए बार- Xबार दोहराया जाता हैX दोहराव के
  • वहाँ (दुभाषिया के लिए) केवल लेबल सहित दूसरी छमाही की एक प्रति मौजूद होगी ।

इससे पता चलता है कि हम पहले छमाही के लिए पुनरावृत्ति का उपयोग करते हैं, और फिर हम आउटपुट Xसमय को दोहराने के लिए अधिक "पारंपरिक" लेबलिंग दृष्टिकोण का उपयोग कर सकते हैं ।

पहला हाफ है

	X =X + 1
	A =ARRAY(X,DUPL(1,X));

जो जब दोहराया, वृद्धि कर देता है Xसमय की उचित संख्या है, और एक बनाता है ARRAY Aसे सूचकांक के साथ 1करने के लिए Xऔर जहां के प्रत्येक तत्व Aस्ट्रिंग है 1बार-बार Xबार।

फिर चाहे कितनी बार कार्यक्रम दोहराया जाए, दुभाषिया केवल देखता है:

I	I =I + 1
	OUTPUT =A<I>	:S(I)
END

जो एक विशिष्ट SNOBOL प्रोग्राम है जो Aएक समय में एक के तत्वों को प्रिंट करता है जब तक कि सूचकांक सीमा से बाहर नहीं जाता है, तब प्रोग्राम समाप्त हो जाता है।

;एक वैकल्पिक लाइन टर्मिनेटर है जो आमतौर पर एक-लाइन EVALया CODEस्टेटमेंट के लिए आरक्षित होता है जो कि बड़े करीने से बाइट काउंट को 68 तक लाता है और आधे रास्ते को चिह्नित करता है, जिससे कोड को वहां जोड़ा जा सकता है।


3

शॉर्टसी , 56 44 बाइट्स

-12 बाइट्स: प्रतीक्षा करें डोह मैं शॉर्टसी का उपयोग कर रहा हूं क्यों न कुछ छोटे सी सामान का उपयोग करें

s[];A
strcat(s,"@");//
Js);/*filling space*/

मैंने मानक सी का उपयोग किया होगा, लेकिन इसके }लिए अंत में प्रतिकृति की आवश्यकता होती है । संक्षेप में ईओएफ में संक्षेप में सम्मिलित करता है।


2

पर्ल 5 , 25 बाइट्स

24 बाइट्स कोड + 1 के लिए -p

सराहना करें कि आप कमांडलाइन झंडे की अनुमति नहीं देना चाहते हैं, कृपया मुझे बताएं कि क्या यह वैध नहीं है।

$@=0 x++$n;;$_="$@
"x$n;

इसे ऑनलाइन आज़माएं!



1

Zsh , 10 बाइट्स

s+=0
<<<$s

ऑनलाइन एक पूर्ण परीक्षण सूट की कोशिश करो!

... हाँ, यह थोड़ा बेहतर है। एन बार स्ट्रिंग करें, फिर एन बार प्रिंट करें। बाहर बारी <<<foo<<<fooकाम करता है बस ठीक है।


Zsh , 64 बाइट्स

चरित्र का इस्तेमाल किया: (अंतरिक्ष)।

f(){printf '%*s\n' $1}
:<<'E'

E
repeat $[i=LINENO/3];f $i
exit

ऑनलाइन एक पूर्ण परीक्षण सूट की कोशिश करो!

मध्यबिंदु इसके बाद दूसरी Eऔर नई रेखा के बीच में है। एक वंशानुगत समाप्त हो जाएगा जब वहाँ Eएक लाइन पर ही है, जो कोड के ठीक बीच में होता है।


lol @ "मामूली" सुधार। यह भी व्यक्त कर सकता हैs+=0;<<<$s
9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.