Hãy chơi tennis


45

Tôi đột nhiên thực sự muốn chơi tennis, nhưng than ôi tôi không có tòa án!

Sự ngạc nhiên! Đây là nơi bạn đến.

Bạn phải in một sân tennis cho tôi, nhưng bạn phải làm điều đó trong vài byte nhất có thể vì lý do bí mật.

Sân quần vợt

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

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


1
Trailing newline được phép?
Erik the Outgolfer

1
Các khoảng trống lớn ở hàng 2 và 8 có thể được thực hiện bằng các tab không?
FlipTack

3
@ Flp.Tkc, tôi không nghĩ vậy. Tôi nghĩ vì không ai khác trong sáu câu trả lời đã đăng đã biết điều đó, nên sẽ không công bằng.
Daniel

2
Đây là một thách thức khó khăn đáng ngạc nhiên cho một chuỗi đầu ra ngắn như vậy! Tôi thích nó. :)
Lynn

7
Bạn chỉ có thể gọi thử thách này là "tòa án Dennis" vì mọi người đều biết ai sẽ thắng dù sao ... :)
RudolfJelin

Câu trả lời:



13

Python 2, 65 byte

s='-','|'+' '*7,'-','|   ','x'
for i in s+s[3::-1]:print(i*9)[:9]

Flp.Tkc đã lưu một byte.


Đó là một lát cắt điên rồ. Đẹp!
Gurupad Mamadapur

Bạn có thể sử dụng '|'+' '*7cho chuỗi thứ hai sđể lưu một byte!
FlipTack

12

05AB1E ,29 27 26 byte

'-9ש'|ð4׫Dûs®s¨¨ûû'x5×»û

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

'-9ש                      Push "---------" and store it as temporary value
     '|ð4׫Dûs             Push palindromized("|    ") = "|       |"
                           and push "|    "
              ®            Push "---------" again
               s¨¨û        Strip the last 2 characters from "|    " and push palindromized("|  ") = "|   |"
                   û       Palindromize last item -> "|   |   |"
                    'x5×   Push "xxxxx"
                        »  Join everything with newlines
                         û Palindromize the result and implicitly display it

9'-×D'|4ð׫©ûs®¨'|«û5'x×»ûđã thử tái cấu trúc một chút, không thể phá vỡ 26.
Bạch tuộc ma thuật Urn


7

Python 3 - 73 72 byte

d=b,a,c='|       |','-'*9,'|   |   |'
print(a,*d,'x'*9,c,a,b,a,sep='\n')

Python 3.6 - 75 byte

x=f"{'-'*9}\n|{' '*7}|\n{'-'*9}\n|   |   |\n"
print(x,'x'*9,x[::-1],sep='')

Tín dụng vào flp-tkc . Cảm ơn bạn :)

Thử ở đây!




6

Thạch , 25 byte

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY

Dùng thử trực tuyến!

Tôi đã hy vọng sử dụng sự lặp lại của tòa án 1,3,1 quý, nhưng không thể ép nó thành ít hơn (phiên bản thô là 28 “ßṂuB’b4s3x“¢¤¢‘ị“- x|”ŒBŒḄY:).

Làm sao?

“¡⁵÷ḞȯḤɼ’b4ị“- x|”s5ŒBŒḄY - Main link: no arguments
“¡⁵÷ḞȯḤɼ’                 - base 250 number: 375116358919167
         b4               - convert to base 4:
                                [1,1,1,1,1,0,2,2,2,2,1,1,1,1,1,0,2,2,2,0,3,3,3,3,3]
           ị“- x|”        - index into character list "- x|" (1-based):
                                "-----|    -----|   |xxxxx"
                  s5      - split into chunks of length 5:
                               ["-----","|    ","-----","|   |","xxxxx"]
                    ŒB    - bounce (vectorises):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx"]
                      ŒḄ  - bounce (non-vectorising version):
                               ["---------","|        |","---------","|   |   |","xxxxxxxxx","|   |   |","---------","|        |","---------"]
                        Y - join with line feeds:
                          - implicit print

5

J, 70 54 51 50 byte

Đã lưu một byte nhờ Zgarb!

9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050

Một số kỹ thuật nén tiêu chuẩn, sử dụng RLE nén.

   9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Sắp xếp lại và lưu một byte:9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
Zgarb

@Zgarb ah, tốt đẹp!
Conor O'Brien

4

Ruby, 60 byte

-4.upto(4){|i|puts''.rjust(9,%w{x |%3s - |%7s -}[i.abs]%'')}

Ung dung

-4.upto(4){|i|                    #iterate -4 to 4.
   puts''.rjust(9,                #Print the null string right justified to length 9 padded by repititions of
   %w{x |%3s - |%7s -}[i.abs]%'') #the string from the %w{} array modified like sprintf by the % operator
}                                 #so that %Ns is replaced by N spaces.

4

công cụ bash / Unix, 58 57 byte

dc<<<4o16i3FFFFp20002prp20202p15555pszpszfp|tr 0-3 ' x|-'

Chỉ có bốn ký tự khác với dòng mới xuất hiện trong đầu ra mong muốn, cho phép mỗi dòng được mã hóa thành số cơ sở 4. Những con số này sau đó được viết theo hệ thập lục phân trong kịch bản, để cho ngắn gọn.

Máy tính Unix dc được sử dụng cho cả chuyển đổi từ cơ sở 16 sang cơ sở 4 và cho thao tác ngăn xếp để cho phép dễ dàng lặp lại các dòng ở đúng nơi.

Chỉnh sửa: Tắt một byte bằng cách hoán đổi hai trong số 4 chữ số cơ bản được sử dụng để mã ký tự, cho phép lệnh tr ngắn hơn một byte so với phiên bản trước.


4

JavaScript, 85 byte

console.log('---|  ---| |xxx| |---|  ---'.replace(/(.)((.).)/g,'$1$3$3$2$3$3$3$1\n'))

4

JavaScript (ES6), 86 84 83 81 byte

Đã lưu 2 byte, nhờ Neil

a=`---------
`;a+=`|       |
`+a;b=`|   |   |
`;console.log(a+b+`xxxxxxxxx
`+b+a)

Phương pháp thay thế # 1, 93 byte

console.log('01232101242421512424210123210'.replace(/./g,n=>`-
|  x`[n].repeat('911739'[n])))

Phương pháp thay thế # 2, 86 byte

Được đề xuất bởi Neil:

console.log(`-${s=`
       |
-
   |
`}x${s}-`.replace(/.*/g,s=>s.repeat(9).slice(-9)))

Phương pháp thay thế # 3, 91 byte

Một cách tiếp cận đệ quy:

console.log((f=(n,c=`xxxx
|   |   |
---------
|       |
`[n]||'-')=>~n--?c+f(n)+c:'x')(43))

Bạn có thể biến điều này thành một hàm để lưu một vài byte.
Conor O'Brien

@ ConorO'Brien Tôi không chắc chắn chỉ được phép trả lại đầu ra ở đây: Bạn phải in một sân tennis
Arnauld

Mã hóa độ dài chạy đơn giản là một byte ngắn hơn phương thức thay thế của bạn: console.log('-9\n| 7|\n-9\n| 3| 3|\nx9\n| 3| 3|\n-9\n| 7|\n-9'.replace(/.\d/g,s=>s[0].repeat(s[1])))( \nrõ ràng thay thế bằng dòng mới).
Neil

Một công thức 92 byte khác : console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9))).
Neil

Xin lỗi, có khoảng 7 hoặc 3 khoảng trống trước mỗi khoảng trống |là phù hợp thay vì khoảng trắng xuất hiện trong nhận xét của tôi.
Neil

4

SOGL 0,5 , 24 23 20 byte (không cạnh tranh)

 -9*"D√⅜‘⁴"Hοr‘¹q x9*o±

Giải trình:

"'|⁶.f,‘9n_h¹q x9*o±
"'|⁶.f,‘              pushes "------------------|       ||   |   |"
        9n            splits into chunks of 9
                       stack: [["---------","---------","|       |","|   |   |"]]
          _           puts all the contents of the array into the stack
                       stack: ["---------","|       |","---------","|   |   |"]
           h          swaps the 2nd from top with 3rd from top
            ¹         turns back into array
                       stack: [["---------","|       |","---------","|   |   |"]]
             q        outputs the array without popping it from stack
               x      push "x"
                       stack: [["---------","|       |","---------","|   |   |"], "x"]
                9*    repeat it 9 times
                       stack: [["---------","|       |","---------","|   |   |"], "xxxxxxxxx"]
                  o   output that
                   ±  reverse the array
implicitly output the reversed array

Vậy làm thế nào để chuỗi nén hoạt động?

Chuỗi được chuyển đổi từ cơ sở 250 sang nhị phân là 1000000100111110010100001110100000001100010001

và gần đúng những gì nó làm:

100 boxstring (a custom dictionary string with chars " -/\|_\n")
000010 choose only the "-"s
01111 with length of 15+(different chars used)+2 = 18 chars
there is only 1 char type, so results in "------------------"
100 another boxsting
101000 choosing " " and "|"
01110 with length of 14+(different chars used)+2 = 18 chars
100000001100010001 the data; 0 = " " and 1 = "|"
has "------------------" and "|       ||   |   |" and just joins them together

không cạnh tranh, vì ngôn ngữ trì hoãn thử thách. Và thử thách này chỉ là một ngày tuổi. Tôi biết tôi nên đặt một cái gì đó lên ngày hôm qua. Tôi đã làm điều này như một bài kiểm tra cho ngôn ngữ của tôi và nó đã kết thúc quá tốt để không đăng. Khá chắc chắn rằng đây là golfable hơn.



3

Javascript (ES6), 86 byte:

a = `---------
| |
--------- `; b =` | | |
`; console.log (a +`
`+ b +` xxxxxxxxx
`+ b + a)

Kiểm tra tại đây:

a=`---------
|       |
---------`;b=`|   |   |
`;console.log(a+`
`+b+`xxxxxxxxx
`+b+a)


Bạn có thể lưu 4 byte bằng cách thêm một dòng mới vào lúc bắt đầu b, vì điều này có nghĩa là bạn có thể xóa dòng mới sau xxxxxxxxxvà một dòng mà bạn thêm giữa ab. Bạn có thể lưu thêm 3 byte bằng cách đặt athành ---------đầu tiên và sau đó nối hàng thứ hai và a với chính nó.
Neil


3

PHP, 66 62 byte

Đây là câu trả lời ban đầu (66 byte):

<?=$a="---------
|       |
---------
|   |   |
xxxx",x,strrev($a);

Nó tạo ra một thông báo vì hằng số chưa biết x. Thông báo có thể được loại bỏ bằng cách đặt error_reporting=0trong php.inihoặc trong dòng lệnh:

$ php -d error_reporting=0 tennis.php

Dòng cuối cùng của đầu ra không kết thúc bằng một ký tự dòng mới.


Câu trả lời được cập nhật (62 byte), cải thiện một cải tiến được đề xuất bởi @Titus:

<?=$a=($b="---------
|   ")."    |
$b|   |
xxxx",x,strrev($a);

Chạy nó mà không có tệp cấu hình (mặc định error_reporting=0theo cách này):

$ php -n tennis.php

Cả hai phiên bản của mã đều chứa các dòng mới theo nghĩa đen được nhúng trong chuỗi (ngắn hơn 1 byte \n) và chúng tôi không thể mở khóa.


1
Thông báo được tắt trong cấu hình mặc định; không cần -d error_reporting=0, chỉ cần sử dụng -n.
Tít

Tôi đếm 66. Bạn có thể làm cho họ 65 với <?=$a=($b="---------\n|")."....
Tít

@Titus Tôi thích đề xuất của bạn. -nngắn hơn nhiều so với -d error_reporting=0:-) Thực sự, chỉ có 66 ký tự hữu ích trong câu trả lời. Tôi đếm chúng bằng cách sử dụng ls -lvà quên tôi viđược cấu hình để đảm bảo tệp kết thúc bằng một dòng mới. Tôi đã cải thiện sự cải thiện của bạn và vắt thêm 3 byte. Cảm ơn bạn.
axiac

2

PHP, 72 byte

<?=$a="---------
",$b="|       |
$a",$c="|   |   |
","xxxxxxxxx
$c$a$b";

Tôi gần như ghét nó khi nó ngắn như thế này hơn là tính toán một chút.


2

Ruby, 52 byte

puts [b=[a=?-*9,"|%8s"%?|,a],c="|   |   |",?x*9,c,b]

Sử dụng tính năng đối xứng kép, các dòng là : 0-1-0 / 2-3-2 / 0-1-0, vòng lặp có thể dễ dàng không được kiểm soát và danh sách lồng nhau được làm phẳng trên đầu ra.


2

Pyke, 28 26 25 byte

\|ddsssd7*.X--||"R\x5*nJs

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

       d7*                -    " " * 7
          .X--||"         -   grid(^, corners="-", sides="-", left="|", right="|")
\|dds                     -     "|  "
     s                    -    palindromise(^)
      s                   -   palindromise(^)
                  \x5*    -   "x" * 5
                      nJ  -  "\n".join(^)
                        s - palindromise(^)

2

05AB1E, 25 byte

'-9ש'|ð4׫û®…|  ûû'x5×»û

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!

Giải trình:

'-9×                       # Push "---------"
    ©                      # Store in register_c
     '|ð4׫                # Push "|    "
           û               # Palindromize, giving "|       |"
            ®              # Retrieve from register_c
             …|            # Push "|  "
                 ûû        # Palindromize twice, giving "|   |   |"
                   'x5×    # Push "xxxxx"
                       »   # Join by newlines
                        û  # Palindromize
                           # Implicit print

2

Vim, 32 byte

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[

Điều này sẽ in sân tennis vào một bộ đệm vim. ^Mđại diện cho phím Enter (0x0d) và ^[là phím Escape (0x1b). Bạn có thể chạy các tổ hợp phím / mã này bằng cách lưu chúng vào một tệp và chạy

vim -s <filename> -u NONE

In ra thiết bị xuất chuẩn

Thay vào đó, nếu nó phải được in ra thiết bị xuất chuẩn, bạn có thể lưu bộ đệm vào một tệp (tôi đã sử dụng "a") và sử dụng bất kỳ shell nào vimđược đặt để sử dụng (tôi đã sử dụng bash) cũng như catchương trình để in sân tennis thiết bị xuất chuẩn (51 byte):

9i-^[Y3pO||^[7i ^[YGPkP4lr|YpO^[9ix^[:w!a|sil !cat %^M:q^M

Nó giống như phiên bản trước nhưng :w!a|sil !cat %^M:q^Mđược thêm vào cuối


2

J, 36 byte

9$'-'([,(' '4}]),[,],'x',:])9$'|   '

Điều này hoạt động trên REPL, đó là cách sử dụng tiêu chuẩn J:

   9$'-'([,(' '4}]),[,],'x',:])9$'|   '
---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Với 41 byte , tôi có thể in kết quả sang STDOUT:

echo 9$'-'([,(' '4}]),[,],'x',:])9$'|   '

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

Giải trình

Tôi xây dựng sân tennis một hàng một lần.

9$'-'([,(' '4}]),[,],'x',:])9$'|   '
                            9$'|   '  The string repeated to length 9: y = '|   |   |'
  '-'(                     )          Apply this verb to x = '-' and y:
                     'x',:]            y with a row of 'x'-chars above it.
                                       This is a 2x9 matrix, and "," now works by
                                       prepending new rows to it.
                   ],                  Prepend another y.
                 [,                    Prepend x, which is repeated to a row of length 9.
        (' '4}]),                      Prepend y with 4th character replaced by a space.
      [,                               Prepend x again.
                                      Now we have this 6x9 matrix:
                                       ---------
                                       |       |
                                       ---------
                                       |   |   |
                                       xxxxxxxxx
                                       |   |   | 
9$                                    Repeat it to have 9 rows.

2

PowerShell , 67 66 byte

($a='-'*9)
($b="|       |")
$a
($c="|   "*2+"|")
'x'*9
$c
$a
$b
$a

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

Chỉ cần một số phép nhân chuỗi, thiết lập các biến và đảm bảo chúng được gói gọn trong các ô để đặt các bản sao trên đường ống. Mặc định Write-Outputkhi hoàn thành chương trình cung cấp cho chúng tôi các dòng mới giữa miễn phí.

Cảm ơn @ConnorLSW vì đã lưu một byte rõ ràng.


$(' '*7)thực sự là 8 ký tự, sẽ ngắn hơn nếu chỉ làm | |không gian.
colsw

@ConnorLSW ơi, haha. Cảm ơn vì golf rõ ràng! : D
admBorkBork

chỉ trả lại cho bạn để ToLower()tiết kiệm cho câu trả lời khác của tôi;)
colsw

1

Python 2, 75 byte

a,b,c='-'*9,'|       |','|   |   |'
for e in[a,b,a,c,'x'*9,c,a,b,a]:print e

Sử dụng các biến được mượn từ @GurupadMamadapur

Thay thế cho 75

a,b,c='-'*9,'|       |','|   |   |'
print'\n'.join([a,b,a,c,'x'*9,c,a,b,a])

1

Emacs, 43 35 tổ hợp phím

M-9 x RET: chín x's, return
C-SPC: set mark
| M-3 SPC | M-3 SPC | RET: pipe, ba space, pipe, ba space, pipe, return
M-9 - RET: chín hyphens, return
| M-7 SPC | RET: pipe, seven space, pipe, return
M-9 - RET: chín hyphens, return
C-x C-x: điểm trao đổi và đánh dấu, chọn vùng
M-w: vùng sao chép
C-p: dòng trước
C-y: yank sao chép văn bản
M-x rev-r RET: thực thi reverse-regionlệnh


1

Lua, 82 byte.

y=[[---------
|       |
---------
]]z="|   |   |\n"io.write(y,z,"xxxxxxxxx\n",z,y)

Tôi đã thử nhiều phương pháp, nhưng cách này đã chứng minh người chiến thắng.


1

Pushy , 33 byte

Câu hỏi này có 33 câu hỏi và có 33 câu trả lời, vì vậy tôi chỉ cần đăng một giải pháp 33 byte ...

9:45;T`|    `wT`|   |`4dT5:120;w"

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


Giải trình

Mã có thể được chia thành nhiều phần, để dễ hiểu hơn. Phần đầu tiên hoạt động như vậy:

9:45;    \ Push the char '-' 9 times
T        \ Push 10, which is a linefeed
`|    `  \ Push these charcodes

Bây giờ là ngăn xếp:

---------
|

Toán tử gương w, sau đó phản chiếu toàn bộ ngăn xếp, tạo ra:

---------
|       |
---------

Sau đó:

T        \ Push a linefeed
`|   |`  \ Push these chars
4d       \ Copy the last 4 characters
T        \ Push a linefeed
5:120;   \ Push the char 'x', 5 times

Các ngăn xếp bây giờ bắt đầu trông giống như sân tennis:

---------
|       |
---------
|   |   |
xxxxx

Để hoàn thành nó, chúng tôi sử dụng toán tử gương wmột lần nữa, nó phản ánh chuỗi này để tạo ra sân tennis đầy đủ.

---------
|       |
---------
|   |   |
xxxxxxxxx
|   |   |
---------
|       |
---------

Tất cả những gì còn lại bây giờ là in, được thực hiện bởi "nhân vật.


1

Vỏ Unix; sử dụng dc và tr; 55 byte: (Tối ưu hóa giải pháp của Spector Mitchell)

dc<<<4o16i3FFFFp20002prp20202p15555psrfrp|tr 0-3 ' x|-'

Giải pháp khác: Sử dụng sed; 81 byte;

echo "---|  ---| |xxx| |---|  ---"|sed "s/\(.\)\(.\)\(.\)/\1\2\2\2\3\2\2\2\1\n/g"

Sử dụng dc trong chức năng: 88 Byte

b(){ dc<<<2o16i1${1}p|tr '01' ' '$2;};(b FF -;b 01 \|;b FF -;b 11 \|)>f;cat f;b FF X;tac f

hoặc là

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

Sử dụng bc trong chức năng: 99 Byte

b(){ echo "obase=2;$1"|bc|tr '01' ' '$2;};(b 511 -;b 257 \|;b 511 -;b 273 \|)>f;cat f;b 511 X;tac f 

1

Powershell, 56 byte

(('-'*9),'|       |'+'-'*9+'|   |   |'+'x'*9)[0..4+3..0]

Giải thích: một nửa tòa án đơn giản

Thay thế, 68 byte

('-----','|    '+'-'*5+'|   |'+'x'*5)[($r=0..4+3..0)]|%{-join$_[$r]}

Giải thích: tứ quý sử dụng các chỉ mục giống nhau cho cả hiển thị hàng và cột

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.