লেবু-সীমিত একটি স্ট্রিং


34

এমন কোনও প্রোগ্রাম বা ফাংশন লিখুন যা অযৌক্তিক একক-লাইনের স্ট্রিংয়ের মধ্যে পড়ে। আপনি ধরে নিতে পারেন এটিতে স্থান বাদে কেবল প্রিন্টযোগ্য এএসসিআইআই রয়েছে ।

স্ট্রিংয়ের উপসর্গ থেকে তৈরি লেবু বা চুনের মতো একটি ASCII আর্ট লজেন্স আকারটি প্রিন্ট করুন বা প্রত্যাবর্তন করুন।

ধরুন ইনপুট স্ট্রিংটি n অক্ষর দীর্ঘ। তারপরে, এ জাতীয় আকার 2n - 1 এএসসিআইআই শিল্পের 1 টি কলাম এক সাথে সেলাইযুক্ত, প্রতিটি 2n - 1 লাইন সমন্বিত। 1 থেকে গণনা, -th কলাম চ (ট) = MIN (K, 2n - ট) অক্ষর চওড়া ও ধারণ করে চ (ট) প্রথম কপি চ (ট) ইনপুটের অক্ষর, উল্লম্বভাবে কেন্দ্রীভূত, একক ফাঁকা সঙ্গে অনুলিপি পৃথক লাইন।

উদাহরণস্বরূপ, যদি ইনপুট হয় Lemonতবে আউটপুটটি হওয়া উচিত:

          Lemon
      Lemo     Lemo
   Lem    Lemon    Lem
 Le   Lemo     Lemo   Le
L  Lem    Lemon    Lem  L
 Le   Lemo     Lemo   Le
   Lem    Lemon    Lem
      Lemo     Lemo
          Lemon

যদি ইনপুট হয় limeতবে আউটপুটটি হওয়া উচিত:

      lime
   lim    lim
 li   lime   li
l  lim    lim  l
 li   lime   li
   lim    lim
      lime

এবং অন্যান্য ইনপুটগুলির জন্য একই ধরণটি অনুসরণ করা হয়:

a

a

Be

 Be
B  B
 Be

/\

 /\
/  /
 /\

cat

   cat
 ca   ca
c  cat  c
 ca   ca
   cat

|||

   |||
 ||   ||
|  |||  |
 ||   ||
   |||

.__.

      .__.
   .__    .__
 ._   .__.   ._
.  .__    .__  . 
 ._   .__.   ._
   .__    .__
      .__.

$tring

               $tring
          $trin      $trin
      $tri     $tring     $tri
   $tr    $trin      $trin    $tr
 $t   $tri     $tring     $tri   $t
$  $tr    $trin      $trin    $tr  $
 $t   $tri     $tring     $tri   $t
   $tr    $trin      $trin    $tr
      $tri     $tring     $tri
          $trin      $trin
               $tring

আউটপুটটিতে রেখাগুলি পিছনে স্থান থাকতে পারে এবং সেখানে একটি optionচ্ছিক ট্রেলিং নিউলাইন থাকতে পারে।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


13
আমি অবাক হয়েছি যে আপনি কেবল উপসর্গ ব্যবহার করেছেন - আমি বামদিকে উপসর্গ এবং ডানদিকে প্রত্যয় আশা করছিলাম!
নীল

1
(আসলে কোডিং পিওভি থেকে আমি প্রত্যেকে প্রত্যয় পছন্দ করতাম তবে আপনি নিজের পিঠাটি খেতে পারবেন না))
নীল

2
"Define একটি লেবু বা চুন অনুরূপ আকৃতি "
পিটার টেলর

6
@ পিটারটায়লার উদাহরণগুলি দেখিয়েছে আকার। সত্যই কি কোনও ইনপুট স্ট্রিং আপনি আউটপুটটি অনুমান করতে পারবেন না?
ক্যালভিনের

6
আমার কিছু অনুমান করা উচিত নয়: প্রশ্নের একটি স্পেসিফিকেশন থাকা উচিত ।
পিটার টেলর

উত্তর:


11

মতলব, 140 136 128 124 বাইট

মূলত প্রথমে মধ্যভাগটি দিয়ে শুরু হয় এবং তারপরে সংক্ষিপ্ত / সংশোধিত সংস্করণগুলি ধাপে ধাপে সংযোজন / সংযোজন করা হয়।

a=input('');v=ones(nnz(a)*2-1,1)*a;v(2:2:end,:)=0;b=v;for k=a;v=v(2:end,1:end-1);v(end+1,:)=0;b=[v,b,v,''];end;b(~flip(b))=0

8 লাইট @ লুইস মেন্ডোর জন্য ধন্যবাদ!

যেমন MATLABআমরা পাই:

               MATLAB               
          MATLA      MATLA          
      MATL     MATLAB     MATL      
   MAT    MATLA      MATLA    MAT   
 MA   MATL     MATLAB     MATL   MA 
M  MAT    MATLA      MATLA    MAT  M
 MA   MATL     MATLAB     MATL   MA 
   MAT    MATLA      MATLA    MAT   
      MATL     MATLAB     MATL      
          MATLA      MATLA          
               MATLAB                    

ওহ, দুর্দান্ত ধারণা! দুর্ভাগ্যক্রমে আমার পুরানো সংস্করণটিতে flip: /
flawr

আমি আর -2015 বি-তে আপনার 124-বাইট কোডটি পরীক্ষা করেছি এবং আমি নিশ্চিত এটি এটি কার্যকর হয়েছে
লুইস মেন্ডো

থা এন ট Y ণ তোমার দর্শন লগ করা!
flawr

7

পাইথন 2, 121 110 বাইট

s=input()
n=len(s)
r=range(1,n)+range(n,0,-1)
for y in r:print''.join(s[:(x+y-n&(x+y>n))*x]or' '*x for x in r)

116 বাইট ব্যবহার করা হয় raw_input। প্রোগ্রামটি মূলত কেন্দ্র থেকে এল 1-নরম / ম্যানহাটনের দূরত্বের উপর ভিত্তি করে একটি মুখোশ তোলে, পাশাপাশি ইনপুট দৈর্ঘ্যের সমতার তুলনায় এই দূরত্বের সমতা।

(লিনকে -9 বাইটের জন্য ধন্যবাদ এবং আরও 2 টির জন্য পথ সুগম করার জন্য ধন্যবাদ)


একটি জিনিস যা পপ আউট করে তা হ'ল আপনি প্রথম দুটি লাইনকে ল = লেন (ইনপুট ()) তে সংযোগ দিতে পারবেন, না?
ফ্রাঙ্ক

@ ফ্র্যাঙ্কটি sদীর্ঘ লাইনের শেষে ব্যবহৃত হয়েছে, সুতরাং দুর্ভাগ্যক্রমে এটি সম্ভব নয়
Sp3000

পাইথন 2 112 বা 116 বাইটের জন্য কিছুটা আলাদা পছন্দ ব্যবহার করে পেতে পারে R
লিন

আহ, আমি ওকে ধরিনি, দুঃখিত।
ফ্রাঙ্ক

@ লিন ওহ বাহ, এই পছন্দটি বা Rকোডটি অনেক বেশি সুন্দর করে তোলে!
Sp3000

6

এমএটিএল , 44 বাইট

আমি @ ফ্লাওয়ারের উত্তর থেকে কিছুটা অনুপ্রেরণা নিয়েছি (যদিও অ্যালগোরিদম এক নয়)

GtnEq:!g*2Mo*XKG"K1YS3LZ)OX@:Y(PO5MY(XKwyhhc

ইনপুটটি একক উদ্ধৃতি সহ একটি স্ট্রিং।

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


6

জাভাস্ক্রিপ্ট (ES6), 132 বাইট

s=>{x=' '.repeat(l=s.length);for(n=r='';n++<l;r=r?t+`
${r}
`+t:t)for(i=l,t='';i;t=t?w+t+w:w)w=(i<n|n+i&1?x:s).slice(0,i--);return r}

পরীক্ষা

var solution =

s=>{
  x=' '.repeat(l=s.length);
  for(n=r='';n++<l;r=r?t+`\n${r}\n`+t:t)
    for(i=l,t='';i;t=t?w+t+w:w)
      w=(i<n|n+i&1?x:s).slice(0,i--);
  return r
}

result.textContent = solution('Lemon');
<input type="text" id="input" value="Lemon" oninput="result.textContent=solution(this.value)" /><pre id="result"></pre>




2

জাভাস্ক্রিপ্ট, 187 178 বাইট

কিছুটা দিক ফাংশনটি mমাস্ককে সূচনা করে 2 ** lengthযেমন 00100বাইনারি থেকে শুরু করে এবং m(n) = m(n-1) << 1 | m(n-1) >> 1প্রথমার্ধের জন্য সংজ্ঞা দেয়। মজার বিষয় দ্বিতীয়ার্ধ হিসাবে সংজ্ঞায়িত করা যেতে পারে m(n) = m(n-1) << 1 & m(n-1) >> 1। (যদিও প্রোগ্রামটি পরিবর্তে m(n) = m(2 * length - 1)দ্বিতীয়ার্ধের জন্য সংজ্ঞা দেয়) এখানে থেকে এই মুখোশগুলি পরীক্ষা করে কোনও শব্দ বা স্থান উপস্থিত হওয়া উচিত কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে2 ** column & m(row) । জাভাস্ক্রিপ্ট মধ্যে অবশ্যই এটা লিখতে খাটো এর 2 ** somethingসঙ্গে 1 << something...

দ্রষ্টব্য: ক্লান্ত অবস্থায় লেখা থাকতে পারে প্রায় নিশ্চয় ভুল নেই।

s=>{m=n=>n?n>l?m(2*l-n):(p=m(n-1))>>1|p<<1:1<<l
for(r=0;r/2<=(l=s.length-1);r++){for(i=1,o="";i/2-1<l;i++)o+=(1<<i-1&m(r)?s:" ".repeat(i)).slice(0,i>l?2*l+2-i:i)
console.log(o)}}

2

হাস্কেল, 109 বাইট

f s|n<-length s,r<-[1..n]++[n-1,n-2..1]=unlines[do x<-r;min(" ~"!!mod((x+y+n)*min(n-x-y)0)2)<$>take x s|y<-r]

2

ব্র্যাচল্যাগ , 46 বাইট

{a₀⟨{;Ṣ}j₎l⟩}ᶠL&l;Ṣj₍ẹa₁ᶠ;Lz{czzcᵐ}ᵐ⟨kc↔⟩zcᵐ~ṇ

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

ভয়াবহ বাইট গণনা এবং সম্ভবত আরও খারাপ পদ্ধতির (ব্র্যাচল্যাগ ঠিক ASCII আর্টের জন্য ডিজাইন করা হয়নি) তবে এটি পোস্ট করার জন্য আমি এতে যথেষ্ট সময় নষ্ট করেছি।

              L    The variable L
{           }ᶠ     is a list containing every possible
 a₀                prefix of
                   the input
    {;Ṣ}           paired with a space
        j          and concatenated with itself
   ⟨     ₎l⟩       a number of times equal to its length.
          ᶠ    A list containing every possible
        a₁     suffix of
   Ṣ           a space
    j          concatenated with itself
  ;  ₍         a number of times equal to
 l             the length of
&              the input
      ẹ        then split back up into its elements
               is an important list which doesn't actually get a name.
                         That list
;Lz                      zipped with L
   {     }ᵐ              with each pair being
    c                    concatenated,
     z                   zipped with cycling,
      z                  zipped back,
        ᵐ                and subjected to each of its elements being
       c                 concatenated itself,
           ⟨kc↔⟩         then palindromized
                z        and zipped yet again
                 cᵐ      with every line concatenated once more
                   ~ṇ    and finally joined on newlines
                         is the output.

এর যে কোনও একমাত্র চতুর অংশটি হ'ল a₁বৃহত্তম-প্রথম অনুভূমিক স্থানগুলি a₀তৈরি করার সময় উপসর্গগুলি ক্ষুদ্রতম-প্রথম শব্দটি উত্পন্ন করে এবং zzউপসর্গগুলির প্রস্থের সাথে মিলে যাওয়া স্থানগুলিতে একক স্পেসগুলি প্রসারিত করা।


1

টিএসকিউএল, 259 বাইট

Golfed:

DECLARE @ VARCHAR(30)='TSQL'

,@o VARCHAR(max),@i INT=0,@j INT,@t VARCHAR(max)SET @j=LEN(@)z:WHILE @i<LEN(@)SELECT @o=x+ISNULL(@o+x,''),@i+=1FROM(SELECT LEFT(IIF((@j-@i)%2=1,@,SPACE(99)),LEN(@)-@i)x)z SELECT @j-=1,@t=@o+ISNULL(CHAR(10)+@t+CHAR(10)+@o,''),@o=null,@i=0IF @j>0GOTO z PRINT @t

Ungolfed:

DECLARE @ VARCHAR(30)='TSQL'

,@o VARCHAR(max),@i INT=0,@j INT,@t VARCHAR(max)SET @j=LEN(@)
z:
WHILE @i<LEN(@)
  SELECT @o=x+ISNULL(@o+x,''),@i+=1
  FROM(SELECT LEFT(IIF((@j-@i)%2=1,@,SPACE(99)),LEN(@)-@i)x)z
SELECT @j-=1,@t=@o+ISNULL(CHAR(10)+@t+CHAR(10)+@o,''),@o=null,@i=0
IF @j>0 GOTO z

PRINT @t

বেহালা


0

সি, 167 বাইট

এই প্রোগ্রামটি প্রত্যাশা করে যে ইনপুট পাঠ্যটিকে প্রোগ্রামটির প্রথম পরামিতি হিসাবে পাঠানো হবে (কমান্ড লাইন বা অন্য কোনও মাধ্যমে) এবং স্ট্যান্ডআউটে আউটপুট লিখবে।

int i,j,k,l,v;main(h,s)char**s;{h=strlen(s[1]);l=h*2;for(;++i<l;puts(""))for(j=0;++j<l,v=j<h?j:l-j;)for(k=0;k++<v;putchar((i+j+h%2)%2&&v>h-(i<h?i:l-i)?s[1][k-1]:32));}

এটি এখানে কোড গল্ফের আমার প্রথম প্রয়াস কারণ এটি একটি যুক্তিসঙ্গত চ্যালেঞ্জ বলে মনে হয়েছিল, তাই আমি কীভাবে এটি করেছি তার কারণেই সম্ভবত এটির চেয়ে বেশি গল্ফ করা যেতে পারে।

ব্যাখ্যা

/* Static variables
   i - "Row" number
   j - "Column" number
   k - String character counter
   l - Double length of the input string
   v - Inverted column distance from center */
int i,j,k,l,v;

/* Main parameters
   h - (argc) Input string length
   s - argv */
main(h, s)
char**s;
{
  /* Assign the input string length and double length */

  h = strlen(s[1]);
  l = h * 2;

  /* Display content */

    /* Loop over rows l - 1 times and put a newline after each */
  for (; ++i < l; puts(""))
      /* Loop over columns l - 1 times and set the inverted column
         distance each time */
    for (j = 0; ++j < l, v = ((j < h) ? j : l - j);)
        /* Loop over characters up to the inverted column distance from the
           center (this generates the pattern of output lengths needed) */
      for (k = 0; k++ < v;)
        putchar(
            /* Check for if the current row + column (with an offset based on
               the input parity) parity is even or odd, creating the needed
               checkerboard pattern */
          (i + j + h % 2) % 2 &&
            /* If the inverted column distance from the center is more than the
               row distance from the center, then the cell is inside the
               circular shape */
          v > (h - ((i < h) ? i : l - i)) ?
              /* Display the requested character (minus one for 0 based) */
            s[1][k-1] :
            32 /* Otherwise display a space (ASCII 32) */
        );
}

এটা তোলে ব্যবহারের খেয়াল করা গুরুত্বপূর্ণ যথেষ্ট (n < m) ? n : (m * 2) - nপ্রোগ্রামে অন্তত দুবার কেন্দ্র অবস্থান থেকে উল্টানো দূরত্ব পেতে mএকটি সীমার উপর m * 2ইনপুট সঙ্গে n। যদি এটি করার একটি ছোট উপায় থাকে তবে এটি আরও কিছুটা সহজেই গল্ফ হতে পারে কারণ এই প্রোগ্রামটি কীভাবে কাজ করে তার জন্য অ্যালগরিদম গুরুত্বপূর্ণ।


0

সি, 137 বাইট

x,y,w;main(l,v)char**v;{for(y=l=strlen(v[1]);-l<--y;putchar(10))for(x=l;-l<--x;printf("%*.*s",w,w,x+y+l&1&&w>abs(y)?v[1]:""))w=l-abs(x);}

ভাঙ্গন:

এটি 2n-1 x 2n-1 গ্রিডের প্রতিটি উপাদানকে আঁকবে, একটি মাস্ক ফাংশন সহ স্থির করে যে বর্তমান উপাদানটি ফাঁকা স্থান হওয়া উচিত বা ইনপুট শব্দটি (একটি হীরা আকার এবং চেকবোর্ড প্যাটার্নের জন্য মুখোশ পরীক্ষা করা হবে)।

x,y,w;
main(l,v)char**v;{
    for(y=l=strlen(v[1]);-l<--y;/*...*/)    // row loop (count down to save bytes)
        for(x=l;-l<--x;/*...*/)             // column loop
            w=l-abs(x);                     // calculate current word's width
            printf("%*.*s",                 // print...
                w,w,                        // ...with min & max width...
                x+y+l&1&&w>abs(y)           // Check mask:
                    ?v[1]                   //  ...word
                    :"")                    //  ...or blank space
        putchar(10)                         // Newline
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.