एक सही त्रिकोण उत्पन्न करें


10

इस चुनौती में, आपको इनपुट के रूप में दो स्थान (एक स्थान से अलग) और एक एएससीआईआई सही त्रिकोण का उत्पादन करना होगा, जो xएस से बना है ।

पहली संख्या उस त्रिभुज की चौड़ाई और ऊँचाई होगी जिसे आपको आउटपुट करना चाहिए। दूसरा नंबर होगा कि कौन सा कोना सही कोण पर होगा। कोनों की संख्या 1 से 4 तक होती है, ऊपर बाईं ओर शुरू होता है और अंग्रेजी पढ़ने के क्रम में जाता है:

1    2



3    4

उदाहरण के लिए (इनपुट और उनके संबंधित त्रिकोण आउटपुट):

INPUT | 3 1 | 3 2 | 3 3 | 3 4
------+-----+-----+-----+----
 OUT- | xxx | xxx | x   |   x
 PUT  | xx  |  xx | xx  |  xx
      | x   |   x | xxx | xxx

आपके प्रोग्राम का आउटपुट इन उदाहरणों से उनके संबंधित इनपुट के लिए बिल्कुल मेल खाना चाहिए।

इनपुट हमेशा मान्य होगा: पहला नंबर एक पूर्णांक ,1 होगा, और दूसरा नंबर 1, 2, 3 या 4 होगा।

यह ; सबसे छोटा कोड (वर्ण गणना में) जीतता है।

जवाबों:


9

एपीएल (30)

{' x'[1+(⍎⍵⌷'⌽+⍉⊖')≤/¨⍳2⍴⍺]}/⎕

स्पष्टीकरण:

  • {... }/⎕: इनपुट पर दिए गए फ़ंक्शन को कम करें (इसलिए यदि इनपुट में 2 नंबर हैं, तो फ़ंक्शन को उन दो नंबरों के साथ कॉल करें, बाएं नंबर और दाएं नंबर)
  • ≤/¨⍳2⍴⍺: एक बनाओ -by- समन्वय मैट्रिक्स और उन स्थितियों जहाँ X समन्वय अधिक नहीं की तुलना में वाई समन्वय है निर्धारित करते हैं, एक bitfield दे रही है।
  • (⍎⍵⌷'⌽+⍉⊖'): त्रिभुज को राईट-अप करने के लिए दिया गया एक ट्रांसफॉर्मेशन फंक्शन चुनें ।
  • ' x'[1+... ]: बिटफ़ील्ड में एक जोड़ें, और परिणाम को स्ट्रिंग में एक इंडेक्स के रूप में उपयोग करें ' x', इसलिए 0 और x1 के लिए जगह डालें ।

1
जितना अधिक एपीएल मैं पढ़ता हूं, उतना ही मुझे एहसास होता है कि एपीएल एक दुःस्वप्न है। क्या (⍎⍵⌷'functions')पूरे कथन की व्याख्या करने का निर्णय लेने से पहले वास्तव में उस हिस्से का मूल्यांकन नहीं करना होगा ? उदाहरण के लिए विचार करें 1+(⍵⌷'12+')|40। यह भी नहीं पता होगा कि उस छोटे से हिस्से में आईएनजी |से पहले मोनैडिक या डाइएडिक है या नहीं । मूल्यांकन के आधार पर संपूर्ण सार वाक्यविन्यास वृक्ष बदलता है।
प्रोटिस्ट

मेरा मतलब था 1+(⍎⍵⌷'12+')|40... मुझे संपादित नहीं करने देंगे।
प्रोटिस्ट

2
@protist: मजेदार तथ्य: f ← { [ }कोई त्रुटि नहीं देता है! f 1÷0... एक डोमेन त्रुटि देता है ! (शून्य से विभाजन के कारण)। जब आप फ़ंक्शन को कॉल करते हैं, जैसे ही f 123आपको सिंटैक्स त्रुटि मिलती है । निहारना: imgur.com/jtmdi4B
marinus

सभी देवताओं द्वारा !!!! इससे मेरा दिल थोड़ा टूट गया। मैं एपीएल दुभाषियों में से कुछ के साथ खेल रहा हूं, और यह वर्तमान कार्यान्वयन में एक बड़ी बुराई को दर्शाता है। हाहा
प्रोटिस्ट

यह लगभग ऐसा लगता है जैसे कार्यों को किसी न किसी तरह के मैक्रो-विस्तार-जैसी प्रक्रिया द्वारा नियमित रूप से किया जाता है। यह कुछ हद तक जगह-जगह पाठ विस्तार का संकेत देगा।
प्रोटिस्ट नोव

6

रूबी, 116 115 109 96

मैं अपने स्वयं के समाधान के साथ शुरू करूँगा।

i=gets.split
s=i[0].to_i
(i[1]<?3?s.downto(1):1..s).map{|x|t=?x*x
puts /2|4/=~i[1]?t.rjust(s):t}

मुझे सिर्फ इतना पता है कि मैं एक 30 कैरेक्टर गोल्फस्क्रिप्ट समाधान से लगभग तुरंत ही हरा दूंगा: पी

19 वर्णों को शेविंग करने के लिए मिनिटेक का धन्यवाद (वाह)!


इसके बजाय ==0, आप उपयोग कर सकते हैं <1?x*xएक और चरित्र बचाता है। इसके अलावा, puts i[1]%2<1?t.rjust(s):t}चाल है, है ना?
राय-

हम्म ... आप के आसपास रिक्त स्थान है ?? क्या यह जरूरी है? इसके अलावा, मुझे लगता है कि आप भी यही काम कर सकते हैं r=
Ry-

@ मिनिटेक यह आवश्यक है - अग्रणी स्थान क्योंकि अन्यथा यह 1?एक एकल टोकन के रूप में पार्स करता है, और अनुगामी स्थान क्योंकि अन्यथा यह ?t(जो इसके बराबर है 't') के रूप में पार्स करता है । आप rभाग के पुनर्गठन का प्रस्ताव कैसे करते हैं ?
दरवाज़े

क्या तुमने कोशिश की? रूबी किस संस्करण के तहत? 2.0 पर मेरे लिए ठीक काम करता है।
Ry-

पी धन्यवाद: @minitech अजीब है, यह पहले काम नहीं किया था और अब यह करता है
दरवाज़े

4

GolfScript ( 34 33 वर्ण)

~\:^,{)' x'^*$>^<0(2$?%}%\(2&(%n*

यह शर्म की बात है कि कोनों को रोटेशन में नहीं गिना जाता है, क्योंकि यह एक सरणी के निर्माण के लिए और अधिक सुंदर दृष्टिकोण की अनुमति देगा और फिर इसे nकई बार घुमाएगा :

~\:^,{)' x'^*$>^<}%{-1%zip}@)*n*

3

सी # - 195

using System;class P{static void Main(string[]a){int G=int.Parse(
a[0]),O=int.Parse(a[1]),L=O<3?0:G+1,F=O<3?-G:1;G=O%2>0?-G:G;for(;
F<L;F++)Console.Write("{0,"+G+"}\n","".PadRight(F<0?-F:F,'x'));}}

प्रारूपित:

using System;
class P
{
    static void Main(string[] a)
    {
        int G = int.Parse(a[0]),
            O = int.Parse(a[1]),
            L = O < 3 ? 0 : G + 1,
            F = O < 3 ? -G : 1;

        G = O % 2 > 0 ? -G : G;

        for(; F < L; F++)
            Console.Write("{0," + G + "}\n", "".PadRight(F < 0 ? -F : F, 'x'));
    }
}

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


इनपुट को स्पेस-सीमांकित किया जाना है, कॉमा को अलग नहीं किया गया है।
दरवाज़े

@Doorknob: स्क्रीनशॉट एक परीक्षण कार्यक्रम से है जहां मैंने अल्पविराम के साथ इनपुट दिखाने के लिए चुना है। जब आप प्रोग्राम निष्पादित करते हैं, तो इनपुट वास्तव में स्पेस सीमांकित होता है, हालांकि बिंदु म्यूट है क्योंकि सभी C # कंसोल एप्लिकेशन को स्ट्रिंग्स के एक सरणी के रूप में इनपुट प्राप्त होता है।
इग्बी लार्गेमन

2

Golfscript, ३ ९ ३६ 35 वर्ण

~\:y,{' '*'x'y*+y<0~2$?%}%-1@2>?%n*

लाइव डेमो: http://golfscript.apphb.com/?c=OyczIDInCn5cOnkseycgJyoneCd5Kit5PC0xIDIkPyV9JS0xQDI%BBPyVuKgo%3D

बहुत बुरा यह अनुरोध के रूप में 30 अक्षर नहीं है


के 1${-1%}*साथ बदलने -1 2$?%और \2>{-1%}*साथ \2>-1\?%आप 2 वर्ण नेट होगा।
अस्थिरता

@Volatility धन्यवाद, निगमित
जॉन ड्वोरक

@Volatility -1 2लिखा जा सकता है0~2
हावर्ड

और एक और चार के लिए हमें थोड़ा और पुनर्गठन करना होगा:~(\:y,{{>'x '=}+y,%0~2$?%}%\2&(%n*
हावर्ड

2

गणितज्ञ 122 (104?)

g@s_ := ({w, p} = ToExpression@StringSplit@s; 
   Array[If[Switch[p, 1, # <= (w + 1 - #2), 2, # <= #2, 3, # >= #2, 4, # > (w - #2)],
   "X", ""] &, {w, w}]) // Grid

GraphicsGrid[{{g["12 1"], g["12 3"]}}]

एक और तरीका


"आउटपुट" की उदार व्याख्या के तहत, निम्नलिखित (104 वर्ण) काम करेंगे।

f@s_ := ({w, p} = ToExpression@StringSplit@s; 
  Graphics[Polygon@Delete[{{w, 0}, {0, 0}, {w, w}, {0, w}}, p], Axes -> True])


f["50 4"]

त्रिकोण


यदि सूची के रूप में इनपुट की अनुमति थी, तो निम्नलिखित (75 वर्ण) पर्याप्त होंगे:

f[{w_, p_}] := 
 Graphics[Polygon@Delete[{{w, 0}, {0, 0}, {w, w}, {0, w}}, p], Axes -> True]


पी: तकनीकी तौर पर यह नियम के खिलाफ है
दरवाज़े

यह किस नियम का उल्लंघन करता है।
डेविड 4

इनपुट / आउटपुट चार्ट बात मैं डाल दिया। 122 चेर एक हालांकि अच्छा है। मैं सवाल संपादित स्पष्ट करने के लिए
दरवाज़े

उफ़। मैंने सोचा कि चार्ट केवल एक उदाहरण था।
डेविड ऑग

मैंने सिर्फ ASCII कला संस्करण को पहले स्थान पर रखा।
डेविड

2

J, 59 55 42 38 37 36 वर्ण

यदि इसे कार्यक्रम के अंत में इनपुट की अनुमति है:

(|:@|.@]^:([:|[+_7*2<[)[:[\'x'$~])~/

यदि नहीं (अतिरिक्त 3 वर्णों के लिए):

t=.(|:@|.@]^:([:|[+_7*2<[)[:[\'x'$~])~/

उपयोग:

   (|:@|.@]^:([:|[+_7*2<[)[:[\'x'$~])~/3 4
  x
 xx
xxx

या

   t 3 4
  x
 xx
xxx

मुझे लगता है कि यह काफी हद तक छोटा हो सकता है क्योंकि अधिकांश पात्र एक शैली में रखने के लिए कोष्ठक और कैप हैं।


एक gerund का उपयोग कर संपादित करें और एजेंडा क्रिया ने कुछ वर्णों को काट दिया है, लेकिन मेरी पसंद के लिए अभी भी बहुत सारे कैप हैं।

संपादित करें 2
यह थोड़ा अधिक पसंद है। कितने घुमावों की आवश्यकता होती है, इसकी सूची के लिए एजेंडा डंप करने से अधिकांश अतिरिक्त कोष्ठक और कुछ कैप से छुटकारा मिल जाता है।

3 संपादित करें
अंतिम अंतिम कैप और प्रक्रिया में कोष्ठक की एक जोड़ी से छुटकारा पा लिया। आवश्यक घुमावों की संख्या को एन्कोडिंग का एक सस्ता तरीका खोजने की आवश्यकता है।

संपादित 4 एक चरित्र को काट देने के लिए प्रत्यय के बजाय उपसर्ग का उपयोग करें। सूची बनाने का एक अलग तरीका सक्षम करता है जो किसी भी वर्ण को नहीं बचाता है। मैथुन।

5 संपादित करें
किसी अन्य वर्ण को काट देने के सूत्र का उपयोग करना। अभी भी लगता है कि यह थोड़ा कम हो सकता है।


1

अजगर 106 वर्ण

w,d=map(int,raw_input().split())
for e in range(1,w+1)[::d/3*2-1]:print('%'+'-+'[d%2]+str(w)+'s')%('*'*e)

1

पायथन 3, 91

अभिजीत के जवाब पर आधारित

स्ट्रिंग्स के योग और बदसूरत 1एस में से बचने के लिए आउटपुट स्ट्रिंग के निर्माण को संशोधित किया range। पायथन 3 से छुटकारा मिल जाता raw_है raw_input, लेकिन //पूर्णांक विभाजन के लिए उपयोग करना और इसके लिए परांठे जोड़ना आवश्यक हो जाता है print, जिससे केवल एक वर्ण बचता है।

w,d=map(int,input().split())
for e in range(w)[::d//3*2-1]:print('%*s'%(w-d%2*2*w,'x'*-~e))

0

बिल्ली का बच्चा , १४०

def s{><replicate}
getLine{' 'neChar}span{readInt fromSome}toBoth->{w n}
w 0 if(n 2>){><}..
{<>w>< -{'X's}{' 's}both if(n 2%0=){><}cat say}each

Ungolfed:

getLine
{' ' neChar} span
{readInt fromSome} toBoth
->{ width corner }

width 0
if (corner 2 >):
  swap
..

{ ->index
  'X' index replicate
  ' ' (width index -) replicate
  if (corner 2 % 0 =):
    swap
  cat say
} each

साक्ष्य कि मुझे मानक पुस्तकालय से अधिक भार और मांस को लागू करने की आवश्यकता है।

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