Kết hợp mẫu bảng chữ cái


19

Chúng tôi đã có rất nhiều thử thách bảng chữ cái. Đối với thử thách này, bạn được thông qua đầu ra của thử thách bảng chữ cái và bạn cần xuất mô hình theo tỷ lệN .

Ví dụ: nếu N=5và bạn đã được thông qua L-ph.us :

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

Bạn sẽ cần xuất:

ABCDE
BBCDE
CCCDE
DDDDE
EEEEE

Với mục đích giải thích, tôi sẽ chỉ sử dụng ABCD, thay vì bảng chữ cái đầy đủ. Bạn cần có thể phù hợp với L-ph.us (ở trên), cũng như các mẫu sau:

Dòng duy nhất:

ABCD    or     A
               B
               C
               D

Dòng lặp lại nhiều Nlần

ABCD    or    AAAA
ABCD          BBBB
ABCD          CCCC
ABCD          DDDD

Các Tabula RECTA :

ABCD
BCDA
CDAB
DABC

Bảng chữ cái tam giác này:

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

Chúng tôi cũng có một nửa hình tam giác trong rất nhiều loại:

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

Cuối cùng, hình vuông:

AAAAAAA
ABBBBBA
ABCCCBA
ABCDCBA
ABCCCBA
ABBBBBA
AAAAAAA

Tất cả các mẫu trên có kích thước 4. Tuy nhiên, bạn sẽ được thông qua một mẫu có kích thước 26, cũng như Ntừ 1 đến 26, và bạn cần phải chia tỷ lệ mẫu. Bạn không cần phải xử lý bất kỳ mẫu nào khác.

  • Đầu ra cho 1 sẽ luôn là ký tự đơn A
  • Đầu ra cho 26 sẽ luôn giống nhau, mẫu có kích thước đầy đủ được truyền vào.
  • Không gian lưu trữ được cho phép ở cuối mỗi dòng, cũng như một dòng mới ở cuối
  • Bạn có thể tìm thấy tất cả các mẫu kích thước 26 ở đây

Đây là một , vì vậy hãy thực hiện trong càng ít byte càng tốt!


Bạn có thể cung cấp các mô hình kích thước đầy đủ ở đâu đó.
Karl Napf

1
@KarlNapf đã hoàn thành: pastebin.com/Kt8NX5MF
Nathan Merrill

Câu trả lời:


2

PHP, 502 byte

<?$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;

Hoạt động với độ dài chuỗi của một mẫu. Một mô hình có những điều kiện này. Thư bắt đầu một kết thúc. CR được loại bỏ.

Mở rộng

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) dấu ngoặc kép không cần thiết: "substr", $_GET["n"], "Y"(-6). 2) $x[$n]."\n"-> "$x[$n]\n", tương tự cho $u(-2). 3) Tôi rất chắc chắn rằng bạn có thể sử dụng một số loại >để <number>==$lso sánh (-4). 4) ($n=0;$n<...;$n++)-> ($n=-1;++$n<...;)(-1). 5) if($o)là không cần thiết: nếu $otrống, strrev($o)và bất kỳ chuỗi con nào của nó, vì vậy sẽ không có gì được in (-6). 6) &&-> &(-1). 7) Bạn có thực sự cần chuỗi rỗng thay vì null cho chất nền không? $x[$n]??""-> $x[$n](-4)?
Tít

2

R, 483 412 byte

    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])}

Đây là lần đầu tiên tôi đăng bài, tôi được cho biết là tôi không có kinh nghiệm về R trong những năm gần đây, vì vậy chỉ cần thực hành một chút ở đây.

Mở rộng

    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

JavaScript (ES6), 382 380 370 byte

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}

Truyền một mảng các chuỗi cho hàm f(), như thế này:

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

Phiên bản ít chơi gôn hơn với các bình luận:

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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.