नींबू-सीमित एक स्ट्रिंग


34

एक प्रोग्राम या फ़ंक्शन लिखें जो एक गैर-रिक्त एकल-पंक्ति स्ट्रिंग में लेता है। आप यह मान सकते हैं कि इसमें केवल मुद्रण योग्य ASCII है जिसमें अंतरिक्ष शामिल नहीं है।

स्ट्रिंग के उपसर्गों से बने नींबू या चूने के समान एक ASCII कला लोज़ेंज आकार प्रिंट या वापस करें।

मान लीजिए इनपुट स्ट्रिंग n अक्षर लंबा है। फिर, इस तरह की आकृति में 2n - ASCII कला के 1 स्तंभ एक साथ सिले होते हैं, प्रत्येक में 2n - 1 रेखाएं होती हैं। 1 से गणना, k -th कॉलम f (k) = मिनट (k, 2n - k) वर्ण चौड़ी है, और इनपुट के प्रथम f (k) वर्णों की f (k) प्रतियां लंबवत रूप से एकल रिक्त के साथ समाहित हैं। प्रतियों को अलग करने वाली लाइनें।

उदाहरण के लिए, यदि इनपुट है 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

आउटपुट में लाइनों में अनुगामी स्थान हो सकते हैं और एक वैकल्पिक अनुगामी न्यूलाइन हो सकती है।

बाइट्स में सबसे छोटा कोड जीतता है।


13
मुझे आश्चर्य हुआ कि आपने केवल उपसर्गों का उपयोग किया है - मैं बाईं ओर उपसर्गों की उम्मीद कर रहा था और दाईं ओर प्रत्यय!
नील

1
(वास्तव में एक कोडिंग पीओवी से मैंने पूरे प्रत्यय को पसंद किया होगा, लेकिन आप अपना केक नहीं खा सकते हैं।)
नील

2
"को परिभाषित एक नींबू या नींबू के समान आकार "
पीटर टेलर

6
@PeterTaylor उदाहरणों द्वारा दिखाया गया आकार। क्या ईमानदारी से एक इनपुट स्ट्रिंग है जिसके लिए आप आउटपुट का अनुमान नहीं लगा सकते हैं?
केल्विन के शौक

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 बाइट्स के लिए धन्यवाद @LuisMendo!

जैसे 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

मैंने R2015b पर आपके 124-बाइट कोड का परीक्षण किया और मैं इसकी पुष्टि करता हूं
लुइस मेंडो

था n k 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 और के लिए मार्ग प्रशस्त)


एक चीज़ जो चबूतरे पर है वह यह है कि आप पहली दो पंक्तियों को l = len (input ()), कॉम्पैक्ट कर सकते हैं?
फ्रैंक

@Frank sका उपयोग लंबी लाइन के अंत में किया जाता है, इसलिए दुर्भाग्य से यह संभव नहीं है
Sp3000

पाइथन 2 को 112 या 116 बाइट्स मिल सकते हैं जिनके लिए थोड़ा अलग विकल्प का उपयोग किया जा सकता है R
लिन

आह, मैंने उस एक को नहीं पकड़ा, क्षमा करें।
फ्रैंक

@ लियोन अरे वाह, वह विकल्प या Rकोड को एक बहुत ही अच्छा बना देता है!
Sp3000


6

जावास्क्रिप्ट (ईएस 6), 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

TSQL, 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 बाइट्स

यह प्रोग्राम प्रोग्राम के पहले पैरामीटर (कमांड लाइन या फिर अन्य माध्यम से) के रूप में पारित होने की उम्मीद करता है और आउटपुट को stdout में लिख देगा।

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केंद्र की स्थिति से उल्टे दूरी पाने के लिए कम से कम दो बार प्रोग्राम के उपयोग पर ध्यान दें । यदि ऐसा करने का एक छोटा तरीका है तो इसे कुछ और आसानी से नीचे रखा जा सकता है क्योंकि यह एल्गोरिदम इस कार्यक्रम के लिए महत्वपूर्ण है।mm * 2n


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