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!


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


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


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)+`
`:''

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



@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


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


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)

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.


2

Mathematica, 103 byte

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

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!


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!



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!



@ 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

1

JavaScript (Node.js) , 72 byte

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

Mengembalikan daftar string.

Cobalah online!


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 

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[]





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
    )

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

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.



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

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

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