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.