In kim cương này


76

Câu hỏi này đã được lan truyền như virus trong văn phòng của tôi. Có nhiều cách tiếp cận khác nhau:

In như sau:

        1
       121
      12321
     1234321
    123454321
   12345654321
  1234567654321
 123456787654321
12345678987654321
 123456787654321
  1234567654321
   12345654321
    123454321
     1234321
      12321
       121
        1

Câu trả lời được ghi trong các nhân vật với ít nhân vật là tốt hơn.


4
Tiêu chí chiến thắng là gì? Và đây là một thách thức hay một golf?
Paul R

21
Tôi đọc "kolmogorov-độ phức tạp" là "golf-code".
DavidC

1
@DavidCarraher "kolmogorov-độ phức tạp" đã được chỉnh sửa sau khi câu hỏi được hỏi. Người hỏi ban đầu chưa chỉ định tiêu chí chiến thắng.
Gareth

@Gareth Nhận xét của tôi được đưa ra sau khi thẻ "kolmogorov-độ phức tạp" được thêm vào nhưng trước khi thẻ "code-golf" được thêm vào. Vào thời điểm đó, mọi người vẫn đang hỏi liệu đó có phải là một câu hỏi về môn đánh gôn không.
DavidC

3
perlmonks.com/?node_id=891559 có các giải pháp perl.
b_jonas

Câu trả lời:


24

J, 29 26 24 23 22 21 ký tự

,.(0&<#":)"+9-+/~|i:8

Cảm ơn FUZxxl về "+mánh khóe (Tôi không nghĩ tôi đã từng sử dụng u"vtrước đây, heh).

Giải trình

                  i:8  "steps" vector: _8 _7 _6 ... _1 0 1 ... 7 8
                 |     magnitude
              +/~      outer product using +
            9-         inverts the diamond so that 9 is in the center
  (      )"+           for each digit:
      #                  copy
   0&<                   if positive then 1 else 0
       ":                copies of the string representation of the digit
                         (in other words: filter out the strictly positive
                          digits, implicitly padding with spaces)
,.                     ravel each item of the result of the above
                       (necessary because the result after `#` turns each
                        scalar digit into a vector string)

Thay vì "0], viết "+.
FUZxxl

Đối với một ký tự ít hơn, viết,.0(<#":)"+9-+/~|i:8
FUZxxl

1
Đây là giải pháp của bạn được dịch sang 25 ký tự của APL:⍪↑{(0<⍵)/⍕⍵}¨9-∘.+⍨|9-⍳17
FUZxxl

25

APL ( 33 31)

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽¨⍴∘(1↓⎕D)¨⍳9

Nếu các khoảng cách phân tách các số được cho phép (như trong mục Mathicala), nó có thể được rút ngắn xuống 28 26:

A⍪1↓⊖A←A,0 1↓⌽A←⌽↑⌽∘⍕∘⍳¨⍳9

Giải trình:

  • (Chương trình dài :)
  • ⍳9: danh sách các số từ 1 đến 9
  • 1↓⎕D: ⎕Dlà chuỗi '0123456789', 1↓xóa phần tử đầu tiên
  • ⍴∘(1↓⎕D)¨⍳9: cho mỗi phần tử N của ⍳9, lấy N phần tử đầu tiên từ 1↓⎕D. Điều này đưa ra một danh sách: ["1", "12", "123", ... "123456789"] dưới dạng chuỗi
  • ⌽¨: đảo ngược từng yếu tố của danh sách này. ["1", "21", "321" ...]

  • (Chương trình ngắn :)

  • ⍳¨⍳9: danh sách từ 1 đến N, cho N [1..9]. Điều này đưa ra một danh sách [[1], [1,2], [1,2,3] ... [1,2,3,4,5,6,7,8,9]] dưới dạng số.
  • ⌽∘⍕∘: mặt trái của biểu diễn chuỗi của mỗi danh sách này. ["1", "2 1" ...]
  • (Tương tự từ bây giờ :)
  • A←⌽↑: tạo một ma trận từ danh sách các danh sách, đệm bên phải bằng dấu cách và sau đó đảo ngược nó. Điều này cho góc phần tư trên của viên kim cương. Nó được lưu trữ trong A.
  • A←A,0 1↑⌽A: A, với mặt trái của A trừ cột đầu tiên được gắn bên phải. Điều này cho nửa trên của hình chữ nhật. Điều này sau đó được lưu trữ trong A một lần nữa.
  • A⍪1↓⊖A: ⊖Alà một nhân đôi theo chiều dọc (cho nửa dưới), 1↓loại bỏ hàng trên cùng của nửa dưới và A⍪là nửa trên trên 1↓⊖A.

5
+1 Tuyệt vời. Bạn có thể dịch nó cho chúng tôi APL không biết chữ?
DavidC

3
Không nên mã không phải mã ascii trong UTF-8 thay vì mã điểm? Điều này sẽ đẩy APL đến gần hơn với những người thân ở trần gian của anh ta.
John Dvorak

5
@JanDvorak Không, vì có một trang mã APL , phù hợp với toàn bộ ký tự được đặt thành một byte đơn. Nhưng tôi nghĩ rằng bạn có thể đã tìm ra điều này tại một số điểm kể từ năm 2013.;)
Martin Ender

23

Clojure, 191 179 byte

#(loop[[r & s](range 18)h 1](print(apply str(repeat(if(< r 8)(- 8 r)(- r 8))\ )))(doseq[m(concat(range 1 h)(range h 0 -1))](print m))(println)(if s(recur s((if(< r 8)inc dec)h))))

-12 byte bằng cách thay đổi bên ngoài doseqthành a loop, cho phép tôi thoát khỏi atom(yay).

Một "vòng lặp" kép. Vòng lặp bên ngoài ( loop) đi qua mỗi hàng, trong khi vòng lặp bên trong ( doseq) đi qua từng số trong hàng, nằm trong phạm vi (concat (range 1 n) (range n 0 -1)), trong đó nlà số cao nhất trong hàng.

(defn diamond []
  (let [spaces #(apply str (repeat % " "))] ; Shortcut function that produces % many spaces
    (loop [[row-n & r-rows] (range 18) ; Deconstruct the row number from the range
           high-n 1] ; Keep track of the highest number that should appear in the row
      (let [top? (< row-n 8) ; Are we on the top of the diamond?
            f (if top? inc dec) ; Decided if we should increment or decrement
            n-spaces (if top? (- 8 row-n) (- row-n 8))] ; Calculate how many prefix-spaces to print
        (print (spaces n-spaces)) ; Print prefix-spaces
        (doseq [m (concat (range 1 high-n) (range high-n 0 -1))] ; Loop over the row of numbers
          (print m)) ; Print the number
        (println)

        (if r-rows
          (recur r-rows (f high-n)))))))

Do lỗi logic trong lần thử đầu tiên của tôi (vô tình chèn khoảng trắng tiền tố giữa mỗi số thay thế), tôi đã xoay sở để có được điều này:

1
1       2       1
1      2      3      2      1
1     2     3     4     3     2     1
1    2    3    4    5    4    3    2    1
1   2   3   4   5   6   5   4   3   2   1
1  2  3  4  5  6  7  6  5  4  3  2  1
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
12345678987654321
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1
1   2   3   4   5   6   7   8   7   6   5   4   3   2   1
1    2    3    4    5    6    7    6    5    4    3    2    1
1     2     3     4     5     6     5     4     3     2     1
1      2      3      4      5      4      3      2      1
1       2       3       4       3       2       1
1        2        3        2        1
1         2         1

Thậm chí không chính xác bỏ qua các lỗi rõ ràng, nhưng nó trông mát mẻ.


20

Toán học 83 49 43 54 51

Print@@#&/@(Sum[k~DiamondMatrix~17,{k,0,8}]/.0->" ")

định dạng được cải thiện


Với 3 byte được lưu nhờ Kelly Lowder.

Phân tích

Phần chính của mã Sum[DiamondMatrix[k, 17], {k, 0, 8}], có thể được kiểm tra trên WolframAlpha .

Sau đây cho thấy logic cơ bản của phương pháp này, ở quy mô nhỏ hơn.

a = 0~DiamondMatrix~5;
b = 1~DiamondMatrix~5;
c = 2~DiamondMatrix~5;
d = a + b + c;
e = d /. 0 -> "";
Grid /@ {a, b, c, d, e}

lưới điện


1
David, bạn đánh tôi lần này! :-)
Mr.Wizard

1
Một lần thử khác (55 ký tự):f = Table[# - Abs@k, {k, -8, 8}] &; f[f[9]] /. n_ /; n < 1 -> "" // Grid
DavidC

Vẫn còn một câu nữa (71 ký tự):Table[9 - ManhattanDistance[{9, 10}, {j, k}], {j, 18}, {k, 18}] /. n_ /; n < 1 -> "" // Grid
DavidC 22/03/13

2
Grid@#@#@9&[Table[#-Abs@k,{k,-8,8}]&]/.n_/;n<1->""50 ký tự.
chyanog

Một màn hình hiển thị mã:ArrayPlot[Sum[k~DiamondMatrix~17, {k, 0, 8}], AspectRatio -> 2]
DavidC

15

Trăn 2, 72 69 67 61

Không thông minh:

s=str(111111111**2)
for i in map(int,s):print'%8s'%s[:i-1]+s[-i:]

1
không hoạt động trong Python 3+, yêu cầu parens xung quanh các đối số để in :(
Griffin

7
@Griffin: Trong mã golf, tôi chọn Python 2 hoặc Python 3 tùy thuộc vào việc tôi có cần in để trở thành một hàm hay không.
Steven Rumbalski

3
s=`0x2bdc546291f4b1`
gnibbler

1
@gnibbler. Đề nghị rất thông minh. Thật không may, repr của thập lục phân đó bao gồm một dấu 'L'.
Steven Rumbalski

1
@gnibbler: Điều này hoạt động trong Python chạy trên nền tảng 64 bit, nhưng không phải trên nền tảng 32 bit.
Konrad Borowski

14

C, 79 ký tự

v;main(i){for(;i<307;putchar(i++%18?v>8?32:57-v:10))v=abs(i%18-9)+abs(i/18-8);}

4
Xin giải thích?
Lucas Henrique

1
@LucasHenrique tổng cộng 307 ký tự. i% 18-9 là giá trị x trên mặt phẳng cartesian phản chiếu chính nó trên trục y. i / 18-8 là giá trị y trên mặt phẳng cartesian phản chiếu chính nó trên trục x. Tính tổng chúng lại với nhau để có đường chéo 1: 1 (điều này làm cho sự thay đổi số hình thành trên kim cương 1: 1. (32:57) -v là giá trị số không có giá trị cho ASCII 0-9. 10 dòng mới.
Albert Renshaw

14

Con trăn 2, 60 59

for n in`111111111**2`:print`int('1'*int(n))**2`.center(17)

Lạm dụng backticks và repunits.


Không gian sau khi intừ khóa có thể được loại bỏ, giống như bạn đã làm với printbàn phím.
Konrad Borowski

@GlitchMr: Cảm ơn! Đã cập nhật.
nneonneo

Tôi nhận được thêm Ltrong bảy dòng đầu ra giữa.
Steven Rumbalski

Bạn không nên ... bạn đang sử dụng phiên bản Python nào?
nneonneo

12

GolfScript, 33 31 30 ký tự

Một giải pháp GolfScript khác

17,{8-abs." "*10@-,1>.-1%1>n}%

Cảm ơn bạn @PeterTaylor cho một char khác.

Phiên bản Previos:

17,{8-abs" "*9,{)+}/9<.-1%1>+}%n*

( chạy trực tuyến )

17,{8-abs" "*9,{)+}/9<.-1%1>n}%

1
Bạn không cần các dấu cách (văn bản trong câu hỏi không có chúng), vì vậy bạn có thể bỏ qua việc thêm các số vào khoảng trắng và lưu một ký tự như17,{8-abs." "*10@-,1>.-1%1>n}%
Peter Taylor

12

Toán học 55 50 45 41 38

(10^{9-Abs@Range[-8,8]}-1)^2/81//Grid

Grid[(10^Array[{9}-Abs[#-9]&,17]-1)^2/81]

Đồ họa toán học


1
Công việc rất tốt.
DavidC

@DavidCarraher Cảm ơn bạn: D
chyanog 23/03/13

Tôi nhắc lại nhận xét của David. Làm thế nào bạn đến với điều này?
Mr.Wizard

Tôi có thể cập nhật câu trả lời của bạn với sửa đổi ngắn hơn tôi đã viết không?
Mr.Wizard

@ Mr.Wizard Chắc chắn.
chyanog

10

Javascript, 114

Mục nhập đầu tiên của tôi về Codegolf!

for(l=n=1;l<18;n-=2*(++l>9)-1,console.log(s+z)){for(x=n,s="";x<9;x++)z=s+=" ";for(x=v=1;x<2*n;v-=2*(++x>n)-1)s+=v}

Nếu điều này có thể được rút ngắn hơn nữa, xin vui lòng bình luận :)


Chết tiệt!! Tôi đã bỏ lỡ không gian và làm một nửa kim cương. Tôi phải ngủ ngay bây giờ
Joomler

9

PHP, 92 90 ký tự

<?for($a=-8;$a<9;$a++){for($b=-8;$b<9;){$c=abs($a)+abs($b++);echo$c>8?" ":9-$c;}echo"\n";}

Tính toán và in khoảng cách Manhattan của vị trí từ trung tâm. In một khoảng trắng nếu nó nhỏ hơn 1.

Một người dùng ẩn danh đã đề xuất cải tiến sau (84 ký tự):

<?for($a=-8;$a<9;$a++,print~õ)for($b=-8;$b<9;print$c>8?~ß:9-$c)$c=abs($a)+abs($b++);

Cái thứ 2 không hoạt động.
Christian

Tôi biết điều đó rất muộn, nhưng tôi luôn có nhu cầu chơi gôn khi tôi thấy các tập lệnh PHP. 83 byte với <?bỏ qua mỗi meta . Ngoài ra, bạn dường như có một số vấn đề mã hóa trong mã thứ hai.
RedClover

@Soaku Cái thứ hai không phải của tôi. Nó được đề xuất như là một chỉnh sửa cho câu trả lời của tôi bởi một người dùng ẩn danh. Tôi chỉ thêm nó mà không kiểm tra - không thực sự chắc chắn lý do tại sao người dùng không chỉ đăng nó như là nỗ lực của riêng họ thực sự. Các câu hỏi meta sau ngày trả lời câu trả lời này gần 3 năm.
Gareth

Ý tôi là, tôi không bao gồm <?trong bytecount. Tôi cũng đã thực hiện một số cải tiến khác.
RedClover

8

Than (không cạnh tranh), 13 byte

Không cạnh tranh vì ngôn ngữ mới hơn (nhiều) so với câu hỏi.

F⁹«GX⁻⁹ιI⁺ι¹→

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

Làm sao?

Vẽ chín, liên tiếp nhỏ hơn, số kim cương đồng tâm chồng lên nhau:

F⁹«   Loop ι from 0 to 8:
GX     Draw a (filled) polygon with four equilateral diagonal sides
⁻⁹ι      of length 9-ι
I⁺ι¹    using str(ι+1) as the character
→       Move right one space before drawing the next one

4
Điều này bây giờ sẽ cạnh tranh theo sự đồng thuận mới trong meta.
chính thức tuyên bố

7

Lisp thông thường, 113 ký tự

(defun x(n)(if(= n 0)1(+(expt 10 n)(x(1- n)))))(dotimes(n 17)(format t"~17:@<~d~>~%"(expt(x(- 8(abs(- n 8))))2)))

Đầu tiên tôi nhận thấy rằng các yếu tố của viên kim cương có thể được thể hiện như vậy:

  1   =   1 ^ 2
 121  =  11 ^ 2
12321 = 111 ^ 2

Vân vân.

xtính toán đệ quy cơ sở (1, 11, 111, v.v.), được bình phương, và sau đó được in ở giữa format. Để làm cho các con số tăng lên đến kỳ hạn cao nhất và quay trở lại một lần nữa, tôi đã sử dụng (- 8 (abs (- n 8)))để tránh một vòng lặp thứ hai


7

JavaScript, 81

for(i=9;--i+9;console.log(s))for(j=9;j;s=j--^9?k>0?k+s+k:" "+s:k+"")k=i<0?j+i:j-i

6

PowerShell (2 tùy chọn): 92 84 45 byte

1..8+9..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}
1..9+8..1|%{' '*(9-$_)+[int64]($x='1'*$_)*$x}

Cảm ơn Strigoides về gợi ý sử dụng 1 ^ 2,11 ^ 2,11 ^ 2 ...


Cạo một số nhân vật bằng cách:

  • Loại bỏ $w.
  • Lồng nhau định nghĩa $xthay cho việc sử dụng đầu tiên của nó.
  • Lấy một số manh mối từ giải pháp của Rynant :
    • Kết hợp các mảng số nguyên với +thay vì ,cho phép loại bỏ dấu ngoặc quanh các mảng và một lớp lồng trong các vòng.
    • Được sử dụng 9-$_để tính toán độ dài của không gian cần thiết, thay vì các phương pháp toán học và đối tượng phức tạp hơn. Điều này cũng loại bỏ sự cần thiết cho $y.

Giải trình:

1..8+9..1hoặc 1..9+8..1tạo ra một mảng các số nguyên tăng dần từ 1 đến 9 rồi giảm dần về 1.

|%{... }Đưa mảng số nguyên vào một ForEach-Objectvòng lặp thông qua bí danh tích hợp %.

' '*(9-$_)+ trừ số nguyên hiện tại từ 9, sau đó tạo một chuỗi gồm nhiều khoảng trắng ở đầu đầu ra cho dòng này.

[int64]($x='1'*$_)*$xđịnh nghĩa $xlà một chuỗi 1s miễn là số nguyên hiện tại lớn. Sau đó, nó được chuyển đổi thành int64 (bắt buộc phải xuất 11111111 2 đúng cách mà không cần sử dụng ký hiệu E) và bình phương.

nhập mô tả hình ảnh ở đây


1
Bạn có thể lưu một byte bằng cách truyền tới longthay vìint64
Veskah 26/07/18

Một cách khác để tiết kiệm một byte1..8+9..1|%{' '*(9-$_)+ +($x='1'*$_+'L')*$x}
mazzy

5

Vim, 62 39 38 tổ hợp phím

Cảm ơn @DJMcMayhem vì đã tiết kiệm được rất nhiều byte!

Câu trả lời Vim đầu tiên của tôi, rất thú vị!

i12345678987654321<ESC>qqYP9|xxI <ESC>YGpHq7@q

Tôi đã cố gắng viết các con số thông qua một bản ghi âm, nhưng nó dài hơn nhiều

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

Giải trình:

i123 ... 321<ESC>                   Write this in insert mode and enter normal mode
qq                                  Start recording into register q
  YP                                Yank this entire line and Paste above
    9|                              Go to the 9th column
      xx                            Delete character under cursor twice
        I <ESC>                     Go to the beginning of the line and insert a space and enter normal mode
               Y                    Yank this entire line
                G                   Go to the last line
                 p                  Paste in the line below
                  H                 Go to the first line
                   q                End recording
                    7@q             Repeat this 7 times

BIÊN TẬP:

Tôi đã sử dụng Hthay vì ggvà lưu 1 byte


Bạn có thể xóa mavà thay đổi `ai<space>thành I<space>.
DJMcMayhem

Ngoài ra, bạn có thể xóa giai đoạn 3 nếu thay đổi giai đoạn 1 sang dán bên trên bên dưới.
DJMcMayhem

@DJMcMayhem Cảm ơn bạn đã gợi ý! Ban đầu tôi đã nghĩ đến việc giới thiệu một thanh ghi mới cho các bit được sao chép, nhưng nó ngắn hơn nhiều!
Kritixi Lithos

5

APL (Dyalog Classic) , 20 19 byte

(⍉⊢⍪1↓⊖)⍣2⌽↑,⍨\1↓⎕d

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

⎕d là các chữ số '0123456789'

1↓bỏ cái đầu tiên ( '0')

,⍨\ hoán đổi quét catenate, tức là các tiền tố đảo ngược '1' '21' '321' ... '987654321'

trộn vào một ma trận đệm với khoảng trắng:

1
21
321
...
987654321

đảo ngược ma trận theo chiều ngang

(... )⍣2làm điều này hai lần:

⍉⊢⍪1↓⊖hoán vị ( ) của chính ma trận ( ) được nối theo chiều dọc ( ) với ma trận đảo ngược theo chiều dọc ( ) mà không có hàng đầu tiên ( 1↓)


4

R, 71 ký tự

Cho các hồ sơ:

s=c(1:9,8:1);for(i in s)cat(rep(" ",9-i),s[0:i],s[(i-1):0],"\n",sep="")

+1 - có thể tiết kiệm một vài vớimessage(rep(" ",9-i),s[c(1:i,i:1-1)])
flodel

@flodel bạn phải lưu ý rằng in ra stderr và bạn cũng có thể làm gì for(i in s<-c(1:9,8:1))...để lưu một byte
Giuseppe


4

k ( 64 50 ký tự)

-1'(::;1_|:)@\:((|!9)#'" "),'$i*i:"J"$(1+!9)#'"1";

Phương pháp cũ:

-1',/(::;1_|:)@\:((|!9)#\:" "),',/'+(::;1_'|:')@\:i#\:,/$i:1+!9;


(1+!9)#'"1",\9#"1"
ngn

4

CJam, 31 27 byte

CJam mới hơn rất nhiều so với thử thách này, vì vậy câu trả lời này không đủ điều kiện để được chấp nhận. Đây là một thử thách tối thứ bảy gọn gàng, mặc dù. ;)

8S*9,:)+9*9/2%{_W%1>+z}2*N*

Kiểm tra nó ở đây.

Ý tưởng là hình thành góc phần tư phía trên bên trái trước. Đây là cách nó hoạt động:

Đầu tiên, hình thành chuỗi " 123456789", sử dụng 8S*9,:)+. Chuỗi này dài 17 ký tự. Bây giờ chúng tôi lặp lại chuỗi 9 lần, và sau đó chia nó thành chuỗi con có độ dài 9 với 9/. Sự không phù hợp giữa 9 và 17 sẽ bù cho mỗi hàng khác một ký tự bên trái. In từng chuỗi con trên dòng riêng của chúng tôi, chúng tôi nhận được:

        1
23456789 
       12
3456789  
      123
456789   
     1234
56789    
    12345
6789     
   123456
789      
  1234567
89       
 12345678
9        
123456789

Vì vậy, nếu chúng ta bỏ mọi hàng khác (hoạt động thuận tiện bằng cách thực hiện 2%), chúng ta sẽ có được một góc phần tư như mong muốn:

        1
       12
      123
     1234
    12345
   123456
  1234567
 12345678
123456789

Cuối cùng, chúng tôi phản chiếu điều này hai lần, hoán chuyển lưới ở giữa để đảm bảo hai hoạt động phản chiếu đi dọc theo các trục khác nhau. Bản thân việc phản chiếu chỉ là

_      "Duplicate all rows.";
 W%    "Reverse their order.";
   1>  "Discard the first row (the centre row).";
     + "Add the other rows.";

Cuối cùng, chúng tôi chỉ tham gia tất cả các dòng với dòng mới, với N*.


3

GolfScript, 36 ký tự

Giả sử rằng điều này có nghĩa là một thử thách , đây là một giải pháp GolfScript cơ bản:

9,.);\-1%+:a{a{1$+7-.0>\" "if}%\;n}%

3

Ruby, 76 ký tự

def f(a)a+a.reverse[1..-1]end;puts f [*1..9].map{|i|f([*1..i]*'').center 17}

Cải tiến chào mừng. :)


1
69 ký tự:f=->x{[*1..x]+[*1...x].reverse};puts f[9].map{|i|(f[i]*'').center 17}
Patrick Oscarity

Nhận xét tuyệt vời, tôi không biết '...' và không hiểu làm thế nào điều này có thể hoạt động.
GB

60 ký tự:[*-8..8].map{|i|puts' '*i.abs+"#{eval [?1*(9-i.abs)]*2*?*}"}
GB

3

Befunge-93 , 155 ký tự

9:v:<,+55<v5*88<v-\9:$_68v
> v>     ^>3p2vpv  -1<!  *
, 1^  2p45*3+9<4:    ,:  +
g -^_75g94+4pg7^!    +^ ,<
1 : ^ `0    :-1$_:68*^$
^1_$:55+\-0\>:#$1-#$:_^

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

Nó chắc chắn có thể được chơi gôn nhiều hơn, nhưng đó là chương trình Funge đầu tiên của tôi và đầu tôi đã bị đau. Có rất nhiều niềm vui, mặc dù


3

JavaScript, 170 byte

Golf mã đầu tiên của tôi :)

Chơi gôn

a="";function b(c){a+=" ".repeat(10-c);for(i=1;i<c;i++)a+=i;for(i=2;i<c;i++)a+=c-i;a+="\n";}for(i=2;i<11;i++)b(i);for(i=9;i>1;i--)b(i);document.write("<pre>"+a+"</pre>");

Ung dung

var str = "";
function row(line) {
    str += " ".repeat(10 - line);
    for (var i = 1; i < line; i++) {
        str += i;
    }
    for (var i = 2; i < line; i++) {
        str += line - i;
    }
    str += "\n";
}
for (var line = 2; line < 11; line++) {
    row(line);
}
for (var line = 9; line > 1; line--) {
    row(line);
}
document.write("<pre>" + str + "</pre>");

Chào mừng đến với PPCG!
Евгений Новиков

2

Perl 56 54 ký tự

Đã thêm 1 char cho công -ptắc.

Sử dụng các bình phương bình phương để tạo ra chuỗi.

s//12345678987654321/;s|(.)|$/.$"x(9-$1).(1x$1)**2|eg

2

Perl, 43 + 1

thêm +1 -Ecần thiết chosay

say$"x(9-$_).(1x$_)**2for 1..9,reverse 1..8

chỉnh sửa: rút ngắn một chút


2

Con trăn, 65

for i in map(int,str(int('1'*9)**2)):print' '*(9-i),int('1'*i)**2

Hãy thử I=int;chuẩn bị mã của bạn và thay thế tất cả các phiên bản tiếp theo intbằngI
Cyoce

@Cyoce Tôi đã nghĩ về điều đó. Nó sẽ tiết kiệm 2 ký tự mỗi lần intđược sử dụng và nó được sử dụng 3 lần, do đó, nó tiết kiệm được 6 ký tự với chi phí là 6 ký tự.
cardboard_box

2

Groovy 77 75

i=(-8..9);i.each{a->i.each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

phiên bản cũ:

(-8..9).each{a->(-8..9).each{c=a.abs()+it.abs();print c>8?' ':9-c};println""}

thêm một giải pháp Groovy 57. Bạn có thể thay thế cả eachvới anylưu hai ký tự.
Matias Bjarland

2

Scala - 86 ký tự

val a="543210/.-./012345";for(i<-a){for(j<-a;k=99-i-j)print(if(k<1)" "else k);println}

2

Javascript, 137

Với đệ quy:

function p(l,n,s){for(i=l;i;s+=" ",i--);for(i=1;i<=n;s+=i++);for(i-=2;i>0;s+=i--);return(s+="\n")+(l?p(l-1,n+1,"")+s:"")}alert(p(8,1,""))

Lần đầu tiên trên CG :)

Hoặc 118

Nếu tôi có thể tìm thấy một triển khai JS thực thi 111111111**2với độ chính xác cao hơn.
(Tại đây: 12345678987654320).

a="1",o="\n";for(i=0;i<9;i++,o+="         ".substr(i)+a*a+"\n",a+="1");for(i=8;i;i--)o+=o.split("\n")[i]+"\n";alert(o)
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.