Alpha-Numerical Bowtie


14

Xuất văn bản chính xác này:

1                i
12              hi
123            ghi
1234          fghi
12345        efghi
123456      defghi
1234567    cdefghi
12345678  bcdefghi
123456789abcdefghi
12345678  bcdefghi
1234567    cdefghi
123456      defghi
12345        efghi
1234          fghi
123            ghi
12              hi
1                i

Một dòng mới duy nhất được chấp nhận, nhưng không cho phép thay đổi định dạng khác.

Quy tắc và I / O

  • Không có đầu vào
  • Đầu ra có thể được đưa ra bởi bất kỳ phương pháp thuận tiện .
  • Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là vì vậy tất cả các quy tắc chơi gôn thông thường đều được áp dụng và mã ngắn nhất (tính bằng byte) sẽ thắng.

1
Chúng ta có thể sử dụng bảng chữ cái viết hoa thay thế?
Kritixi Lithos

3
@Cowsquack Đó sẽ là một sự thay đổi quy tắc. Nó nói đầu ra văn bản chính xác này .
Dennis

@Cowsquack Không - viết thường là bắt buộc.
admBorkBork

Câu trả lời:


13

C, 87 85 81 80 byte

j;main(i){for(;++i<19;)for(j=19;j--;)putchar(j?j<i^j<20-i?32:106-j-j/10*39:10);}

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

Giải trình

j; // same as int j;
main(i){ // same as int main(int i){, where i = argc (1 with no arguments)
  for(;++i<19;) // loop over rows, i = 2..18
    for(j=19;j--;) // loop over chars, j = 19..0
      putchar(j?j<i^j<20-i?32:106-j-j/10*39:10); // output characters:
      //      j?                           :10 // on last char (j=0), output \n
      //        j<i                            // check for top/left half
      //            j<20-i                     // check for bottom/left half
      //           ^                           // 1 if only one half matched
      //                  ?32:                 // if so, output space
      //                      106              // char code for j
      //                         -j            // get desired letter
      //                           -j/10*39    // subtract 39 for j>9 (numbers)
}

Tôi ngạc nhiên ^có mức độ ưu tiên thấp hơn so với <một câu trả lời hay!
Lynn

@Lynn Các toán tử bitwise trong C (và thậm chí Java / JS và như vậy) đều có độ ưu tiên thấp hơn so với so sánh. Điều này vừa tốt cho chơi golf mã vừa là nguồn lỗi thực sự tốt (nghĩ if (x & 2 == 0), luôn luôn đánh giá 0)
PurkkaKoodari


6

R , 64 byte

for(i in abs(8:-8))cat(intToUtf8(c(57-8:i,32*!!-i:i,97+i:8,13)))

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

  • -3 byte nhờ @Giuseppe
  • -5 byte nhờ @ J.Doe

67 byte vớiintToUtf8
J.Doe

catcho một byte?
JayCe

2
64 byte xây dựng dựa trên giải pháp của bạn, sử dụng @ shortcut Giuseppe để repcộng với tính năng của intToUtf8một 0phiên nhau thành một "".
J.Doe

@ J.Doe lừa thật hay!
JayCe

@ J.Doe: Tuyệt vời, cảm ơn!
digEmAll



3

QBasic, 72 byte

Dựa trên đệ trình của Taylor Scott .

FOR y=-8TO 8
z=ABS(y)
?"123456789abcdefghi";
LOCATE,10-z
?SPC(2*z)"
NEXT

Giải thích cơ bản

Trên mỗi dòng, chúng tôi in chuỗi đầy đủ 123456789abcdefghi. Sau đó, chúng tôi quay lại và ghi đè lên một phần của nó bằng khoảng trắng.

Giải thích đầy đủ

Với mã hơi vô căn cứ:

FOR y = -8 TO 8           ' Loop for 17 rows
 z = ABS(y)               ' z runs from 8 to 0 and back to 8
 ? "123456789abcdefghi";  ' Print the full string and stay on the same line (important!)
 LOCATE , 10-z            ' Go back to column 10-z on that line
 ? SPC(2*z); ""           ' Print 2*z spaces
                          ' (SPC keeps the cursor on the same line unlesss you print
                          ' something after it, so we'll use the empty string)
NEXT                      ' Go to the next y value

Đó là cách sử dụng Locatelệnh thực sự thông minh
Taylor Scott

2

T-SQL, 108 byte

DECLARE @ INT=8a:
PRINT STUFF('123456789abcdefghi',10-abs(@),2*abs(@),SPACE(2*abs(@)))
SET @-=1IF @>-9GOTO a

Trả về chỉ để đọc.

Đã thử rất nhiều biến thể khác, bao gồm cả bảng số, đây là bảng ngắn nhất.



2

Japt , 20 byte

9Æ9Ç>YÃê1 Ë?S:°EsH
ê

Thông dịch viên Japt

Đầu ra dưới dạng một mảng các ký tự. Các -Rlá cờ là không cần thiết để làm việc, nó chỉ làm cho đầu ra nhìn đẹp hơn.

Giải trình:

9Æ9Ç                    create a 9x9 2D array 
    >YÃ                 fill bottom left triangle with "false", upper right with "true"
       ê1               mirror horizontally
          Ë?S           replaces "true" with a space
             :°EsH      replaces "false" with the horizontal index + 1 converted to base 32
                  \n    Store the result in U (saves bytes by not closing braces)
                    ê   palindromize vertically

1

Stax , 18 byte

â4+╤jo♂▐▀3bkWíæß╝╖

Chạy và gỡ lỗi nó

Giải trình:

9R$|[|<Va17T|]r|>\|pm Full program
9R$                   Produce "123456789"
   |[|<               Left-aligned prefixes (["1        ", "12       ", ...])
       Va17T          Produce "abcdefghi"
            |]        Suffixes (["abcdefghi", "bcdefghi", ...])
              r|>     Reverse and left-align (["        i", "       hi", ...])
                 \    Zip both arrays (["1                i", "12              hi", ...])
                  |p  Palindromize array
                    m Map over array, printing each with a newline                        

1

APL (Dyalog Unicode) , 30 byte

(⊢⍪1↓⊖)(↑,\1↓⎕d),⌽↑,\⌽8199↑⎕a

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

chuyển đổi thành một ma trận (miếng đệm tự động có dấu cách)

  • ,\ tiền tố của

  • 1↓ yếu tố đầu tiên giảm từ

  • ⎕d chuỗi này '0123456789'

  • Điều này cho ma trận ký tự

1        
12       
123      
1234     
12345    
123456   
1234567  
12345678 
123456789

, nối với

  • sự đảo ngược

  • ma trận hóa

  • ,\ tiền tố của

  • sự đảo ngược

  • 819⌶ và hạ cấp

  • 9↑ 9 yếu tố đầu tiên của

  • ⎕a chuỗi này 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  • Điều này cho ma trận ký tự

        Tôi
       Chào
      ghi
     fghi
    efghi
   defghi
  cdefghi
 bcdefghi
abcdefghi

và về kết quả này

1 tôi
12 giờ
123 ghi
1234 fghi
12345 efghi
123456 defghi
1234567 cdefghi
12345678 bcdefghi
123456789abcdefghi

thực hiện chuyến tàu sau (⊢⍪1↓⊖)

lập luận đúng

nối theo chiều dọc với

1↓ hàng đầu tiên được thả xuống (điều này tránh sự lặp lại của hàng giữa)

lập luận đúng đảo ngược


Các giải pháp khác

33 byte

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⎕ucs 106-q←⍳9

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

33 byte

(⊢⍪1↓⊖)(↑,\⍕¨q),⌽↑,\⌽ucs 96+q←⍳9

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


1

Than , 22 17 byte

G↗↓←⁹β←G↖↓⁹⭆χι‖O↓

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:

G↗↓←⁹β

Vẽ một tam giác bên phải thấp hơn và điền vào nó bằng bảng chữ cái viết thường. (Việc điền vào dựa trên việc xếp mặt phẳng với bảng chữ cái và sau đó sao chép vùng đã vẽ.)

Di chuyển sang trái để vẽ tam giác số.

G↖↓⁹⭆χι

Vẽ một tam giác bên trái thấp hơn và điền nó bằng các chữ số. (Vì hình tam giác được vẽ ở bên trái của điểm gốc, các chữ số được lấy bên phải, nên chỉ các chữ số từ 1 đến 9 được sử dụng.)

‖O↓

Phản ánh để hoàn thành nửa dưới.


1

V , 25 , 21 byte

¬19¬ai8ñHÄ/á
r ge.YGp

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

2-4 byte được lưu nhờ vào nmjcman101!

Hexdump:

00000000: ac31 39ac 6169 38f1 48c4 2fe1 0a72 2067  .19.ai8.H./..r g
00000010: 652e 5947 70                             e.YGp

Tôi biết tất cả những gì tôi đang làm là rình rập câu trả lời của bạn ngày hôm nay nhưng tôi nghĩ rằng điều này hiệu quả cho 23: Hãy thử trực tuyến!
nmjcman101

@ nmjcman101 Vì bất kỳ lý do gì, tôi không thể hiểu phiên bản đó hoạt động như thế nào. Nhưng tôi đã tìm ra một cái thậm chí còn ngắn hơn, vì vậy cảm ơn!
DJMcMayhem

Nó đã đi đến phần cuối của một /\d*tìm kiếm
nmjcman101

1

J , 44 byte

(m]\u:49+i.9),.(m=.,}.@|.)]\&.(|."1)u:97+i.9

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

Tôi đã cố gắng tạo số mặt nạ 1 và 0 để sử dụng để lập chỉ mục, nhưng chi phí để loại bỏ hàng thừa là cao và tôi đã từ bỏ:

   (9-.~i.18){0<:-/~(,|.)i.9
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1


1

Japt, 24 byte

Trả về một mảng các dòng

9Æ´AçXÄ
c¡A°îYd#a
Vù y ê

Kiểm tra nó


Giải trình

9Æ            :Map each X in the range [0,9)
  ´A          :  Prefix decrement A (initially 10)
    ç         :  Repeat
     XÄ       :  X+1
\n            :Assign to variable U
 ¡            :Map each element at index Y in U
  A°          :  Postfix increment A
    î         :  Repeat
      d       :  The character at codepoint
     Y #a     :  Y+97
c             :Concatenate with U
\n            :Assign to variable V
Vù            :Left pad each element in V to the length of the longest element
   y          :Transpose
     ê        :Palindromise

Lựa chọn thay thế

9õÈîZqÃú Ë+EòdEn#i)¬ù9Ãê

Kiểm tra nó

9ÇòdZn#i)cZòÄ)¬Ãú ®éJ´Ãê

Kiểm tra nó


Bây giờ tôi đang tự hỏi nếu xây dựng theo chiều ngang này có thể không dẫn đến một giải pháp ngắn hơn! : \
Xù xì

1

QBasic , 87 byte

Một chức năng ẩn danh không có đầu vào và đầu ra cho bàn điều khiển.

For y=-8To 8:z=Abs(y):a$="123456789abcdefghi":?Mid$(a$,1,9-z)Spc(2*z)Mid$(a$,10+z):Next

Câu trả lời này về mặt kỹ thuật là một polyglot và sẽ hoạt động trong VBA



1

Befunge-93 , 314 308 byte

<p0+3*67p0+4*77p0+3*77p0-7*88p0-6*88"#v#v>"
"i        "11g1-21p56+1g1+56+1p28*1g1+28*1p  ^       >25*
"        1"92g1+82p56+2g1-56+2p28*2g1-28*2p91g00g`#v_^   >
"ihgfedcba "93p26*3g1-26*3p">^"88*7-0p88*7-4pv     >25*
"987654321 "14p26*4g1+26*4p26*4g12g`#v_            ^
                             >:#,_@#:<

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

Đánh gôn 6 byte bằng cách đặt a >với phướng dẫn



1

PowerShell 5.1, 70 69 64 57 byte

Cảm ơn Mazzy vì -7 byte

1..9+8..1|%{-join(1..$_+'  '*(9-$_)+' ihgfedcba'[$_..1])}

Hóa ra việc dán nó lại với nhau bằng tay tiết kiệm một byte. Làm cho tất cả một tham gia lớn cũng tiết kiệm thêm 5. Cũng hoạt động bằng cách biến một phạm vi int thành char [] để lấy ai. Sử dụng một phạm vi trên các chữ cái thực tế là 5 byte tốt hơn.


1
thử cái này : 1..9+8..1|%{-join(1..$_+' '*(9-$_)+' ihgfedcba'[$_..1])}. Lưu ý ' '*(9-$_)chứa 2 biểu tượng không gian
mazzy

1
@mazzy ooof, thiếu cái lừa không gian kép đó. Tôi đã suy nghĩ về một loạt các báo cáo toán học nhưng giải pháp rõ ràng không bao giờ xảy ra với tôi.
Veskah

1

C (gcc) ,143 142 127 + 10 = 137 136 + 10 = 146 (cờ trình biên dịch) byte

-1 byte bằng cách thay thế logic OR bằng toán tử bitwise.

-5 byte nhờ Logern.

+9 byte để sửa đường trung tuyến, đó là đầu ra hai lần.

char*s="123456789abcdefghi";G{for(;j<18;++j)putchar(i>j|j>17-i?s[j]:32);puts("");}f(){int i=0,j=0;for(;i++<8;)G;g(i+1,j);for(;i-->1;)G;}

Cờ biên dịch:

-DG=g(i,j)

Macro này xác định các lần xuất hiện của g(i,j): khai báo hàm và gọi.

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

Cách tiếp cận khác với câu trả lời tuyệt vời của Pietu1998 , đơn giản hơn (và dễ đọc), nhưng điểm số cao hơn.

Điểm vào là chức năng f(); chức năng g()xử lý việc in từng dòng liên tiếp.

Có thể được thực hiện một chương trình đầy đủ bằng cách đổi tên fthành main, nhưng nó sẽ tăng điểm.

Phiên bản đẹp, macro Gmở rộng:

char *s = "123456789abcdefghi";
int g(int i, int j) {
    for(; j < 18; ++j)
        putchar((i > j | j > 17 - i) ? s[j] : 32);
    puts(""); // Break the line -- shorter than putchar(10) or printf("\n")
}
int f() {
    int i = 0, j = 0; // j is constant, declared here to not have to declare and init it inside g()
    for(; i++ < 8;) // Upper half of the tie
        g(i, j);
    g(i + 1, j); // Median line
    for(; i-- > 1;) // Lower half; --i > 0 would also work for the condition
        g(i, j);
}


137 nhưng +10 cho các cờ biên dịch mặc dù
joH1

137 là tổng số, 127 byte mã và 10 byte cờ trình biên dịch.
Logern

Rất tiếc, xấu của tôi. Cập nhật ngay!
joH1

@Logern Tôi lấy tự do để đổi tên macro thành G, để khớp với tên hàm.
joH1



0

VBA, 75 byte

Một chức năng cửa sổ ngay lập tức VBE ẩn danh không có đầu vào và đầu ra cho bàn điều khiển.

For y=-8To 8:z=Abs(y):a="123456789abcdefghi":Mid(a,10-z)=Space(2*z):?a:Next

0

Thạch , 22 21 byte

9R€z⁶Zµạ106Ọ$Ṡ¡€Uṭ)ŒḄ

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

Dựa vào hành vi (có khả năng) ngoài ý muốn mà khi (dấu hiệu) hành động trên một nhân vật, nó mang lại Python None. Bởi vì điều này, là một kiểm tra một byte cho dù đối số của nó có phải là số nguyên khác không vì Nonelà falsey trong Python. Nếu hành vi này được thay đổi thì cũng hoạt động thêm một byte.

Hàm trả về danh sách các dòng.



0

Python 2 , 97 94 byte

i=o="123456789abcdefghi";c=8
while c:i=i[:c]+' '*(9-c)*2+i[-c:];o=i+'\n'+o+'\n'+i;c-=1
print o

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

Chỉ được đăng dưới dạng thay thế cho việc sử dụng eval()và vì cuối cùng tôi đã nhận được dưới 100. Về cơ bản bắt đầu với hàng giữa sau đó hoạt động cả lên và xuống cùng một lúc.



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.