Bảng chữ cái tam giác


48

Bạn phải in văn bản chính xác này:

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A

Thông số kỹ thuật

  • Dòng mới bổ sung được phép ở cuối đầu ra.
  • Không gian dấu phụ (U + 0020) được phép ở cuối mỗi dòng, bao gồm cả các dòng mới thêm.
  • Bạn có thể sử dụng tất cả chữ thường thay vì tất cả chữ hoa, nhưng bạn không thể in chữ hoa một phần chữ hoa.
  • Bạn có thể trả lại văn bản dưới dạng đầu ra chức năng thay vì in nó trong một chương trình đầy đủ.

Chấm điểm

Vì đây là một hình tam giác và một hình tam giác có 3 cạnh và 3 là một số nhỏ, mã của bạn phải nhỏ về mặt đếm byte.


22
Vì vậy, nhiều bảng chữ cái gần đây
downrep_nation

1
Sự đồng cảm của tôi đang trở nên hoang dã, @downrep_nation
DoctorHeckle

5
"Vì một tam giác có 3 cạnh và 3 là một số nhỏ, do đó mã của bạn phải nhỏ về số lượng byte." có vẻ hợp pháp
Rohan Jhunjhunwala

1
Hình vuông của các số chỉ gồm 1 dường như có liên quan: 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

1
"Vì một hình tam giác có 3 cạnh và ..." Illuminati Khẳng định.
HyperNeutrino

Câu trả lời:


38

Vim, 37 byte

:h<_↵↵↵YZZPP$xqqxYpGP√2G$A♥-€k$q24@qJ

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

Huyền thoại

↵ = Return
√ = Ctrl+V
♥ = Ctrl+R
€ = Escape

2
Đó là một GIF thực sự tuyệt vời.
admBorkBork

13
Tôi sẽ không bao giờ hết ngạc nhiên trước câu trả lời của Vim.
DanTheMan

Muốn giải thích cách thức này hoạt động cho những người không thông thạo Vim?
R. Kap

6
@ R.Kap Tôi khuyên bạn nên tải xuống Vim và tự mình thử giải pháp - bạn có thể xem giải pháp mở ra bằng đột quỵ! Về cơ bản, tôi ăn cắp bảng chữ cái từ một tệp trợ giúp ( :h<_↵↵↵YZZP), sau đó ghi lại một macro ( qq…q) liên tục cắt một chữ cái ra khỏi dòng trên cùng, tạo hai bản sao của nó để phát triển hình tam giác theo chiều dọc, sau đó nối chữ cái bị băm nhỏ vào tất cả các dòng để phát triển nó theo chiều ngang. Tôi lặp lại macro này thêm 24 lần nữa để vẽ tam giác đầy đủ.
Lynn

31

Logo, 232 207 196 190 byte

Có ai đó nói hình tam giác?

Nhận ra la bàn và thước đo góc của bạn, và hãy làm điều này theo cách đồ họa. Hình học sử dụng một tam giác đều để căn chỉnh kết quả. Trước đây tôi đã có một tam giác cân, nhưng nó liên quan đến quá nhiều vị trí thập phân. Thay đổi này cũng thu gọn đầu ra, giảm lượng chuẩn bị màn hình và thay đổi phông chữ mà tôi phải thực hiện.

Tôi đã sử dụng trình thông dịch trực tuyến Calormen để bổ sung cái này. Nếu bạn không có đủ bất động sản trên màn hình, nó sẽ kết thúc, nhưng bạn cũng có thể sử dụng một số con số để xử lý vấn đề đó. Tôi đã sử dụng chế độ toàn màn hình "F11" trên trình duyệt của mình.

ht
pu
to r:n:b:l repeat:n[rt:b label char 90-:n lt:b fd:l] end
to t:s
fd 12 rt 120 bk 6
repeat 2[r:s 90 12]
repeat 2[rt 120 r:s 90-heading 24]
end
rt 90 label "Z lt 210
repeat 25[t repcount]

Các rthủ tục rút ra một dòng nký tự. Ký tự được xác định tự động tùy thuộc vào số lượng phân đoạn được sử dụng. Các btham số cho nó bao nhiêu để tạm thời xoay sao cho các chữ cái đang trỏ đi đúng hướng. Các ltham số xác định khoảng cách tuyến tính giữa các chữ cái.

Các tbước thủ tục đến vị trí tiếp theo và gọi rhàm bốn lần để tạo ra một hình tam giác, xoay khi thích hợp. Tôi đã gọi nó hai lần cho phía dọc vì điều đó mất ít byte hơn so với gọi nó một lần với xử lý đặc biệt. Kết thúc của thủ tục định vị con rùa để bắt đầu tam giác tiếp theo, một bước ở trên.

Zlà một trường hợp đặc biệt, vì vậy chúng tôi chỉ cần in trực tiếp và xoay như thể chúng tôi vừa hoàn thành một hình tam giác. Cuối cùng, tđược gọi 25 lần.

Trong tiến trình hình ảnh chú thíchKết quả hoàn thành


3
Ngoài cái hộp. Hoàn thành tốt
CousinCocaine

19

Haskell, 58 byte

f x=init x++reverse x
t=unlines$f[f['A'..c]|c<-['A'..'Z']]

Xác định hàm ttrả về đầu ra dưới dạng chuỗi.

f x=               define a helper function
init x             take the argument minus its last element
++                 and concatenate it with
reverse x          the argument reversed, producing ex. [a,b,c,b,a] from [a,b,c]

t=                                    define the main function
           [         |c<-['A'..'Z']]  for every char c from 'A' to 'Z'...
             ['A'..c]                 generate the range from 'A' to c
            f                         call the helper function to "reflect" it
          f                           call the helper function on the entire list
  unlines$                            join on newlines

12

Thạch , 16 13 byte

Ṗ;Ṛ
ØAḣJÇ€Çj⁷

Cảm ơn @LeakyNun vì đã chơi golf 3 byte!

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

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

Ṗ;Ṛ        Helper link. Argument: A (array)

Ṗ          Pop; yield A without its last element.
  Ṛ        Reversed; yield A with inverted order.
 ;         Concatenate the results to both sides.


ØAḣJÇ€Çj⁷  Main link. No arguments.

ØA         Alphabet; set link argument and return value to "A...Z".
   J       Indices; yield [1, ..., 26].
  ḣ        Head; take the first, the first two, etc. elements of the alphabet.
           This yields ["A", AB", ..., "A...Z"].
    ǀ     Apply the helper link to each string.
      Ç    Apply the helper link to the array itself.
       j⁷  Join, separating by linefeeds.


@LeakyNun Cảm ơn.
Dennis

4
Tôi tò mò muốn biết làm thế nào trên thế giới này hoạt động ...
Socratic Phoenix

có lẽ nếu sử dụng trình sao chép liên kết, bạn có thể lưu một byte
Leaky Nun

3
@MathieuRodic Jelly sử dụng một trang mã tùy chỉnh mã hóa tất cả 256 ký tự mà nó hiểu là một byte đơn lẻ. Các liên kết byte trong tiêu đề trỏ đến nó.
Dennis

10

Python, 74 byte

def f(x=66,s='A'):
 t=s+s[-2::-1];print t
 if x<91:f(x+1,s+chr(x));print t

Hàm Python 2 in và không có đối số. Ý tưởng chính là tạo ra mô hình tam giác có hình tam giác với đệ quy. Trước tiên, hãy xem xét chức năng đơn giản hơn này in các chữ cái 'A' lên đến 'Z' và quay lại 'A':

def f(x=65):
 t=chr(x);print t
 if x<90:f(x+1);print t 

Trước tiên, chức năng in "A" (mã char 65), sau đó đệ quy để in "B" (66), v.v. thành "Z" (90). Từ đó, nó dừng lại đệ quy. Trên đường bật xuống ngăn xếp đệ quy, nó in bất kỳ ký tự tnào được in trong cùng một lớp, từ "Y" trở lại "A".

Mã chính thực hiện tương tự, ngoại trừ nó tích lũy thành schuỗi các chữ cái cho đến nay và in chuỗi lên xuống s+s[-2::-1].

Cảm ơn xsot cho 2 byte.

Trong Python 3, điều tương tự là một byte ngắn hơn (73 byte) bằng cách đặt mọi thứ trên một dòng.

def f(x=66,s='A'):t=s+s[-2::-1];print(t);x>90or[f(x+1,s+chr(x)),print(t)]

Bạn có thể lưu 2 byte nếu bạn bù các biến, tức là f(x=66,s='A'). Điều này cho phép bạn cập nhật strong lệnh gọi hàm thay vì thân hàm.
xsot

Tôi nghĩ rằng phiên bản Python 3 của bạn, như họ hàng Python 2 của nó, cần giá trị 90 thay vì 89 để có hàng dài nhất đi hết Z và quay lại.
Tebbe

@Tebbe Cảm ơn, đã sửa chúng.
xnor

8

brainfuck, 1733 121 119 byte

----[---->+<]>++.<++++++++++.<+++++[<+++++>-]<+>>>.<[>>[>.]<[>+>+<<-]>+.>[<<+> >-]<[<.]<-]>>[>[>]<[-]<[<]>>[.>]<<[.<]>]

Phiên bản dễ đọc hơn một chút:

----[---->+<]>++.<
++++++++++.<
+++++[<+++++>-]<+
>>
>.<
[
  >>[>.]<
  [>+>+<<-]
  >+.>
  [<<+>>-]
  <[<.]<
  -
]
>>
[
  >[>]<
  [-]
  <[<]>
  >[.>]<<[.<]>
]

Giải thích có thể đến.


Hãy thử sử dụng một vòng lặp thay vì xây dựng từng ký tự một cách thủ công.
Rò rỉ Nun

@LeakyNun Tôi không biết làm thế nào để đi về điều đó. Bất kỳ đề xuất?
DanTheMan

4
Đẹp, nên bạn chỉ ngủ được 4 tiếng.
Nữ tu rò rỉ

1
Chúc mừng bạn đã nhận được chương trình nhỏ hơn đầu ra!
GuitarPicker

1
Làm thế nào để một golf ra 1612 byte?
FantaC

8

05AB1E , 20 13 12 6 byte

Đã lưu 2 byte nhờ Adnan.
Đã lưu 6 byte nhờ Magic Octopus Urn và một số chức năng ngôn ngữ mới.

Aη€ûû»

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

Giải trình

Aη       # push prefixes of alphabet
  €û     # palendromize each prefix
    û    # palendromize the whole list
     »   # join on newlines

Rất đẹp! Bạn có thể thay đổi Œ26£thành .p, đó là lệnh tiền tố. Ngoài ra, bạn có thể thay đổi D,thành =, in mà không xuất hiện.
Ad Nam

Wow, mẹo thông minh với gF,!
Ad Nam

@Ad Nam: Cảm ơn! Tôi biết rằng có một lệnh tiền tố ở đó ở đâu đó :) Tôi hiếm khi kiểm tra những cái mở rộng mặc dù.
Emigna

2
Lệnh bifurcate đó Ârất hay và một tính năng thực sự gọn gàng.
dặm

1
@carusocomputing: không may ûlà mới hơn thử thách và sẽ khiến câu trả lời này không cạnh tranh.
Emigna

6

J, 26 23 22 byte

f(f=:,1}.|.)\u:65+i.26

Giải trình

,1}.|.  Monad f: Input: A
    |.  Reverse the items in A
 1}.    Drop the first item in the reversed A
,       Join A and the previous

f(f=:,1}.|.)\u:65+i.26
                  i.26  Create the range [0, 1, ..., 25]
               65+      Add 65 to each
             u:         Convert to characters to get 'A..Z'
  f=:,1}.|.             Define a verb f
 (         )\           Call f monadically on each prefix of 'A..Z'
f                       Call f again on that result

f=:,1}.|.thử cái này
Leaky Nun

@LeakyNun Cảm ơn tôi không biết tại sao tôi nghĩ họ khác nhau.
dặm




5

C, 272 247 234 230 144 137 byte:

( Đã lưu nhiều byte ( 272 -> 230) trong phương thức trước đây của tôi nhờ các mẹo & thủ thuật chơi golf tuyệt vời từ sigalor ! )

( Đã lưu gần 100 byte ( 230 -> 144) bằng cách chuyển sang phương thức tốt hơn. )

main(q,i,e,x){for(q=0;q<51;q++){i=q>25 ? 25-(q-25):q;for(e=65;e<66+i;e++)printf("%c",e);for(x=64+i;x>64;x--)printf("%c",x);printf("\n");}}

Câu trả lời đầu tiên của tôi từng có C. Tôi mới bắt đầu tự học nó gần đây, vì vậy hãy xem nó diễn ra như thế nào.

C nó trong hành động! (Ý)


1
Ahhh, tôi chỉ muốn thêm một câu trả lời C ... Dù sao đi nữa, tôi sẽ chỉ giúp bạn sau đó;) Đầu tiên, đây là môn đánh gôn, bạn không cần phải viết mã hoàn hảo. Trình biên dịch cảnh báo là hoàn toàn tốt. Đó là lý do tại sao bạn có thể loại bỏ main()kiểu trả về và thậm chí là #include <stdio.h>. GCC (và cả các trang web như Ideone) đều ổn với điều đó. Tiếp theo, bạn có thể 'thuê ngoài' các định nghĩa biến cho danh sách tham số của hàm. Hãy for(int i=65;...trở thành for(i=65...và thay đổi main()để main(i). Thực hiện tương tự cho mọi biến int khác (GCC mặc định thiếu các loại int).
sigalor

@sigalor Cảm ơn lời khuyên! :) Chỉ cần một câu hỏi: tại sao tôi cần phải thay đổi main()để main(i)?
R. Kap

@sigalor Thật ra, bây giờ tôi đang nhận được một loạt các lỗi biên dịch.
R. Kap

Khi bạn không khai báo ibiến của mình trong khởi tạo vòng lặp for, bạn cần khai báo nó ở một nơi khác. Và bởi vì (ít nhất là trong C) các tham số của hàm có thể được sử dụng như các biến thông thường, nên không có vấn đề gì. Btw, trình biên dịch nào bạn đang sử dụng?
sigalor

@sigalor Hiện đang Cở Ideone. Tôi đang nhận được một số <variable> undeclaredlỗi.
R. Kap

5

JavaScript (ES6), 81 byte

[...'ZYXWVUTSRQPONMLKJIHGFEDCBA'].reduce((p,c)=>c+`
`+p.replace(/^|$/gm,c)+`
`+c)

5

Toán học 59 byte

Column@FromCharacterCode[#@#@26+64]&[#-Abs@Range[1-#,#-1]&]

Tôi nghĩ rằng việc loại bỏ //Columntừ cuối và tiền tố mã của bạn với Column@công việc.
Yytsi

2
Bạn dường như đã đếm dưới dạng byte đơn. Tôi nghi ngờ rằng có một trang mã byte đơn có chúng và cũng được Mathicala hỗ trợ ra khỏi hộp. Chúng có ba byte trong UTF-8, vì vậy chúng không thực sự tiết kiệm bất cứ thứ gì trên đồng bằng [[...]]. Tôi cũng không chắc Columnlà hợp pháp như thế nào vì nó chỉ hiển thị như một danh sách các dòng trong sổ ghi chép Mathicala. Chạy mã này từ tệp tập lệnh sẽ không hiển thị bất cứ điều gì. Tuy nhiên, Print/@là cùng số byte và hoạt động trong cả hai trường hợp.
Martin Ender

Nếu bạn muốn tạo một liên kết đến một trang có địa chỉ dài, bạn có thể làm như sau : [what you see](actual link). Ví dụ. [Example Link](https://www.example.com), hiển thị dưới dạng Liên kết mẫu
Stan Strum


4

R, 63 61 59 byte

for(i in c(1:26,25:1))cat(LETTERS[c(1:i,i:1-1)],"
",sep="")

Hữu ích LETTTERS[0]không trả lại bất kỳ ký tự.

Chỉnh sửa: mất một nhờ vào @leakynun

Chỉnh sửa: thêm hai lần nữa nhờ @plannapus


1
Bạn có thể sử dụng một dòng mới theo nghĩa đen thay vì\n
Leaky Nun

3

TSQL, 159 byte

DECLARE @ varchar(52)='ABCDEFGHIJKLMNOPQRSTUVWXY',@o varchar(max)SELECT @+='Z'+REVERSE(@)+'
',@o=@
WHILE''<@
SELECT @=STUFF(@,LEN(@)/2,2,''),@o=@+@o+@
PRINT @o

Vĩ cầm


1
Tôi đã cố gắng để làm điều đó nhưng kết thúc với hơn 250 byte vì vậy không bao giờ đăng nó. Bạn, thực sự, có một giải pháp tốt hơn sau đó của tôi. Một lần nữa :)
Anuj Tripathi

3

Javascript (sử dụng thư viện ngoài - Có thể đếm được), 135 byte

_.Range(1,51).WriteLine(x=>(g=_.Range(65,x>25?52-x:x)).Write("",y=>(w=String.fromCharCode)(y))+(g.Reverse().Skip(1).Write("",y=>w(y))))

Liên kết đến thư viện: https://github.com/mvegh1/Enumerable

Giải thích mã: Tạo một phạm vi số int bắt đầu từ 1, với số lượng 51. Đối với mỗi số, hãy viết một dòng theo tiền tố phức tạp. Thực hiện một số thuật sĩ JS với các biến toàn cục và bộ đệm ẩn ... và voila. Đối với mỗi int trong WriteLine, chúng tôi đang tạo phạm vi int bên trái và lưu trữ vào "g" toàn cầu và String Joining (Write) với ""dấu phân cách và ánh xạ từng int vào ánh xạ chuỗi sang mã int char. Sau đó, chúng tôi kết hợp phía bên tay phải bằng cách thực hiện đảo ngược trình tự đó (và bỏ qua phần tử đầu tiên vì nó sẽ khớp với phần tử cuối cùng của thứ tự ban đầu ...), viết với cùng logic. EDIT: Cập nhật nội bộ của Write trong thư viện. Một chuỗi trống sẽ viết một chuỗi rỗng thay vì null bây giờ. Điều này cũng đã loại bỏ 15 byte câu trả lời

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


1
Bạn không cần bao gồm các byte mà bạn cần nhập thư viện?
MatthewRock

1
Idk, Ive đã đăng hơn 20 câu trả lời bằng thư viện và bạn sẽ là người đầu tiên nói điều đó với tôi. Tôi không nghĩ có ai thực sự quan tâm vì dù sao câu trả lời của tôi cũng không bao giờ thắng
applejacks01

1
@ applejacks01 Khá chắc chắn nếu bạn không nhập nó, thì bạn phải nói một cái gì đó như "JS + Enumerable" ở trên cùng. Tương tự như "Bash + Coreutils"
mbomb007

2
Đó là phổ biến để tính nhập khẩu. Câu trả lời Python + SymPy vẫn có import sympyhoặc from sympy import*ở trên cùng. Các câu trả lời Bash + x khác nhau vì bạn chỉ phải cài đặt x , không kích hoạt nó bằng cách nào đó.
Dennis

1
@PatrickRoberts Miễn là thư viện tồn tại trước khi thử thách được đăng, vâng. Python trả lời làm cho sử dụng sympy, numpy, scipy, vv tất cả các thời gian.
Dennis

3

Powershell, 61 52 byte

Cảm ơn TimmyD vì đã tiết kiệm 9 byte!

65..90+89..65|%{-join[char[]]((65..$_-ne$_)+$_..65)}

Vòng lặp thông qua các giá trị ASCII cho chữ in hoa chuyển tiếp, sau đó ngược lại. Đối với mỗi số, điều này tạo ra một mảng gồm các số X đầu tiên, loại bỏ số X-1st, sau đó thêm đảo ngược của các số X đầu tiên, tất cả sau đó được chuyển thành ký tự và nối thành một chuỗi.


Này, thật tốt, cảm ơn! Tôi đã cắm 65..90..65vào một ý thích sớm hơn nhưng không thành công. Đoán tôi quên tôi chỉ có thể thêm các phạm vi với nhau.
Ben Owen

3

Cheddar , 102 96 79 69 67 byte

17 byte nhờ vào Downgoat và truyền cảm hứng cho hơn 10.

"A"+(2@"27+@"(25|>1)).bytes.map(i->65@"(64+i)+@"((64+i)|>65)).vfuse

Thực tế là các chuỗi có thể nối nhưng không phải là mảng có nghĩa là tôi sẽ phải chuyển đổi hai phạm vi thành chuỗi, nối và sau đó chuyển đổi trở lại thành mảng.

Ngoài ra, thực tế là vfusetạo ra một newliens hàng đầu có nghĩa là tôi sẽ cần phải tạo ra dòng đầu tiên bằng tay và sau đó nối với phần còn lại.

@" như một dyad (hàm hai đối số) có thể chuyển đổi trực tiếp thành chuỗi, nhưng không hoạt động đối với phạm vi đảo ngược (nếu đối số thứ nhất lớn hơn đối số thứ hai).

Phạm vi đã bao gồm một nửa. Sau khi sửa lỗi, nó trở nên bao gồm.

Sử dụng

cheddar> "A"+(2@"27+@"(25|>1)).bytes.map(i->(65@"(64+i)+@"((64+i)|>65))).vfuse
"A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A"

Cheddar, 55 byte (không cạnh tranh)

Trong phiên bản mới nhất với tất cả các bản sửa lỗi, câu trả lời là:

(|>25+24|>0).map(i->65@"(65+i)+(i?(64+i)@"65:"")).vfuse

nhưng nó đã được thực hiện sau thử thách.


@"(1|>26)có thể1@"26
Downgoat

String.letterscó thể(65@"91)
Downgoat

String.letters.slice(0,i)có thể là65@"(66+i)
Downgoat

Aha, tôi thấy bạn đã bị lưới bytecount của bạn.
steenbergh


3

VBA, 94 byte

Function T:For j=-25To 25:k=25-Abs(j):For i=-k To k:T=T &Chr(65+k-Abs(i)):Next:T=T &vbLf:Next

Gọi trong cửa sổ ngay lập tức với? T

Chỉ để giải thích những gì đang diễn ra: Tôi sử dụng chức năng abs hai lần, để phản ánh cả đường ngang của bảng chữ cái và độ dài dòng. Nó rất phù hợp với nhiệm vụ vì giá trị cực đơn trong cả hai trường hợp, tương ứng với giao điểm 0 của biến trước-abs.

Là một tập hợp các lệnh đơn giản trong cửa sổ VBA Im Instant, thay vì một chương trình hoặc hàm, sau đây sẽ cần 72 byte:

For j=-25To 25:k=25-Abs(j):For i=-k To k:?Chr(65+k-Abs(i));:Next:?:Next

(cảm ơn @ideosPicker)


1
Tôi đã sử dụng một số logic tương tự trong một trong những lần gửi cờ Iceland của tôi. Bạn không thể đánh gôn điều này hơn nữa bằng cách chạy nó hoàn toàn trong cửa sổ ngay lập tức và bỏ qua phần khai báo hàm, hoặc điều đó có phá vỡ một số quy tắc mà tôi không quen thuộc không?
GuitarPicker

@IdeosPicker; không chắc chắn liệu chạy trong cửa sổ ngay lập tức có được tính là một chương trình hoàn chỉnh hay không, nhưng nếu vậy thì 8 byte ít hơn, hiệu quả; thay vì bắt đầu bằng Function T:, kết thúc bằng :?T(mặc dù nó chỉ hoạt động một lần, bởi vì sau đó bạn cần đặt lại T thành "" - nhưng ai cần nhiều hơn một trong những hình tam giác này?)
Joffan

2
Bạn thậm chí không cần T nếu ?bạn đi cùng ;.
GuitarPicker

Tôi đã có thể cạo nó xuống 71 bằng phương pháp đó. Gợi ý: bạn cũng sẽ không cần vbCrLf.
GuitarPicker

1
Vâng, tôi đã nhận được cùng; lưu ý rằng trả lại là cần thiết.
Joffan

3

Python, 73 71 byte

Cảm ơn @xnor cho đệ quy

f=lambda x=66,s='A',t='':x/92*t or t+f(x+1,s+chr(x),s+s[-2::-1]+"\n")+t

Giải trình

  • Thông số :
    • x là giá trị ascii của chữ cái tiếp theo trong bảng chữ cái
    • s là một tích lũy cho bảng chữ cái
    • tlà một đường thẳng trong tam giác (tức là s+ s backwards)
  • Trả về : tnếu bảng chữ cái được hoàn thành (tức là chúng tôi ở trung tâm)
  • Khác : t+f(...)+tvới:
    • x tăng lên
    • s nối với chữ cái tiếp theo
    • tđặt lại thành s+ s backwards+\n

Cập nhật

  • -2 [16-08-05] Xóa hàng đầu \n(+1) và rút ngắn điều kiện (-3) tất cả nhờ vào @xnor

1
Thật là một phương pháp thông minh, đẩy tqua vòng lặp tiếp theo. Có một dòng mới hàng đầu mặc dù; x=66,s='A''thoát khỏi nó Các trường hợp cơ sở có thể được rút ngắn để x/92*t or .
xnor

3

HTML + CSS, 884 ký tự

(763 ký tự HTML + 121 ký tự CSS)

Chỉ cần mở rộng nhận xét của Leaky Nun về câu trả lời của MonkeyZeus . (Mặc dù tôi có thể đọc sai nhận xét)

p{margin:0}p:before{content:"ABCDEFGH"}p:after{content:"HGFEDCBA"}a:before{content:"IJKLMNOP"}a:after{content:"PONMLKJI"}
<pre>A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
<p>I</p><p>IJI</p><p>IJKJI</p><p>IJKLKJI</p><p>IJKLMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNOPONMLKJI</p><p><a>Q</p><p><a>QRQ</p><p><a>QRSRQ</p><p><a>QRSTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXYZYXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTSRQ</p><p><a>QRSRQ</p><p><a>QRQ</p><p><a>Q</a></p><p>IJKLMNOPONMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMLKJI</p><p>IJKLKJI</p><p>IJKJI</p><p>IJI</p><p>I</p>ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A


3

Brachylog , 37 29 byte

Tín dụng để Fatalize cho sự giúp đỡ của mình trong suốt.

4 byte nhờ Fatalize và truyền cảm hứng cho 4 byte khác.

@A:1&e:"a"yr:1&cw@Nw\
:Lc.r.!

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

Vị ngữ 0 (Vị ngữ chính)

@A:1&e:"a"yr:1&cw@Nw\
@A:1&                  Apply predicate 1 to @A, which is
                       basically "abcdefghijklmnopqrstuvwxyz"
     e                 Choose one element from the result (choice point)
      :"a"yr               generate substring from element to "a"
            :1&            apply predicate 1
               c           concatenate
                w          write to STDOUT
                 @Nw       write "\n" to STDOUT
                    \  Backtrack to last choice point to choose
                       another element until there is no more
                       choice left, then halt.

Vị ngữ 1 (vị ngữ phụ)

Điều này về cơ bản xây dựng một palindrom từ chuỗi đã cho.

:Lc.r.!
:Lc.     output is [input:L]
   .r.   output reversed is still output
      !  stop searching after the first output

Bạn có thể thay thế ,Atrong Dự đoán 1 bằng h, lưu một byte.
Gây tử vong

Bạn cũng có thể lưu hai byte bằng cách thay thế :1:2yt.bằng :2&.và thêm một !(cắt điểm lựa chọn) vào cuối vị ngữ 2.
Fatalize


3

R, 127 125 byte

k=cat;L=LETTERS;for(i in 1:26)k(c(L[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))

Không hoàn toàn hài lòng với giải pháp này, đặc biệt là hai forvòng lặp, nhưng không thể đi kèm với một cái gì đó tốt hơn!
LETTERSchứa các chữ cái viết hoa.

Ung dung:

for(i in 1:26){
  cat(c(LETTERS[1:i],LETTERS[(i-1):0],"\n"))
               }

for(i in 1:26){
  cat(c(LETTERS[0:(26-i)],LETTERS[ifelse((25-i)>=0,25-i,0):0],"\n"))
               }

ifelselà một cách ngắn hơn để mở khóa if... else...và hoạt động theo cách này:ifelse(condition,action if TRUE, action if FALSE)

Một giải pháp 125 byte khác:

for(i in 1:26)(k=cat)(c((L=LETTERS)[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))


3

Java 131 byte

Không cần sử dụng Chuỗi (131 byte)

public static void main(String[] args) {
    for(int i = 0 ,k=1; i>-1; i+=k){
        for(int c= 65, d = 1; c>64;){
            d = d>-1 & c < 65+i?1:-1;
            System.out.print((char)c+((c+=d)<65?"\n":""));
        }
        k = k>-1 & i < 25?1:-1;
    }
}

Mật mã

for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));

Với chuỗi (173 byte)

String a="abcdefghijklmnopqrstuvwxyz";
for(int i = 1 ,k=1; i>0; i+=k==1?1:-1){
    System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i));
    k = k>-1 & i < 26?1:-1;
}

Mật mã

String a="abcdefghijklmnopqrstuvwxyz";for(int i=1,k=1;i>0;k=k>-1&i<26?1:-1,System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i)),i+=k==1?1:-1);

Cảm ơn manatworkKevin Cruijssen


2
Chào mừng đến với PPCG. Vui lòng đọc bài viết Làm thế nào tôi nên trả lời một mã golf? Có gợi ý nào không? Phần trong trang thông tin của thẻ golf-code . Câu trả lời cho loại thách thức này dự kiến ​​sẽ đưa ra những nỗ lực để giảm kích thước mã. Trong phần này, bạn có thể tìm thấy trợ giúp về Mẹo chơi gôn trong JavaMẹo để chơi gôn bằng <tất cả các ngôn ngữ> .
manatwork

1
Ở đó bạn sử dụng 4 toán tử ternary và tất cả các điều kiện được đặt trong ngoặc đơn. Bạn có thể loại bỏ chúng để lưu 8 ký tự.
manatwork

1
d và k không thể xuống dưới -1, phải không? Sau đó, bạn có thể thay thế d!=-1bằng d>-1, tương tự cho k. (BTW, bạn đã quên sửa phiên bản chơi gôn.)
thao tác

Đã chuyển các câu lệnh từ thân vòng lặp sang phần câu lệnh tăng để lưu 3 byte ..
Syamesh K

1
Xin chào, tôi biết đã khá lâu rồi, nhưng bạn có thể chơi golf hai điều: i+=k==1?1:-1có thể i+=kSystem.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);có thể System.out.print((char)c+((c+=d)<65?"\n":"")));. Vì vậy, tổng cộng nó trở thành ( 131 byte ):for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));
Kevin Cruijssen

3

Brainfuck, 79 byte

+<++<<--------[>+++++>>[+++<+<]>]<+[[>+>+.<<-]>-[<+>>-.<-]>->.>[->]<<<[<<++>]<]

Định dạng:

+<++<<
--------[>+++++>>[+++<+<]>]
<+
[
  [>+>+.<<-]
  >-[<+> >-.<-]
  >->.>[->]
  <<<[<<++>]
  <
]

Dùng thử trực tuyến


2

Sesos , 27 byte

0000000: a85ab9 ac5daa f8b1c7 785f9b b961f7 665c1b 73ccfc  .Z..]....x_..a.f\.s..
0000015: c01ecb 987303                                     ....s.

Hãy thử trực tuyến! Kiểm tra gỡ lỗi để xem mã SBIN được tạo.

Sesos lắp ráp

Tệp nhị phân ở trên đã được tạo bằng cách lắp ráp mã SASM sau.

add 65, rwd 1, add 10, rwd 2, add 25
jmp
    fwd 3
    jmp
        put, fwd 1
    jnz
    rwd 1
    jmp
        fwd 1, add 1, fwd 1, add 1, rwd 2, sub 1
    jnz
    fwd 2
    jmp
        rwd 2, add 1, fwd 2, sub 1
    jnz
    rwd 1, add 1, rwd 2
    jmp
        put, rwd 1
    jnz
    rwd 1, sub 1
jnz
fwd 3
jmp
    jmp
        put, fwd 1
    jnz
    rwd 1, get, rwd 1
    jmp
        put, rwd 1
    jnz
    fwd 2
; jnz (implicit)

2

/// , 208 byte

/'/\/\///+/BA
AB'-/DC+CD'&/FE-EF')/HG&GH'=/JI)IJ'|/LK=KL'7/NM|MN'1/PO7OP'q/RQ1QR'p/TSqST'6/VUpUV'[/XW6WX/A
A+C+C-E-E&G&G)I)I=K=K|M|M7O7O1Q1QqSqSpUpU6W6W[Y[YZY[Y[W6W6UpUpSqSqQ1Q1O7O7M|M|K=K=I)I)G&G&E-E-C+C+A
A

Tất nhiên là không chiến thắng, nhưng đây là, trước Martin Ender ...

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.