वर्णमाला पैटर्न मिलान


19

हमारे पास वर्णमाला की बहुत सारी चुनौतियां हैं। इस चुनौती के लिए, आपको एक वर्णमाला चुनौती का आउटपुट दिया जाता है, और आपको आकार में स्केल किए गए पैटर्न को आउटपुट करने की आवश्यकता होती हैN

उदाहरण के लिए, यदि N=5आप और L- वर्णमाला पारित किए गए थे :

ABCDEFGHIJKLMNOPQRSTUVWXYZ
BBCDEFGHIJKLMNOPQRSTUVWXYZ
CCCDEFGHIJKLMNOPQRSTUVWXYZ
DDDDEFGHIJKLMNOPQRSTUVWXYZ
EEEEEFGHIJKLMNOPQRSTUVWXYZ
FFFFFFGHIJKLMNOPQRSTUVWXYZ
GGGGGGGHIJKLMNOPQRSTUVWXYZ
HHHHHHHHIJKLMNOPQRSTUVWXYZ
IIIIIIIIIJKLMNOPQRSTUVWXYZ
JJJJJJJJJJKLMNOPQRSTUVWXYZ
KKKKKKKKKKKLMNOPQRSTUVWXYZ
LLLLLLLLLLLLMNOPQRSTUVWXYZ
MMMMMMMMMMMMMNOPQRSTUVWXYZ
NNNNNNNNNNNNNNOPQRSTUVWXYZ
OOOOOOOOOOOOOOOPQRSTUVWXYZ
PPPPPPPPPPPPPPPPQRSTUVWXYZ
QQQQQQQQQQQQQQQQQRSTUVWXYZ
RRRRRRRRRRRRRRRRRRSTUVWXYZ
SSSSSSSSSSSSSSSSSSSTUVWXYZ
TTTTTTTTTTTTTTTTTTTTUVWXYZ
UUUUUUUUUUUUUUUUUUUUUVWXYZ
VVVVVVVVVVVVVVVVVVVVVVWXYZ
WWWWWWWWWWWWWWWWWWWWWWWXYZ
XXXXXXXXXXXXXXXXXXXXXXXXYZ
YYYYYYYYYYYYYYYYYYYYYYYYYZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZ

आपको आउटपुट की आवश्यकता होगी:

ABCDE
BBCDE
CCCDE
DDDDE
EEEEE

स्पष्टीकरण के प्रयोजनों के लिए, मैं ABCDपूर्ण वर्णमाला के बजाय केवल उपयोग कर रहा हूं । आपको एल-वर्णमाला (ऊपर), साथ ही साथ निम्नलिखित पैटर्न का मिलान करने में सक्षम होना चाहिए:

एकल पंक्ति:

ABCD    or     A
               B
               C
               D

सिंगल लाइन बार- Nबार

ABCD    or    AAAA
ABCD          BBBB
ABCD          CCCC
ABCD          DDDD

Tabula recta :

ABCD
BCDA
CDAB
DABC

यह वर्ण त्रिकोण:

A      or   AAAAAAA
AB           BBBBB
ABC           CCC
ABCD           D
ABC
AB
A

हम भी कई किस्मों में आधा त्रिकोण हैं:

A           AAAA      A        ABCD
BB          BBB       AB       ABC
CCC         CC        ABC      AB
DDDD        D         ABCD     A

अंत में, वर्ग:

AAAAAAA
ABBBBBA
ABCCCBA
ABCDCBA
ABCCCBA
ABBBBBA
AAAAAAA

उपरोक्त सभी पैटर्न आकार 4 के हैं। हालाँकि, आपको 26 के आकार का एक पैटर्न पास किया जाएगा, साथ ही N1 से 26 के बीच, और आपको पैटर्न को स्केल करना होगा। आपको किसी अन्य पैटर्न को संभालने की आवश्यकता नहीं है।

  • 1 के लिए आउटपुट हमेशा एकल वर्ण होगा A
  • 26 के लिए आउटपुट हमेशा समान होगा, पूर्ण-आकार का पैटर्न पास किया जाएगा।
  • अनुगामी रिक्त स्थान को प्रत्येक पंक्ति के अंत में अनुमति दी जाती है, साथ ही अंत में एक अनुगामी न्यूलाइन भी
  • आप आकार 26 के सभी पैटर्न यहां पा सकते हैं

यह एक , इसलिए इसे कम से कम बाइट्स में करें!


आप कहीं-कहीं पूर्ण-आकार के पैटर्न प्रदान कर सकते हैं।
कार्ल नैप

जवाबों:


2

PHP, 502 बाइट्स

<?$c=count($x=explode("\n",$_GET[p]));for($t=$u=$o="",$f="substr",$n=0;$n<$g=$_GET["n"];$n++){if(2651==$l=strlen($s))$o.=$f($x[$n],0,$g).$f($x[$n],1-$g)."\n";elseif($l==1026)echo($t=$f($x[$n],0,$g)).$f(strrev($t),1)."\n";elseif($f($s,-1)=="Y")echo$f($x[$n],0,$g-$n).$f($x[$n],-$n,$n)."\n";elseif($l==376&&$f($s,-2,1)=="\n")echo$f($x[$n],0,$g-$n)."\n";elseif($l==726){$t.=$x[$n]."\n";$n+1==$g?:$u=$x[$n]."\n".$u;}else echo$f($x[$n]??"",0,$g)."\n";}if($o)echo$o.substr(strrev($o),2*$g+1);if($t)echo$t.$u;

एक पैटर्न की स्ट्रिंग लंबाई के साथ काम करता है। एक पैटर्न में ये स्थितियां हैं। पत्र अंत में शुरू होता है। सीआर को हटा दिया जाता है।

विस्तारित

foreach($p as$s){ # all patterns in an array
    $c=count($x=explode("\n",$s));
    for($t=$u=$o="",$f="substr",$n=0;$n<$g=$_GET["n"];$n++){
    if(2651==$l=strlen($s))$o.=$f($x[$n],0,$g).$f($x[$n],1-$g)."\n";
# square pattern
    elseif($l==1026)echo($t=$f($x[$n],0,$g)).$f(strrev($t),1)."\n";
#alphabet triangle up down
    elseif($f($s,-1)=="Y")echo$f($x[$n],0,$g-$n).$f($x[$n],-$n,$n)."\n";
# Tabula recta
    elseif($l==376&&$f($s,-2,1)=="\n")echo$f($x[$n],0,$g-$n)."\n";
# two half triangle
    elseif($l==726){$t.=$x[$n]."\n";$n+1==$g?:$u=$x[$n]."\n".$u;}
#alphabet triangle left right
    else echo$f($x[$n]??"",0,$g)."\n";
# all other
    }
    if($o)echo$o.substr(strrev($o),2*$g+1);
    if($t)echo$t.$u;
}

1) अनावश्यक उद्धरण: "substr", $_GET["n"], "Y"(-6)। 2) $x[$n]."\n"-> "$x[$n]\n", $u(-2) के लिए एनालॉग । 3) मुझे पूरा यकीन है कि आप >अपनी <number>==$lतुलना के लिए किसी प्रकार का उपयोग कर सकते हैं (-4)। 4) ($n=0;$n<...;$n++)-> ($n=-1;++$n<...;)(-1)। 5) if($o)अनावश्यक है: यदि $oखाली है, तो ऐसा है strrev($o)और इसका कोई भी उपादान है, इसलिए कुछ भी मुद्रित नहीं किया जाएगा (-6)। 6) &&-> &(-1)। 7) क्या आपको वास्तव में पदार्थ के लिए रिक्त की बजाय रिक्त स्ट्रिंग की आवश्यकता है? $x[$n]??""-> $x[$n](-4)?
टाइटस

2

आर, 483 412 बाइट्स

    x=function(n){d=1:n;a=LETTERS[d];z=rep;f=function(...)cat(...,"\n",sep="");g=c(d,n:2-1);for(i in d)f(a[z(i,i)],if(i!=n)a[(i+1):n]);f(a);for(i in d)f(a[i]);for(i in d)f(a);for(i in d)f(z(a[i],n));for(i in d)f(a[i:n],if(i>1)a[1:i-1]);for(i in g)f(a[1:i]);for(i in d)f(z(" ",i-1),z(a[i],2*(n-i)+1));for(i in d)f(z(a[i],i));for(i in d)f(z(a[i],n-i+1));for(i in g)f(if(i>1)a[2:i-1],z(a[i],2*(n-i)+1),if(i>1)a[i:2-1])}

यह मेरी पहली पोस्टिंग है, मुझे बताया गया था कि मेरे पास आर के हाल के वर्षों का अनुभव नहीं है, इसलिए बस यहां थोड़ा अभ्यास करें।

विस्तारित

    x=function(n){
    # array of 1 to n
    d=1:n
    # first n capital letters 
    a=LETTERS[d]
    # use z to represent the repeat function
    z=rep
    # use f to represent concatenate, with new line and close the gap
    f=function(...)cat(...,"\n",sep="");
    # use g to represent 1 to n then n to 1
    g=c(d,n:2-1)

    # L-phabet 
    # start and repeat the first letter to i, combine the i+1 to the end
    for(i in d) f(a[z(i,i)],if(i!=n)a[(i+1):n])

    # single line - horizontal
    f(a)

    # single line - vertical
    for(i in d)f(a[i])

    # single line - repeated by row
    for(i in d)f(a)

    # single line - repeated by column
    for(i in d)f(z(a[i],n))

    # Tabula Recta
    # start from i, combine the 1 to i-1
    for(i in d) f(a[i:n],if(i>1)a[2:i-1])

    # alphabet triangle
    for(i in g)f(a[1:i])

    # alphabet triangle - upside down
    for(i in d)f(z(" ",i-1),z(a[i],2*(n-i)+1))

    # half triangles 
    for(i in d)f(z(a[i],i))
    for(i in d)f(z(a[i],n-i+1))

    # the square
    # combine the first part from i to i-1 letters, repeat the i in the middle, combine the last part from i-1 to 1 letters
    for(i in g) f(if(i>1)a[2:i-1],z(a[i],2*(n-i)+1),if(i>1)a[i:2-1])
    } 

1

जावास्क्रिप्ट (ईएस 6), 382 380 370 बाइट्स

f=(a,N)=>{X=Y=0
if(a[1]){Y=a[1].trim()[0]=='B'
X=z=a[0][1]==a[1][0]?1:!Y
l="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[s='slice'](0,N)
if(z){if(a[0][1]=='A'){for(a=[],i=0,L=l;i<N;i++)a[N-i]=a[N+i]=L[s](0,-1)+l[N-i-1].repeat(i*2)+[...L].reverse().join``
L=L[s](0,-1)
return a}if(a[1][1]=='C')for(i=0;a[i++]=l,i<N;)l=l[s](1)+l[0]}}else X=1
a=X?a.map(l=>l[s](0,N)):a
return Y?a[s](0,N):a}

फ़ंक्शन के लिए स्ट्रिंग की एक सरणी पास करें f() , इस तरह:

f(
`AAAAAAA
ABBBBBA
ABCCCBA
ABCDCBA
ABCCCBA
ABBBBBA
AAAAAAA`.split('\n'), 3)

टिप्पणियों के साथ कम गोल्फ वाला संस्करण:

f=(a,N)=>{
    // Whether to truncate array horizontally to width N.
    X=0

    // Whether to truncate array vertically to height N.
    Y=0

    // If a second row exists...
    if(I=a[1]){
        // If the first non-whitespace character in the second row == 'B', truncate vertically.
        if(I.trim()[0]=='B')Y=1

        // Truncate horizontally if 2nd character in row 1 == 1st character in row 2; otherwise, if not truncating vertically.
        X=z=a[0][1]==I[0]?1:!Y

        // If 2nd character in row 1 == 1st character in row 2
        if(z){
            // Make an alphabet.
            l="ABCDEFGHIJKLMNOPQRSTUVWXYZ".slice(0,N)

            // If 2nd character in row 1 == 'A', forget everything we just did. Make a new array, generate a Square pattern, then return it.
            if(a[0][1]=='A'){
                for(a=[],i=0,L=l;i<N;i++)
                    a[N-i]=a[N+i]=L.slice(0,-1)+l[N-i-1].repeat(i*2)+[...L].reverse().join``,
                    L=L.slice(0,-1)
                return a
            }

            // If 2nd character in row 2 == 'C', fill array with a Tabula Recta.
            if(I[1]=='C')
                for(i=0;a[i++]=l,i<N;)
                    l=l.slice(1)+l[0]
        }
    }else{
        // If a second row doesn't exist, it's a horizontal line; truncate horizontally.
        X=1
    }

    // Truncate array horizontally if necessary.
    a=X?a.map(l=>l.slice(0,N)):a

    // Truncate array vertically if necessary.
    return Y?a.slice(0,N):a
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.