यह चुनौती '+' वर्ण का उपयोग करती है


28

आपका कार्य: एक नंबर दिया गया n, एक '+' चिन्ह उत्पन्न करें जो कि nइसके केंद्र से दूर हो। यदि यह भ्रामक है, तो परीक्षण मामलों की जाँच करें।

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

Input: 1
Output: +           ] 1 away from center `+`.

Input: 2
Output:  +          ] 2 away from center `+`.
        +++         ] 1 away from center `+`.  
         +

Input: 3
Output:   +         ] 3 away from center `+`.
          +
        +++++
          +
          +

यह , इसलिए सबसे छोटा कोड जीतता है!


मुझे लगता है कि प्रत्येक पंक्ति पर अनुगामी रिक्त स्थान की अनुमति है ताकि परिणाम वर्ग, सही हो?
लुइस मेंडू

@LuisMendo हाँ, यह ठीक है।
कॉमरेड स्पार्कलपनी


3
"एक '+' चिन्ह उत्पन्न करता है जो n वर्ण इसके केंद्र से दूर है" - मैं इस भाग को नहीं समझता। आप किस केंद्र का जिक्र कर रहे हैं? कुछ अपने आप में सनकी कैसे हो सकता है? कृपया स्पष्ट करें।
वॉसनाम

6
यदि केंद्र स्वयं से 0 दूर होता तो यह बहुत कम भ्रमित होता।
मोनिका

जवाबों:


45

22
यह भाषा भी क्या है?
DJMcMayhem

@DJMcMayhem मूल रूप से आप इसके साथ कछुए ग्राफिक्स ASCII कला कर सकते हैं। इसमें विभिन्न प्रकार के ASCII आकृतियों (जैसे P+= क्रॉस) को प्रस्तुत करने के लिए बहुत सारे काम के निर्माण हैं ।
fergusq

क्या वे मल्टीबाइट कैरेक्टर नहीं हैं?
पेटा

3
@Petah चारकोल एक कस्टम कोडपेज का उपयोग करता है ।
केवल

@fergusq आप चारकोल को टर्टल के साथ मिला सकते हैं : पी, चारकोल वास्तव में कछुआ ग्राफिक्स भाषा नहीं है
केवल


12

जावास्क्रिप्ट (ईएस 6), 67 65 63 60 59 बाइट्स

x=>(v=(` `[r=`repeat`](--x)+`+
`)[r](x))+`+`[r](x*2)+`+
`+v;
  • 2 बाइट्स दो घटनाओं की जगह ले कर बचती हैं x-1, पहली --xऔर दूसरी के साथ x
  • 2 बाइट्स ने क्रिस्सी लिथोस के"\n" साथ धन्यवाद को बचाया , साथ में जगह ले ली `[newline]`
  • 3 बाइट्स ने उपयोगकर्ता 2428118 के लिए धन्यवाद बचाया , आखिरकार मुझे repeatआकार को कम करने के तरीके से उर्फ ​​का एक तरीका निकालने में मदद मिली । ( मैरी को उनके प्रयासों के लिए सम्मानजनक उल्लेख के साथ भी)
  • 1 बाइट ने अप्रत्यक्ष रूप से हरमन को धन्यवाद दिया।

कोशिश करो

f=
x=>(v=(` `[r=`repeat`](--x)+`+
`)[r](x))+`+`[r](x*2)+`+
`+v;
oninput=_=>o.innerText=f(+i.value)
o.innerText=f(i.value=3)
<input id=i min=1 type=number><pre id=o>


1
मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे लगता है कि आप "\n"दो बैकटिक्स और उनके बीच एक शाब्दिक न्यूलाइन की जगह ले सकते हैं
क्रिति लिथोस

धन्यवाद, @ क्रिकटी लिथोस; पता नहीं क्यों मैं उस के बारे में नहीं सोचा था खुद को।
झबरा

1
ऐसा लगता है कि आप शायद दोहराने aliasing, जैसे द्वारा एक बाइट को बचा सकता है की तरह a='repeat',v=.....और` `[a]
मैरी

धन्यवाद, @ मारी; मैंने अलियासिंग करने की कोशिश की थी, repeat()लेकिन मेरी पहली कुछ कोशिशें 2 या 3 बाइट्स से बड़ी थीं, इसलिए मैंने इसे छोड़ दिया! जब मैं कंप्यूटर के सामने वापस आऊंगा, तो मैं इसे देखूंगा।
झबरा

2
x=>(v=(` `[r='repeat'](--x)+`+<newline>`)[r](x))+`+`[r](x*2+1)+`<newline>`+v
user2428118

9

MATL , 11 बाइट्स

tZv=&+g43*c

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

उदाहरण सहित व्याख्या

विचार करें n = 3

t     % Implicitly input n. Duplicate
      % STACK: 3, 3
Zv    % Symmetric range
      % STACK: 3, [1 2 3 2 1]
=     % Equal, element-wise
      % STACK: [0 0 1 0 0]
&+    % All pair-wise additions. Gives a 2D array
      % STACK: [0 0 1 0 0;
                0 0 1 0 0;
                1 1 2 1 1;
                0 0 1 0 0;
                0 0 1 0 0]
g     % Logical: convert non-zero to one
      % STACK: [0 0 1 0 0;
                0 0 1 0 0;
                1 1 1 1 1;
                0 0 1 0 0;
                0 0 1 0 0]
43*   % Multiply by 43 (ASCII for '+'), element-wise
      % STACK: [ 0  0 43  0  0;
                 0  0 43  0  0;
                43 43 43 43 43;
                 0  0 43  0  0;
                 0  0 43  0  0]
c     % Convert to char. Char 0 is displayed as space. Implicitly display.
      % STACK: ['  +  ';
                '  +  ';
                '+++++';
                '  +  ';
                '  +  ']

8

चारकोल , 16 13 बाइट्स

Nα×+α←↑×+α‖O↘

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

अन्य चारकोल उत्तर से एक अलग दृष्टिकोण का उपयोग करता है।

व्याख्या

Nα                       # Take input and store it in variable α
×+α                       # α times write a +
←                         # Go left
↑×+α                      # α times write a + upwards

अब ऊपर का बायां कोना पूरा है, यह कुछ इस तरह दिखेगा:

  +
  +
+++

‖O↘                      # Reflect-overlap it in a SE direction

अंतिम चरण इस कार्यक्रम की कुंजी है, यह दक्षिण-पूर्व दिशा (दाईं ओर और नीचे) में प्रतिबिंबित करके प्लस के बाकी हिस्सों को उत्पन्न करने के लिए प्लस के ऊपरी-बाएं हिस्से का उपयोग करता है।


क्या चारकोल का अपना कोड पेज है? उन वर्णों में से कई UTF-8 में एकाधिक बाइट्स हैं।
TRIG


8

शेक्सपियर प्रोग्रामिंग लैंग्वेज , 749 743 बाइट्स

N.Puck,.Page,.Ford,.Ajax,.Act I:.Scene I:.[Enter Puck and Ford]Puck:Listen to thy heart!Ford:You is the difference between a cat and I.Scene V:.[Exeunt][Enter Page and Ajax]Ajax:You is the difference between a cat and Ford.Scene X:.Page:You is the product of Puck and I.Is you as big as zero?If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.If not,you big big big big big cat.Speak thy mind!Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a big cat.Speak thy mind![Exit Page][Enter Puck]Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene V.[Exeunt]

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

संपादित करें: आधिकारिक एसपीएल कार्यान्वयन के साथ उत्तर को संगत बनाया - मैं इसे पहले काम करने के लिए नहीं मिला।

गोल्फ बाइट्स 6 बाइट्स क्योंकि सीन नंबर लगातार नहीं होते।

व्याख्या :

एसपीएल शेक्सपियर के नाटकों की तरह दिखने के लिए डिज़ाइन किया गया एक एसोलैंग है। सकारात्मक संज्ञाओं का मान 1 होता है (यहाँ बिल्ली का उपयोग किया जाता है) और नकारात्मक संज्ञा का मान -1 होता है (कोई भी उपयोग नहीं किया जाता था लेकिन सुअर उनमें से एक है)। विशेषण एक स्थिर को 2 से गुणा करके संशोधित करते हैं।

N.

पहली बिंदी तक सब कुछ शीर्षक है और कोई फर्क नहीं पड़ता।

Puck,.                           row counter
Page,.                           column counter
Ford,.                           input
Ajax,.                           temp

वर्ण पूर्णांक चर हैं, उनमें से प्रत्येक में एक स्टैक भी है लेकिन मुझे उस सुविधा का उपयोग करने की आवश्यकता नहीं थी।

Act I:.
Scene I:.

अधिनियमों और दृश्यों को गोटो लेबल के रूप में उपयोग किया जाता है

[Enter Puck and Ford]

यह केवल तभी उपयोगी है जब ठीक दो वर्ण एक ही समय में मंच पर हों।

Puck:Listen to thy heart!

एक नंबर पढ़ता है और फोर्ड को याद करता है।

Ford:You is the difference between a cat and I.

जैसा कि आप देख सकते हैं कि एसपीएल में एंग्रीश वैध है। यह पक का मूल्य "एक बिल्ली और मैं के बीच का अंतर" बनाता है। लेकिन इसका मतलब क्या है? catएक सकारात्मक संज्ञा है, इसलिए यह है Puck = 1 - Ford

Scene II:.
[Exeunt]

Exeunt सिर्फ "बाहर निकलने" का बहुवचन है, और बिना तर्क के इसका मतलब है कि मंच पर हर कोई बाहर निकलता है।

[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.

यह भी है Page = 1 - Fordलेकिन यह एक अलग अभिनेता द्वारा बोली जाती है इसलिए Iयह गलत होगा। चूंकि यह एक लूप है, मैं इसके मूल्य को कॉपी नहीं कर सकता Puck

Scene III:.
Page:You is the product of Puck and I.

अब तक बहुत सीधा। Ajax = Puck * Page

Is you as big as zero?

"as [adj] जैसा कि" ==ऑपरेटर है।

If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.

यदि अजाक्स == 0 ... "बिल्ली" 1 है, तो "बड़ी बिल्ली" 2 है, "बड़ी बिल्ली" 4 है और इसी तरह। सरल स्थिरांक को प्रतिस्थापित करने के बाद हमें "32 और 8 और 2 और 1 का योग का योग" -> "40 और 2 का योग और 1" -> "42 और 1 का योग" मिलता है -> "43", जो कि + के लिए ASCII है।

If not,you fat fat fat fat fat cat.

अन्यथा यह केवल "वसा वसा वसा वसा बिल्ली" है, इसलिए अजाक्स को एक स्थान के लिए 32, एएससीआईआई का मूल्य मिलता है।

Speak thy mind!

यह एक चरित्र के आउटपुट के लिए कमांड है।

Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.

यह एक पाश निर्माण है। "आप योग और बिल्ली" वेतन वृद्धि पृष्ठ, और if(Page != Ford) goto Scene III। कार्यक्रम के बाकी हिस्सों में एक ही घटक का उपयोग किया जाता है, इसलिए यहां एक अधिक पठनीय छद्मकोड संस्करण है:

दृश्य 1:
    इनपुट = [इनपुट नंबर];
    पंक्ति = 0 - इनपुट + 1;
scene2:
    col = 0 - input + 1;
Scene3:
    अस्थायी = पंक्ति * कर्नल;
    अगर (अस्थायी == 0) {
        अस्थायी = '+';
    }अन्य{
        अस्थायी = '';
    }

    putchar (अस्थायी);
    पृष्ठ = पृष्ठ + 1;
    if (पेज! = Ford) गोटो सीन 3;
    अजाक्स = 10;
    putchar (अजाक्स);
    पक = पक + १;
    अगर (पक! = फोर्ड) गोटो सीन 2;

" If not,let us return to Scene III." -1; चौथी दीवार को तोड़ता है: P
जैकब


6

मैथेमेटिका, 39 बाइट्स

Print@@@(CrossMatrix[#-1]"+"/. 0->" ")&

CrossMatrixएक अंतर्निहित है कि के साथ आवश्यक आकार के एक मैट्रिक्स उत्पन्न 1बजाय रों +रों और 0रिक्त स्थान के बजाय है। यदि हम उस मैट्रिक्स को गुणा करते हैं, जो एस को अपरिवर्तित छोड़ते समय एस के साथ "+"बदल देता है (जाहिर है ... और , सही है)। तब हम शून्य का उपयोग मैन्युअल रूप से रिक्त स्थान के साथ करते हैं । अंत में, हम मैट्रिक्स की प्रत्येक पंक्ति को प्रिंट करते हैं ।1+00*x = 01*x = x/. 0->" "Print@@@(...)


1
पता नहीं इस Printतरह इस्तेमाल किया जा सकता है।
नेगेनिसिस

6

सी, 69 बाइट्स

बहुत दिलचस्प नहीं है ... वर्ग पर लूप्स, उपयुक्त चरित्र को प्रिंट करना।

r,c;f(n){for(r=-n;++r<n;puts(""))for(c=-n;++c<n;putchar(r*c?32:43));}


6

GNU sed , 104 99 बाइट्स

-5 seshoumara के लिए धन्यवाद में
+1 शामिल है-r

s/1//;h;:;s/(.*)1/ \12/;t;s/( *2)2(2*)/\1\n\1\2/
t;G;s/1+/&&1/;s/(.*)(\n1*)/&\n\1/;/1/!c+
y/12/++/

अनरीट में इनपुट लेता है

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

s/1//                    # Subtract 1 from input
h                        # Hold onto input
:                        # Start loop
s/(.*)1/ \12/            #   Remove a 1, prepend a space, and append a 2
t                        # Loop until all 1s are 2s
                         # Start Loop (uses the previous label)
s/( *2)2(2*)/\1\n\1\2/   #   Shift all but the first 2 from the last line to a new line 
                         #   E.g.  "  2"      "  2"
                         #         "  222" -> "  2"
                         #                    "  22"
t                        # Loop until all 2s are on their own line
G                        # Append a newline and input
s/1+/&&1/                # Double the number of 1s and append an extra
s/(.*)(\n1*)/&\n\1/      # Copy all of the lines with 2s to the end
/1/!c+                   # If there aren't any 1s print a '+'
y/12/++/                 # Convert all 1s and 2s to +s

+1 का उपयोग करके आप 5 बाइट्स बचा सकते हैं s/( *2)2(2*)/\1\n\1\2/और s/(.*)(\n1*)/&\n\1/जैसा कि यहाँ दिखाया गया है , 99 के कुल स्कोर के लिए।
seshoumara

5

लुआ 113 , 90 बाइट्स

r,w,p=string.rep,io.read(),io.write;s=r(' ',w-1)p(r(s..'+'..'\n',w-1))p(r('+',w*2-1)..'\n')p(r(s..'+'..'\n',w-1))

r,w=string.rep,io.read()d=w*2-1;for a=1,d do print(a~=w and r(' ',w-1)..'+'or r('+',d))end


5

आर, 54 बाइट्स

7 बाइट्स से शेविंग @Jarko डबेलडैम के लिए धन्यवाद:

function(n){a=matrix("",y<-n*2-1,y);a[n,]=a[,n]="x";a}

पिछला उत्तर:

f=function(n){a=matrix("",n*2-1,n*2-1);a[n,]="x";a[,n]="x";a}

1
आपको फ़ंक्शन का नाम नहीं देना है, इसलिए function(n){a=matrix("",n*2-1,n*2-1);a[n,]="x";a[,n]="x";a}59 बाइट्स होंगे!
JAD

1
इसके अलावा, आप एक बाइट का उपयोग करके बचा सकते हैं matrix("",y<-n*2-1,y)
JAD

1
a[n,]=a[,n]="x"कुछ और बाइट्स बचाकर भी काम करता है।
JAD

आप scan()एक फ़ंक्शन के बजाय एक और 4 बाइट्स का उपयोग करके और इसे प्रोग्राम बनाकर बचा सकते हैं :n=scan();a=matrix("",y<-n*2-1,y);a[n,]=a[,n]="+";a
rturnbull

4

पॉवरशेल , 48 बाइट्स

param($n)($x=,(" "*--$n+"+")*$n);'+'*(1+2*$n);$x

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

इनपुट लेता है $n--$nरिक्त स्थान की एक स्ट्रिंग का निर्माण करके शुरू होता है , जिसके साथ समाप्‍त होता है +। यह अल्पविराम संचालक, (नव-अस्वीकृत) $nसमय का उपयोग करके एक सरणी में परिवर्तित हो जाता है । उस एरे को $xपाइप लाइन पर कॉपी रखने के लिए पार्न्स में रखा और इनकैप्सुलेट किया गया है।

हम तब मध्य खंड करते हैं, जो +उचित समय के बाहर स्ट्रिंग को गुणा करता है। वह पाइपलाइन पर छोड़ दिया गया है। अंत में, हम $xफिर से पाइपलाइन पर डालते हैं ।

उन सभी को कार्यक्रम के पूरा होने पर पाइपलाइन पर छोड़ दिया जाता है, और निहित Write-Outputतत्वों के बीच एक नई रूपरेखा सम्मिलित करता है।


4

पर्ल ५ , 45 बाइट्स

कोड + -pध्वज के 44 बाइट्स ।

$_=join"+
",@%=($"x--$_)x$_,"+"x($_*2),@%,""

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


कुछ समान (लेकिन अभी भी अलग) दृष्टिकोण:

48 बाइट्स (47+ -p):

$_=join"+"x($_*2-1).$/,(~~($"x--$_."+\n")x$_)x2

50 बाइट्स (49+ -n):

$,="+"x($_*2-1).$/;print+(~~($"x--$_."+\n")x$_)x2


3

सीजेएम , 23 बाइट्स

ri_(S*'++a\2*(*_z..e>N*

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

व्याख्या

यह थोड़ा सा अपनाना लगता है, लेकिन यह विचार निम्नलिखित दो ग्रिडों को सुपरइम्पोज़ करने के लिए है:

  +
  +
  +
  +
  +



+++++

जो वांछित परिणाम देता है।

ri    e# Read input and convert to integer N.
_(    e# Duplicate and decrement.
S*    e# Get a string of N-1 spaces (indentation of the vertical bar).
'++   e# Append a + (the vertical bar).
a     e# Wrap the line in an array.
\2*(  e# Swap with the other copy of N and compute 2N-1.
*     e# Repeat the line that many times.
_z    e# Duplicate the grid and transpose it.
..e>  e# Pairwise maximum between the two grids. This superimposes them.
N*    e# Join with linefeeds.

3

CJam, 17

ri(S*_]'+*_ffe>N*

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

स्पष्टीकरण:

ri(      read n, convert to int and decrement
S*       make a string of n-1 spaces
_]       duplicate it and put the 2 strings in an array
'+*_     join the strings with a '+' and duplicate the result
ffe>     for each pair of characters from the 2 (identical) strings,
          get the larger character (results in a matrix)
N*       join the rows with newlines


3

05AB1E , 15 14 12 बाइट्स

F'+}¹·<×)û.c

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

-2 एमिग्ना को धन्यवाद।


1
आप F'+}¹·<×)û.c12 के लिए कर सकते हैं
एमिग्ना

आपकी कोशिश यह है कि ऑनलाइन लिंक खराब है - यह पोस्ट के वर्तमान संशोधन से लिंक नहीं करता है, इसलिए यह "खराब आउटपुट" दिखाता है जो ऊपर दिए गए परीक्षण से मेल नहीं खाता है।
थॉमस वार्ड

@ThomasWard: अच्छी पकड़! मैंने लिंक को सही किया।
एमिगा


2

जेएस (ईएस 6), 88 74 73 बाइट्स

x=>(x--,y=y=>(" ".repeat(x)+`+
`).repeat(x),y``+"+".repeat(x+x+1)+"\n"+y``)

शायद और अधिक गोल्फ हो सकता है।

Snippetify(x=>(x--,y=y=>(" ".repeat(x)+`+
`).repeat(x),y``+"+".repeat(x+x+1)+"\n"+y``))
<script src="https://programmer5000.com/snippetify.min.js"></script>
<input type = "number">
<pre data-output></pre>


1
मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे लगता है कि आप "\n"दो बैकटिक्स और उनके बीच एक शाब्दिक न्यूलाइन की जगह ले सकते हैं
क्रिति लिथोस

केवल अब इस समाधान को देखकर, आपने मुझे कुछ मिनटों के लिए हराया। समय की एक छोटी खिड़की के भीतर पोस्ट की गई समान भाषा में समान समाधानों के बारे में यहाँ क्या शिष्टाचार है?
झबरा

2

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

f=
n=>(r=([s,t])=>(s=s.repeat(n-1))+t+s+`
`)([r(` +`),r(`++`)])
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

आउटपुट दो अनुगामी newlines। वैकल्पिक सूत्रीकरण, 60 बाइट्स:

n=>(r=a=>(s=a[0].repeat(n-1))+a[1]+s+`
`)([r(` +`),r(`++`)])

2

पॉवरशेल, ४S

इससे छोटा नहीं लगता (और अन्य समाधान के रूप में बहुत ही दृष्टिकोण):

($a=,(' '*($n="$args"-1)+'+')*$n)
'+'+'++'*$n
$a

या

($a=(' '*($n="$args"-1)+'+
')*$n)+'++'*$n+"+
$a"


2

आरएक्सएक्सएक्स, 81 बाइट्स

arg a
b=a*2-1
do i=1 to b
  if i=a then say copies('+',b)
  else say right('+',a)
  end

2

PHP, 68 बाइट्स

for(;$i<$c=-1+2*$m=$argn;)echo"\n".str_pad("+",$c," +"[$m==++$i],2);

83 बाइट्स

for(;$i<($c=($n=$argn)*2-1)**2;)echo$i%$c?"":"\n".!++$k," +"[$k==$n|$i++%$c==$n-1];

1
पोस्ट इंक्रीमेंट करने के बजाए आप $m=$argnप्री-इन्क्रीमेंटिंग का इस्तेमाल करके कुछ बाइट्स बचा सकते हैं $i। आप बाइट $mको अंत तक स्थानांतरित करके और कोष्ठक ड्रॉप करके एक बाइट को भी बचा सकते हैं।
user59178

@ user59178 मैं समझ नहीं पाया कि आपका वास्तव में क्या मतलब है
Jörg Hülsermann

1
for(;$i<$c=-1+2*$m=$argn;)echo"\n".str_pad("+",$c," +"[$m==++$i],2);
user59178

while(++$y<2*$n=$argn)echo"\n",str_pad("+",$n*2-1," +"[$y==$n],2);66 बाइट्स (और एक भौतिक लाइनब्रेक के साथ एक और बचाओ)
टाइटस


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