Bảng chữ cái tam giác đình công một lần nữa


24

Bài tập

Nhiệm vụ của bạn là in văn bản chính xác này:

A
BCD
EFGHI
JKLMNOP
QRSTUVWXY
ZABCDEFGHIJ
KLMNOPQRSTUVW
XYZABCDEFGHIJKL
MNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLM
NOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL
MNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW
XYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ
KLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY
ZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP
QRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
JKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD
EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

Thông số kỹ thuật

  • Bạn có thể làm điều đó bằng chữ thường thay vì chữ hoa.
  • Trailing newlines ở cuối tam giác được cho phép.
  • Không gian lưu trữ sau mỗi dòng được cho phép.
  • Bạn phải in ra STDOUT thay vì xuất ra một chuỗi các chuỗi.

Chấm điểm

Đây là . Chương trình có số lần đếm byte thấp nhất.


1
Bạn có ý gì khi "đình công một lần nữa"? Có một thử thách nào khác mà bạn thực hiện như thế này không?
haykam


1
Có vẻ khá tầm thường chúng ta thực sự cần (một) thách thức bảng chữ cái?
Rohan Jhunjhunwala

2
Đó là một thử thách tốt, nhưng tôi nghĩ chúng ta đã vượt xa sự bão hòa của những thách thức bảng chữ cái này, không có gì cá nhân.
Rohan Jhunjhunwala

Trên thực tế tìm kiếm một thách thức bảng chữ cái rằng chữ cái tại một vị trí không thể được tính bằng các biểu thức đơn giản từ tọa độ của nó liên quan đến modhàm. Có thể tự làm một cái nếu tôi có thời gian.
Weijun Zhou

Câu trả lời:


39

Vim, 29 byte

:h<_↵↵↵y$ZZ26P0qqa↵♥βjllq25@q

Trong đó đại diện cho phím Return, phím Escape và βphím Backspace.

nhập mô tả hình ảnh ở đây


3
Làm thế nào để bạn luôn luôn đánh bại tôi để trả lời vim về những điều này? Aargh +1 dù sao, tôi không thể nâng cấp vim! :)
DJMcMayhem

7
Tôi vẫn nghĩ bạn nên sử dụng thay vì . Và thay vì β. Đó là những gì các ký tự Unicode được tạo ra. utf8icons.com/subets/control-pictures
mbomb007

9

Python 2, 65 byte

i=1
a=bytearray(range(65,91))*26
while a:print a[:i];a=a[i:];i+=2

1
Tôi đã thay đổi tiêu đề thành Python 2 vì mã sẽ không hoạt động trong Python 3.
Leaky Nun

7

Thạch , 10 byte

26RḤ’RØAṁY

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

26RḤ’RØAṁY  Main link. No Arguments.

26          Set the return value to 26.
  R         Range; yield [1, 2, ..., 25, 26].
   Ḥ        Unhalve; yield [2, 4, ..., 50, 52].
    ’       Decrement; yield [1, 3, ..., 49, 51].
     R      Range; yield [[1], [1, 2, 3], ..., [1, ..., 49], [1, ..., 51]].
      ØA    Yield the uppercase alphabet.
        ṁ   Mold the alphabet as the array of ranges. This repeats the uppercase
            letters over an over again, until all integers in the range arrays
            have been replaced with letters.
         Y  Join, separating by linefeeds.

Có phải "Double" được gọi là "Unhalve" không? Ngoài ra, là tuyệt vời !! [chờ đợi để nói lời chúc mừng cho đại diện 100k]
Erik the Outgolfer

Nó chỉ là một thứ ghi nhớ. Hmột nửalà nghịch đảo của nó ( unsalve ).
Dennis

Tôi chỉ nghĩ về /2hoặc *2, vì vậy nó là "Giảm một nửa" hoặc "Đôi". Đó là lý do tại sao tôi bối rối.
Erik the Outgolfer

Cũng 10 byte:27Ḷ²IRØAṁY
Leaky Nun

Ngoài ra 10 byte:51Rm2RØAṁY
HyperNeutrino

7

VBA Excel (80 byte, 1742 byte)


Excel, 1742 byte

Lấy cảm hứng từ câu trả lời sáng tạo của ugoren , tôi đã tìm được công thức Excel để tạo mẫu như trong OP.

=MID(REPT("ABCDEFGHIJKLMNOPQRSTUVWXYZ",26),(ROW()-1)^2+1,2*ROW()-1)

Dán công thức này vào ô A1, sau đó kéo tất cả trên phạm vi A1: A26.

Độ dài của công thức là 67 byte nhưng bạn phải sao chép nó 26 lần, do đó, nó bằng 67 * 26 = 1742 byte. Đây là đầu ra:

nhập mô tả hình ảnh ở đây


VBA Excel, 80 byte

Bây giờ có thể chúng tôi tích hợp Excel với VBA để tự động hóa quy trình và để tiết kiệm nhiều byte vì VBA được tích hợp vào hầu hết các ứng dụng Microsoft Office, bao gồm cả Excel. Viết và chạy mã sau trong Cửa sổ ngay lập tức (sử dụng các phím kết hợp CTRL+ Gđể hiển thị mã trong Visual Basic Editor):

[A1:A26]="=MID(REPT(""ABCDEFGHIJKLMNOPQRSTUVWXYZ"",26),(ROW()-1)^2+1,2*ROW()-1)"

Chương trình hoạt động bằng cách in công thức Excel ở trên đến phạm vi A1: A26. Thật không may, cả Excel và VBA đều không có bảng chữ cái tích hợp.


Các tên cột trông giống như một bảng chữ cái tích hợp với tôi. Sử dụng 26 tên cột đầu tiên.
mbomb007

1
@ mbomb007 Vậy là sao? Tôi nghĩ rằng sẽ khó hơn để sử dụng chúng thay vì chuỗi.
Erik the Outgolfer

@EriktheGolfer Vậy sao? Quan điểm của tôi là có được một bảng chữ cái được xây dựng trong.
mbomb007

1
@ mbomb007 Bạn đã nói "Sử dụng 26 tên cột đầu tiên", mà tôi nhận thấy là "Sử dụng 26 tên cột đầu tiên thay vì những gì bạn hiện đang sử dụng", đó là lý do tại sao tôi trả lời.
Erik the Outgolfer

@EriktheGolfer Đó là một gợi ý. Idk có bao nhiêu byte.
mbomb007

5

Haskell, 67 byte

_#53=[]
s#i=take i s:drop i s#(i+2)
mapM putStrLn$cycle['A'..'Z']#1

Một đệ quy đơn giản trên chiều dài icủa dòng. Trong mỗi bước, các iký tự tiếp theo được lấy từ sự lặp lại vô hạn của bảng chữ cái.


4

Toán học, 90 byte

StringRiffle[Flatten[Alphabet[]&~Array~26]~Internal`PartitionRagged~Range[1,51,2],"
",""]&

Chức năng ẩn danh. Không có đầu vào và trả về một chuỗi như đầu ra. Gợi ý chơi golf chào mừng. Một ví dụ về những gì Internal`PartitionRaggedkhông:

In[1]:= Internal`PartitionRagged[{2, 3, 5, 7, 11, 13}, {2, 3, 1}]               

Out[1]= {{2, 3}, {5, 7, 11}, {13}}

Mathematica có tích hợp sẵn cho hình tam giác bảng chữ cái?
Bộ đệm đã đọc

4

C, 79 byte

main(i,j){for(i=0,j=1;i<676;i++){putchar(i%26+65);if(j*j==i+1){puts("");j++;}}}

Câu trả lời đầu tiên của tôi trong C \ o /

Đề nghị chơi golf được chào đón nhiều hơn.


62:i;main(j){while(i<676)printf("\n%c"+(j*j^i++||!j++),i%26+65);}
xsot

@xsot Cảm ơn nhưng tôi sợ rằng những dòng mới hàng đầu không được phép.
Leaky Nun

1
Nhưng không có dòng mới hàng đầu?
xsot

60:i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
xsot

@immibis Tôi đoán tôi nên đăng nó rồi.
xsot

4

Brachylog , 37 byte

26~l<:1aLc~j[@A:I],L~@nw
=:2%1,.#@l?,

Hãy thử trực tuyến!

Giải trình

  • Vị ngữ chính:

    26~l         Let there be a list of 26 elements
    <            This list is an ascending list of integers
    :1aL         Apply predicate 1 to that list ; the resulting list of strings is L
    c            Concatenate the list of strings into one big string
    ~j[@A:I],    That big string is the result of juxataposing the alphabet I times to itself
    L~@n         Create a string which when splitted on line breaks results in L
    w            Write that string to STDOUT
    
  • Vị ngữ 1: được sử dụng để tạo các chuỗi biến có độ dài lẻ.

    =            Assign a value to the Input
    :2%1,        That value must be odd
    .#@l?,       Output is a string of length Input
    

Cuối cùng, bạn thực hiện một thử thách nghệ thuật ascii
Leaky Nun

@LeakyNun sẽ phân loại rằng thao tác chuỗi nhiều hơn imo nghệ thuật ASCII
Làm chết người vào

Tôi có nên thêm nó vào thẻ?
Nữ tu bị rò rỉ

Sử dụng tốt thực tế là dòng cuối cùng là dòng duy nhất kết thúc trong Zđó là vì không 26có hình vuông.
Leaky Nun


3

JavaScript (ES6), 77 82 88

Yêu cầu EcmaScript 6 chỉ để lưu 1 byte bằng cách sử dụng chuỗi ký tự mẫu cho dòng mới.

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)

Ít chơi gôn

for(i = r = l = o = '';
    l + 52;
    r++ || (r = l -= 2, o += `\n`))
  o += (i++ % 26 + 10).toString(36);
alert(o);

Kiểm tra

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)


\ o / một câu trả lời ES6 Tôi có thể chạy trong trình duyệt của mình
Downgoat

Tôi đã đánh cắp logic .toString (36) của bạn ... bây giờ bạn phải đánh bại 80 byte !!
applejacks01

Ahh tôi thừa nhận, tôi không thể nghĩ ra cách nào để đánh bại điều này với thư viện của mình. Cảm ơn các thử thách!
applejacks01

3

Perl, 42 41 39 byte

perl -E '@b=(A..Z)x26;say splice@b,0,$#a+=2for@b'

Chỉ cần mã:

@b=(A..Z)x26;say splice@b,0,$#a+=2for@b

Một phiên bản ngắn hơn rõ ràng không may gây ra vấn đề perl nội bộ (Sử dụng giá trị được giải phóng trong lần lặp):

say splice@b,0,$#a+=2for@b=(A..Z)x26

2

JavaScript, 129 byte

z=1,i=0,g=a=>{b=0,c="";while(a+a-1>b){c+='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``[i>26?i=0:i++];b++}console.log(c)};while(z<26)g(z++)

1
Sử dụng toán tử trải rộng có thể giúp bạn tiết kiệm 3 byte : [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']thay vì 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``.
insertusernamehere


2

Đi, 133 byte

package main
import S "strings"
func main(){s:=S.Repeat("ABCDEFGHIJKLMNOPQRSTUVXXYZ",26)
for i:=1;s!="";i+=2{println(s[:i]);s=s[i:]}}

2

MATLAB, 112 109 95 79 77 byte

Điều này cũng sẽ làm việc với Octave , bạn có thể thử trực tuyến tại đây .

a=['' 65:90 65:90]';j=0;for i=1:2:52;b=circshift(a,j);j=j-i;disp(b(1:i)');end

Vì vậy, sau một số thay đổi lớn, tôi đã lưu thêm 14 32 byte. Cái này ngày càng giống với độ dài mà tôi mong đợi từ MATLAB. Tôi đã rời phiên bản cũ bên dưới vì nó khác biệt đáng kể.

a=['' 65:90 65:90]';        %Create 2 copies of the upper case alphabet
j=0;                        %Initialise cumulative sum
for i=1:2:52;               %For each line length
    b=circshift(a,j);       %Rotate the alphabet string by the cumulative offset
    j=j-i;                  %Update cumulative negative sum of offsets.
    disp(
         b(1:i)'            %Extract first 'line length' characters from rotated alphabet.
               );           %Display next line (disp adds newline automatically)
end

Phiên bản gốc:

a=['' repmat(65:90,1,26)];c=cumsum(1:2:51);disp(cell2mat(arrayfun(@(s,f)[a(s:f) 10],[1,c(1:25)+1],c,'Un',0)))

Wow rằng một kết thúc dài hơn tôi nghĩ nó sẽ. Tôi sẽ xem nếu tôi không thể loại bỏ một vài byte.

Một phiên bản vô căn cứ để giải thích:

a=['' repmat(65:90,1,26)]; %Create 26 copies of the upper case alphabet
c=cumsum(1:2:51);          %Calculate the end index of each row in the above array, by cumulatively summing the length of each line
disp(
     cell2mat(
              arrayfun(@(s,f)
                             [a(s:f) 10], %Extract the part of the alphabet and insert a new line.
                                         [1,c(1:25)+1],c, %start index is the previous end of line plus 1. End index is as calculated by cumsum.
                       'Un',0 %The returned values are not all the same length
                       )   %Do this for each line
              )            %Convert back to a matrix now new lines inserted
     )                     %And display it

Lời cảm ơn

  • Đã lưu 3 byte - cảm ơn @LuisMendo

2

XPath 3.0 (và XQuery 3.0), 84 byte

codepoints-to-string((0 to 25)!(subsequence(((1 to 26)!(65 to 90)),.*.+1,2*.+1),10))

Giải trình:

(1 to 26)!(65 to 90) là bảng chữ cái 26 lần

(0 to 25)!(subsequence(XX, start, len),10) mất 26 phần sau, mỗi phần tiếp theo là dòng mới

subsequence(X, .*.+1, 2*.+1) có các chuỗi liên tiếp với vị trí bắt đầu và độ dài: (1, 1), (2, 3), (5, 5), (10, 9), v.v.

codepoints-to-string() biến các bảng mã Unicode thành các ký tự


Bravo. Tôi nghĩ rằng tôi biết XQuery là gì. Hóa ra tôi không có ý kiến ​​gì.
Jordan

Tôi nghi ngờ rằng nhiều bài viết ở đây cho bạn biết nhiều về ngôn ngữ mà chúng được viết.
Michael Kay


2

05AB1E (thay thế) 15 byte

A2×52µ¼D¾£,¾¼FÀ

Hãy thử trực tuyến!

Giải trình:

A2×              # push a string containing a-za-z
   52µ           # Loop the rest of the program until counter = 52
      ¼          # increment counter (it's 0 initially)
       D         # Duplicate the alpha string on the stack
        ¾£       # Replace alpha with alpha[0..counter]
          ,      # Pop the substring and print it
           ¾¼FÀ  # rotate the alpha string left counter++ times.

2

R, 120 115 111 byte

v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum((b=seq(1,51,2))[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")

Ung dung:

a=rep(LETTERS,26)
b=seq(1,51,2)
v=vector()

for(i in 1:26)
    {
    v=c(v,c(a[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))
    }

cat(v,sep="")

Về cơ bản, blà vectơ của các số lẻ giữa 151, do đó đưa ra độ dài của mỗi dòng. Rõ ràng, sumhàm tính tổng các số của vectơ này và đưa ra các chỉ mục bắt đầu và kết thúc.

-5 byte nhờ @plannapus!
-4 byte nhờ @plannapus!


1
arf, xin lỗi tôi đã không thấy điều đó sớm hơn, nhưng vì bạn chỉ sử dụng amột khi bạn không thực sự cần xác định nó, có nghĩa là bạn có thể cạo thêm một vài byte: b=seq(1,51,2);v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")công việc.
plannapus

@plannapus Ngớ ngẩn với tôi! Cảm ơn một lần nữa! Tôi cũng tích hợp b=seqphần trong cơ thể chính, vì vậy nó thậm chí còn ít đọc hơn !
Frédéric

2

R, 81 73 65 63 byte

Một forcách tiếp cận vòng lặp đơn giản . Lặp lại bảng chữ cái 26 lần và lặp qua một phạm vi chỉ số trượt được tính bằng cách sử dụng (i^2-2*i+2):i^2.

for(i in 1:26)cat(rep(LETTERS,26)[(i^2-2*i+2):i^2],"\n",sep="")

2

Husk , 10 byte

Cİ1ṠṁK…"AZ

Hãy thử trực tuyến!

Giải trình

Cİ1ṠṁK…"AZ
      …"AZ    Get the alphabet
   ṠṁK        Replace each letter with the whole alphabet
C             Cut the resulting string into lines with lengths
 İ1            equal to the list of odd numbers

1

Mẻ, 123 byte

@set s=
@for /l %%i in (1,2,51)do @call set s=%%s%%ABCDEFGHIJKLMNOPQRSTUVWXYZ&call echo %%s:~0,%%i%%&call set s=%%s:~%%i%%


1

Rexx, 74 72 byte

i=1;m=1;do 26;say substr(copies(xrange('A','Z'),26),i,m);i=i+m;m=m+2;end

Ung dung:

i=1
m=1
do 26
  say substr(copies(xrange('A','Z'),26),i,m)
  i=i+m
  m=m+2
end

1

TSQL, 129 byte

USE MASTER khi bắt đầu tập lệnh là để đảm bảo rằng truy vấn được chạy trong cơ sở dữ liệu chính được mặc định cho nhiều người dùng (không tính byte cho điều đó).

Chơi gôn

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)FROM spt_values WHERE number<26and'P'=type

Ung dung:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)
FROM spt_values
WHERE number<26and'P'=type

Vĩ cầm

Fiddle cho phiên bản cũ hơn bằng cách sử dụng đường dẫn xml


1

PowerShell, 68 byte

$a=-join(65..90|%{[char]$_})*26;26..1|%{$a=$a.Insert($_*$_,"`n")};$a

Phần trước dấu chấm phẩy đầu tiên tạo ra một chuỗi chứa 26 bản sao của bảng chữ cái viết hoa. Phần tiếp theo thực hiện ngắt dòng theo chỉ số của mỗi số vuông (hoạt động ngược để tôi không phải tính đến sự dịch chuyển). Cuối cùng, $acuối cùng chỉ cần biến chuỗi đó thành tương đương với PowerShell STDOUT.


1

18 byte hay 18 ký tự? Để mã hóa 18 ký tự này thành 18 byte, bạn cần mã hóa ký tự tùy chỉnh; và chúng tôi có thể nén bất kỳ giải pháp nào nếu chúng tôi chọn mã hóa ký tự của mình đủ cẩn thận.
Michael Kay


Bạn sẽ giải thích điều này, hoặc tôi sẽ?
Adám

1

C, 60 byte

i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}

putschỉ mất một đối số. (Một số hành vi không xác định được cho phép trong codegolf thông thường nhưng điều này hơi quá xa so với các làn thông thường)
MM

@MM Hành vi không xác định được khai thác mọi lúc. Quy tắc là một bài nộp có giá trị miễn là nó hoạt động trong một số trình biên dịch, nếu không chúng ta sẽ phải loại trừ một cách rõ ràng một danh sách dài các trường hợp ngoại lệ. Mã này hoạt động trong gcc vì vậy nó là một đệ trình hợp lệ.
xsot

1

C ++, 111 byte

void a(){int c=65,i,j;for(i=0;i<26;i++){for(j=0;j<=2*i;j++){std::cout<<(char)c;c++;if(c==91)c=65;}std::cout<<'\n';}}

Đầu tiên hãy thử một trong những điều này. Sử dụng một chữ "c" để ghi lại chữ cái nào cần in tại bất kỳ thời điểm nào. Khi "c" vượt qua 90 ('Z'), nó sẽ được đặt lại thành 65 ('A'). In kim tự tháp bằng cách sử dụng cho các vòng lặp.


Câu trả lời tốt đẹp! Bạn có thể làm if(c<92)c=65để tắt một byte và bạn cũng có thể làm int a()thay vì void a(), nhưng tôi không tích cực nếu điều đó hoạt động mà không có sự trở lại. Ngoài ra, tôi nghĩ bạn cần đưa #include <iostream>vào số byte của mình.
DJMcMayhem

Tôi tin rằng bạn có ý đó if(c>90)c=65, nhưng cảm ơn vì lời đề nghị, đó là một ý tưởng tốt. Ngoài ra, tôi đoán tôi sẽ bao gồm nó, cảm ơn.
limelier

1

PHP, 76 69 byte

for(;$i<26&&$a.=join(range(A,Z));)echo substr($a,$i**2,1+2*$i++)."
";
  • Tạo 26 bảng chữ cái (quá đủ) và liên hệ với chúng trong $ a
  • vòng lặp cho tôi <26
  • hiển thị $ một chuỗi con bắt đầu i ^ 2, kết thúc 2 * i + 1
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.