Alfabet Diagonal Untuk Input

26

Terinspirasi oleh pos ini . Bagi mereka yang menandai pertanyaan ini sebagai duplikat saya mendorong Anda untuk benar-benar membaca pertanyaan untuk melihat bahwa pertanyaan saya adalah modifikasi dari yang ditautkan. Yang tertaut tidak meminta input dan hanya mencetak alfabet secara diagonal.

Tantangan

Diberikan input antara 1-26 secara inklusif, cetak alfabet secara diagonal, tetapi mulailah mencetak secara vertikal pada indeks input yang diberikan.

Contohnya

Diberikan input:

16

Program Anda harus menampilkan:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

Memasukkan:

4

Keluaran:

a
 b
  c
   d
   e
   f
   g
   h
   i
   j
   k
   l
   m
   n
   o
   p
   q
   r
   s
   t
   v
   w
   x
   y
   z

Memasukkan:

1

Keluaran:

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z

Memasukkan:

26

Keluaran:

a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
                q
                 r
                  s
                   t
                    u
                     v
                      w
                       x
                        y
                         z

Mencetak gol

Ini adalah , jadi jawaban tersingkat di setiap bahasa menang.

Semoga berhasil!

SpookyGengar
sumber
6
Bolehkah kita memilih untuk menggunakan pengindeksan 0 atau 1?
notjagan
Apakah ruang memimpin yang konsisten dapat diterima?
Giuseppe
Apakah spasi tambahan dapat diterima?
Dom Hastings
Bisakah kita menggunakan huruf besar?
Adám
Bisakah kita mengembalikan daftar string?
Adám

Jawaban:

13

Arang , 9 byte

↘✂β⁰N↓✂βη

Cobalah online!

Bagaimana itu bekerja

↘✂β⁰N↓✂βη
 ✂β⁰N         the alphabet from position 0 to the input
↘               print diagonally, down and to the right
        ✂βη    the alphabet starting from the position of the input
       ↓        print downwards

Solusi ini tidak lagi berfungsi dalam versi Charcoal saat ini (kemungkinan besar karena perbaikan bug), tetapi masalah ini teratasi selama 10 byte dengan ↘✂β⁰N↓✂βIθ.

notjagan
sumber
2
Saya tidak yakin mengapa itu berhasil; itu mungkin bug yang diperkenalkan beberapa minggu yang lalu. (Biasanya Anda harus menggunakan Iθsebagai ganti η.)
Neil
@Neil Tampaknya rusak hari ini. Menggunakan Iθ menyelesaikannya.
JP de la Torre
Hemat 1 byte dengan menggunakan …βNbukan ✂β⁰N.
Neil
7

05AB1E , 11 byte

AvNI<‚Wysú,

Pertama kali mencoba 05AB1E, jadi saya terbuka untuk tips.

Cobalah online!

Jika input nol diindeks dari 0ke 25diizinkan, ini bisa 10 byte dengan menghilangkan <.

Justin Mariner
sumber
Niiice! Persis seperti yang saya dapat. Saya mencoba "mengangkat" tetapi tidak berfungsi seperti yang direncanakan. Saya pikir itu cukup optimal :).
Magic Gurita Guci
4

JavaScript (ES2017), 73 72 71 66 byte

Menyimpan beberapa byte berkat @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''
Produksi ETH
sumber
1
Ini menambahkan 10setelah zdi akhir karena memiliki ++xsebelumnya x.toString(). Perbaikan bug dan golf hingga 68 byte menggunakan padStart: TIO
Justin Mariner
@JustinMariner Terima kasih, saya pikir saya mungkin beralih ke ES8 untuk itu ...
ETHproduksi
Bisakah Anda menyimpan sesuatu dengan kari? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Shaggy
@Shaggy Mungkin, saya tidak tahu apakah jenis kari itu diizinkan.
ETHproduksi
Ah, gila, sepertinya proposal Anda untuk memungkinkan ini tidak lagi menjadi konsensus :(
Shaggy
4

Python 2, 61 58 57 byte

n=input()-1
for i in range(26):print(' '*i)[:n]+chr(i+97)

-3 byte terima kasih kepada Rod

-1 byte lebih banyak berkat Tn. Xcoder

pppery
sumber
@Pavel Itu tidak akan berfungsi sejak saat inputitu akan dipanggil setiap kali forloop berulang, meskipun hanya ada satu baris input.
notjagan
57 byte menggunakan subskrip.
Tn. Xcoder
56 byte
Mr. Xcoder
4

Ruby, 51 46 43 byte

->n{(0..25).map{|x|(' '*x)[0,n-1]<<(x+97)}}

Mengembalikan daftar string.

Sepertinya orang-orang Python melakukan sesuatu dengan subskrip mereka. -5 byte dengan mengambil inspirasi dari peningkatan solusi ppperry Mr. Xcoder.

Solusi sebelumnya dengan rjust(51 byte):

->n{i=0;(?a..?z).map{|c|c.rjust i+=n>c.ord-97?1:0}}
m-chrzan
sumber
3

Python 2 , 62 50 57 byte

x=input();n=m=1
exec"print'%*c'%(m,n+96);n+=1;m+=x>m;"*26

Cobalah online!

Mencuri banyak dari jawaban ini oleh Dennis.

Stephen
sumber
3

R, 99 89 byte

@MickeyT menghemat 10 byte

fungsi

function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")

demo

f <- function(x)for(i in 1:26)cat(paste(c(rep(" ",min(x,i)),letters[i]),collapse=""),sep="\n")
f(1)
f(10)
f(15)
f(26)
Kukang
sumber
1
Beberapa tabungan kecil. Daripada ifelsemencoba min. print.noquotedapat diganti dengan catdengan '\n'di tempel. The \nbisa menjadi carriage return lurus. Kurung kurawal untuk fungsi tubuh bisa dijatuhkan.
MickyT
Anda dapat menghemat lebih banyak dengan menggunakan writedaripada catdan paste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
user2390246
3

Retina , 72 68 byte

^
z
{2=`
$`
}T`l`_l`^.
\D
$.`$* $&¶
\d+
$* 
s`( *)( +)(?=.*¶\1 $)
$1

Cobalah online! Output termasuk spasi spasi tambahan. Hemat 1 byte dengan menghapus spasi sebelum $pengindeksan nol diizinkan. Sunting: Disimpan 4 byte dengan menggunakan alfabet generator @ MartinEnder. Penjelasan:

^
z
{2=`
$`
}T`l`_l`^.

Masukkan alfabet.

\D
$.`$* $&¶

Diagonalise itu.

\d+
$* 

Konversikan input menjadi unary sebagai spasi.

s`( *)( +)(?=.*¶\1 $)
$1

Potong garis yang terlalu panjang sehingga tidak ada garis yang lebih panjang dari garis kosong di bagian akhir.

Neil
sumber
2

Mathematica, 103 byte

(T=Table;a=Alphabet[];c=Column)[c/@{T[""<>{T[" ",i],a[[i]]},{i,#}],T[""<>{T[" ",#],a[[i]]},{i,#,26}]}]&
J42161217
sumber
2

Pyth , 21 17 15 byte

Dilakukan pada ponsel dengan baterai 3%.

VlG+*d?>QNNQ@GN

Penjelasan:

VlG        For each character in the alphabet (G)
+          Concatenate...
 *d        Space (d) times...
   ?>QNNQ  Ternary; if Q (input) is less than N, return N, else Q
 @GN       The Nth character of the alphabet (G)

Cobalah online!

Stan Strum
sumber
1
@ sebenarnya manusia saya baru saja makan pizza yang luar biasa di Las Vegas, New Mexico
Stan Strum
Menemukan beberapa pendekatan yang jauh lebih pendek, dan saya memutuskan untuk mengirim jawaban saya sendiri .
Tn. Xcoder
@ Mr.Xcoder Ya, pekerjaan bagus untuk itu.
Stan Strum
2

Gangguan Umum, 84 byte

(lambda(x)(dotimes(i 26)(format t"~v,,,@a~%"(if(< i x)(1+ i)x)(code-char(+ i 97)))))

Cobalah online!

Renzo
sumber
2

Python , 52 byte

Cukup terkejut tidak ada yang memperhatikan bahwa pendekatan yang jelas juga sesingkat yang lain.

lambda k:[(i*" ")[:k-1]+chr(i+97)for i in range(26)]

Cobalah online!

Python , 53 byte

lambda k:[min(k-1,i)*" "+chr(i+97)for i in range(26)]

Cobalah online!

Tuan Xcoder
sumber
2

Haskell, 58 54 byte

f n=do m<-[1..26];([2..min n m]>>" ")++['`'..]!!m:"\n"

Cobalah online!

Bagaimana itu bekerja

f n=                  -- input number is n
  do m<-[1..26]       -- for each m from [1..26], construct a string and concatenate
                      -- them into a single string. The string is:
   [2..min n m]>>" "  -- min(n,m)-1 spaces,
      ++              -- followed by
   ['`'..]!!m         -- the m-th char after `
      :               -- followed by
   "\n"               -- a newline 

Edit: @ Lynn disimpan 4 byte. Terima kasih!

nimi
sumber
@ Lynn; Terima kasih! Saya selalu lupa tentang notasi untuk daftar.
nimi
2

Gaia , 12 byte

…26⊃§×¦₵a+†ṣ

Cobalah online!

Penjelasan

…             Range 0..input-1
 26⊃          Repeat the last number enough times to make it have length 26
    §×¦       Turn each number into a string of that many spaces
       ₵a+†   Add the corresponding letter to each
           ṣ  Join with newlines
Kucing Bisnis
sumber
1

JavaScript (Node.js) , 72 byte

n=>[..."abcdefghijklmnopqrstuvwxyz"].map((e,i)=>" ".repeat(i<n?i:n-1)+e)

Mengembalikan daftar string.

Cobalah online!

Conor O'Brien
sumber
Bolehkah saya bertanya mengapa node.js? Sepertinya JS normal yang valid
Downgoat
@Downgoat Ini adalah pemformatan otomatis TIO
Conor O'Brien
btw Anda dapat menyimpan byte menggunakan.padStart
Downgoat
Tunggu nvm seperti yang saya pikirkan pada dasarnya membuatnya menjadi jawaban ETH
Downgoat
Beralih ke ES8 dan simpan byte dengan padEndsebagai gantinya repeat.
Shaggy
1

Mathematica, 67 byte

SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&

Mengembalikan SparseArraystring. Untuk memvisualisasikan, tambahkan Grid@di depan.

Cobalah di Wolfram Sandbox

Pemakaian

Grid@SparseArray[x=#;{#,#~Min~x}->Alphabet[][[#]]&~Array~26,{26,#}," "]&[5]
a
 b
  c
   d
    e
    f
    g

    ⋮

    z 
JungHwan Min
sumber
1

Python 2 , 52 byte

lambda n:['%*c'%(min(i+1,n),i+97)for i in range(26)]

Cobalah online!

Saya mengasumsikan daftar string baik-baik saja ...

Terpendek yang bisa saya dapatkan dengan rekursi:

f=lambda n,i=0:i<26and['%*c'%(min(i+1,n),i+97)]+f(n,i+1)or[]
benar-benar manusiawi
sumber
1

C (gcc) , 50 byte

i;f(n){for(;i<26;printf("%*c\n",i++<n?i:n,i+97));}

Cobalah online!

Justin Mariner
sumber
1

Proton , 40 byte

Dengan asumsi bahwa daftar String baik-baik saja.

k=>[(i*" ")[to~-k]+chr(i+97)for i:0..26]

Cobalah online!

Proton , 49 byte

Sebagai gantinya ASCII-art:

k=>'\n'.join((i*" ")[to~-k]+chr(i+97)for i:0..26)

Cobalah online!

Tuan Xcoder
sumber
1

C # (.NET Core) , 66 + 18 byte

n=>new int[26].Select((x,i)=>$"{(char)(i+97)}".PadLeft(i<n?i+1:n))

Hitungan byte juga termasuk

using System.Linq;

Cobalah online!

Ini mengembalikan koleksi string, satu untuk setiap baris. Jika tidak diizinkan, jawabannya akan membengkak sebesar 17 byte untuk string.Concat()dan \ndi dalam string

Penjelasan:

n =>
    new int[26]                      // Create a new collection of size 26
    .Select((x, i) =>                // Replace its members with:
        $"{(char)(i + 97)}"          // String of an alphabet character corresponding to the index
        .PadLeft(i < n ? i + 1 : n)  // Add spaces to the left
    )
Grzegorz Puławski
sumber
1

MATL, 14 byte

26:tiXl2Y2oZ?c

Cobalah MATL Online

Penjelasan

26      % number literal
:       % range; vector of equally spaced values [1...26]
t       % duplicate
i       % explicitly grab the input
Xl      % clamp the array to have a maximum value of the input
2Y2     % predefined literal: ['a'...'z']
o       % convert to a numeric array
Z?      % create sparse matrix using the first two inputs as the rows/columns 
        % and the letters 'a'...'z' as the values
c       % convert back to character and implicitly display
Suever
sumber
1

Pyth , 12 byte

j.e+<*kdtQbG

Coba di sini!

Jika daftar String diizinkan, ini dapat disingkat menjadi 11 byte :

.e+<*kdtQbG

Pyth , 12 byte

VG+<*dxGNtQN

Coba di sini!

Pyth , 14 byte

jm+<*d;tQ@Gd26

Coba di sini.

Jika daftar String diizinkan, ini dapat disingkat menjadi 13 byte :

m+<*d;tQ@Gd26

Bagaimana cara kerjanya?

Tidak seperti kebanyakan jawaban lain, ini memetakan / loop atas alfabet huruf kecil di semua 3 solusi.

Penjelasan # 1

j.e+<*kdtQbG - Full program.

 .e        G - Enumerated map over "abcdefghijklmnopqrstuvwxyz", with indexes k and values b.
     *kd     - Repeat a space a number of times equal to the letter's index.
    <   tQ   - Crop the spaces after the input.
   +      b  - Concatenate with the letter.
j            - (Optional): Join by newlines.

Penjelasan # 2

VG+<*dxGNtQN  - Full program.

VG            - For N in "abcdefghijklmnopqrstuvwxyz".
      xGN     - Index of the letter in the alphabet.
    *d        - Repeat the space a number of times equal to the index above.
   <     tQ   - But crop anything higher than the input.
  +        N  - Append the letter (at the end)

Penjelasan # 3

jm+<*d;tQ@Gd26 - Full program.

 m          26 - Map over [0...26) with a variable d.
    *d;        - Space repeated d times.
   <   tQ      - Crop anything whose length is higher than the input.
  +      @Gd   - Concatenate with the letter at that index in the alphabet.
j              - (Optional): Join by newlines.
Tuan Xcoder
sumber
1

Haskell, 60 byte

f n=unlines$scanl(\p c->take(n-1)(p>>" ")++[c])"a"['b'..'z']

Ini adalah fungsi yang mengembalikan output sebagai String.

Cobalah online.

Cristian Lupascu
sumber
1

Japt , 16 13 byte

Disimpan 3 byte berkat @Oliver

;C£RiXiYmUÉ î

Uji secara online!

Produksi ETH
sumber
@Lebih Dang, saya lelah ...
ETHproduksi
1

q / kdb +, 33 31 byte

Larutan:

-1{(&[x-1;til 26]#'" "),'.Q.a};

Contoh:

q)-1{(&[x-1;til 26]#'" "),'.Q.a}16;
a
 b
  c
   d
    e
     f
      g
       h
        i
         j
          k
           l
            m
             n
              o
               p
               q
               r
               s
               t
               u
               v
               w
               x
               y
               z

Penjelasan:

Buat daftar spasi (26) hingga panjang minimum input dan kisaran 0..25), gabung dengan setiap huruf alfabet, cetak ke stdout.

-1{(&[x-1;til 26]#'" "),'.Q.a}; / solution
-1                            ; / print result to stdout and swallow return
  {                          }  / lambda function
                         .Q.a   / "abcd..xyz"
                       ,'       / concatenate (,) each
   (                  )         / do all this together
    &[   ;      ]               / minimum of each 
      x-1                       / implicit input (e.g. 10) minus 1 (e.g. 9)
          til 26                / 0 1 2 ... 23 24 25
                   '#" "        / take " " each number of times (0 1 2 )

Catatan:

  • -2 byte dengan menggabungkan kembali kurung
streetster
sumber
1

Java 1.8 (tanpa Lambda), 98 Bytes

void m(int i){int c=0,o=97;String s="";for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);}

Logikanya mudah. Tidak memberikan validasi data input, sangat buruk!

  • Perbarui: Hanya berfungsi! Terima kasih kepada @Olivier Grégoire
Douglas Diadakan
sumber
1
Untuk menyimpan beberapa byte, gunakan for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Juga, Anda hanya dapat menulis fungsi, atau lambda alih-alih program penuh.
Olivier Grégoire
Jika saya hanya memasukkan tubuh fungsi, lalu bagaimana pembaca tahu apa yang a[0]dimaksud? Saya pikir cuplikan tidak adil jika tidak dikompilasi; tantangannya sama menariknya dengan bahasa yang kaya akan konstruk.
Douglas Diadakan
1
Halo! Saya memang mengatakan fungsi atau lambda, bukan potongan. ;-) Jadi Anda dapat menulis void f(int i){...}(tidak perlu statis) atau i->{...}sebagai ganti seluruh program Anda. Lihat semua tips Java . Lihat jawaban saya untuk tantangan yang sama ini , sebagai contoh. Selamat bersenang-senang di situs! :-)
Olivier Grégoire