สามเหลี่ยมตัวอักษร


48

คุณจะต้องพิมพ์ข้อความที่แน่นอนนี้:

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

รายละเอียด

  • บรรทัดใหม่ต่อท้ายพิเศษจะได้รับอนุญาตเมื่อสิ้นสุดเอาต์พุต
  • อนุญาตให้เว้นวรรคต่อท้าย (U + 0020) ที่ท้ายบรรทัดแต่ละบรรทัดรวมถึงการขึ้นบรรทัดใหม่พิเศษ
  • คุณสามารถใช้ตัวพิมพ์เล็กทั้งหมดแทนตัวพิมพ์ใหญ่ทั้งหมด แต่คุณไม่สามารถพิมพ์ตัวพิมพ์เล็กบางส่วนได้บางส่วน
  • คุณสามารถส่งคืนข้อความเป็นฟังก์ชันเอาต์พุตแทนที่จะพิมพ์ในโปรแกรมเต็มรูปแบบ

เกณฑ์การให้คะแนน

เนื่องจากนี่คือสามเหลี่ยมและสามเหลี่ยมมี 3 ด้านและ 3 เป็นจำนวนน้อยรหัสของคุณควรมีขนาดเล็กเป็นจำนวนไบต์


22
ตัวอักษรจำนวนมากเมื่อเร็ว ๆ นี้
downrep_nation

1
การประสานของฉันกำลังจะดุร้าย @downrep_nation
DoctorHeckle

5
"เนื่องจากสามเหลี่ยมมี 3 ด้านและ 3 เป็นจำนวนน้อยดังนั้นโค้ดของคุณควรมีขนาดเล็กในจำนวนไบต์" ดูเหมือนถูกต้องตามกฎหมาย
Rohan Jhunjhunwala

1
กำลังสองของตัวเลขที่ประกอบด้วย 1 ดูเหมือนจะเกี่ยวข้อง: 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

1
"เนื่องจากสามเหลี่ยมมี 3 ด้านและ ... " Illuminati ยืนยัน
HyperNeutrino

คำตอบ:


38

เป็นกลุ่ม 37 ไบต์

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

ป้อนคำอธิบายรูปภาพที่นี่

ตำนาน

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

2
นั่นเป็น GIF ที่ยอดเยี่ยมจริงๆ
AdmBorkBork

13
ฉันจะไม่หยุดที่จะประหลาดใจกับคำตอบของ Vim
DanTheMan

สนใจที่จะอธิบายว่าวิธีนี้ใช้ได้ผลกับคนที่ไม่พูดภาษา Vim หรือไม่?
R. Kap

6
@ R.Kap ฉันขอแนะนำให้คุณดาวน์โหลด Vim และลองวิธีแก้ปัญหาด้วยตัวคุณเอง - คุณสามารถดูวิธีแก้ปัญหาของโรคหลอดเลือดสมองตีแผ่! โดยพื้นฐานแล้วฉันขโมยตัวอักษรจากไฟล์ช่วยเหลือ ( :h<_↵↵↵YZZP) จากนั้นบันทึกมาโคร ( qq…q) ที่ตัดตัวอักษรซ้ำ ๆ บนบรรทัดด้านบนทำสำเนาสองชุดเพื่อขยายรูปสามเหลี่ยมในแนวตั้งจากนั้นผนวกตัวอักษรที่ตัดออกแล้วต่อท้ายทุกบรรทัด ที่จะเติบโตในแนวนอน ฉันทำซ้ำมาโครนี้อีก 24 ครั้งเพื่อวาดสามเหลี่ยมเต็ม
ลินน์

31

โลโก้, 232 207 196 190 ไบต์

มีใครพูดรูปสามเหลี่ยมบ้างไหม?

ออกจากเข็มทิศและไม้โปรแทรกเตอร์ของคุณและลองทำสิ่งนี้ด้วยวิธีกราฟิก เรขาคณิตใช้รูปสามเหลี่ยมด้านเท่าเพื่อจัดผลลัพธ์ ก่อนหน้านี้ฉันมีสามเหลี่ยมหน้าจั่ว แต่มันเกี่ยวข้องกับตำแหน่งทศนิยมมากเกินไป การเปลี่ยนแปลงนี้ยังกระชับเอาท์พุทลดจำนวนการเตรียมหน้าจอและการเปลี่ยนแบบอักษรที่ฉันต้องทำ

ฉันใช้ล่ามออนไลน์ของ Calormenเพื่อส่งเนื้อนี้ออกมา หากคุณมีหน้าจออสังหาริมทรัพย์ไม่เพียงพอก็จะปิดตัวเอง แต่คุณสามารถทำซ้ำตัวเลขที่จะดูแลได้ ฉันใช้โหมดเต็มหน้าจอ "F11" บนเบราว์เซอร์ของฉัน

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]

rขั้นตอนการวาดเส้นของnตัวอักษร อักขระจะถูกกำหนดโดยอัตโนมัติขึ้นอยู่กับจำนวนเซ็กเมนต์ที่ถูกบอกให้ใช้ bพารามิเตอร์บอกเท่าใดเพื่อหมุนชั่วคราวเพื่อให้ตัวอักษรที่จะชี้ไปในทิศทางที่ถูกต้อง lพารามิเตอร์กำหนดระยะห่างระหว่างตัวอักษรเชิงเส้น

tขั้นตอนขั้นตอนที่ไปอยู่ในตำแหน่งต่อไปและเรียกrฟังก์ชั่นครั้งที่สี่ในการสร้างรูปสามเหลี่ยมหมุนตามความเหมาะสม ฉันเรียกมันสองครั้งสำหรับด้านแนวตั้งเพราะใช้เวลาน้อยกว่าการโทรครั้งเดียวด้วยการจัดการพิเศษ จุดสิ้นสุดของขั้นตอนการวางตำแหน่งเต่าสำหรับการเริ่มต้นของรูปสามเหลี่ยมถัดไปหนึ่งขั้นตอนข้างต้น

Zเป็นกรณีพิเศษดังนั้นเราจึงพิมพ์โดยตรงและหมุนราวกับว่าเราเพิ่งเสร็จสามเหลี่ยม ในที่สุดtเรียกว่า 25 ครั้ง

อยู่ในระหว่างดำเนินการคำอธิบายประกอบภาพผลลัพธ์ที่สำเร็จ


3
ออกจากกล่อง. ทำได้ดีมาก
CousinCocaine

19

Haskell, 58 ไบต์

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

กำหนดฟังก์ชั่นtที่ส่งกลับผลลัพธ์เป็นสตริง

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

เยลลี่ , 16 13 ไบต์

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

ขอบคุณ @LeakyNun สำหรับการเล่นกอล์ฟ 3 ไบท์!

ลองออนไลน์!

มันทำงานอย่างไร

Ṗ;Ṛ        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 ขอบคุณ
Dennis

4
ฉันอยากรู้อยากเห็นว่าโลกนี้ใช้งานได้อย่างไร ...
โสคราติฟินิกซ์

บางทีถ้าใช้ตัวทำสำเนาลิงก์คุณสามารถบันทึกหนึ่งไบต์
Leaky Nun

3
@MathieuRodic Jelly ใช้หน้ารหัสที่กำหนดเองซึ่งเข้ารหัสอักขระทั้งหมด 256 ตัวที่เข้าใจเป็นไบต์เดียว ไบต์การเชื่อมโยงในจุดที่ส่วนหัวของมัน
Dennis

10

Python ขนาด 74 ไบต์

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

ฟังก์ชัน Python 2 ที่พิมพ์และไม่มีอาร์กิวเมนต์ แนวคิดหลักคือการสร้างรูปแบบสามเหลี่ยมมีและกลับด้วยการเรียกซ้ำ ก่อนอื่นให้พิจารณาฟังก์ชั่นที่ง่ายกว่านี้ที่พิมพ์ตัวอักษร 'A' ถึง 'Z' และกลับไปที่ 'A':

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

ฟังก์ชั่นแรกพิมพ์ "A" (รหัส char 65) จากนั้นเรียกใช้อีกครั้งเพื่อพิมพ์ "B" (66) และอื่น ๆ เพื่อ "Z" (90) จากตรงนั้นมันหยุดซ้ำ ในทางที่กลับมากองซ้อนซ้ำมันจะพิมพ์ตัวอักษรอะไรก็ตามที่tพิมพ์ในชั้นเดียวกันจาก "Y" กลับไปที่ "A"

รหัสหลักไม่เหมือนกันยกเว้นมันสะสมเข้าไปในสตริงของตัวอักษรเพื่อให้ห่างไกลและพิมพ์สตริงขึ้นและลงss+s[-2::-1]

ขอบคุณ xsot สำหรับ 2 ไบต์

ใน Python 3 สิ่งเดียวกันคือ byte ที่สั้นกว่า (73 bytes) โดยใส่ทุกอย่างลงในหนึ่งบรรทัด

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

คุณสามารถบันทึก 2 f(x=66,s='A')ไบต์ถ้าคุณชดเชยตัวแปรคือ สิ่งนี้ช่วยให้คุณสามารถอัปเดตsในการเรียกใช้ฟังก์ชั่นแทนร่างกายของฟังก์ชั่น
xsot

ฉันคิดว่า Python 3 ของคุณเหมือนกับญาติของ Python 2 ต้องการค่า 90 แทนที่จะเป็น 89 เพื่อให้มีแถวที่ยาวที่สุดซึ่งไปจนถึง Z และย้อนกลับ
Tebbe

@Tebbe ขอบคุณแก้ไขพวกเขา
xnor

8

brainfuck, 1733 121 119 ไบต์

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

รุ่นที่อ่านง่ายขึ้นเล็กน้อย:

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

คำอธิบายอาจจะมา


ลองใช้การวนซ้ำแทนการสร้างอักขระแต่ละตัวด้วยตนเอง
Leun Nun

@LeakyNun ฉันไม่รู้ว่าจะทำยังไง ข้อเสนอแนะใด ๆ
DanTheMan

4
ดีมากคุณนอน 4 ชั่วโมงเท่านั้น
Leun Nun

1
ขอแสดงความยินดีกับการทำให้โปรแกรมเล็กกว่าเอาท์พุท!
GuitarPicker

1
วิธีหนึ่งออกกอล์ฟ 1612 ไบต์ได้อย่างไร
FantaC

8

05AB1E , 20 13 12 6 ไบต์

บันทึก 2 ไบต์ต้องขอบคุณ Adnan
บันทึก 6 ไบต์ด้วยMagic Octopus Urnและฟังก์ชั่นภาษาใหม่บางอย่าง

Aη€ûû»

ลองออนไลน์!

คำอธิบาย

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

ดีมาก! คุณสามารถเปลี่ยนŒ26£ไป.pซึ่งเป็นคำสั่งคำนำหน้า นอกจากนี้คุณสามารถเปลี่ยนD,เป็น=สิ่งที่พิมพ์โดยไม่ต้อง popping
Adnan

ว้าวเคล็ดลับที่ฉลาดด้วยgF,!
Adnan

@Adnan: ขอบคุณ! ฉันรู้ว่ามีคำสั่งคำนำหน้าอยู่ที่ไหนสักแห่ง :) ฉันไม่ค่อยจะตรวจสอบสิ่งที่ขยายออกไป
Emigna

2
คำสั่ง bifurcate Âนั้นดีมากและมีคุณสมบัติที่เรียบร้อยมาก ๆ
ไมล์

1
@carusocomputing: น่าเสียดายที่ûใหม่กว่าความท้าทายและจะทำให้คำตอบนี้ไม่ใช่การแข่งขัน
Emigna

6

J, 26 23 22 ไบต์

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

คำอธิบาย

,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}.|.ลองสิ่งนี้
Leun Nun

@LeakyNun ขอบคุณฉันไม่รู้ว่าทำไมฉันคิดว่าพวกเขาแตกต่างกัน
ไมล์




5

C, 272 247 234 230 144 137 ไบต์:

( บันทึกหลายไบต์ ( 272 -> 230) ในวิธีการก่อนหน้านี้ของฉันขอบคุณเคล็ดลับและเทคนิคการเล่นกอล์ฟที่ยอดเยี่ยมจากsigalor ! )

( บันทึกเกือบ 100 ไบต์ ( 230 -> 144) โดยเปลี่ยนเป็นวิธีที่ดีกว่า )

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มา ฉันเพิ่งเริ่มเรียนรู้ด้วยตนเองเมื่อเร็ว ๆ นี้ดังนั้นมาดูกันว่ามันเป็นอย่างไร

ใช้งานได้จริง! (Ideone)


1
Ahhh ฉันแค่ต้องการเพิ่มคำตอบ C เช่นกัน ... อะไรก็ตามฉันจะช่วยคุณแล้ว;) ก่อนอื่นนี่คือรหัสกอล์ฟคุณไม่จำเป็นต้องเขียนรหัสที่สมบูรณ์แบบ คำเตือนของคอมไพเลอร์นั้นสมบูรณ์ดี นั่นเป็นเหตุผลที่คุณสามารถเอาmain()'s #include <stdio.h>กลับชนิดและแม้กระทั่ง GCC (และไซต์เช่น Ideone) ก็โอเคกับสิ่งนั้น ถัดไปคุณสามารถนิยามตัวแปร 'outsource' ไปยังรายการพารามิเตอร์ของฟังก์ชัน ให้for(int i=65;...กลายเป็นfor(i=65...และเปลี่ยนไปmain() main(i)ทำเช่นเดียวกันสำหรับตัวแปร int ทุกตัวเช่นกัน (GCC เป็นค่าเริ่มต้นประเภทที่ขาดหายไปint)
sigalor

@sigalor ขอบคุณสำหรับเคล็ดลับ! :) เพียงหนึ่งคำถาม: ทำไมฉันต้องเปลี่ยนmain()ไปmain(i)?
R. Kap

@sigalor ที่จริงตอนนี้ฉันได้รับข้อผิดพลาดมากมายในการรวบรวม
R. Kap

เมื่อคุณไม่ได้ประกาศiตัวแปรของคุณในการกำหนดค่าเริ่มต้นของลูปคุณต้องประกาศตัวแปรอื่น และเนื่องจาก (อย่างน้อยใน C) พารามิเตอร์ของฟังก์ชั่นจึงสามารถใช้งานได้เช่นตัวแปรปกติจึงไม่มีปัญหา Btw คุณใช้คอมไพเลอร์ตัวไหน?
sigalor

@sigalor ปัจจุบันCใน Ideone ฉันพบ<variable> undeclaredข้อผิดพลาดหลายอย่าง
R. Kap


5

Mathematica 59 ไบต์

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

ฉันคิดว่าการลบ//Columnจากจุดสิ้นสุดและนำหน้ารหัสของคุณด้วยColumn@งาน
Yytsi

2
คุณดูเหมือนจะนับและเป็นไบต์เดียว ฉันสงสัยว่ามีหน้ารหัสไบต์เดียวที่มีพวกเขาและยังได้รับการสนับสนุนโดย Mathematica นอกกรอบ พวกเขาต้องการโดยสามไบต์ UTF-8 [[...]]ดังนั้นพวกเขาจึงไม่ได้จริงๆประหยัดอะไรมากกว่าธรรมดา ฉันยังไม่แน่ใจว่าวิธีการที่ถูกต้องตามกฎหมายColumnเพราะจะแสดงเพียงรายการของเส้นในสมุดบันทึก Mathematica การเรียกใช้รหัสนี้จากไฟล์สคริปต์จะไม่แสดงผลใด ๆ อย่างไรก็ตามPrint/@มีจำนวนไบต์เท่ากันและทำงานได้ทั้งสองกรณี
Martin Ender

[what you see](actual link)หากคุณต้องการที่จะทำให้การเชื่อมโยงไปยังหน้าเว็บที่มีอยู่นานคุณสามารถทำต่อไปนี้: อดีต [Example Link](https://www.example.com)ซึ่งแสดงเป็นลิงค์ตัวอย่าง
Stan Strum


4

R, 63 61 59 ไบต์

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

มีประโยชน์LETTTERS[0]ไม่ส่งคืนอักขระใด ๆ

แก้ไข: สูญเสียหนึ่งรายการด้วย @leakynun

แก้ไข: อีกสองขอบคุณ @plannapus


1
คุณสามารถใช้การขึ้นบรรทัดใหม่ตามตัวอักษรแทน\n
Leaky Nun

3

TSQL, 159 ไบต์

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

ซอ


1
ฉันพยายามที่จะทำ แต่ท้ายด้วย 250+ ไบต์จึงไม่โพสต์ที่ แน่นอนคุณมีทางออกที่ดีกว่าของฉันแล้ว อีกครั้ง :)
Anuj Tripathi

3

Javascript (ใช้ไลบรารีภายนอก - นับได้), 135 ไบต์

_.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))))

เชื่อมโยงไปยังห้องสมุด: https://github.com/mvegh1/Enumerable

คำอธิบายรหัส: สร้างช่วงของ ints เริ่มต้นที่ 1 สำหรับการนับจาก 51 สำหรับแต่ละคนเขียนบรรทัดตามที่ซับซ้อนก่อน ใช้ตัวช่วยสร้าง JS บางตัวที่มีตัวแปรโกลบอลและแคช ... และ voila สำหรับแต่ละ int ใน WriteLine เรากำลังสร้างช่วงซ้ายมือของ ints และเก็บไว้ใน "g" ระดับโลกและ String Joining (Write) พร้อม""ตัวคั่นและการแมปแต่ละ int ไปยังการจับคู่สตริงกับรหัส char char จากนั้นเราเชื่อมทางด้านขวามือโดยการกลับรายการลำดับ (และข้ามองค์ประกอบแรกเพราะจะตรงกับองค์ประกอบสุดท้ายของลำดับเดิม ... ) เขียนด้วยตรรกะเดียวกัน แก้ไข: อัปเดต internals ของการเขียนในห้องสมุด ลำดับที่ว่างเปล่าจะเขียนสตริงที่ว่างเปล่าแทนโมฆะในขณะนี้ คำตอบนี้ยังลดลง 15 ไบต์

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณไม่จำเป็นต้องรวมไบต์ที่คุณต้องนำเข้าไลบรารีหรือไม่
MatthewRock

1
Idk ฉันได้โพสต์คำตอบมากกว่า 20 คำตอบโดยใช้ห้องสมุดและคุณจะเป็นคนแรกที่พูดแบบนั้นกับฉัน ฉันไม่คิดว่าใครจะสนใจจริงๆเพราะคำตอบของฉันไม่เคยชนะเลย
applejacks01

1
@ applejacks01 ค่อนข้างแน่ใจว่าถ้าคุณไม่นำเข้ามันคุณต้องพูดบางอย่างเช่น "JS + Enumerable" ที่ด้านบน คล้ายกับ "Bash + Coreutils"
mbomb007

2
เป็นเรื่องธรรมดาที่จะนับการนำเข้า Python + SymPyคำตอบยังมีimport sympyหรือfrom sympy import*ที่ด้านบน ทุบตี + xคำตอบที่แตกต่างกันเพราะคุณจะต้องติดตั้งxไม่เปิดใช้งานได้อย่างใด
เดนนิส

1
@PatrickRoberts ตราบใดที่มีห้องสมุดอยู่ก่อนที่จะมีการโพสต์ความท้าทายใช่ ตอบหลามทำให้การใช้งานsympy, numpy, scipyฯลฯ ตลอดเวลา
เดนนิส

3

Powershell, 61 52 ไบต์

ขอบคุณ TimmyD สำหรับการบันทึก 9 ไบต์!

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

วนค่า ASCII สำหรับอักษรตัวใหญ่ไปข้างหน้าแล้วย้อนกลับ สำหรับแต่ละหมายเลขสิ่งนี้จะสร้างอาร์เรย์ของหมายเลข X แรกลบหมายเลข X-1 จากนั้นเพิ่มการย้อนกลับของตัวเลข X แรกซึ่งทั้งหมดจะถูกส่งไปยังตัวอักษรและเข้าร่วมในสตริง


เฮ้มันเยี่ยมมากขอบคุณ! ฉันเสียบปลั๊ก65..90..65ไว้ก่อนหน้าโดยไม่ประสบความสำเร็จ เดาฉันลืมฉันสามารถเพิ่มช่วงเข้าด้วยกัน
Ben Owen

3

Cheddar , 102 96 79 69 67 ไบต์

ขอบคุณ 17 ไบต์สำหรับ Downgoat และอีก 10 แรงบันดาลใจ

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

ความจริงที่ว่าสตริงสามารถต่อกันได้ แต่ไม่ใช่อาร์เรย์หมายความว่าฉันจะต้องแปลงสองช่วงเป็นสตริงเชื่อมต่อแล้วแปลงกลับเป็นอาร์เรย์

นอกจากนี้ความจริงที่vfuseสร้าง newliens ชั้นนำหมายความว่าฉันจะต้องสร้างบรรทัดแรกด้วยตนเองแล้วต่อกับส่วนที่เหลือ

@" ในฐานะที่เป็น dyad (ฟังก์ชั่นสองอาร์กิวเมนต์) สามารถแปลงเป็นสตริงได้โดยตรง แต่ไม่สามารถใช้กับช่วงที่กลับด้านได้ (ถ้าอาร์กิวเมนต์แรกมีขนาดใหญ่กว่าวินาที)

ช่วงคือครึ่งรวม หลังจากแก้ไขข้อผิดพลาดมันรวม

การใช้

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 ไบต์ (ไม่ใช่การแข่งขัน)

ในเวอร์ชันล่าสุดที่มีการแก้ไขทั้งหมดคำตอบคือ:

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

แต่มันถูกสร้างขึ้นหลังจากการท้าทาย


@"(1|>26)สามารถ1@"26
Downgoat

String.lettersสามารถ(65@"91)
Downgoat

String.letters.slice(0,i)อาจจะเป็น65@"(66+i)
Downgoat

อ้าฉันเห็นคุณได้รับการตะแกรง bytecount ของคุณ
steenbergh


3

VBA, 94 ไบต์

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

โทรในหน้าต่างทันทีด้วย? T

เพียงเพื่ออธิบายสิ่งที่เกิดขึ้น: ฉันใช้ฟังก์ชั่น Abs สองครั้งเพื่อสะท้อนทั้งตัวอักษรทราเวิร์และความยาวบรรทัด มันเหมาะกับงานเนื่องจากมีค่าสูงที่สุดในทั้งสองกรณีซึ่งสอดคล้องกับการข้ามศูนย์ของตัวแปร pre-Abs

ในฐานะที่เป็นชุดคำสั่งง่ายๆในหน้าต่าง VBA ทันทีแทนที่จะเป็นโปรแกรมหรือฟังก์ชั่นต่อไปนี้จะต้อง 72 ไบต์:

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

(ขอบคุณ @GuitarPicker)


1
ฉันใช้ตรรกะที่คล้ายกันบางอย่างในการส่งการตั้งค่าสถานะของไอซ์แลนด์ คุณไม่สามารถตีต่อไปได้ด้วยการรันมันทั้งหมดในหน้าต่างทันทีและข้ามการประกาศฟังก์ชั่นหรือไม่นั้นเป็นสิ่งที่ผิดกฎบางอย่างที่ฉันไม่คุ้นเคยใช่ไหม
GuitarPicker

@GuitarPicker; ไม่แน่ใจว่าการทำงานในหน้าต่างทันทีนับเป็นโปรแกรมที่สมบูรณ์หรือไม่ แต่ถ้าเป็นเช่นนั้น 8 ไบต์จะน้อยลงอย่างมีประสิทธิภาพ แทนที่จะเริ่มด้วยFunction T:จบด้วย:?T(แม้ว่าจะใช้ได้เพียงครั้งเดียวเพราะหลังจากนั้นคุณต้องรีเซ็ต T เป็น "" - แต่ใครต้องการมากกว่าหนึ่งในรูปสามเหลี่ยมเหล่านี้?)
Joffan

2
คุณไม่จำเป็นต้อง T ถ้าคุณเป็นคุณไปด้วย? ;
GuitarPicker

ฉันสามารถโกนมันลงไปถึง 71 โดยใช้วิธีการนั้น คำแนะนำ: คุณไม่จำเป็นต้องใช้ vbCrLf เช่นกัน
GuitarPicker

1
ใช่ฉันได้รับเหมือนกัน; โปรดทราบว่าจำเป็นต้องส่งคืน
Joffan

3

Python 73 73ไบต์

ขอบคุณ @xnor สำหรับการสอบถามซ้ำ

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

คำอธิบาย

  • พารามิเตอร์ :
    • x คือค่า ascii ของตัวอักษรถัดไปในตัวอักษร
    • s เป็นตัวสะสมสำหรับตัวอักษร
    • tเป็นเส้นในรูปสามเหลี่ยม (เช่นs+ s backwards)
  • ย้อนกลับ : tถ้าตัวอักษรเสร็จแล้ว (เช่นเราอยู่ที่กึ่งกลาง)
  • อื่น : t+f(...)+tด้วย:
    • x เพิ่มขึ้น
    • s ต่อท้ายด้วยตัวอักษรถัดไป
    • tรีเซ็ตเป็นs+ s backwards+\n

ปรับปรุง

  • -2 [16-08-05] ลบนำหน้า\n(+1) และสั้นลงตามเงื่อนไข (-3) ขอบคุณทั้งหมด@xnor

1
ช่างเป็นวิธีที่ฉลาดแค่ผลักดันtไปยังลูปถัดไป มี newline ชั้นนำพิเศษว่า; x=66,s='A''กำจัดมัน เคสพื้นฐานสามารถย่อให้เล็กลงx/92*t or ได้
xnor

3

HTML + CSS, 884 ตัวอักษร

(763 ตัวอักษร HTML + 121 ตัวอักษร CSS)

เพียงแค่ขยายรั่วนุ่น 's ความคิดเห็นเกี่ยวกับMonkeyZeus ' s คำตอบ (แม้ว่าฉันอาจจะแสดงความคิดเห็นผิด ... )

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 ไบต์

เครดิตที่จะเสียชีวิตสำหรับความช่วยเหลือของเขาตลอด

ขอบคุณ 4 ไบต์สำหรับ Fatalize และแรงบันดาลใจสำหรับอีก 4 ไบต์

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

ลองออนไลน์!

ภาคแสดง 0 (ภาคแสดงหลัก)

@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.

ภาคที่ 1 (ภาคเสริม)

สิ่งนี้จะสร้าง palindrome จากสตริงที่กำหนด

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

คุณสามารถแทนที่,Aในเพรดิเคต 1 ด้วยhการบันทึกหนึ่งไบต์
ทำให้เสียชีวิต

นอกจากนี้คุณยังสามารถบันทึกไบต์ที่สองโดยการแทนที่:1:2yt.ด้วย:2&.และเพิ่ม!(ตัดทางเลือกคะแนน) ในตอนท้ายของคำกริยา 2
Fatalize


3

R, 127 125 ไบต์

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"))

ไม่พอใจอย่างสมบูรณ์กับโซลูชันนี้โดยเฉพาะอย่างยิ่งสองforลูป แต่ไม่สามารถมาพร้อมกับสิ่งที่ดีกว่าได้!
LETTERSมีตัวอักษรตัวพิมพ์ใหญ่

Ungolfed:

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

ifelseเป็นวิธีที่สั้นกว่าสำหรับการคลายif... else...และใช้วิธีนี้:ifelse(condition,action if TRUE, action if FALSE)

โซลูชัน 125 ไบต์อื่น:

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 ไบต์

โดยไม่ใช้สตริง (131 ไบต์)

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;
    }
}

Codegolfed

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":"")));

ด้วยสตริง (173 ไบต์)

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;
}

Codegolfed

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);

ขอบคุณmanatworkและKevin Cruijssen


2
ยินดีต้อนรับสู่ PPCG โปรดอ่าน“ ฉันจะตอบรหัสกอล์ฟได้อย่างไร? คำแนะนำใด ๆ หรือไม่” ส่วนในรหัสกอล์ฟแท็กหน้าข้อมูล คำตอบสำหรับความท้าทายประเภทนี้คาดว่าจะนำเสนอความพยายามในการลดขนาดรหัส ในการนี้คุณอาจพบความช่วยเหลือในการเคล็ดลับสำหรับการเล่นกอล์ฟในชวาและเคล็ดลับสำหรับการเล่นกอล์ฟใน <ทุกภาษา>
จัดการ

1
ที่นั่นคุณใช้ตัวดำเนินการประกอบไปด้วย 4 ตัวและเงื่อนไขทั้งหมดอยู่ในวงเล็บ คุณสามารถลบที่บันทึก 8 ตัว
จัดการ

1
d และ k ไม่สามารถไปต่ำกว่า -1 ได้ใช่ไหม จากนั้นคุณสามารถแทนที่d!=-1ด้วยd>-1เหมือนกันสำหรับ k (BTW คุณลืมที่จะแก้ไขรุ่น
golfed

ย้ายคำสั่งจากเนื้อความลูปไปยังส่วนคำสั่งที่เพิ่มขึ้นเพื่อบันทึก 3 ไบต์ ..
Syamesh K

1
สวัสดีฉันรู้ว่ามันค่อนข้างนานแล้ว แต่คุณสามารถตีกอล์ฟได้สองสิ่ง: i+=k==1?1:-1ทำได้i+=kและSystem.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);เป็นSystem.out.print((char)c+((c+=d)<65?"\n":"")));ไปได้ ดังนั้นทั้งหมดจึงกลายเป็น ( 131 bytes ):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


2

Sesos , 27 ไบต์

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

ลองออนไลน์! ตรวจสอบDebugเพื่อดูรหัส SBIN ที่สร้างขึ้น

ประกอบน้ำมัน

ไฟล์ไบนารีข้างต้นถูกสร้างขึ้นโดยการรวบรวมรหัส SASM ต่อไปนี้

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 ไบต์

/'/\/\///+/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

ไม่ชนะแน่นอน แต่ที่นี่มันคือ predating Martin Ender ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.