Segitiga alfabet


48

Anda harus mencetak teks ini:

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

Spesifikasi

  • Newline tambahan tambahan diperbolehkan di akhir output.
  • Ruang tambahan tambahan (U + 0020) diizinkan di akhir setiap baris, termasuk baris tambahan tambahan baru.
  • Anda dapat menggunakan semua huruf kecil dan bukan semua huruf besar, tetapi Anda tidak dapat mencetak sebagian huruf kecil sebagian.
  • Anda dapat mengembalikan teks sebagai output fungsi alih-alih mencetaknya dalam program lengkap.

Mencetak gol

Karena ini adalah segitiga, dan segitiga memiliki 3 sisi, dan 3 adalah angka kecil, kode Anda harus kecil dalam hal byte-count.


22
Begitu banyak huruf baru
downrep_nation

1
Sinestesia saya akan menjadi liar, @downrep_nation
DoctorHeckle

5
"Karena segitiga memiliki 3 sisi dan 3 adalah angka kecil, jadi kode Anda harus kecil dalam hal jumlah byte." tampaknya sah
Rohan Jhunjhunwala

1
Kuadrat angka yang hanya terdiri dari 1 tampaknya terkait: 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

1
"Karena segitiga memiliki 3 sisi dan ..." Illuminati Dikonfirmasi.
HyperNeutrino

Jawaban:


38

Vim, 37 byte

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

masukkan deskripsi gambar di sini

Legenda

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

2
Itu GIF yang sangat keren.
AdmBorkBork

13
Saya tidak akan pernah berhenti kagum dengan jawaban Vim.
DanTheMan

Mau jelaskan bagaimana ini bekerja untuk mereka yang tidak lancar di Vim?
R. Kap

6
@ R.Kap, saya sarankan Anda mengunduh Vim dan mencoba solusinya sendiri - Anda dapat menyaksikan solusinya buka selangkah demi selangkah! Pada dasarnya, saya mencuri alfabet dari file bantuan ( :h<_↵↵↵YZZP), lalu merekam makro ( qq…q) yang berulang kali memotong huruf dari baris teratas, membuat dua salinan untuk menumbuhkan segitiga secara vertikal, kemudian menambahkan surat yang dipotong ke semua baris untuk menumbuhkannya secara horizontal. Saya ulangi makro ini 24 kali lebih banyak untuk menggambar segitiga penuh.
Lynn

31

Logo, 232 207 196 190 byte

Apakah ada yang mengatakan segitiga?

Keluarkan kompas dan busur derajat Anda, dan mari kita lakukan ini dengan cara grafis. Geometri menggunakan segitiga sama sisi untuk menyelaraskan hasil. Saya sebelumnya memiliki segitiga sama kaki, tetapi melibatkan terlalu banyak tempat desimal. Perubahan ini juga memadatkan output, mengurangi jumlah persiapan layar dan perubahan font yang harus saya lakukan.

Saya menggunakan penerjemah online Calormen untuk menyempurnakan yang ini. Jika Anda tidak memiliki cukup layar real estat, itu akan membungkusnya, tetapi Anda juga dapat bermain-main dengan beberapa nomor untuk mengatasinya. Saya menggunakan mode layar penuh "F11" di browser saya.

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]

The rprosedur menarik garis dari nkarakter. Karakter ditentukan secara otomatis tergantung pada berapa banyak segmen yang diperintahkan untuk digunakan. The bparameter mengatakan itu berapa banyak untuk sementara memutar sehingga surat-surat yang menunjuk ke arah yang benar. The lparameter menentukan jarak linear antara huruf.

Langkah tprosedur ke posisi berikutnya dan memanggil rfungsi empat kali untuk membuat segitiga, berputar jika perlu. Saya menyebutnya dua kali untuk sisi vertikal karena itu membutuhkan lebih sedikit byte daripada memanggilnya sekali dengan penanganan khusus. Akhir prosedur menempatkan kura-kura untuk memulai segitiga berikutnya, satu langkah di atas.

Zadalah case khusus, jadi kami langsung mencetaknya dan memutar seolah-olah kami baru saja selesai membuat segitiga. Akhirnya, tdisebut 25 kali.

Sedang berlangsung gambar beranotasiHasil jadi


3
Keluar dari kotak. Bagus sekali.
CousinCocaine

19

Haskell, 58 byte

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

Menentukan fungsi tyang mengembalikan output sebagai string.

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

Jelly , 16 13 byte

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

Terima kasih kepada @LeakyNun untuk bermain golf 3 byte!

Cobalah online!

Bagaimana itu bekerja

Ṗ;Ṛ        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 Terima kasih.
Dennis

4
Saya ingin tahu bagaimana ini bekerja ...
Socratic Phoenix

mungkin jika menggunakan tautan duplikator Anda dapat menyimpan satu byte
Leaky Nun

3
@MathieuRodic Jelly menggunakan halaman kode khusus yang mengkodekan semua 256 karakter yang dipahami sebagai masing-masing byte tunggal. The byte link dalam poin sundulan untuk itu.
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

Fungsi Python 2 yang mencetak dan tidak mengambil argumen. Ide kuncinya adalah untuk menghasilkan pola segitiga ada-dan-kembali dengan rekursi. Pertama, pertimbangkan fungsi yang lebih sederhana ini yang mencetak huruf 'A' hingga 'Z' dan kembali ke 'A':

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

Fungsi pertama mencetak "A" (char-code 65), kemudian berulang untuk mencetak "B" (66) dan seterusnya ke "Z" (90). Dari sana, ia berhenti berulang. Dalam perjalanan muncul kembali ke tumpukan rekursif, ia mencetak karakter apa pun tyang dicetak pada lapisan yang sama, dari "Y" kembali ke "A".

Kode utama melakukan hal yang sama, kecuali ia terakumulasi ke sdalam string huruf sejauh ini, dan mencetak string naik-turun s+s[-2::-1].

Berkat xsot untuk 2 byte.

Dalam Python 3, hal yang sama adalah byte lebih pendek (73 byte) dengan meletakkan semuanya pada satu baris.

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

Anda dapat menyimpan 2 byte jika Anda mengimbangi variabel, yaitu f(x=66,s='A'). Ini memungkinkan Anda untuk memperbarui sdalam panggilan fungsi alih-alih badan fungsi.
xsot

Saya pikir versi Python 3 Anda, seperti relatif Python 2, membutuhkan nilai 90 bukan 89 untuk memiliki baris terpanjang yang berjalan hingga Z dan kembali.
Tebbe

@Tebbe Terima kasih, perbaiki mereka.
xnor

8

brainfuck, 1733 121 119 byte

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

Versi yang sedikit lebih mudah dibaca:

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

Penjelasan mungkin akan datang.


Coba gunakan loop daripada membangun setiap karakter secara manual.
Leaky Nun

@ LeakyNun Saya tidak tahu bagaimana caranya. Ada saran?
DanTheMan

4
Bagus, jadi kamu hanya tidur selama 4 jam.
Leaky Nun

1
Selamat telah mendapatkan program yang lebih kecil dari output!
GuitarPicker

1
Bagaimana satu golf dari 1612 byte?
FantaC

8

05AB1E , 20 13 12 6 byte

Disimpan 2 byte berkat Adnan.
Disimpan 6 byte berkat Magic Octopus Guci dan beberapa fungsi bahasa baru.

Aη€ûû»

Cobalah online!

Penjelasan

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

Sangat bagus! Anda dapat mengubah Œ26£ke .p, yang merupakan perintah awalan. Juga, Anda dapat mengubah D,ke =, yang mencetak tanpa muncul.
Adnan

Wow, trik cerdik dengan gF,!
Adnan

@ Adnan: Terima kasih! Saya tahu ada perintah awalan di sana di suatu tempat :) Saya jarang memeriksa yang diperpanjang sekalipun.
Emigna

2
Perintah dwifikat Âtersebut sangat bagus dan fitur yang sangat rapi.
mil

1
@carusocomputing: sayangnya ûlebih baru daripada tantangan dan akan membuat jawaban ini tidak bersaing.
Emigna

6

J, 26 23 22 byte

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

Penjelasan

,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}.|.coba ini
Leaky Nun

@ LeakyNun Terima kasih, saya tidak tahu mengapa saya pikir mereka berbeda.
mil




5

C, 272 247 234 230 144 137 byte:

( Menyimpan banyak byte ( 272 -> 230) dalam metode saya sebelumnya berkat tips & trik golf yang hebat dari sigalor ! )

( Disimpan hampir 100 byte ( 230 -> 144) dengan beralih ke metode yang lebih baik. )

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

Jawaban pertama saya C. Saya baru mulai belajar mandiri baru-baru ini, jadi mari kita lihat bagaimana kelanjutannya.

C beraksi! (Ideone)


1
Ahhh, saya hanya ingin menambahkan jawaban C juga ... Apa pun, saya hanya akan membantu Anda;) Pertama, ini kode golf, Anda tidak perlu menulis kode yang sempurna. Peringatan kompiler benar-benar baik-baik saja. Itu sebabnya Anda dapat menghapus main()jenis kembali dan bahkan #include <stdio.h>. GCC (dan juga situs-situs seperti Ideone) tidak masalah dengan itu. Selanjutnya, Anda bisa 'mengalihdayakan' definisi variabel ke daftar parameter suatu fungsi. Biarkan for(int i=65;...menjadi for(i=65...dan berubah main()menjadi main(i). Lakukan hal yang sama untuk setiap variabel int lainnya juga (GCC default jenis yang hilang int).
sigalor

@sigalor Terima kasih atas tipsnya! :) Hanya satu pertanyaan: mengapa saya harus perubahan main()ke main(i)?
R. Kap

@ Sigalor Sebenarnya, sekarang saya mendapatkan banyak kesalahan kompilasi.
R. Kap

Ketika Anda tidak mendeklarasikan ivariabel Anda dalam inisialisasi loop, Anda perlu mendeklarasikannya di tempat lain. Dan karena (setidaknya dalam C) parameter fungsi dapat digunakan seperti variabel normal, seharusnya tidak ada masalah. Btw, kompiler mana yang Anda gunakan?
sigalor

@sigalor Saat ini Cdi Ideone. Saya mendapatkan beberapa <variable> undeclaredkesalahan.
R. Kap

5

JavaScript (ES6), 81 byte

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

5

Mathematica 59 byte

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

Saya pikir itu menghapus //Columndari akhir dan mengawali kode Anda dengan Column@karya.
Yytsi

2
Anda tampaknya telah dihitung dan sebagai byte tunggal. Saya ragu bahwa ada halaman kode byte tunggal yang memilikinya dan juga didukung oleh Mathematica. Mereka akan oleh tiga byte di UTF-8, sehingga mereka tidak benar-benar menyimpan apa pun di dataran [[...]]. Saya juga tidak yakin seberapa sah Columnkarena hanya menampilkan seperti daftar baris dalam buku catatan Mathematica. Menjalankan kode ini dari file skrip tidak akan menampilkan apa pun. Namun, Print/@jumlah byte yang sama dan berfungsi dalam kedua kasus tersebut.
Martin Ender

Jika Anda ingin membuat link ke halaman dengan alamat yang panjang, Anda dapat melakukan hal berikut: [what you see](actual link). Ex. [Example Link](https://www.example.com), yang ditampilkan sebagai Contoh Tautan
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="")

Membantu LETTTERS[0]tidak mengembalikan karakter apa pun.

Sunting: hilang satu berkat @leakynun

Sunting: dua lagi berkat @plannapus


1
Anda dapat menggunakan baris baru literal alih-alih\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

Biola


1
Saya mencoba melakukannya tetapi berakhir dengan 250+ byte jadi tidak pernah diposting itu. Anda, memang, memiliki solusi yang lebih baik daripada milik saya. Sekali lagi :)
Anuj Tripathi

3

Javascript (menggunakan library eksternal-Enumerable), 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))))

Tautan ke perpustakaan: https://github.com/mvegh1/Enumerable

Penjelasan kode: Buat rentang int mulai dari 1, untuk hitungan 51. Untuk masing-masing, tulis baris sesuai dengan pred kompleks. Lakukan beberapa sihir JS dengan variabel global dan caching ... dan voila. Untuk setiap int di WriteLine, kami membuat rentang kiri int dan menyimpan ke global "g", dan String Joining (Write) dengan ""pembatas dan memetakan setiap int ke pemetaan String ke kode char int. Kemudian, kami menggabungkan sisi kanan dengan mengambil pembalikan urutan itu (dan melewatkan elemen pertama karena akan cocok dengan elemen terakhir dari urutan asli ...), menulis dengan logika yang sama. EDIT: Memperbarui internal Tulis di perpustakaan. Urutan kosong akan menulis string kosong, bukan nol sekarang. Ini juga mencukur 15 byte dari jawabannya

masukkan deskripsi gambar di sini


1
Apakah Anda tidak perlu memasukkan byte yang Anda perlu mengimpor perpustakaan?
MatthewRock

1
Idk, saya sudah mengirim lebih dari 20 jawaban menggunakan perpustakaan dan Anda akan menjadi yang pertama mengatakan itu kepada saya. Saya tidak berpikir ada orang yang benar-benar peduli karena jawaban saya tidak pernah menang
applejacks01

1
@ applejacks01 Cukup yakin jika Anda tidak mengimpornya, maka Anda harus mengatakan sesuatu seperti "JS + Enumerable" di bagian atas. Mirip dengan "Bash + Coreutils"
mbomb007

2
Sudah biasa menghitung impor. Python + SymPy jawaban masih ada import sympyatau from sympy import*di atas. Jawaban Bash + x berbeda karena Anda hanya perlu menginstal x , tidak mengaktifkannya entah bagaimana.
Dennis

1
@ PatrickRoberts. Selama perpustakaan ada sebelum tantangan dipasang, ya. Python menjawab make penggunaan sympy, numpy, scipy, dll sepanjang waktu.
Dennis

3

Powershell, 61 52 byte

Terima kasih kepada TimmyD karena telah menghemat 9 byte!

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

Loop melalui nilai ASCII untuk huruf kapital ke depan, lalu mundur. Untuk setiap angka, ini menciptakan larik angka X pertama, menghapus angka X-1, lalu menambahkan kebalikan dari angka X pertama, yang kemudian dilemparkan ke karakter dan bergabung ke dalam string.


Hei, itu bagus, terima kasih! Saya telah 65..90..65melakukan keinginan sebelumnya tanpa hasil. Kira saya lupa saya bisa menambahkan rentang bersama.
Ben Owen

3

Cheddar , 102 96 79 69 67 byte

17 byte berkat Downgoat, dan inspirasi untuk 10 lebih.

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

Fakta bahwa string dapat menyatukan tetapi bukan array berarti bahwa saya harus mengubah dua rentang ke string, menyatukan, dan kemudian mengkonversi kembali ke array.

Juga, fakta yang vfusemenghasilkan newliens terkemuka berarti bahwa saya perlu membuat baris pertama secara manual dan kemudian menyinggung sisanya.

@" sebagai angka dua (fungsi dua argumen) dapat dikonversi ke string secara langsung, tetapi tidak berfungsi untuk rentang terbalik (jika argumen pertama lebih besar dari yang kedua).

Rentang itu setengah inklusif. Setelah perbaikan bug itu menjadi inklusif.

Pemakaian

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 (tidak bersaing)

Dalam versi terbaru dengan semua perbaikan, jawabannya adalah:

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

tapi itu dibuat setelah tantangan.


@"(1|>26)dapat1@"26
Downgoat

String.lettersbisa(65@"91)
Downgoat

String.letters.slice(0,i)mungkin bisa65@"(66+i)
Downgoat

Aha, saya melihat Anda sudah kisi bytecount Anda.
steenbergh

3

C, 93 byte

Panggilan f()tanpa argumen.

g(l,n){putchar(l);n?g(l+1,--n),putchar(l):0;}f(n){for(n=-26;++n<26;puts(""))g(65,25-abs(n));}

Cobalah di ideone .


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

Panggil di jendela Segera dengan? T

Hanya untuk menjelaskan apa yang terjadi: Saya menggunakan fungsi Abs dua kali, untuk mencerminkan lintasan alfabet dan panjang garis. Ini sangat cocok untuk tugas karena nilai ekstrem tunggal dalam kedua kasus, yang sesuai dengan nol persimpangan variabel pra-Abs.

Sebagai seperangkat perintah sederhana di jendela VBA Immediate, daripada program atau fungsi, berikut ini akan membutuhkan 72 byte:

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

(dengan terima kasih kepada @GuitarPicker)


1
Saya menggunakan beberapa logika serupa di salah satu pengiriman bendera Islandia saya. Tidak bisakah Anda melakukan golf lebih jauh dengan menjalankannya sepenuhnya di jendela langsung dan melewatkan deklarasi fungsi, atau apakah itu melanggar beberapa aturan yang saya tidak kenal?
GuitarPicker

@Gitaritaricker; tidak yakin apakah berjalan di jendela langsung dianggap sebagai program yang lengkap, tetapi jika demikian maka 8 byte kurang, secara efektif; alih-alih memulai dengan Function T:, akhiri dengan :?T(walaupun itu hanya akan bekerja sekali, karena setelah itu Anda harus mengatur ulang T ke "" - tetapi siapa yang membutuhkan lebih dari satu segitiga ini?)
Joffan

2
Anda bahkan tidak perlu T jika Anda ?menggunakannya ;.
GuitarPicker

Saya bisa mencukurnya menjadi 71 menggunakan metode itu. Petunjuk: Anda tidak perlu vbCrLf juga.
GuitarPicker

1
ya, saya mendapat hal yang sama; perhatikan bahwa pengembalian diperlukan.
Joffan

3

Python, 73 71 byte

Berkat @xnor untuk rekursi

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

Penjelasan

  • Parameter :
    • x adalah nilai ascii dari huruf berikutnya dalam alfabet
    • s adalah akumulator untuk alfabet
    • tadalah garis dalam segitiga (yaitu s+ s backwards)
  • Kembali : tjika alfabet selesai (yaitu kita berada di tengah)
  • Lain : t+f(...)+tdengan:
    • x bertambah
    • s ditambahkan dengan surat berikutnya
    • treset ke s+ s backwards+\n

Memperbarui

  • -2 [16-08-05] Hapus terkemuka \n(+1) dan dipersingkat bersyarat (-3) semua berkat @xnor

1
Apa metode yang cerdas, mendorong tke loop berikutnya. Ada baris baru ekstra terkemuka; x=66,s='A''menyingkirkannya. Kasing dasar dapat disingkat menjadi x/92*t or .
xnor

3

HTML + CSS, 884 karakter

(763 karakter HTML + 121 karakter CSS)

Hanya memperluas Leaky Nun 's komentar pada MonkeyZeus ' s jawaban . (Meskipun saya mungkin salah membaca komentar ...)

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

Kredit untuk Melegalkan atas bantuannya sepanjang.

4 byte berkat Fatalize, dan inspirasi untuk 4 byte lainnya.

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

Cobalah online!

Predikat 0 (Predikat utama)

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

Predikat 1 (Predikat Bantu)

Ini pada dasarnya membangun palindrome dari string yang diberikan.

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

Anda dapat mengganti ,Adalam Predikat 1 dengan h, menghemat satu byte.
Fatalkan

Anda juga dapat menyimpan dua byte dengan mengganti :1:2yt.dengan :2&.dan menambahkan !(cut pilihan poin) pada akhir predikat 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"))

Tidak sepenuhnya puas dengan solusi ini, terutama dua forloop, tetapi tidak bisa datang dengan sesuatu yang lebih baik!
LETTERSberisi huruf besar

Tidak Terkumpul:

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

ifelseadalah cara yang lebih pendek untuk melepaskan if... else...dan bekerja dengan cara ini:ifelse(condition,action if TRUE, action if FALSE)

Solusi 125 byte lainnya:

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

Tanpa menggunakan String (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;
    }
}

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

Dengan String (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;
}

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

Terima kasih atas manatwork dan Kevin Cruijssen


2
Selamat datang di PPCG. Silakan baca “Bagaimana saya harus menjawab kode golf? Ada petunjuk? ”Di halaman info tag -kode golf . Jawaban untuk tantangan semacam ini diharapkan dapat menyajikan upaya untuk mengurangi ukuran kode. Dalam hal ini Anda dapat menemukan bantuan dalam Tips untuk bermain golf di Jawa dan Tips untuk bermain golf di <semua bahasa> .
manatwork

1
Di sana Anda menggunakan 4 operator ternary dan semua ketentuan terlampir dalam tanda kurung. Anda dapat menghapusnya untuk menyimpan 8 karakter.
manatwork

1
d dan k tidak bisa pergi di bawah -1, kan? Kemudian Anda dapat mengganti d!=-1dengan d>-1, sama dengan k. (BTW, Anda lupa memperbaiki versi
golfnya

Pernyataan dipindahkan dari loop body ke bagian pernyataan tambahan untuk menghemat 3 byte ..
Syamesh K

1
Hai, saya tahu sudah cukup lama, tetapi Anda bisa bermain golf dua hal: i+=k==1?1:-1bisa i+=kdan System.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);bisa System.out.print((char)c+((c+=d)<65?"\n":"")));. Jadi totalnya menjadi ( 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

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

Diformat:

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

Cobalah online


2

Sesos , 27 byte

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

Cobalah online! Periksa Debug untuk melihat kode SBIN yang dihasilkan.

Perakitan Sesos

File biner di atas telah dihasilkan dengan merakit kode SASM berikut.

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

Tidak menang tentu saja, tapi ini dia, mendahului Martin Ender ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.