Alfabet Semi-Diagonal

35

Diberi huruf alfabet Inggris, tugas Anda adalah membuat alfabet semi-diagonal sebagai input.

Bagaimana cara membangun alfabet Semi-Diagonal?

Deskripsi Singkat : Pertama, Anda mengambil posisi huruf dalam alfabet, P( Pdiindeks 1 di sini). Kemudian, Anda mencetak setiap huruf hingga input (inklusif) pada suatu garis, didahului oleh P-1dan ulangi huruf tersebut P, bersinggungan dengan spasi.

Contoh :

  • Mengingat F, program Anda harus menampilkan:

    SEBUAH 
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
    
  • Mengingat K, program Anda harus menampilkan:

    SEBUAH
     BB 
      CCC 
       DDDD 
        EEEEE 
         FFFFFF 
          GGGGGGG 
           HHHHHHHH 
            IIIIIIIII 
             JJJJJJJJJJJ 
              KKKKKKKKKKKK 
    
  • Mengingat A, program Anda harus menampilkan:

    A
    

Aturan

  • Anda dapat memilih huruf kecil atau huruf besar, tetapi itu harus konsisten.

  • Anda mungkin memiliki ruang asing sebagai berikut:

    • Satu ruang terdepan yang konsisten (di setiap baris).
    • Baris baru yang membuntuti atau memimpin.
    • Ruang tertinggal.
  • Input dan output dapat diambil dengan cara standar apa pun, dan celah default berlaku.

  • Anda diizinkan untuk mengeluarkan daftar baris saja, asalkan Anda juga menyediakan versi .

  • Ini adalah , jadi kode terpendek dalam byte menang!

Terinspirasi oleh tantangan ini .


sumber
Apakah output sebagai daftar string boleh?
Adám
2
Mengapa downvote? Apa yang bisa saya tingkatkan?
1
Ketika Anda mengatakan "P adalah 1-diindeks di sini", apakah di sini merujuk pada tantangan atau contohnya?
Dave
3
@pizzakingme Tidak, Anda mungkin tidak.
1
Saya tidak sengaja mendapat pola yang menarik saat bermain golf jawaban saya: tio.run/##K0nO@f@/…
sergiol

Jawaban:

10

Python 3 , 59 byte

lambda l:[' '*i+'%c '%(i+65)*-~i for i in range(ord(l)-64)]

Cobalah online!

Python 3 , 61 byte

lambda l:[' '*i+-~i*(chr(i+65)+' ')for i in range(ord(l)-64)]

Cobalah online! (tautan ke versi cantik-cetak)

Tuan Xcoder
sumber
8
Saya sama sekali tidak melihat alasan untuk downvote. Bisakah @downvoter menjelaskan?
Tn. Xcoder
1
Saya membayangkan itu hanya kesalahan klik, atau mungkin seseorang yang tidak menyukai kurangnya penjelasan (yang terakhir sangat tidak mungkin IMO)
Conor O'Brien
Saya tidak suka Python dan saya tidak bisa menerapkan dengan Python, jadi jawabannya tidak berguna bagi saya? Hanya bercanda, tetapi tooltips tombol mungkin tidak sesuai dengan aturan situs ini
Thomas Weller
Apakah hanya saya atau apakah dikatakan bahwa Tuan Xcoder memiliki 1 perwakilan ...?
Stan Strum
9

Python 2 , 63 61 59 byte

-2 byte terima kasih kepada Rod. -2 byte terima kasih kepada Felipe Nardi Batista.

i=1
exec"print' '*i+'%c '%(i+64)*i;i+=1;"*(ord(input())-64)

Cobalah online!

benar-benar manusiawi
sumber
8

C, 89 byte

i,j;f(l){for(i=64;i++<l&&printf("%*c ",i-64,i);puts(""))for(j=i-65;j--;)printf("%c ",i);}

Cobalah online!

Steadybox
sumber
7

PowerShell , 45 42 byte

65..$args[0]|%{" "*$i+++"$([char]$_) "*$i}

Cobalah online!

Mengambil input sebagai karakter literal, kemudian memutar melalui ibukota ke titik itu, setiap iterasi menambahkan jumlah ruang yang sesuai dan kemudian karakter hybrid.

Disimpan 3 byte berkat TessellatingHeckler.

AdmBorkBork
sumber
@TessellatingHeckler Memang. Saya sudah bermain golf "$args"begitu banyak, yang tidak akan berhasil di sini, saya lupa tentang [0]metodenya. Ha ha.
AdmBorkBork
5

JavaScript (ES6), 85 byte

Bekerja dalam huruf kecil untuk input dan output. Menghasilkan ruang terdepan dan ruang tambahan di setiap baris.

f=(c,k=10,C=k.toString(36),r=s=>`${s} `.repeat(k-9))=>r``+r(C)+(C==c?'':`
`+f(c,k+1))

Demo

Arnauld
sumber
`${s} `dapat diganti dengan (s+"")penghematan satu byte
Luke
@ Lukas aku butuh ruang ini. Itu bisa diganti dengan (s+" "), tapi itu sama saja.
Arnauld
5

APL (Dyalog) , 26 byte

Anjuran untuk karakter skalar. Mencetak daftar garis.

(∊⍴∘'',' ',¨⍨⊢⍴⊃∘⎕A)¨⍳⎕A⍳⎕

Cobalah online! (memiliki versi seni ASCII pada satu byte tambahan)

 meminta input

⎕A⍳ temukan ɩ ndex dalam A lphabet

 pertama yang banyak eg ntegers

(...  terapkan fungsi tersembunyi berikut untuk masing-masing:

⊃∘⎕A memilih surat surat argument'th dari A lphabet

⊢⍴ cyclically membentuk kembali ke panjang argumen

' ',¨⍨ menambahkan ruang untuk masing-masing

⍴∘'', tambahkan string dengan panjang argumen (diisi dengan spasi)

ϵ daftar (ratakan)


Versi seni ASCII hanya memiliki di sebelah kiri; mencampur daftar string ke dalam tabel karakter.

Adm
sumber
4

Perl 5 , 31 byte

30 byte kode +1 untuk -l.

print$"x$-,"$_ "x++$-for A..<>

Cobalah online!

Dom Hastings
sumber
Anda dapat mengurangi ini dengan menggunakan sayalih-alih -ltanda: Coba online!
Xcali
@Xcali saya terkutuk pada -E/ -M5.01, saya telah menggunakan saybanyak di masa lalu, dan mungkin akan menyalahgunakan fakta yang saymerupakan alternatif printdalam tantangan sumber terbatas atau serupa mungkin, tapi demi -3, saya akan terus apa adanya untuk saat ini. Lihat posting meta ini untuk argumen yang adil . Hargai inputnya!
Dom Hastings
3

Dyalog APL, 38 byte

{↑{(y/' '),(2×y←⎕A⍳⍵)⍴⍵,' '}¨⎕A↑⍨⎕A⍳⍵}

Cobalah online!

Bagaimana?

⎕A↑⍨ - ambil alfabet hingga

⎕A⍳⍵ - karakter input

¨ - untuk masing-masing char

    ⍵,' ' - ambil char dan spasi

    (...)⍴ - membentuk kembali ke

    2×y←⎕A⍳⍵ - Dua kali indeks char di alfabet

    (y/' ') - dan menambahkan ruang indeks-of-char

- lalu ratakan

Uriel
sumber
3

APL (Dyalog Classic) , 26 byte

{↑{(≠\⍵<⍳3×⍵)\⍵⊃⎕A}¨⍳⎕A⍳⍵}

Cobalah online!

Penjelasan

                      ⍳⎕A⍳⍵  generate indexes up to position of right arg 
{                          on each index apply function
   (≠\⍵<⍳3×⍵)                generate boolean mask for expansion (each line has a length 3 times its index ⍵, starting with  blanks and then alternating letter blank)
             \⍵⊃⎕A          expand character in position 
                             mix result into text matrix
Gil
sumber
Astaga ... 4 APL-er menyelesaikan masalah yang sama pada saat yang sama! :) Saya pikir dalam codegolf Anda diizinkan untuk menghapus bagian luar {}, ganti dengan , dan klaim itu adalah "program lengkap" daripada fungsi. Itu akan membuat solusi Anda yang terbaik (sejauh ini).
ngn
Pasti pertanda baik :) Terima kasih atas sarannya. Saya telah melihatnya selesai tetapi tidak yakin di mana harus menarik garis. Saya kira saya bisa menghemat 3 byte jika saya menghapus ikal dan campur.
Gil
3

V , 28, 26, 25 , 23 byte ( Bersaing )

¬A[/a
lDÓ./& ò
ò-Ûä$Û>

Cobalah online!

Perhatikan bahwa meskipun saya telah berencana untuk menambahkan fitur-fitur tertentu untuk waktu yang lama, tantangan ini yang meyakinkan saya untuk akhirnya melakukannya.

Output berisi satu ruang terdepan di setiap baris dan satu baris tambahan.

Hexdump:

00000000: ac41 5b2f 1261 0a6c 44d3 2e2f 2620 f20a  .A[/.a.lD../& ..
00000010: f22d dbe4 24db 3e                        .-..$.>

Penjelasan:

¬A[         " Insert 'ABCDEFGHIJKLMNOPQRSTUVWXYZ['
   /        " Search for...
    <C-r>a  "   The input
l           " Move one character to the right
 D          " And delete every character after the cursor
  Ó         " Search for...
   .        "   Any character
    /       " And replace it with...
     & ò    "   That character followed by a space and a newline
ò           " Recursively...
 -          "   Move to the beginning of the next line up
  Ûä$       "   Make *line number* copies of the current line
     Û>     "   And indent this line by *line number* spaces
DJMcMayhem
sumber
1
Ini bersaing. Anda dapat menghapus komentar judul.
Ini berguna bagi mereka yang tidak menyadari meta baru, seperti saya
Conor O'Brien
3

05AB1E , 10 byte

A¹¡н«ðâƶāú

Cobalah online!

Terima kasih kepada Adnan .

Tambahkan »untuk membuatnya dicetak dalam garis yang terpisah.

Erik the Outgolfer
sumber
Anda dapat menghilangkan <salah satu ruang terkemuka yang konsisten tidak masalah.
Emigna
@Emigna Terima kasih!
Erik the Outgolfer
A¹¡н«ðâƶāúharus bekerja selama 10 byte
Adnan
@ Adnan Saya pikir itu ¹¡akan membuatnya tidak berfungsi ... oh jadi itu sebabnya ada «di sana. : p
Erik the Outgolfer
3

R, 94 88 byte

-6 byte terima kasih kepada Giuseppe

function(x,l=LETTERS)for(i in 1:match(x,l))cat(rep(' ',i-1),rep(paste(l[i],' '),i),'\n')}

Tidak Disatukan:

f=function(x,l=letters){
  for(i in 1:which(l==x)){
    A=paste(l[i],' ')
    cat(rep(' ',i-1),rep(A,i),'\n')
  }
}
Andrew Haynes
sumber
88 byte : mengembalikan fungsi anonim baik-baik saja, Anda dapat menyingkirkan kawat gigi karena fmerupakan satu-liner, dan menggunakan matchalih-alih whichmenyimpan byte.
Giuseppe
71 bytes
Giuseppe
68 byte mengambil input dari stdin.
Giuseppe
3

Haskell, 52 44 byte

f k=[[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]

Mengembalikan daftar garis.

Cobalah online!

f k=                  -- main function is f, input parameter k
  [   |s<-['A'..k]]   -- for each s from ['A'..k]
     >>=              -- map (and collect the results in a single string) the function: 
         (['A'..s]>>) --  replace each element in ['A'..s] with
    [  ,  ]           --  over the list, containing
     " "              --   a single space to get the indent
        s:" "         --   s followed by space to get the letter sequence

Sunting: @ jferard: disimpan tiga byte. Terima kasih!

nimi
sumber
49 byte:f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
jferard
@ jferard: Terima kasih banyak. Membaca ulang tantangan saya perhatikan bahwa ruang terdepan per baris diperbolehkan, jadi kita tidak membutuhkannya tail$.
nimi
2

JavaScript (ES8), 92 byte

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

Menggunakan huruf kecil. Garis memiliki satu ruang utama dan satu tambahan. Mengembalikan array garis.

Cuplikan Tes

let f=

c=>(g=n=>n>9?[...g(n-1),`${n.toString(36)} `.repeat(n-=9).padStart(n*3)]:[])(parseInt(c,36))

;O.innerText=f("k").join`\n`
<pre id=O></pre>

Justin Mariner
sumber
2

Sekam , 13 byte

z+ḣ∞øzRNC1…'A

Mengambil karakter dalam tanda kutip tunggal sebagai argumen baris perintah, mencetak hasilnya ke STDOUT. Cobalah online!

Penjelasan

Saya mengeksploitasi cara Husk mencetak daftar daftar string: gabungkan daftar dalam dengan spasi dan daftar luar dengan baris baru.

z+ḣ∞øzRNC1…'A  Implicit input, say 'C'
          …'A  Range from A: "ABC"
        C1     Cut into strings of length 1: ["A","B","C"]
     z N       Zip with positive integers
      R        using repetition: x = [["A"],["B","B"],["C","C","C"]]
   ∞ø          The empty string repeated infinitely: ["","","",...
  ḣ            Prefixes: [[],[""],["",""],["","",""],...
z+             Zip with x using concatenation: [["A"],["","B","B"],["","","C","C","C"]]
               Implicitly join each inner list with spaces, join the resulting strings with newlines and print.
Zgarb
sumber
2

05AB1E , 15 14 13 byte

Disimpan 1 byte berkat Adnan

A¹¡н«ƶ€S»¶¡āú»

Cobalah online! atau versi seni Ascii

Penjelasan

A                # push lowercase alphabet
 ¹¡              # split at input
   н             # get the first part
    «            # append the input
     ƶ           # repeat each a number of times corresponding to its 1-based index
      €S         # split each to a list of chars
        »        # join on spaces and newlines
         ¶¡      # split on newlines
           āú    # prepend spaces to each corresponding to its 1-based index
             »   # join on newlines
Emigna
sumber
Sepertinya kami menanganinya sedikit berbeda : D
Erik the Outgolfer
@EriktheOutgolfer: Kami melakukannya dengan sangat mirip, tetapi ide Anda yang sangat bagus untuk menambahkan ruang sebelum mengangkat, menghilangkan kebutuhan untuk bergabung membuat Anda lebih pendek. Saya belum pernah membaca spasi awal / jejak atau keluaran karena daftar itu boleh, jadi semoga akan mengajari saya membaca seluruh tantangan sebelum menerapkan: P
Emigna
tl; dr: vectorization: p
Erik the Outgolfer
A¹¡н«bukannya ADIk>£harus bekerja
Adnan
@ Adnan: Terima kasih! Saya memang memiliki A¹¡нtetapi tidak mempertimbangkan «untuk mendapatkan surat terakhir jadi itu tidak cukup baik: P
Emigna
2

QBasic, 79 74 72 byte

Terima kasih kepada Taylor Scott untuk penghematan byte (dua kali!)

FOR i=1TO ASC(INPUT$(1))-64
?TAB(i)
FOR j=1TO i
?CHR$(64+i)" ";
NEXT j,i

Gunakan huruf besar. Input dengan penekanan tombol dan tidak bergema ke layar.

Penjelasan

Kami mengulang idari 1posisi huruf pembatas di alfabet (berbasis 1). Untuk masing-masing i, kami pindah ke kolom ilayar menggunakan TAB; kemudian, ikali, kita mencetak ihuruf alfabet diikuti oleh spasi.

DLosc
sumber
Ternyata Anda dapat menggunakan INPUT$(1)perintah sebagai pengganti langsung untuk variabel z$untuk delta -2 byte
Taylor Scott
@TaylorScott Ide bagus, terima kasih!
DLosc
2

Japt -R , 24 23 17 15 byte

Keluaran array, termasuk baris baru terkemuka dan ruang terkemuka & tertinggal di setiap baris.

IòUc ÏçSiXd¹iYç

Menguji

  • 1 byte disimpan dengan bantuan dari Oliver dan 6 terima kasih lagi untuknya menunjukkan cara yang lebih baik untuk menghasilkan array awal.
Shaggy
sumber
1

Arang , 18 byte

F⁺⌕αθ¹«P×⁺§αι ⁺ι¹↘

Cobalah online!

Erik the Outgolfer
sumber
Nah, Anda tidak bisa membiarkan 05AB1E mengalahkan Charcoal ...: P
totallyhuman
@totallyhuman balas dendam: p
Erik the Outgolfer
Sedih spasi memimpin yang sewenang-wenang tidak diizinkan jika tidak E…·?θ⁺× κ⪫× κιakan melakukan pekerjaan dalam 14 byte
Neil
@Neil Satu spasi putih dibolehkan, tapi saya tidak yakin bagaimana ?masuk ke sana. Seharusnya itu yang Akupikirkan. Oh, tunggu, ohhhhh aku mengerti maksudmu.
Erik the Outgolfer
1

Braingolf , 65 byte

a#a-# 7-,-~vc<!?>[$_]:$_|&,(.#a-!?.>[# M]1+>[.M# M]:$_!@|v#
&@R);

Cobalah online!

Huruf kecil.

Berisi 1 trailing space di setiap baris, dan trailing newline di akhir output.

Skidsdev
sumber
1

C # (.NET Core) , 103 byte

n=>{var i='`';var l="";for(;i<n;l+='\n'){l+="".PadLeft(i++-96);for(int s=96;s++<i;)l+=i+" ";}return l;}

Cobalah online!

jkelm
sumber
1

JavaScript, 102 94 byte

2 byte disimpan berkat Neil

f=
a=>[...Array(parseInt(a,36)-9)].map((a,b)=>''.padEnd(b).padEnd(b*3+1,(b+10).toString(36)+' '))

console.log(f('k').join`\n`)


sumber
1

Retina , 51 byte

^.
$&$&
}T`L`_L`^.
.
$.`$* $&$.`$* ¶
+`(\w) \B
$&$1

Cobalah online! Penjelasan:

^.
$&$&

Gandakan huruf (pertama).

}T`L`_L`^.

Putar kembali 1 dalam alfabet, atau hapus jika itu duplikat A. Terus menduplikasi dan memutar sampai kita menduplikasi A, pada saat itu penghapusan membatalkan duplikasi dan loop selesai.

.
$.`$* $&$.`$* ¶

Ganti setiap huruf dengan garis dengan huruf yang empuk di kedua sisi.

+`(\w) \B
$&$1

Masukkan duplikat huruf di antara semua pasangan ruang padding di sebelah kanan huruf yang ada.

Neil
sumber
1

Arang , 15 byte

F…·AS«P⪫E…@ιι ↘

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 …·AS           Inclusive character range from A to the input
F    «          Loop over each character
         …@ι    Exclusive range from @ to the current character
        E   ι   Replace each element with the current character
       ⪫        Join with spaces
      P         Print without moving the cursor.
              ↘ Move the cursor down and right.

Jika bantalan tambahan legal, ini akan bekerja selama 14 byte:

E…·?θ⁺× κ⪫× κι

Cobalah online! Tautan adalah untuk mengucapkan versi kode.

Neil
sumber
1

Mathematica, 70 byte

(T=Table)[""<>{" "~T~i,T[Alphabet[][[i]]<>" ",i]},{i,LetterNumber@#}]&

huruf kecil

menampilkan daftar

thanx @ngenisis untuk koreksi

Untuk tempat versi Column@ di awal

J42161217
sumber
1

Excel VBA, 72 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input dari sel A1dan output ke jendela langsung VBE

For i=1To Asc([A1])-64:[B1]=i:?Space(i-1)[REPT(CHAR(B1+64)&" ",B1)]:Next
Taylor Scott
sumber
1

Pyth , 17 byte

.e+*kd*+bdhk<GhxG

Coba di sini (versi cetak cantik).


Bagaimana cara kerjanya?

  • hxG - Mengambil indeks input dalam alfabet huruf kecil.

  • <G - Memangkas setiap karakter setelah input dari alfabet.

  • .e- Peta yang dihitung. Peta di atas alfabet yang dipangkas dengan indeks sebagai kdan huruf sebagai b.

  • *kd- Tambahkan kspasi.

  • +bd- b+ a spasi (huruf + spasi saat ini).

  • *...hk- Ulangi k+1kali.

  • +(...)(...) - Gabungan.

Tuan Xcoder
sumber
1
Salah satu hal favorit saya tentang Pyth adalah menulis jawaban dan menemukan bahwa seseorang menulis jawaban yang sama, karakter untuk karakter. Itu hits bahwa Python "ada jawaban terbaik" tempat dengan sempurna!
Dave
@pizzakingme Ya, saya ingin tahu apakah saya bisa melakukan yang lebih baik
Tn. Xcoder
penambahan ruang terasa salah, saya pikir lebih baik mungkin
Dave
@pizzakingme saya bisa mendapatkan .e+*kdjd*bhk<GhxG17 byte juga
Tn. Xcoder
16 byte:.e+*kd*+bdhkhcGQ
Dave
1

C ++ (gcc) , 164 byte

#include<iostream>
#define f for(int i=0;i<o-'`';i++)
using namespace std;int main(){char c;cin>>c;for(char o='a';o<=c;o++){f cout<<' ';f cout<<o<<' ';cout<<'\n';}}

Usaha pertamaku setelah sekian lama mengintai!

Kode tidak dikumpulkan di bawah:

#include <iostream>

using namespace std;
#define f for (auto i = 0; i < output - '`'; i++)

int main()
{
  char input;

  cin >> input;

  for (char output = 'a'; output <= input; output++)
  {
    f cout << ' ';

    f cout << output << ' ';

    cout << endl;
  }
}

Cobalah online!

Drise
sumber
Saya tahu harus ada banyak hal untuk bermain golf, tapi sejauh ini, itu yang terkecil yang saya dapatkan.
Drise