Đó chỉ là một lỗi


76

Lấy cảm hứng từ đầu ra có lỗi trong câu trả lời Clojure của @Carcigenicate cho Thử thách In kim cương này .

In văn bản chính xác này:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(Từ giữa ra ngoài theo cả hai hướng, mỗi chữ số được phân tách bằng một khoảng trắng so với dòng trước.)

Quy tắc thử thách:

  • Sẽ không có đầu vào ( hoặc đầu vào không sử dụng trống ).
  • Không gian lưu trữ là tùy chọn.
  • Một dòng mới duy nhất là tùy chọn.
  • Không gian hàng đầu hoặc dòng mới không được phép.
  • Trả về một chuỗi chuỗi không được phép. Bạn nên xuất văn bản hoặc có một hàm trả về một chuỗi có kết quả đúng.

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
  • Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.

Có xuất ra một chuỗi các chuỗi - 1 chuỗi trên mỗi dòng - được phép không?
Shaggy

@Shaggy Xin lỗi, trong trường hợp này, nó sẽ trả về một chuỗi đơn với dòng mới hoặc xuất kết quả. Tôi đã thêm điều này như là quy tắc cho thách thức.
Kevin Cruijssen

Đừng lo lắng, Kevin; chỉ đang nắm lấy cánh tay của tôi để xem liệu tôi có thể tiết kiệm cho mình một vài byte không.
Xù xì

3
@Shaggy Hehe. Còn lý do nào khác mà chúng ta phải đặt câu hỏi trong một thử thách chơi gôn, ngoài mục đích tiết kiệm vài byte đó? ;)
Kevin Cruijssen

8
Ha, thật tuyệt vời. Tôi đã tự hỏi tại sao câu trả lời đó đột nhiên nhận được nhiều sự chú ý. Cảm ơn!
Carcigenicate

Câu trả lời:


7

SOGL V0.12 , 12 byte

9{SUē↕∑}¹№╬«

Hãy thử nó ở đây! Giải trình:

9{     }      9 times do
  SU            push "1234567890"
    ē           push e, predefined with the input, which defaults to 0, and then increase it
     ↕          get that many spaces
      ∑         join the string of digits with those spaces
        ¹     collect the results in an array
         №    reverse the array vertically
          ή  palindromize vertically with 1 overlap

Oh tốt đẹp, điều này thậm chí còn ngắn hơn câu trả lời được chấp nhận. Hmm, chính sách về câu trả lời ngắn hơn một vài tháng sau khi câu trả lời đã được chấp nhận là gì? Bây giờ điều này có được kiểm tra không (tôi không công bằng với câu trả lời hiện đang được chấp nhận), hay tôi nên làm gì khác? Câu trả lời tuyệt vời bất kể! +1 từ tôi.
Kevin Cruijssen

@KevinCruijssen Thông thường, cách tốt nhất là cập nhật câu trả lời được chấp nhận, nhưng vì điều này sử dụng một vài tính năng mới, tôi muốn nói có lý do để đi theo bất kỳ cách nào - bạn chọn.
dzaima

62

Python 2 , 59 57 56 55 byte

i=8;exec"print(' '*abs(i)).join('1234567890');i-=1;"*17

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

@Leaky Nun đã giúp chơi golf rất nhiều, @Praind đã đề xuất một phương pháp để tiết kiệm 1 byte, mà trước đây tôi nghĩ đến, nhưng quên chỉnh sửa, @CotyJohnathanSaxman đề nghị thay đổi vòng lặp.


Giải trình

  • i=8- Gán giá trị 8cho một biến được gọi i.

  • exec"..."*17- Thực thi khối mã đó ( ...) 17 lần.

  • print(...) - Xuất kết quả.

  • ' '*abs(i)- Tạo một chuỗi với một không gian lặp đi lặp lại |i|.

  • .join('1234567890')- Xen kẽ chuỗi được tạo ở trên với 1234567890, sao cho |i|khoảng trắng được chèn giữa các chữ số.

  • i-=1- Giảm i, và bằng cách thực hiện nó 17 lần, nó đạt tới -8, điều này tạo ra mô hình lặp đi lặp lại với sự giúp đỡ của abs().



23
Đây là trang trại ấn tượng hơn 25 byte trong bất kỳ imho ngôn ngữ chơi gôn nào.
Jylo

4
@Jylo Cảm ơn, nhưng các giải pháp 25 byte rất ấn tượng, vì chúng cho thấy rất nhiều nỗ lực chơi gôn được thực hiện bởi các tác giả của họ. Trước tiên bạn nên biết ý nghĩa của từng nhân vật trong nguồn của họ, và sau đó bạn sẽ hiểu họ chơi golf đẹp như thế nào.
Ông Xcoder

2
@JasonChen Không, Python không cho phép cú pháp đó, vì đó là ngôn ngữ dành riêng cho ngôn ngữ C.
Ông Xcoder

5
Cảm hứng có thể: Có thể được thực hiện mà không cần exec trong 55 byte . Đã sử dụng một cách tiếp cận tương tự để đưa Python 3 xuống còn 57 byte . Không thấy bất kỳ cách rõ ràng nào để làm cho nó ngắn hơn, bằng cách bỏ qua exec, nhưng hình dung tôi sẽ đề cập đến nó như một khả năng.
ShadowRanger

32

Vim, 35 byte:

i1234567890<esc>qqYP:s/\d/& /g
YGp{q7@q

Giải trình:

i1234567890<esc>    " insert '1234567890'
qq                  " Record the following into register 'q'
  Y                 "   Yank a line
   P                "   Paste it above us
    :s/\d/& /g      "   Put a space after each number
Y                   "   Yank this line
 G                  "   Move the end of the buffer
  p                 "   Paste the line
   {                "   Move the beginning of the buffer
    q               " Stop recording
     7@q            " Call macro 'q' 7 times

6
Tôi thậm chí không quan tâm rằng đây không phải là người chiến thắng, nó thật đẹp.
MrDuk

@MrDuk Cảm ơn bạn! Tôi rất vui vì bạn thích nó :)
DJMcMayhem

21

05AB1E ,  14  13 byte

17F9ÝÀN8αð×ý,

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

Giải trình

17F            # for N in [0 ... 16] do
   9Ý          # push [0 ... 9]
     À         # rotate left
      N8α      # compute the absolute difference between N and 8
         ð×    # push that many spaces
           ý   # merge the list of digits with the space string as separator
            ,  # print

1
Hmm ... bạn có thể đánh bại SOGL nếu bạn không cần s... việc tham gia một chuỗi với một danh sách hoặc một danh sách với một chuỗi có hợp lý không? Tôi sẽ đề nghị cải tiến cho Adnan. Ồ, và có .∊cho û».
Erik the Outgolfer

@EriktheOutgolfer: Hoặc tôi có thể chuyển đổi phương thức của mình và lưu 1 byte mà tôi cần :)
Emigna

Xin lỗi đã được nâng cấp.
Erik the Outgolfer

3
Điều đó có nghĩa là tôi đã được nâng cấp trở lại ...
Erik the Outgolfer

4
8F9ÝÀNð×ý}».∊Tôi đã làm một con tàu vũ trụ! Và tôi rất phấn khích khi đề xuất chỉnh sửa 12 byte.
Bạch tuộc ma thuật Urn

20

C64 ASM, 358 byte (102 byte được biên dịch với basicstub)

Đây là lần gần nhất tôi có thể nhận được do những hạn chế rõ ràng:

C64

jsr $E544
lda #9
sta $FD
nl1: jsr dl
jsr il
dec $FD
bne nl1
inc $FD
nl2: ldy $FD
cpy #9
bne nt1
bl: jmp bl
nt1: iny
sty $FD
jsr dl
jsr il
jmp nl2
dl: clc
ldx #$31
ldy #0
lp: txa
sm: sta $0400, y
inx
cpx #$31
bne c1
rts
c1: cpx #$3A
bne nt2
ldx #$30
clc
nt2: tya
adc $FD
cmp #40
bcc c2
rts
c2: tay
jmp lp
il: lda sm+1
adc #39
bcc nc
inc sm+2
nc: sta sm+1
rts

(Có lẽ có thể được tối ưu hóa khá nhiều)


Chào mừng đến với PPCG! Vui lòng sử dụng thẻ mã để đăng bài đẹp. Tôi chỉnh sửa bài viết của bạn. Sau khi thay đổi áp dụng bạn có thể thấy, những gì thay đổi bằng cách nhấn vào chỉnh sửa
Евгений Новиков

Tôi vừa mới kiểm tra và nó thậm chí sẽ không vừa với PET 80 cols vì dòng đầu tiên và cuối cùng cần 82 cột.
Shaun Bebbers

17

TSQL, 220 148 byte

Cải thiện được đăng bởi ZLK:

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+'
'FROM sys.objects PRINT @

Đầu ra:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))+' 'FROM sys.objects PRINT @
ZLK

Thay thế sys.objectsbằng sysobjectsvà 1object_id` bằng idTôi đã tìm các bảng ngắn hơn trong syslược đồ, nhưng không có cột nào ngắn nhưsysobjects
Jaloopa

Và bạn có thể lưu một vài byte khác bằng cách thay đổi bên trong CAST(với POWER(10)) thànhVARCHAR
Jaloopa

Trên thực tế, tránh tất cả những thứ thay thế bằng cách sử dụng LOG10REPLICATE:DECLARE @o VARCHAR(MAX)=''SELECT TOP 17 @o+=REPLACE('1@2@3@4@5@6@7@8@9@0','@',replicate(' ',LOG10(POWER(10,ABS(ROW_NUMBER()OVER(ORDER BY id)-9)+1)/10)))+' 'FROM sysobjects PRINT @o
Jaloopa

Bạn có thể thay đổi tên biến thành chỉ @để cạo 3 ký tự.
Cầu

14

APL (Dyalog) , 22 byte

↑∊¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D

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

⎕DD igits từ 0 đến 9

1⌽ xoay một bước đúng (đặt số 0 ở cuối)

 kèm theo (để coi là đơn vị)

(Chiếm )↑¨¨ lấy mỗi số này, lấy nhiều ký tự từ mỗi chữ cái:

⍳17 một đến mười bảy

¯9+ trừ chín

| tìm các giá trị tuyệt đối

1+ cộng một

∊¨ tranh thủ (làm phẳng) mỗi

 thay đổi một lớp sâu thành cấp bậc (matrify)


3
Trong một ngôn ngữ nhỏ gọn như thế này, nghiêm túc cần hai byte để thêm một?
aschepler

3
@aschepler Vâng. APL không phải là ngôn ngữ chơi gôn và không có tính nguyên thủy tăng dần. J có, nhưng phải mất hai byte; >:.
Adám

4
APL is not a golfing language... ↑⊃¨,/¨(1+|¯9+⍳17)↑¨¨⊂1⌽⎕D... _ಠ
Alexander

1
@Alexander Cảm ơn bạn đã nhận được sự chú ý của tôi trở lại này. Tôi có thể chơi golf 3 byte.
Adám


12

Java 11 (JDK) , 98 byte

o->{for(int i=-9;++i<9;)System.out.println("".join(" ".repeat(i<0?-i:i),"1234567890".split("")));}

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

  • -14 byte bằng cách chuyển sang JDK 11, hiện có nguồn gốc String::repeat.

Câu trả lời trước ( Java (OpenJDK 8) ), 113 112 byte

o->{for(int i=-9;++i<9;)System.out.printf("".join("%1$"+(i<0?-i:i>0?i:"")+"s","1234567890".split(""))+"%n","");}

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

Giải thích

Về cơ bản, tôi đang xây dựng String17 lần sau ( Nlà một biến, không phải là giá trị thực):

"1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n"

Đó là tất cả các chữ số dự kiến, được nối bởi %1$Nsvị Ntrí số khoảng cách giữa mỗi chữ số.

%1$Nsvề cơ bản có nghĩa là "lấy đối số đầu tiên và đệm nó cho đến khi ít nhất là chiều dài N". Ngoài ra, %1$0skhông được hỗ trợ nên trường hợp đặc biệt %1$sđược thực hiện cho 0.

Cuối cùng, tôi định dạng in chuỗi đó bằng một đối số duy nhất: ""vì vậy, bộ định dạng sử dụng lại luôn cùng một chuỗi trống, đệm nó với khoảng trắng khi cần.

Tiết kiệm

  • 1 byte nhờ Kevin Cruijssen

2
Câu trả lời tốt đẹp! Btw, tôi đã đề cập rõ ràng trong thử thách một tham số trống không sử dụng được cho phép, vì vậy bạn có thể thay thế ()->bằng o->để lưu một byte. :)
Kevin Cruijssen

Bạn có thể làm omột intvà sử dụng nó trong của bạn cho vòng lặp? for(o=-9;++o<9;)
Mùa đông

2
@Winter Không, vì thử thách nói " không được sử dụng " và điều đó sẽ sử dụng biến tham số, ngay cả khi giá trị sẽ không được sử dụng.
Olivier Grégoire

@ OlivierGrégoire Nó liên kết đến bài đăng này codegolf.meta.stackexchange.com/questions/12681/ và bài viết này chỉ nói rằng nó nên trống (0 cho ints).
Mùa đông

@Thực tế, nhưng bản thân thử thách nói "không sử dụng". Các phán quyết cụ thể trong một thách thức ghi đè mặc định.
Olivier Grégoire

11

Japt -R , 19 18 16 14 13 byte

Aõ%A
£qYçÃÔÅê

Kiểm tra hoặc thử trực tuyến


Giải trình

A             :10
 õ           :Range [1,10]
  %A         :Modulo each by 10
\n           :Assign to variable U
£            :Map each element at 0-based index Y
 q           :  Join U with
  Yç         :   Space repeated Y times
    Ã        :End map
     Ô       :Reverse
      Å      :Slice off first element
       ê     :Mirror
             :Implicitly join with newlines and output

2
Đẹp. Giải pháp 16 byte của tôi là9ÆAõ%A qXîÃw ê ·
ETHproductions

8

JavaScript (ES2017), 83 73 72 68 byte

Cảm ơn Shaggy đã lưu 10 byte. Cảm ơn Craig vì đã tiết kiệm 1 byte. Cảm ơn các cung đã lưu 4 byte.

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

for(i=-9,a="";i++<8;)a+=[...`1234567890
`].join("".padEnd(i<0?-i:i))

console.log(a);
.as-console-wrapper { max-height: 100% !important; top: 0; }
.as-console-row:after { display: none !important; }


Lưu 1 byte bằng cách sử dụng một polyfill cho Math.abs. Tôi cũng làm cho adanh sách không bị mã hóa cứng, nhưng đó là một ưu tiên ...a=[...Array(10).keys()];for(i=-8;i<9;i++)console.log(a.join(' '.repeat(i<0?-i:i)))
Thomas W

1
Lưu một số byte với[..."1234567890"].join("".padEnd(i<0?-i:i))
Shaggy

@Shaggy Cảm ơn. Điều đó đã lưu 10 byte. :)
Tushar

1
@ThomasW: [...Array(10).keys]sẽ 0là yếu tố đầu tiên, không phải là yếu tố cuối cùng.
Xù xì

1
Bạn có thể lưu một byte bằng cách sử dụng phương thức của bạn lưu trữ kết quả trong một chuỗi thay vì ghi nhật ký : for(i=-8,s="";i<9;i++)s+=[..."1234567890"].join("".padEnd(i<0?-i:i))+`X`, nơi Xlà một dòng mới thực sự
Craig Ayre

7

Brachylog , 30 29 28 byte

Ị↺{∧≜;Ṣj₍g;?↔zcc}ᶠ⁹↔;XcP↔Pẉᵐ

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

Đã lưu một byte nhờ Leaky Nun .

Giải trình

Ị↺                               The string "1234567890"
  {               }ᶠ⁹            Find the first 9 outputs of:
   ∧≜                              Take an integer
       ;Ṣj₍                        Juxtapose " " that number of times
           g;?↔z                   Zip that string of spaces with "1234567890"
                cc                 Concatenate twice into one string
                    ↔            Reverse the resuling list
                     ;XcP↔P      Palindromize the list (concatenate X to it into the list P,
                                   P reversed is still P)
                           ẉᵐ    Map writeln


@LeakyNun tôi đã bị mắc kẹt trên lớn "In văn bản này chính xác" và đã không đọc mà chúng ta có thể có những dòng trailing ...
Fatalize


1
@LeakyNun Tại sao bạn không đăng câu trả lời của riêng mình?
Gây tử vong

7

than củi , 18 byte

F⁹⪫⁺…I¹:⟦0¶⟧× ι‖B↑

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:

F⁹      Repeat 9 times (i = loop variable)
  ⪫       Join
   ⁺       Concatentate
    …I¹:    All the characters from str(1) below ":" (i.e. to "9") as a list
    ⟦0¶⟧    A list whose element is the string "0\n"
   × ι     With i spaces
‖B↑     Reflect everything upwards but without duplicating the top line

Lưu ý: Cast(1)lấy cùng số byte bởi vì "1"sẽ cần một dấu phân cách trước ":"đó (điều này xảy ra khi deverbosifier không thể chèn).


7

R , 108 byte

for(i in abs(-8:8))cat(paste0(el(strsplit("1234567890","")),paste(rep(" ",i),collapse=""),collapse=""),"\n")

Chỉ cần dán và thu gọn các chuỗi.

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

Chỉnh sửa: cảm ơn Challenger5 vì đã chỉ ra một vấn đề. Đã sửa nó ngay.

Chỉnh sửa 2: lưu một byte nhờ bouncyball.


Chào mừng đến với trang web! :)
DJMcMayhem

2
Điều này có vẻ không đúng lắm - đường giữa không nên có bất kỳ khoảng trống nào cả.
Trái cây Esolanging

@ Challenger5 bạn nói đúng! đã sửa nó bằng cách sử dụng paste0thay pastevì phải thêm một byte :(
Probel

1
lưu 2 byte bằng cách sử dụng el: el(strsplit("1234567890",""))thay vìstrsplit("1234567890","")[[1]]
bouncyball

Bạn có thể loại bỏ một trong các pastecâu lệnh bằng cách sử dụng sepđối số catvà thực hiện thêm một chút để đưa nó tới 70 byte
Giuseppe



6

Java 8, 235 234 206 163 byte

interface A{static void main(String[]a){for(int i=-8;i<9;i++){String s="";for(int j=1,k;j<10;j++){s+=j;for(k=0;k<(i>0?i:-i);k++)s+=" ";}System.out.println(s+0);}}}

Cập nhật : -28 byte nhờ Leaky Nun!
Cập nhật 2 : -43 byte nhờ Leaky Nun một lần nữa!

Ung dung:

interface A {
    static void main(String[] a) {
        for (int i = -8; i < 9; i++) {
            String s = "";
            for (int j = 1, k; j < 10; j++) {
                s += j;
                for (k = 0; k < (i > 0 ? i : -i); k++)
                    s += " ";
            }
            System.out.println(s + 0);
        }
    }
}

Dùng thử trực tuyến

EDIT: Mã trước đó là sai! Đã phạm sai lầm trong khi chơi golf mã, nó sẽ hoạt động như dự định ngay bây giờ!


4
Chào mừng đến với PPCG! Mẹo chơi gôn trong JavaMẹo chơi gôn bằng <tất cả các ngôn ngữ> có thể thú vị để đọc qua. :) Một số điều bạn có thể chơi golf là loại bỏ publicvà loại bỏ một số không gian không cần thiết. Và còn một số điều nữa cần cải thiện, nhưng tôi khuyên bạn nên đọc qua các mẹo và xem bạn có thể cải thiện bản thân ở đâu. Một lần nữa chào mừng, và tận hưởng kỳ nghỉ của bạn! :)
Kevin Cruijssen

2
Hmm, bạn cũng có chắc là bạn đã đăng đúng mã không? Khi tôi sao chép-dán mã của bạn vào TryItOnline, nó không cung cấp đầu ra chính xác.
Kevin Cruijssen

1
Ôi chết tiệt, tôi đã làm gì đó sai trong khi đánh gôn! Tôi sẽ sửa cái này!
Alex Ferretti



6

Husk , 21 byte

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9

Đây là một chương trình đầy đủ in ra STDOUT. Hãy thử trực tuyến! Có rất nhiều không gian dấu.

Giải trình

Husk vẫn còn thiếu rất nhiều thứ thiết yếu như hàm phạm vi hai đối số, vì vậy các phần của giải pháp này có một chút khó khăn.

mΣṪ`:§+↔tḣR8' ṁs`:0ḣ9
              ṁs`:0ḣ9  This part evaluates to the string "1234567890".
                   ḣ9   Range from 1 to 9.
                `:0     Append 0.
              ṁs        Convert each number to string and concatenate.
     §+↔tḣR8'          This part evaluates to a list like ["  "," ",""," ","  "]
                       but with 17 elements instead of 5.
          R8'           A string of 8 spaces.
         ḣ              Take prefixes.
     §+                 Concatenate
       ↔                the reversal and
        t               tail of the prefix list, palindromizing it.
  Ṫ                    Take outer product of the two lists
   `:                  with respect to flipped prepeding.
                       This prepends each digit to each string of spaces.
mΣ                     Map concatenation over the results, computing the rows.
                       Implicitly join with newlines and print.

Bạn có thể thay thế ṁs`:0ḣ9bằng uṁsḣ10để tạo chuỗi "1234567890" bằng một byte ít hơn!
Sophia Lechner

6

T-SQL 145 152 byte

DECLARE @ VARCHAR(MAX)=''SELECT TOP 17@+=REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(number-8)))+'
'FROM master..spt_values WHERE type='P'PRINT @

Cập nhật để sử dụng:

  • master..spt_values để tạo số (WHERE type = 'P' , các số này luôn liên tiếp, bắt đầu từ 0)
  • @ ZLK TOP 17Ý tưởng
  • IN (để tuân thủ các quy tắc - không có danh sách chuỗi)
  • @ JanD Frozen ý tưởng tuyệt vời của việc bao gồm lợi nhuận vận chuyển trong chuỗi (Tôi đã tính rằng đó chỉ là một byte - Windows CRLF là gì?)
  • Ý tưởng của @Bridge chỉ sử dụng @ cho tên biến - tất cả các thủ thuật này !!

Các kết quả:

1        2        3        4        5        6        7        8        9        0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0

(Cảm ơn @JanD Frozen vì ý tưởng REPLACE)


Đây là một câu trả lời tốt đẹp! Chào mừng đến với trang web :)
DJMcMayhem

Cảm ơn. Tôi thấy một số người trong chúng ta đã phát minh ra ngôn ngữ của chúng ta ở đây :)
Kỹ sư đảo ngược

1
Một kết hợp giữa câu trả lời này và câu trả lời khác là tối ưu: ví dụ SELECT TOP 17REPLACE('1x2x3x4x5x6x7x8x9x0','x',SPACE(ABS(9-RANK()OVER(ORDER BY object_id))))FROM sys.objects(giả sử bạn không cần in).
ZLK

Aha @ZLK - một vài thủ thuật hay - TOP 17, RANK OVER và sys.objects - cảm ơn bạn!
Kỹ sư đảo ngược

6

Clojure, 126 99 byte

-27 bằng cách sửa một vài lỗi ngớ ngẩn. Việc sử dụng bên ngoài alà không cần thiết, vì vậy tôi đã có thể loại bỏ ahoàn toàn và chỉ viết apply strmột lần. Điều đó cũng cho phép tôi sử dụng một macro hàm cho hàm chính, nó đã lưu một số byte. Tôi cũng đã nội tuyến cuộc gọi đến Math/absthay vì từ chối n-spaces.

Về cơ bản là một cổng Clojure của ý tưởng Python @ Mr.Xcoder's. Nhìn lại, tôi nên sử dụng abs/range phương thức cho thử thách kim cương ban đầu, nhưng sau đó tôi có thể không tạo ra đầu ra bị lỗi!

Khá đơn giản. Tham gia chuỗi số với một số khoảng trắng phụ thuộc vào hàng hiện tại.

#(doseq[n(range -8 9)](println(clojure.string/join(apply str(repeat (Math/abs n)\ ))"1234567890")))

(defn bugged []
  (doseq [n-spaces (range -8 9)]
    (println
        (clojure.string/join
          ; "String multiplication"
          (apply str
                 (repeat (Math/abs n-spaces) \space))
          "1234567890"))))


5

Toán học, 92 byte

Column@Join[Reverse@(s=Row/@Table[Riffle[Range@10~Mod~10,""<>Table[" ",i]],{i,0,8}]),Rest@s]

Dùng thử trực tuyến

sao chép / dán mã với ctrl-v
nhấn shift + enter để chạy


Có lẽ bạn có thể thêm một liên kết TryItOnline ?
Kevin Cruijssen

@KevinCruijssen Mathematica không phải là ngôn ngữ miễn phí và Mathics dường như không hoạt động .
Rò rỉ Nun

@LeakyNun À, cảm ơn. Đôi khi tôi thấy MartinEnder đăng các liên kết TIO, nhưng đó thực sự là các liên kết Toán học.
Kevin Cruijssen

1
@Kevin Cruijssen tất nhiên, tôi đã thêm liên kết với hướng dẫn
J42161217

5

C, 97 byte

i=-9;main(j){for(;++i<9;putchar(10))for(j=0;++j<11;printf("        "+8-abs(i)))putchar(48+j%10);}

Trình biên dịch của bạn có thể sẽ phàn nàn rất nhiều về mã này; Tôi đã ném 7 cảnh báo của 4 loại khác nhau. Có thể cải thiện mã sau này.

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


5

C (gcc) , 76 byte

f(x,y){for(y=-9;++y<9;puts(""))for(x=10;x++;printf("%-*d",abs(y)+1,x%=10));}

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

Nó xuất ra một số dấu cách, được cho là ổn.

Nó in các số bằng cách sử dụng các trường có độ dài động bên trái - đó là chuỗi định dạng %-*ddành cho.

Vòng lặp bên trong có một số khởi tạo vui nhộn (bắt đầu từ 10; bất kỳ bội số nào của 10 sẽ ổn) để "đơn giản hóa" điều kiện kết thúc của nó.


4

Than , 21 20 19 18 byte

F⁹«F…¹χ⁺κ… ι0⸿»‖B↑

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

Liên kết đến phiên bản dài dòng . Về cơ bản tôi tạo phần dưới của bản vẽ và sau đó phản ánh văn bản lên.


1
Khi tôi nhìn thấy câu hỏi tôi mặc dù tôi đã thử nó trong Char than trước khi nhìn vào câu trả lời. Tôi bắt đầu với một câu trả lời 21 byte nhưng đánh golf nó thành 20 byte ... ma quái!
Neil

@Neil :-D Chà, bây giờ là 19 byte!
Charlie

Yup, chỉ tìm thấy rằng golf mình. Tôi cũng đã xem xét E…⁹⪫E…·¹χI﹪κχ× ι‖B↑(cũng cho 19 byte) nhưng trình thông dịch dường như không thích nó (tôi không thể tự nhìn thấy điều gì sai với nó).
Neil

Oh, Range có hai đối số, ngớ ngẩn với tôi.
Neil

1
Hóa ra Maplà một cá trích đỏ, vì vậy bây giờ tôi đã đăng câu trả lời 18 byte của mình.
Neil

4

CJam , 21 byte

A,(+aH*ee{:\8-zS**n}/

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

Giải trình

A,     e# Get [0 1 2 ... 9].
(+     e# Rotate the 0 to the end.
aH*    e# Wrap in an array and repeat 17 times.
ee     e# Enumerate. This pairs each copy of the array with its index in
       e# the list.
{      e# For each [index array] pair...
  :\   e#   Unwrap the pair and swap its order.
  8-z  e#   Get the absolute difference of the index from 8.
  S*   e#   Get a string of that many spaces.
  *    e#   Riffle the list of digits with the string of spaces.
  n    e#   Print it with a trailing linefeed.
}/

1
Giải pháp thay thế (cũng là 21 byte):9{S*A,(+\*}%_W%);\+N*
Esolanging Fruit

4

Hàng loạt, 163 byte

@set s=1 2 3 4 5 6 7 8 9 0
@set t=         
@for %%l in (9 7)do @for /l %%i in (1,1,%%l)do @call:%%l
:7
@set t=  %t%
:9
@set t=%t:~1%
@call echo %%s: =%t%%%

Lưu ý: Dòng đầu tiên kết thúc trong 9 khoảng trắng. Giải thích: Sử dụng đánh số dòng sáng tạo! Vòng lặp đầu tiên cần chạy 9 lần và xóa một khoảng trống mỗi lần, trong khi vòng lặp thứ hai cần chạy 8 lần và thêm một khoảng trống mỗi lần. Cái trước đạt được bằng cách chạy nó 7 lần và rơi lần thứ 8, trong khi cái thứ hai đạt được bằng cách thêm hai khoảng trắng và rơi vào để xóa một trong số chúng một lần nữa.


4

SOGL V0.12 , 14 byte

ā9{SUčf@*∑Κ}╬Æ

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

Giải trình:

ā               push an empty array
 9{        }    9 times do
   SU             push "1234567890"
     č            chop into characters
      f@*         get current iteration (0-based) amount of spaces
         ∑        join with that
          Κ       prepend this to the array
            Β  palindromize vertically with 1 overlap


4

PowerShell , 30 byte

8..0+1..8|%{1..9+0-join' '*$_}

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

Xây dựng một phạm vi các 8,7,6...2,1,0,1,2...8vòng lặp sau đó thông qua mỗi số. Bên trong vòng lặp chúng ta xây dựng một loạt các 1..9nối với 0sau đó -joincác con số trong phạm vi cùng với số lượng thích hợp của không gian. Mỗi chuỗi được để lại trên đường ống và đầu ra được ẩn khi hoàn thành chương trình.


1
Câu trả lời tốt đẹp! Powershell đột nhiên cảm thấy chơi golf nhiều hơn :)
Ông
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.