Bảng chữ cái bán chéo


35

Đưa ra một chữ cái của bảng chữ cái tiếng Anh, nhiệm vụ của bạn là xây dựng một bảng chữ cái bán chéo cho đầu vào.

Làm thế nào để xây dựng một bảng chữ cái bán chéo?

Mô tả ngắn gọn : Đầu tiên, bạn lấy vị trí của chữ cái trong bảng chữ cái, P( Pđược lập chỉ mục 1 ở đây). Sau đó, bạn in từng chữ cái cho đến khi đầu vào (bao gồm) trên một dòng, trước P-1và lặp lại Pthời gian chữ cái đó , xen kẽ với khoảng trắng.

Ví dụ :

  • Cho F, chương trình của bạn sẽ xuất ra:

    Một 
     BB 
      CCC 
       DDDĐ 
        EEE 
         FFFFFF 
    
  • Cho K, chương trình của bạn sẽ xuất ra:

    Một
     BB 
      CCC 
       DDDĐ 
        EEE 
         FFFFFF 
          GGGGGGG 
           HHHHHHHH 
            IIIIIIIII 
             JJJJJJJJJJJ 
              KKKKKKKKKKK 
    
  • Cho A, chương trình của bạn sẽ xuất ra:

    A
    

Quy tắc

  • Bạn có thể chọn ký tự chữ thường hoặc chữ hoa, nhưng điều đó phải nhất quán.

  • Bạn có thể có không gian bên ngoài như sau:

    • Một không gian hàng đầu nhất quán (trên mỗi dòng).
    • Một dòng mới hoặc hàng đầu (s).
    • Không gian lưu trữ.
  • Đầu vào và đầu ra có thể được lấy bởi bất kỳ giá trị trung bình tiêu chuẩn nào, và các lỗ hổng mặc định được áp dụng.

  • Thay vào đó, bạn được phép xuất một danh sách các dòng, miễn là bạn cũng cung cấp phiên bản .

  • Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Lấy cảm hứng từ thử thách này .


Là đầu ra như danh sách các chuỗi ok?
Adám

2
Tại sao các downvote? Tôi có thể cải thiện điều gì?

1
Khi bạn nói "P được lập chỉ mục 1 ở đây", ở đây có đề cập đến thách thức hay ví dụ không?
Dave

3
@pizzakingme Không, bạn có thể không.

1
Tôi tình cờ có một mô hình thú vị trong khi đánh golf câu trả lời của mình: tio.run/##K0nO@f@/ mẹo
sergiol

Câu trả lời:


10

Python 3 , 59 byte

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

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

Python 3 , 61 byte

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

Hãy thử trực tuyến! (liên kết đến phiên bản in đẹp)


8
Tôi thấy hoàn toàn không có lý do cho một downvote. @Dalvoter có thể giải thích?
Ông Xcoder

1
Tôi tưởng tượng đó chỉ là một trò đùa sai lầm, hoặc có lẽ ai đó không thích thiếu lời giải thích (điều này khá khó xảy ra IMO)
Conor O'Brien

Tôi không thích Python và tôi không thể thực hiện với Python, vì vậy câu trả lời không hữu ích cho tôi? Đùa thôi, nhưng các chú giải công cụ nút có thể không phù hợp với các quy tắc của trang web này
Thomas Weller

Có phải chỉ tôi hay nó nói ông Xcoder có 1 đại diện ...?
Stan Strum



7

PowerShell , 45 42 byte

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

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

Đưa đầu vào dưới dạng char theo nghĩa đen, sau đó lặp lại thông qua các chữ viết hoa đến điểm đó, mỗi lần lặp lại chuẩn bị số lượng không gian thích hợp và sau đó là char \ space hybrid.

Đã lưu 3 byte nhờ TessellatingHeckler.


@TessellatingHeckler Thật vậy. Tôi đã chơi golf đến "$args"mức không thể làm việc ở đây, tôi quên mất [0]phương pháp này. Haha.
admBorkBork

5

JavaScript (ES6), 85 byte

Hoạt động trong trường hợp thấp hơn cho cả đầu vào và đầu ra. Xuất ra một không gian hàng đầu và một không gian kéo dài trên mỗi dòng.

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

Bản giới thiệu


`${s} `có thể được thay thế bằng cách (s+"")tiết kiệm một byte
Luke

@Luke Tôi cần không gian này. Nó có thể được thay thế bởi (s+" "), nhưng đó chỉ là dài.
Arnauld

5

APL (Dyalog) , 26 byte

Nhắc nhở cho nhân vật vô hướng. In danh sách các dòng.

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

Hãy thử trực tuyến! (có phiên bản nghệ thuật ASCII ở một byte bổ sung)

 nhắc nhở cho đầu vào

⎕A⍳ tìm ɩ ndex trong A lph.us

 đầu tiên mà nhiều ɩ ntegers

(...  áp dụng các chức năng ngầm sau đây để mỗi:

⊃∘⎕A chọn thư thư argument'th từ Một lphabet

⊢⍴ định kỳ định hình lại nó theo chiều dài đối số

' ',¨⍨ nối thêm một khoảng trống cho mỗi

⍴∘'', thêm vào một chuỗi độ dài đối số (được đệm bằng khoảng trắng)

ε nlist (flatten)


Phiên bản nghệ thuật ASCII chỉ có một bên trái; trộn danh sách các chuỗi vào bảng ký tự.


4

Perl 5 , 31 byte

Mã 30 byte + 1 cho -l.

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

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


Bạn có thể cắt giảm điều này bằng cách sử dụng saythay vì -lcờ: Hãy thử trực tuyến!
Xcali

@Xcali Tôi đã sử dụng -E/ -M5.01, tôi đã sử dụng sayđáng kể trong quá khứ và có thể sẽ lạm dụng thực tế saylà một thay thế cho printmột thách thức nguồn bị hạn chế hoặc có lẽ tương tự, nhưng vì lợi ích của -3, tôi sẽ giữ như hiện tại Xem bài đăng meta này cho một cuộc tranh luận công bằng . Đánh giá cao đầu vào mặc dù!
Dom Hastings

3

APL Dyalog, 38 byte

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

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

Làm sao?

⎕A↑⍨ - lấy bảng chữ cái cho đến khi

⎕A⍳⍵ - ký tự đầu vào

¨ - cho mỗi char

    ⍵,' ' - lấy char và một khoảng trống

    (...)⍴ - định hình lại

    2×y←⎕A⍳⍵ - hai lần chỉ số của char trong bảng chữ cái

    (y/' ') - và thêm vào các chỉ mục của không gian char

- sau đó làm phẳng


3

APL (Dyalog Classic) , 26 byte

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

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

Giải trình

                      ⍳⎕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

Trời ơi ... 4 APL-er giải quyết cùng một vấn đề cùng một lúc! :) Tôi nghĩ rằng trong codegolf bạn được phép loại bỏ bên ngoài {}, thay thế với , và khẳng định đó là một "hoàn thành chương trình" chứ không phải là một hàm. Điều đó sẽ làm cho giải pháp của bạn là tốt nhất (cho đến nay).
ngn

Phải là một dấu hiệu tốt :) Cảm ơn lời đề nghị. Tôi đã thấy nó được thực hiện nhưng không chắc chắn nơi để vẽ đường. Tôi đoán rằng tôi có thể tiết kiệm 3 byte nếu tôi loại bỏ curlies và trộn.
Gil

3

V , 28, 26, 25 , 23 byte ( Cạnh tranh )

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

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

Lưu ý rằng mặc dù tôi đã có kế hoạch thêm một số tính năng nhất định trong một thời gian dài, thử thách này là điều đã thuyết phục tôi cuối cùng thực hiện nó.

Đầu ra chứa một không gian hàng đầu trên mỗi dòng và một dòng mới.

Hexdump:

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

Giải trình:

¬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

1
Đây là cạnh tranh. Bạn có thể loại bỏ nhận xét tiêu đề.

Nó hữu ích cho những ai không biết về meta mới, chẳng hạn như bản thân tôi
Conor O'Brien

3

05AB1E , 10 byte

A¹¡н«ðâƶāú

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

-2 cảm ơn Ad Nam .

Nối »để làm cho nó in trong các dòng riêng biệt.


Bạn có thể bỏ qua <như một không gian hàng đầu nhất quán là được.
Emigna

@Emigna Cảm ơn!
Erik the Outgolfer

A¹¡н«ðâƶāúnên hoạt động trong 10 byte
Adnan

@Adnan Tôi nghĩ rằng nó ¹¡sẽ làm cho nó không hoạt động ... oh vậy đó là lý do tại sao có một «trong đó. : p
Erik the Outgolfer

3

R, 94 88 byte

-6 byte nhờ Giuseppe

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

Ung dung:

f=function(x,l=letters){
  for(i in 1:which(l==x)){
    A=paste(l[i],' ')
    cat(rep(' ',i-1),rep(A,i),'\n')
  }
}

88 byte : trả về một hàm ẩn danh là tốt, bạn có thể thoát khỏi dấu ngoặc nhọn vì flà một lớp lót và sử dụng matchthay vì whichlưu một byte.
Giuseppe


68 byte lấy đầu vào từ stdin.
Giuseppe

3

Haskell, 52 44 byte

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

Trả về một danh sách các dòng.

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

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

Chỉnh sửa: @jferard: đã lưu ba byte. Cảm ơn!


49 byte:f k=[tail$[" ",s:" "]>>=(['A'..s]>>)|s<-['A'..k]]
jferard

@jferard: Cảm ơn rất nhiều. Đọc lại thử thách tôi nhận thấy rằng một không gian hàng đầu trên mỗi dòng được cho phép, vì vậy chúng tôi không cần 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))

Sử dụng chữ thường. Dòng có một không gian hàng đầu và một dấu. Trả về một mảng các dòng.

Kiểm tra đoạn trích

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>


2

Husk , 13 byte

z+ḣ∞øzRNC1…'A

Lấy một ký tự trong dấu ngoặc đơn làm đối số dòng lệnh, in kết quả thành STDOUT. Hãy thử trực tuyến!

Giải trình

Tôi đang khai thác cách Husk in danh sách các danh sách các chuỗi: tham gia các danh sách bên trong với các khoảng trắng và danh sách bên ngoài với các dòng mới.

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.

2

05AB1E , 15 14 13 byte

Đã lưu 1 byte nhờ Adnan

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

Hãy thử trực tuyến! hoặc phiên bản nghệ thuật Ascii

Giải trình

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


@EriktheOutgolfer: Chúng tôi đã làm điều đó khá giống nhau, nhưng ý tưởng rất hay của bạn là nối thêm một khoảng trống trước khi nâng lên, loại bỏ nhu cầu tham gia khiến bạn ngắn hơn. Tôi đã không đọc rằng các không gian hàng đầu / dấu cũng như đầu ra là danh sách đều ổn, vì vậy hy vọng sẽ dạy tôi đọc toàn bộ thử thách trước khi thực hiện: P
Emigna

tl; dr: vector hóa: p
Erik the Outgolfer

A¹¡н«thay vì ADIk>£nên làm việc
Adnan

@Ad Nam: Cảm ơn! Tôi đã có A¹¡нnhưng không xem xét «để nhận được lá thư cuối cùng vì vậy nó không đủ tốt: P
Emigna


2

QBasic, 79 74 72 byte

Cảm ơn Taylor Scott vì tiết kiệm byte (hai lần!)

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

Sử dụng chữ hoa. Đầu vào là bằng phím nhấn và không được lặp lại màn hình.

Giải trình

Chúng tôi lặp itừ 1vị trí của chữ cái giới hạn trong bảng chữ cái (dựa trên 1). Đối với mỗi i, chúng tôi di chuyển đến cột icủa màn hình bằng cách sử dụng TAB; Sau đó, ilần, chúng tôi in chữ ithứ của bảng chữ cái theo sau là khoảng trắng.


Hóa ra, bạn có thể sử dụng INPUT$(1)lệnh như một sự thay thế trực tiếp cho biến z$cho đồng bằng -2 byte
Taylor Scott

@TaylorScott Ý kiến ​​hay, cảm ơn!
DLosc

2

Japt -R , 24 23 17 15 byte

Xuất ra một mảng, bao gồm một dòng mới hàng đầu và một không gian hàng đầu & dấu trên mỗi dòng.

IòUc ÏçSiXd¹iYç

Kiểm tra nó

  • 1 byte được lưu với sự giúp đỡ từ Oliver và thêm 6 byte nhờ anh ta chỉ ra một cách tốt hơn để tạo ra mảng ban đầu.

1

Than , 18 byte

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

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


Không, bạn không thể để 05AB1E đánh bại Than ...: P
hoàn toàn là


Đáng buồn thay, khoảng trắng hàng đầu tùy ý không được phép nếu không E…·?θ⁺× κ⪫× κιsẽ thực hiện công việc trong 14 byte.
Neil

@Neil Một khoảng trắng hàng đầu được cho phép, nhưng tôi không chắc làm thế nào ?có được trong đó. Nó nên được Athay thế tôi nghĩ. Oh chờ đã, ohhhhh tôi hiểu ý của bạn.
Erik the Outgolfer



1

JavaScript, 102 94 byte

Lưu 2 byte nhờ 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`)


1

Võng mạc , 51 byte

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

Hãy thử trực tuyến! Giải trình:

^.
$&$&

Nhân đôi chữ cái (đầu tiên).

}T`L`_L`^.

Xoay nó trở lại 1 trong bảng chữ cái hoặc xóa nó nếu nó là một bản sao A. Tiếp tục sao chép và xoay cho đến khi chúng tôi nhân đôi A, tại thời điểm đó, việc xóa sẽ hoàn tác sao chép và vòng lặp hoàn tất.

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

Thay thế mỗi chữ cái bằng một dòng bằng chữ đệm ở cả hai bên.

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

Chèn các chữ cái trùng lặp giữa tất cả các cặp khoảng trắng ở bên phải của các chữ cái hiện có.



1

Than , 15 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

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

Nếu phần đệm thêm là hợp pháp, điều này sẽ hoạt động trong 14 byte:

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã.


1

Toán học, 70 byte

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

chữ thường

đưa ra một danh sách

thanx @ngenisis để sửa chữa

Đối với phiên bản Column@ ở đầu


1

VBA Excel, 72 byte

Hàm cửa sổ tức thời VBE ẩn danh lấy đầu vào từ ô A1và xuất ra cửa sổ ngay lập tức VBE

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

1

Bình thường , 17 byte

.e+*kd*+bdhk<GhxG

Hãy thử nó ở đây (phiên bản in đẹp).


Cái này hoạt động ra sao?

  • hxG - Lấy chỉ số của đầu vào trong bảng chữ cái viết thường.

  • <G - Cắt mọi ký tự sau khi nhập từ bảng chữ cái.

  • .e- Bản đồ liệt kê. Bản đồ trên bảng chữ cái được cắt xén với các chỉ mục là kvà các chữ cái như b.

  • *kd- Nối các kkhoảng trắng.

  • +bd- b+ một khoảng trắng (chữ cái hiện tại + dấu cách).

  • *...hk- Lặp lại k+1nhiều lần.

  • +(...)(...) - Liên kết.


1
Một trong những điều yêu thích của tôi về Pyth là viết một câu trả lời và thấy rằng ai đó đã viết cùng một câu trả lời, nhân vật cho nhân vật. Nó đánh vào chỗ Python "có câu trả lời hay nhất" một cách hoàn hảo!
Dave

@pizzakingme Vâng, tôi tự hỏi liệu tôi có thể làm tốt hơn không
Ông Xcoder

việc bổ sung không gian cảm thấy sai, tôi nghĩ tốt hơn là có thể
Dave

@pizzakingme Tôi cũng có thể nhận được .e+*kdjd*bhk<GhxG17 byte
Ông 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';}}

Nỗ lực đầu tiên của tôi sau một thời gian dài rình rập!

Mã Ungolfed dưới đây:

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

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


Tôi biết rằng phải có một loạt các việc phải chơi golf, nhưng cho đến nay, đó là điều nhỏ nhất tôi đã nhận được.
Drise
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.