Bảng chữ cái chéo cho đầu vào


26

Lấy cảm hứng từ bài viết này . Đối với những người đánh dấu câu hỏi này là một bản sao, tôi khuyên bạn nên đọc câu hỏi để thấy rằng câu hỏi của tôi là một sửa đổi của câu hỏi được liên kết. Một liên kết không yêu cầu đầu vào và chỉ in bảng chữ cái theo đường chéo.

Các thách thức

Đưa ra một đầu vào giữa 1-26, in bảng chữ cái theo đường chéo, nhưng bắt đầu in theo chiều dọc ở chỉ mục của đầu vào đã cho.

Ví dụ

Đưa ra đầu vào:

16

Chương trình của bạn sẽ xuất ra:

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

Đầu vào:

4

Đầu ra:

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

Đầu vào:

1

Đầu ra:

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

Đầu vào:

26

Đầu ra:

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

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.

Chúc may mắn!


6
Chúng tôi có thể chọn sử dụng lập chỉ mục 0 hoặc 1 không?
notjagan

Là một không gian hàng đầu nhất quán có thể chấp nhận?
Giuseppe

Là không gian dấu được chấp nhận?
Dom Hastings

Chúng ta có thể sử dụng chữ hoa không?
Adám

Chúng tôi có thể trả về một danh sách các chuỗi?
Adám

Câu trả lời:


13

Than , 9 byte

↘✂β⁰N↓✂βη

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

↘✂β⁰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

Giải pháp này không còn hoạt động trong phiên bản Char than hiện tại (rất có thể là do sửa lỗi), nhưng vấn đề được giải quyết trong 10 byte với ↘✂β⁰N↓✂βIθ.


2
Tôi không chắc tại sao nó hoạt động; nó có thể là một lỗi đã được giới thiệu vài tuần trước. (Bạn thường phải sử dụng Iθthay vì η.)
Neil

@Neil Có vẻ như hôm nay bị hỏng. Sử dụng Iθ giải quyết nó.
JP de la Torre

Lưu 1 byte bằng cách sử dụng …βNthay vì ✂β⁰N.
Neil

7

05AB1E , 11 byte

AvNI<‚Wysú,

Lần đầu tiên thử 05AB1E, vì vậy tôi mở các mẹo.

Hãy thử trực tuyến!

Nếu một đầu vào không có chỉ mục từ 0đến 25được cho phép, thì đây có thể là 10 byte bằng cách bỏ qua <.


Không! Chính xác những gì tôi nhận được. Tôi đã thử "nâng" nhưng nó không hoạt động như kế hoạch. Tôi nghĩ đó là tối ưu :).
Bạch tuộc ma thuật Urn

4

JavaScript (ES2017), 73 72 71 66 byte

Đã lưu một số byte nhờ @JustinMariner

f=(n,x=26)=>x?f(n,x-1)+(x+9).toString(36).padStart(x<n?x:n)+`
`:''

1
Điều này thêm một 10sau khi zkết thúc do có ++xtrước x.toString(). Đã sửa lỗi và đánh gôn tới 68 byte bằng cách sử dụng padStart: TIO
Justin Mariner

@JustinMariner Cảm ơn, tôi nghĩ rằng tôi có thể chuyển sang ES8 vì điều đó ...
Sản phẩm ETH

Bạn có thể tiết kiệm bất cứ điều gì bằng cách cà ri? n=>g=(x=26)=>x?f(x-1)+(x+9).toString(36).padStart(x<n?x:n)+'\n':""
Xù xì

@Shaggy Có lẽ, tôi không biết loại cà ri đó có được phép hay không.
Sản phẩm ETH

À, hạt dẻ, có vẻ như đề xuất của bạn cho phép điều này không còn là sự đồng thuận :(
Shaggy

4

Python 2, 61 58 57 byte

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

-3 byte nhờ Rod

-1 byte hơn nhờ có ông Xcoder



@Pavel Điều đó sẽ không hoạt động kể từ đó inputsẽ được gọi mỗi khi forvòng lặp lặp, mặc dù chỉ có một dòng đầu vào.
notjagan


57 byte bằng cách sử dụng đăng ký.
Ông Xcoder


4

Ruby, 51 46 43 byte

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

Trả về một danh sách các chuỗi.

Có vẻ như những người Python đã làm điều gì đó với các mục con của họ. -5 byte bằng cách lấy cảm hứng từ cải tiến giải pháp ppperry của ông Xcoder.

Giải pháp trước đó với 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 đã lưu 10 byte

chức năng

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

bản giới thiệu

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
Một vài khoản tiết kiệm nhỏ. Thay vào đó là sự ifelsecố gắng min. print.noquotecó thể được thay thế catbằng một '\n'trong dán. Có \nthể là một trở về vận chuyển thẳng. Niềng răng xoăn cho cơ thể chức năng có thể được bỏ.
MickyT

Bạn có thể tiết kiệm nhiều hơn bằng cách sử dụng writethay vì catpaste:write(c(rep(" ",min(x,i)),letters[i]),"",26,,"")
user2390246

3

Võng mạc , 72 68 byte

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

Hãy thử trực tuyến! Đầu ra bao gồm khoảng trắng theo sau. Lưu 1 byte bằng cách xóa khoảng trắng trước khi $cho phép lập chỉ mục zero. Chỉnh sửa: Đã lưu 4 byte bằng cách sử dụng trình tạo bảng chữ cái của @ MartinEnder. Giải trình:

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

Chèn bảng chữ cái.

\D
$.`$* $&¶

Chéo nó.

\d+
$* 

Chuyển đổi đầu vào thành unary dưới dạng khoảng trắng.

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

Cắt các dòng quá dài để không có dòng nào dài hơn dòng trống ở cuối.


2

Toán học, 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

Thực hiện trên điện thoại với 3% pin.

VlG+*d?>QNNQ@GN

Giải trình:

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)

Hãy thử trực tuyến!


1
@totallyhuman Tôi vừa có một số bánh pizza tuyệt vời ở Las Vegas, New Mexico
Stan Strum

Tìm thấy một số cách tiếp cận ngắn hơn đáng kể, và tôi quyết định đăng câu trả lời của riêng tôi .
Ông Xcoder

@ Mr.Xcoder Vâng, làm tốt lắm.
Stan Strum




2

Haskell, 58 54 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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 

Chỉnh sửa: @Lynn lưu 4 byte. Cảm ơn!



@Lynn; Cảm ơn! Tôi luôn quên về ký hiệu cho danh sách.
nimi


2

Gaia , 12 byte

…26⊃§×¦₵a+†ṣ

Hãy thử trực tuyến!

Giải trình

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

Trả về một danh sách các chuỗi.

Hãy thử trực tuyến!


Tôi có thể hỏi tại sao node.js không? có vẻ như JS bình thường hợp lệ
Downgoat

@Downgoat Đó là định dạng tự động TIO
Conor O'Brien

btw bạn có thể lưu byte bằng cách sử dụng.padStart
Downgoat

Đợi nvm theo cách tôi nghĩ về cơ bản biến nó thành câu trả lời của ETH
Downgoat

Chuyển sang ES8 và lưu một byte padEndthay vì repeat.
Xù xì

1

Toán học, 67 byte

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

Trả về một SparseArraychuỗi. Để hình dung, chắp thêm Grid@trước mặt.

Dùng thử trên Wolfram Sandbox

Sử dụng

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

    ⋮

    z 






1

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

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

Số lượng byte cũng bao gồm

using System.Linq;

Hãy thử trực tuyến!

Điều này trả về một tập hợp các chuỗi, một cho mỗi dòng. Nếu không được phép, câu trả lời sẽ phình ra 17 byte cho string.Concat()\nbên trong chuỗi

Giải trình:

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

Dùng thử tại MATL Online

Giải trình

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

Bình thường , 12 byte

j.e+<*kdtQbG

Hãy thử nó ở đây!

Nếu danh sách các Chuỗi được cho phép, điều này có thể được rút ngắn xuống còn 11 byte :

.e+<*kdtQbG

Bình thường , 12 byte

VG+<*dxGNtQN

Hãy thử nó ở đây!

Bình thường , 14 byte

jm+<*d;tQ@Gd26

Hãy thử nó ở đây.

Nếu danh sách các Chuỗi được cho phép, điều này có thể được rút ngắn xuống còn 13 byte :

m+<*d;tQ@Gd26

Làm thế nào để làm việc này?

Không giống như hầu hết các câu trả lời khác, bản đồ / vòng lặp này trên bảng chữ cái chữ thường trong cả 3 giải pháp.

Giải thích số 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.

Giải thích số 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)

Giải thích số 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

Dung dịch:

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

Thí dụ:

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

Giải trình:

Tạo một danh sách các khoảng trắng (26) cho đến độ dài tối thiểu của đầu vào và phạm vi 0..25), nối với mỗi chữ cái của bảng chữ cái, in ra thiết bị xuất chuẩn.

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

Ghi chú:

  • -2 byte bằng cách định lại dấu ngoặc

1

Java 1.8 (không có Lambda), 98 byte

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

Logic rất đơn giản. Cung cấp không có xác nhận dữ liệu đầu vào, rất xấu!

  • Cập nhật: Chỉ chức năng! Cảm ơn bạn @Olivier Grégoire

1
Để tiết kiệm một số byte, hãy sử dụng for(;c++<26;s+=c<i?" ":"")System.out.println(s+(char)o++);Ngoài ra, bạn chỉ có thể viết một hàm hoặc lambda thay vì một chương trình đầy đủ.
Olivier Grégoire

Nếu tôi chỉ bao gồm phần thân của một hàm, thì làm thế nào người đọc biết những gì a[0]đề cập đến? Tôi nghĩ đoạn trích không công bằng nếu chúng không biên dịch; thách thức cũng thú vị với một ngôn ngữ giàu cấu trúc.
Douglas Held

1
Xin chào! Tôi đã nói một chức năng hoặc lambda, không phải là một đoạn. ;-) Vì vậy, bạn có thể viết void f(int i){...}(không cần tĩnh) hoặc i->{...}thay vì toàn bộ chương trình của bạn. Xem tất cả các mẹo Java . Xem câu trả lời của tôi cho cùng thách thức này , ví dụ. Hãy vui vẻ trên trang web! :-)
Olivier Grégoire
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.