একটি ত্রিভুজ মধ্যে একটি স্ট্রিং ভাঁজ করুন


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θ⁴θ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।


এস কী করে ?
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার এটি নতুন স্লাইস অপারেটর।
নীল

: | ওপোলগুলি বহুভুজহোলকে এটি করতে বোঝানো হয়েছে, GH↙→→↖⊕÷Lθ⁴θপরের বার যখন আমি কাঠকয়লা ধাক্কা দিয়ে কাজ করব
ASCII- কেবল

6

05 এ বি 1 ই , 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

জাভাস্ক্রিপ্ট (ES6), 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
@ কনফিউজড এবং বিভক্ত আমি একক ফাংশন এর উত্তর লিখতে অভ্যস্ত তাই ফাংশনটি সাধারণত রাখার বিষয়টি বিবেচনা করে না, যদিও এটি কম হবে।
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]]প্রতিস্থাপন করা যেতে পারে #&@@
ব্যবহারকারী 202729

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ফাঁকা স্থান দ্বারা আলাদা করে মুদ্রিত হয় ।

শেষ অবধি, বাকি সাবস্ট্রিং মুদ্রিত হয়।


পিপিসিজিতে আপনাকে স্বাগতম! আপনি এই সমাধান থেকে শিখতে পারেন ।
লিকি নুন

এখানে একটি সম্ভাব্য গল্ফ হ'ল ঘোষণা করা p=printএবং তারপরে আপনি pযে তিনটি ব্যবহার করেন সেটির জন্য কেবল printব্যবহার করুন।
ফ্লিপট্যাক

এছাড়াও, স্ট্রিংয়ের দৈর্ঘ্যটি সর্বদা চার দ্বারা বিভাজ্য হওয়ার গ্যারান্টিযুক্ত হিসাবে, //(তল বিভাগ) এর সাথে প্রতিস্থাপন করা যেতে পারে /
ফ্লিপট্যাক

যাইহোক, আপনি যে কোডটি অনলাইনে চেষ্টা করার সাথে সংযুক্ত করেছেন তা আপনার উত্তরের কোডের মতো নয়।
ফ্লিপট্যাক

3

জিএনইউ সেড , 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

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

ইন পূর্ববর্তী পুনর্বিবেচনা আমি গণিত, বিশেষ ক্ষেত্রে, এবং পরিষ্করণ সঙ্গে তার আচরণ বাইটের অনেক ব্যবহার, যদিও, intuitively আমি নিশ্চিত তারা এড়িয়ে চলা যাবে না। আমি তখন থেকে বেশিরভাগ ক্ষেত্রেই তা পরিচালনা করেছি।

ধরুন আমাদের ইনপুট আছে abcdEFGHIJKLMnop। অক্ষরগুলি EFGHIJKLMত্রিভুজের নীচে হবে, সুতরাং আমি সেগুলি ভিজ্যুয়াল সহায়তা হিসাবে মূলধন করে।

প্রথমে আমরা প্রথম অক্ষরটিকে তার নিজস্ব লাইনে স্থাপন করে ইনপুটটি প্রস্তুত করি (একটি স্থান পূর্ববর্তী) এবং ;শেষ অক্ষরের আগে কার্সার ( ) সন্নিবেশ করিয়ে :

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

এখন আমাদের আছে:

 a
bcdEFGHIJKLMno;p

এখন, একটি লুপে, আমরা শেষ লাইনে কয়েকটি জিনিস করতে যাচ্ছি: ১. পূর্ববর্তী লাইন থেকে স্পেসগুলি অনুলিপি করুন এবং প্রথম অক্ষর পরে দুটি সন্নিবেশ করান; ২. শেষ অক্ষরটি ফাঁকা স্থানের পরে ডানদিকে সরান, তারপরে একটি নতুন লাইন; এবং 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 //->/
জ্যাকোব্লা

আপনাকে ধন্যবাদ, আমি অবাক হয়েছি এটি এমনকি কোনও ত্রুটি ছুঁড়ে ফেলছে না [দৈর্ঘ্যের আয়তনের সাথে
অফিসিয়ালাইম

1
কারণ পাইথন 2 এ বিভাগটি ডিফল্ট হিসাবে পূর্ণসংখ্যা হয়। পাইথন 3 এ এটি কঞ্জ করা হয়েছিল
ক্যালকুলেটরফলাইন

2

সি 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)];

* উইন্ডোজ মেশিনে উপরের কোডটি সঠিক ফলাফল উত্পন্ন করে তবে টিওতে আমি এটি সংশোধন করার জন্য কিছু কোড যুক্ত করেছি।

ব্যাখ্যা:

[' ';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

পিএইচপি> = 7.1, 122 বাইট

for(;$i*2<$w=strlen($a=$argn)/2;$e=$a[-++$i])echo str_pad(str_pad($a[$i],$i*2).$e,$w+1," ",2),"
";echo substr($a,$i,$w+1);

পিএইচপি স্যান্ডবক্স অনলাইন

পিএইচপি> = 7.1, 124 বাইট

for(;$i*2<$w=strlen($a=$argn)/2;$e=$a[-++$i],$s.=$s?"  ":" ")echo str_pad("",$w/2-$i)."$a[$i]$s$e
";echo substr($a,$i,$w+1);

পিএইচপি স্যান্ডবক্স অনলাইন



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)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.