एक त्रिकोण में एक स्ट्रिंग मोड़ो


22

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

यदि स्ट्रिंग है abcdefghijkl, तो त्रिकोण होगा:

   a
  b l
 c   k
defghij

यदि स्ट्रिंग है iamastringwithalengthdivisiblebyfour, तो त्रिकोण होगा:

         i
        a r
       m   u
      a     o
     s       f
    t         y
   r           b
  i             e
 n               l
gwithalengthdivisib

यदि स्ट्रिंग है thisrepresentationisnotatriangle, तो त्रिकोण होगा:

        t
       h e
      i   l
     s     g
    r       n
   e         a
  p           i
 r             r
esentationisnotat

टिप्पणियाँ

  • स्ट्रिंग केवल से पात्रों से मिलकर बनता है aकरने के लिए z
  • जब तक आकार नहीं तोड़ा जाता है तब तक लीडिंग / ट्रेलिंग व्हाट्सएप और न्यूलाइन को अनुमति दी जाती है।
  • आउटपुट के रूप में स्ट्रिंग्स की एक सूची की अनुमति है।

यह । बाइट्स जीत में सबसे छोटा जवाब। मानक खामियां लागू होती हैं।

जवाबों:


7

चारकोल , 25 22 21 बाइट्स

≔÷Lθ⁴λ↙…θλ→✂θλ±λ↖✂θ±λ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। बस स्ट्रिंग को तीन भागों में काटता है और उन्हें उपयुक्त दिशाओं में प्रिंट करता है। संपादित करें: पूर्णांक विभाजन और स्लाइसिंग का उपयोग करके सहेजे गए 3 बाइट्स। तार के सिर के CycleChopबजाय का उपयोग करके आगे बाइट को बचाया Slice। संपादित करें: चारकोल अब बहुभुज के किनारे के साथ मनमाने पाठ को खींचने का समर्थन करता है, कोड को 12 बाइट्स को सरल बनाता है:

GH↙→→↖⊕÷Lθ⁴θ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है।


एस क्या करते हैं?
निकोल

@EriktheOutgolfer यह नया स्लाइस ऑपरेटर है।
नील

: | उफ़ PolygonHollow बनाने के लिए तात्पर्य है कि इस करते हैं, GH↙→→↖⊕÷Lθ⁴θअगली बार काम करेंगे मैं चारकोल धक्का
ASCII-केवल

6

05AB1E , 23 बाइट्स

ćsIg4÷GćsÁćsŠN·<ú«s}».C

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

व्याख्या

ć                        # extract head of input
 s                       # swap the remaining string to top of stack
  Ig4÷G                  # for N in [1...len(input)/4-1] do:
       ć                 # extract head
        sÁ               # swap remaining string to top of stack and rotate right
          ć              # extract head
           sŠ            # reorder stack as tail, head, remaining
             N·<ú        # prepend N-1 spaces to tail
                 «s      # concatenate with head and swap remaining string to top
                   }     # end loop
                    ».C  # join by newlines and center

6

जावास्क्रिप्ट (ईएस 6), 119 117 108 105 बाइट्स

s=>(l=s.length/4,S=' ',g=([c,...s],p)=>S.repeat(l)+c+(l--?p+s.pop()+`
`+g(s,p?p+S+S:S):s.join``))(s+S,'')

प्रारूपित और टिप्पणी की गई

s => (                            // given the input string s:
  l = s.length / 4,               // l = length of side edge - 1
  S = ' ',                        // S = space (defining S costs 6 bytes but saves 7)
  g = (                           // g = recursive function which takes:
       [c,                        //   - c = next character
           ...s],                 //   - s = array of remaining characters
                  p) =>           //   - p = middle padding string
    S.repeat(l) + c + (           // append left padding + left character
      l-- ?                       // if side edges are not complete:
        p + s.pop() + '\n' +      //   append middle padding + right character + Line Feed
        g(s, p ? p + S + S : S)   //   and do a recursive call with updated middle padding
      :                           // else:
        s.join``                  //   append all remaining characters and stop recursion
    )                             //   (this is the bottom edge)
  )(s + S, '')                    // initial call to g()

परीक्षण के मामलों


4

सी #, 260 बाइट्स

namespace System{using static Console;class P{static void Main(){var d=ReadLine();int e=d.Length/4,x=e,y=0,g=0,i=0;Action<int,int>a=(p,q)=>{SetCursorPosition(p,q);Write(d[g++]);};for(;i<e;i++)a(x--,y++);for(i=0;i<e*2;i++)a(x++,y);for(i=0;i<e;i++)a(x--,y--);}}}

वास्तव में उपयोग करना चाहता था SetCursorPosition

Ungolfed:

namespace System {
    using static Console;

    class P {
        static void Main() {
            var d = ReadLine();
            int e = d.Length / 4, x = e, y = 0, g = 0, i = 0;
            Action<int, int> a = (p, q) => { SetCursorPosition(p, q); Write(d[g++]); };
            for (; i < e; i++)
                a(x--, y++);
            for (i = 0; i < e * 2; i++)
                a(x++, y);
            for (i = 0; i < e; i++)
                a(x--, y--);
        }
    }
}

मेरे अज्ञान को क्षमा करें, लेकिन आपके समाधान में लड़ाई का उद्देश्य क्या है? क्या यह एक शून्य फ़ंक्शन की तुलना में कम बाइट्स है?
उलझा हुआ

1
@confusedandamused मैं एकल फ़ंक्शन उत्तर लिखने के लिए उपयोग किया जाता हूं, इसलिए फ़ंक्शन को सामान्य रूप से रखने पर भी विचार नहीं किया गया था, हालांकि यह छोटा होगा।
LiefdeWen

3

गणितज्ञ, 164 बाइट्स

(b=Length[c=Characters@#];k=Column[#,Alignment->Center]&;T=Table;k@{#&@@c,k@T[""<>{c[[i+2]],T[" ",2i+1],c[[-i-1]]},{i,0,(a=b/4)-2}],""<>T[c[[i]],{i,a+1,b/2+1+a}]})&


इनपुट

[ "Iamastringwithalengthdivisiblebyfour"]


हम सभी जानते हैं कि [[1]]इसके साथ प्रतिस्थापित किया जा सकता है #&@@
user202729

1
आप सब इतने स्मार्ट स्वीटी हैं!
J42161217


जब आप खुद को ऐसा करते हुए पाते हैं @(...), तो बस करें [...]। और मैंने परीक्षण नहीं किया है, लेकिन आप शायद एक अन्य बाइट को Columnएक नाम देकर (या शायद Column[#,Alignment->Center]&बचने के लिए भी q) बचा सकते हैं और फिर शेष सभी चर को बाहरी के पहले तर्क में डालकर Column(आसपास के कोष्ठकों को बचाने के लिए)।
मार्टिन एंडर

3

पायथन 3 , 120 बाइट्स

पहले गोल्फ, लगा कि मैं रास्ते में कुछ अजगर सीख सकता हूं।

a=input()
l=len(a)//4
print(l*" "+a[0])
for i in range(1,l):print((l-i)*" "+a[i]+(2*i-1)*" "+a[4*l-i])
print(a[l:3*l+1])

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

स्पष्टीकरण:

पहला वर्ण len(a)//4रिक्त स्थान के बाद स्वयं द्वारा मुद्रित किया जाता है , फिर iदूसरा से शुरू होने वाला पहला और अंतिम -स्थान वर्ण मुद्रित होता है, जिसे 2*i - 1रिक्त स्थान द्वारा अलग किया जाता है।

अंत में, शेष सबस्ट्रिंग मुद्रित किया जाता है।


PPCG में आपका स्वागत है! आप इस समाधान से सीख सकते हैं
लीक नून

यहां एक संभावित गोल्फ घोषित करना है p=print, और फिर बस आपके द्वारा उपयोग pकिए जाने वाले तीन printएस के लिए उपयोग करना है।
FlipTack

इसके अलावा, जैसा कि स्ट्रिंग की लंबाई हमेशा चार से विभाज्य होने की गारंटी है, //(फर्श विभाजन) के साथ प्रतिस्थापित किया जा सकता है /
FlipTack

वैसे, ऑनलाइन कोशिश करने के लिए आपने जो कोड लिंक किया है, वह आपके उत्तर के कोड जैसा नहीं है।
FlipTack

3

GNU सेड , 178 158 132 + 1 = 133 बाइट्स

-rझंडे के लिए +1 बाइट ।

s/(.)(.*)(.)/ \1\n\2;\3/
:
s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1  \6\n\3;\4\5/m
t
:A
s/(.*\n)( *)(.*);/ \2;\1\2\3/m
tA
s/. (.)$/\1/gm

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

व्याख्या

में पिछला पुनरीक्षण मैं गणित, विशेष मामलों, और सफाई के साथ काम कर बाइट्स का एक बहुत उपयोग किया जाता है, भले ही सहज मुझे यकीन है कि वे बचा जा सकता है किया गया था। जब से मैं ऐसा करने में कामयाब हुआ हूं, ज्यादातर।

मान लीजिए हमारे पास इनपुट है abcdEFGHIJKLMnop। पत्रEFGHIJKLM त्रिकोण के नीचे होंगे, इसलिए मैंने उन्हें दृश्य सहायता के रूप में कैपिटल किया है।

पहले हम पहले वर्ण को अपनी पंक्ति में रखते हुए (एक स्थान से पहले) और ;अंतिम वर्ण से पहले एक कर्सर ( ) सम्मिलित करके इनपुट तैयार करते हैं :

s/(.)(.*)(.)/ \1\n\2;\3/

अब हमारे पास है:

 a
bcdEFGHIJKLMno;p

अब, एक लूप में, हम अंतिम पंक्ति में कुछ चीजें करने जा रहे हैं: 1. पिछली पंक्ति से रिक्त स्थान की प्रतिलिपि बनाएँ और उन्हें पहले वर्ण, प्लस दो के बाद डालें; 2. रिक्त स्थान के बाद अंतिम चरित्र को स्थानांतरित करें, इसके बाद एक नई रेखा; और 3. कर्सर को तीन वर्ण बाईं ओर ले जाएं।

:
  s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1  \6\n\3;\4\5/m
  t

यहां प्रत्येक पुनरावृत्ति का परिणाम है:

 a
b   p
cdEFGHIJKL;Mno

 a
b   p
c     o
dEFGHI;JKLMn

 a
b   p
c     o
d       n
EF;GHIJKLM

आप देख सकते हैं कि पिरामिड आकार लेना शुरू कर रहा है। आप यह भी देख सकते हैं कि कर्सर क्या था: प्रत्येक पुनरावृत्ति में यह तीन वर्णों को छोड़ता है, और जब इसके बाईं ओर तीन वर्ण नहीं रह जाते हैं, तो यह लूप को तोड़ देता है, जो तब होता है जब हम "नीचे" तक पहुंच जाते हैं पिरामिड का।

अब हम एक समान ऑपरेशन करने जा रहे हैं लेकिन रिवर्स में। एक लूप में, हम कर्सर के साथ लाइन की शुरुआत से रिक्त स्थान को कॉपी करेंगे, पूर्ववर्ती लाइन की शुरुआत में प्लस एक, उस पंक्ति में कर्सर को स्थानांतरित करने की प्रक्रिया में।

:A
  s/(.*\n)( *)(.*);/ \2;\1\2\3/m
  tA

यहाँ कुछ पुनरावृत्तियों और अंतिम परिणाम हैं:

 a
b   p
c     o
 ;d       n
EFGHIJKLM

 a
b   p
  ;c     o
 d       n
EFGHIJKLM

...

    ; a
   b   p
  c     o
 d       n
EFGHIJKLM

अभी हम सब कुछ अतिरिक्त वर्णों को छोड़कर कर रहे हैं: ;पहली पंक्ति पर एक अतिरिक्त जगह और अगली तीन पंक्तियों पर पिरामिड के "बीच" में दो स्थान। एक साधारण प्रतिस्थापन से छुटकारा मिल जाता है:

s/. (.)$/\1/gm

सब कुछ कर दिया!

    a
   b p
  c   o
 d     n
EFGHIJKLM


2

पायथन 2 , 100 97 96 बाइट्स

  • याकूब ने 1 बाइट बचाई: पूर्णांक विभाजन अनावश्यक है
a=input()+" "
k=j=len(a)/4
while j:print j*" "+a[0]+(2*(k-j)-1)*" "+a[-1];a=a[1:-1];j-=1
print a

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

स्पष्टीकरण:

एक स्मार्ट चीज़ जो मैंने यहाँ की है, अंत में एक जगह के साथ इनपुट को गद्देदार किया जाता है, जैसे कि इसके साथ पहला वर्ण जोड़े और इसे लूप में धकेला जा सकता है (और चूंकि व्हाट्सएप को अनुमित करने की अनुमति है)

abcdefghijkl[space]   
To print [0] [-1]            Output=>[spaces]a[another_calculated_spaces(=0 here)][space]
Strip at both ends(a[1:-1])  
bcdefghijkl                
To print [0] [-1]            Output=>[spaces]b[another_calculated_spaces]l
Strip at both ends(a[1:-1])
and so on.

पालन ​​करने के लिए छोरों की संख्या के साथ जुड़ा हुआ है len(word)//4। अंतिम चरण में, पूरे शेष स्ट्रिंग को मुद्रित किया जाता है (यह त्रिकोण का आधार बनता है)। रिक्त स्थान एक सरल पैटर्न का पालन करते हैं; रिक्त स्थान का पहला सेट 1 से कम हो रहा है, जबकि रिक्त स्थान का दूसरा सेट 2 से बढ़ रहा है।


1
क्या आप पूर्णांक विभाजन नहीं करके एक बाइट को शेव कर सकते हैं? चूँकि aहमेशा 4. //->/
जेकॉब्लाव

धन्यवाद, मुझे आश्चर्य है कि यह किसी भी त्रुटि को भी नहीं फेंक रहा है [इनपुट के साथ लंबाई 4 से विभाज्य नहीं है] [ tio.run/…
officialaimm

1
ऐसा इसलिए है क्योंकि पायथन 2 में, डिफॉल्ट रूप से विभाजन पूर्णांक है। वह पाइथन 3 में कैन्ड किया गया है
कैलक्यूलेटरफल

2

C 225 बाइट्स

p(c){putchar(c);}S(n){while(n--)p(' ');}main(int c,char**v){int i= strlen(v[1]),n=i/4,r;char*s=v[1],*e=&s[i-1];S(n);p(*s++);p('\n');for (r=1;r<n;r++){S(n-r);p(*s++);S(2*r-1);p(*e--);p('\n');}e++;while (s!=e)p(*s++);p('\n');}

व्याख्या की

p(c){putchar(c);}        // p is alias for putchar
S(n){while(n--)p(' ');}  // S prints n spaces
main(int c,char**v){
    int i= strlen(v[1]), // counter
        n=i/4,           // num rows in figure - 1
        r;               // current row 
    char*s=v[1],         // start char
        *e=&s[i-1];      // end char
    S(n);p(*s++);p('\n');// print first row
    for (r=1;r<n;r++){ 
        S(n-r);p(*s++);S(2*r-1);p(*e--);p('\n'); // print middle rows
    }
    e++;while (s!=e)p(*s++);p('\n'); // print last row
}


1

ऑक्टेव, 87 बाइट्स

@(s,x=(n=nnz(s))/4)[[' ';flip(diag(s(1:x))')]' [' ';diag(s(n:-1:n-x+2))];s(x+1:n-x+1)];

* एक विंडोज़ मशीन में उपरोक्त कोड सही परिणाम उत्पन्न करता है, हालांकि tio में मैंने इसे ठीक करने के लिए कुछ कोड जोड़ा है।

स्पष्टीकरण:

[' ';flip(diag(s(1:x))')]'        %left side
[' ';diag(s(n:-1:n-x+2))]         %right side
s(x+1:n-x+1)                      %bottom side

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





1

रेटिना , 99 बाइट्स

^(.)(?=(....)+)
$#2$*  $1¶$#2$* 
( ( *).)(.*)(.)$
$1 $4¶$2$3
+`(( +).¶ ( *).)(.*)(.)$
$1$2  $5¶$3$4

इसे ऑनलाइन आज़माएं! स्पष्टीकरण: पहले दो चरण पहले दो लाइनें उत्पन्न करते हैं, लेकिन उसके बाद कोई विशेष आवरण आवश्यक नहीं है और प्रत्येक बाद की पंक्ति को उत्पन्न किया जा सकता है:

thisrepresentationisnotatriangle

        t
       hisrepresentationisnotatriangle

        t
       h e
      isrepresentationisnotatriangl

        t
       h e
      i   l
     srepresentationisnotatriang

...

        t
       h e
      i   l
     s     g
    r       n
   e         a
  p           i
 r             r
esentationisnotat

1

जावा 8, 213 बाइट्स

s->{int n=s.length()/4,i;String r=s(n)+s.charAt(0)+"\n";for(i=1;i<n;r+=s(n-i)+s.charAt(i)+s(i*2-1)+s.charAt(n*4-i++)+"\n");return r+s.substring(i,n*2+i+1);}String s(int n){String r="";for(;n-->0;r+=" ");return r;}

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

s->{                           // Method (1) with String parameter and String return-type
  int n=s.length()/4,          //  The length of the input divided by 4
      i;                       //  And an index-integer
  String r=                    //  Result-String which starts as:
           s(n)                //   Trailing spaces
           +s.charAt(0)+"\n";  //   + the first character and a new-line
  for(i=1;i<n;                 //  Loop from `1` to `n`
      r+=                      //   And append the result-String with:
         s(n-i)                //    Trailing spaces
         +s.charAt(i)          //    + the character of the left diagonal line
         +s(i*2-1)             //    + center spaces
         +s.charAt(n*4-i++)    //    + the character of the right diagonal line
         +"\n"                 //    + a new-line
  );                           //  End of loop
  return r                     //  Return the result-String
         +s.substring(i,n*2+i+1);
                               //   + the bottom part of the triangle
}                              // End of method (1)

String s(int n){               // Method (2) with integer parameter and String return-type
  String r="";                 //  Result-String
  for(;n-->0;r+=" ");          //  Append the result-String with `n` spaces
  return r;                    //  Return the result-String
}                              // End of method (2)

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