বর্ণমালা প্যাটার্ন ম্যাচিং


19

আমাদের কাছে বর্ণমালার প্রচুর চ্যালেঞ্জ ছিল। এই চ্যালেঞ্জের জন্য, আপনি একটি বর্ণমালার চ্যালেঞ্জের আউটপুট পাস করেছেন এবং আপনার আকারের আকারের প্যাটার্নটি আউটপুট করতে হবেN

উদাহরণস্বরূপ, যদি N=5এবং আপনি এল-ফ্যাবেট পাস করেছেন :

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

বোর্ড সোজা :

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 আকারের However তবে আপনাকে 26 মাপের একটি প্যাটার্ন পাশাপাশি N1 এবং 26 এর মধ্যে দেওয়া হবে এবং আপনাকে প্যাটার্নটি স্কেল করতে হবে। আপনার অন্য কোনও নিদর্শন পরিচালনা করার দরকার নেই।

  • 1 এর আউটপুট সর্বদা একক অক্ষর হবে A
  • ২ for এর জন্য আউটপুট সর্বদা একই, পূর্ণ আকারের প্যাটার্নটি পাস হবে।
  • প্রতিটি লাইনের শেষে ট্রেলিং স্পেসগুলি অনুমতি দেওয়া হয়, পাশাপাশি শেষে একটি ট্রেলিং নিউলাইন line
  • আপনি 26 আকারের সমস্ত নিদর্শন জানতে পারেন এখানে

এটি একটি , সুতরাং এটি যতটা সম্ভব কম বাইটে করুন!


আপনি কোথাও পূর্ণ আকারের নিদর্শন সরবরাহ করতে পারেন।
কার্ল নেপফ

1
@ কার্লনাপফ করেছেন: পেস্টবিন.
নাথান মেরিল

উত্তর:


2

পিএইচপি, 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

জাভাস্ক্রিপ্ট (ES6), 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
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.