มาเล่นเทนนิสกัน


45

ทันใดนั้นฉันอยากเล่นเทนนิส แต่ฉันไม่มีศาล!

เซอร์ไพร์ส! นี่คือที่ที่คุณเข้ามา

คุณต้องพิมพ์สนามเทนนิสให้ฉัน แต่คุณต้องทำน้อยที่สุดเท่าที่จะเป็นไปได้เนื่องจากเหตุผลที่เป็นความลับ

สนามเทนนิส

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

นี่คือดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!


1
ขึ้นบรรทัดใหม่ที่อนุญาตหรือไม่
Erik the Outgolfer

1
ช่องว่างขนาดใหญ่ในแถว 2 และ 8 สามารถทำได้โดยใช้แท็บหรือไม่
FlipTack

3
@ Flp.Tkc ฉันไม่คิดอย่างนั้น ฉันคิดว่าเนื่องจากไม่มีใครในหกคำตอบที่โพสต์แล้วรู้ว่ามันจะไม่ยุติธรรม
Daniel

2
นี่เป็นความท้าทายที่น่าประหลาดใจสำหรับสตริงเอาต์พุตสั้น ๆ ! ฉันชอบมัน. :)
ลินน์

7
คุณสามารถเรียกความท้าทายนี้ว่า "ศาลเดนนิส" ได้เนื่องจากทุกคนรู้ว่าใครจะชนะต่อไป ... :)
RudolfJelin

คำตอบ:



13

Python 2, 65 ไบต์

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

Flp.Tkc บันทึกเป็นไบต์


นั่นคือการแบ่งบางส่วนที่บ้า ดี!
Gurupad Mamadapur

คุณสามารถใช้'|'+' '*7สตริงที่สองในsการบันทึกไบต์!
FlipTack

12

05AB1E ,29 27 26 ไบต์

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

ลองออนไลน์!

'-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×»ûพยายามปรับโครงสร้างเล็กน้อยไม่สามารถทำลายได้ 26.
Magic Octopus Urn

อีก26 ไบต์ทางเลือก
Kevin Cruijssen




6

เยลลี่ 25 ไบต์

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

TryItOnline!

ผมหวังที่จะใช้ซ้ำศาล 1,3,1 ไตรมาส แต่ไม่สามารถบีบที่เป็นน้อยกว่า (รุ่นดิบเป็น 28: “ßṂuB’b4s3x“¢¤¢‘ị“- x|”ŒBŒḄY)

อย่างไร?

“¡⁵÷ḞȯḤɼ’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 ไบต์

บันทึกเป็นไบต์ด้วย Zgarb!

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

เทคนิคการบีบอัดมาตรฐานบางอย่างใช้การบีบอัด RLE

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

จัดลำดับใหม่และบันทึกไบต์:9 9$'-| |-| | |x| | |'#~3 9 1 7{~4#.inv 1851926050
Zgarb

@Zarb อ่า!
Conor O'Brien

4

Ruby, 60 ไบต์

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

Ungolfed

-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

เครื่องมือทุบตี / Unix, 58 57 ไบต์

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

อักขระสี่ตัวที่นอกเหนือจากบรรทัดใหม่จะปรากฏในเอาต์พุตที่ต้องการทำให้แต่ละบรรทัดมีการเข้ารหัสเป็นตัวเลขฐาน 4 ตัวเลขเหล่านี้จะถูกเขียนเป็นเลขฐานสิบหกในสคริปต์เพื่อความกระชับ

เครื่องคิดเลข Unix dc ใช้ทั้งสำหรับการแปลงฐาน 16 ถึงเบส 4 และสำหรับการจัดการสแต็กเพื่อให้สามารถทำซ้ำบรรทัดในตำแหน่งที่ถูกต้องได้ง่าย

แก้ไข:โกนหนึ่งไบต์ด้วยการสลับสองหลัก -4 หลักที่ใช้กับรหัสอักขระอนุญาตให้คำสั่ง tr เป็นหนึ่งไบต์สั้นกว่ารุ่นก่อนหน้า



4

JavaScript (ES6), 86 84 83 81 ไบต์

บันทึก 2 ไบต์ขอบคุณ Neil

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

วิธีสำรอง # 1, 93 ไบต์

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

วิธีอื่น # 2, 86 ไบต์

แนะนำโดย Neil:

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

วิธีสำรอง # 3, 91 ไบต์

วิธีแบบเรียกซ้ำ:

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

คุณสามารถทำให้ฟังก์ชันนี้บันทึกสองสามไบต์
Conor O'Brien

@ ConorO'Brien ฉันไม่แน่ใจว่าได้รับอนุญาตให้ส่งคืนผลลัพธ์ได้ที่นี่: คุณต้องพิมพ์สนามเทนนิส
Arnauld

การเข้ารหัสความยาวรันอย่างง่ายคือไบต์ที่สั้นกว่าวิธีอื่นของคุณ: 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])))(แทนที่\nด้วยการขึ้นบรรทัดใหม่อย่างชัดเจน)
Neil

อีกสูตร 92 console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9)))ไบต์:
Neil

ขออภัยควรมีช่องว่าง 7 หรือ 3 ช่องก่อนหน้าแต่ละช่อง|ตามความเหมาะสมแทนช่องว่างเดียวที่ปรากฏในความคิดเห็นของฉัน
Neil

4

SOGL 0.5 , 24 23 20 ไบต์ (ไม่แข่งขัน)

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

คำอธิบาย:

"'|⁶.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

ดังนั้นสตริงที่บีบอัดจะทำงานอย่างไร

สตริงที่ถูกแปลงจาก base250 เป็นไบนารีคือ 1000000100111110010100001110100000001100010001

และโดยประมาณว่ามันทำอะไร:

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

ไม่ใช่การแข่งขันเนื่องจากภาษาโพสต์ความท้าทาย และความท้าทายนี้มีอายุเพียงหนึ่งวัน ฉันรู้ว่าฉันควรจะใส่อะไรเมื่อวานนี้ ฉันทำสิ่งนี้เป็นแบบทดสอบสำหรับภาษาของฉันและมันก็จบลงด้วยดีที่จะไม่โพสต์ ค่อนข้างแน่ใจว่านี่สามารถเล่นกอล์ฟได้อีกด้วย



3

Javascript (ES6), 86 ไบต์:

A = `---------
| |
--------- `ข =` | | |
`; console.log (A +`
`+ B +` xxxxxxxxx
`+ B + A)

ทดสอบที่นี่:

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


คุณสามารถบันทึก 4 ไบต์โดยการเพิ่มขึ้นบรรทัดใหม่ในช่วงเริ่มต้นของการbเป็นวิธีที่คุณสามารถเอาขึ้นบรรทัดใหม่หลังจากxxxxxxxxxและคนที่คุณเพิ่มระหว่างและa bคุณสามารถบันทึกเพิ่มอีก 3 ไบต์โดยการตั้งค่าaเป็น---------อันดับแรกจากนั้นเชื่อมแถวที่สองและ a เข้ากับตัวเอง
Neil


3

PHP, 66 62 ไบต์

นี่คือคำตอบเดิม (66 ไบต์):

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

xมันสร้างแจ้งให้ทราบล่วงหน้าเพราะคงไม่รู้จัก สามารถยกเลิกการแจ้งเตือนได้โดยการตั้งค่าerror_reporting=0ในphp.iniหรือในบรรทัดคำสั่ง:

$ php -d error_reporting=0 tennis.php

บรรทัดสุดท้ายของผลลัพธ์ไม่ได้ลงท้ายด้วยอักขระขึ้นบรรทัดใหม่


คำตอบที่อัปเดตแล้ว (62 ไบต์) ปรับปรุงการปรับปรุงที่แนะนำโดย @Titus:

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

เรียกใช้โดยไม่มีไฟล์กำหนดค่า (เป็นค่าเริ่มต้นด้วยerror_reporting=0วิธีนี้):

$ php -n tennis.php

โค้ดทั้งสองเวอร์ชันมีบรรทัดใหม่ตามตัวอักษรที่ฝังอยู่ในสตริง (สั้นกว่า 1 ไบต์\n) และเราไม่สามารถถอดออกได้


1
ประกาศถูกปิดในการกำหนดค่าเริ่มต้น; ไม่จำเป็นต้องใช้เพียง-d error_reporting=0 -n
ติตัส

ฉันนับ 66. <?=$a=($b="---------\n|")."...คุณสามารถทำให้พวกเขามี
ติตัส

@Titus ฉันชอบข้อเสนอแนะของคุณ -nสั้นกว่า-d error_reporting=0:-) จริง ๆ มีเพียง 66 ตัวอักษรที่มีประโยชน์ในคำตอบ ฉันนับพวกเขาโดยใช้ls -lและลืมviกำหนดค่าของฉันเพื่อให้แน่ใจว่าไฟล์ลงท้ายด้วยบรรทัดใหม่ ฉันปรับปรุงการปรับปรุงของคุณและบีบอีก 3 ไบต์ ขอขอบคุณ.
axiac

2

PHP, 72 ไบต์

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

ฉันเกือบจะเกลียดเมื่อมันสั้นกว่าแบบนี้


2

ทับทิม 52 ไบต์

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

ใช้สมมาตรสองเส้นคือ: 0-1-0 / 2-3-2 / 0-1-0, วงสามารถยกเลิกได้อย่างง่ายดายและรายการซ้อนอยู่ในแบนเมื่อออก



2

05AB1E, 25 ไบต์

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

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!

คำอธิบาย:

'-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

เป็นกลุ่ม 32 ไบต์

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

สิ่งนี้จะพิมพ์สนามเทนนิสลงในบัฟเฟอร์เป็นกลุ่ม ^Mแทนปุ่ม Enter (0x0d) และ^[เป็นกุญแจ Escape (0x1b) คุณสามารถเรียกใช้การกดแป้น / รหัสเหล่านี้โดยบันทึกลงในไฟล์และเรียกใช้

vim -s <filename> -u NONE

กำลังพิมพ์ไปยัง stdout

หากจะต้องพิมพ์ไปยัง stdout แทนคุณสามารถบันทึกบัฟเฟอร์ลงในไฟล์ (ฉันใช้ "a") และใช้เชลล์ใดก็ตามที่vimถูกตั้งค่าให้ใช้ (ฉันใช้bash) และcatโปรแกรมเพื่อพิมพ์สนามเทนนิสไปที่ stdout (51 ไบต์):

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

เหมือนกับรุ่นก่อนหน้า แต่:w!a|sil !cat %^M:q^Mเพิ่มเข้ากับท้าย


2

J, 36 ไบต์

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

ใช้งานได้กับ REPL ซึ่งเป็นวิธีมาตรฐานในการใช้ J:

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

ด้วย41 ไบต์ฉันสามารถพิมพ์ผลลัพธ์ไปที่ STDOUT:

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

ลองออนไลน์!

คำอธิบาย

ฉันสร้างสนามเทนนิสทีละแถว

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 ไบต์

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

ลองออนไลน์!

เพียงแค่การคูณสตริงการตั้งค่าตัวแปรและตรวจสอบให้แน่ใจว่ามีการห่อหุ้มใน parens เพื่อวางสำเนาบนไพพ์ไลน์ ค่าเริ่มต้นWrite-Outputเมื่อโปรแกรมเสร็จสมบูรณ์จะให้เราขึ้นบรรทัดใหม่ระหว่างฟรี

ขอบคุณ @ConnorLSW สำหรับการบันทึกไบต์ที่ชัดเจน


$(' '*7)อันที่จริงแล้ว 8 ตัวอักษรจะสั้นกว่าเพื่อทำเป็น| |ช่องว่าง
colsw

@ConnorLSW โอ้ฮ่าฮ่า ขอบคุณสำหรับสนามกอล์ฟที่ชัดเจน! : D
AdmBorkBork

เพียงแค่จ่ายเงินให้คุณกลับมาสำหรับToLower()บันทึกคำตอบอื่น ๆ ของฉัน;)
colsw

1

Python 2, 75 ไบต์

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

ใช้ตัวแปรที่ยืมมาจาก @GurupadMamadapur

ทางเลือกสำหรับ 75

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

1

Emacs, 43 35 การกดแป้น

M-9 x RET: เก้า x's, return
C-SPC: set mark
| M-3 SPC | M-3 SPC | RET: pipe, สามช่องว่าง, ท่อ, สามช่องว่าง, return
M-9 - RET: เก้า hyphens, return
| M-7 SPC | RET: pipe, เจ็ดช่องว่าง, return
M-9 - RET: เก้า hyphens, return
C-x C-x: exchange point and mark, เลือกภูมิภาค
M-w: คัดลอกภูมิภาค
C-p: บรรทัดก่อนหน้า
C-y: yank ข้อความที่คัดลอก
M-x rev-r RET: รันreverse-regionคำสั่ง


1

Lua, 82 ไบต์

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

ฉันลองใช้วิธีการหลายอย่างแล้ว แต่อันนี้ก็พิสูจน์ว่าเป็นผู้ชนะ


1

Pushy , 33 ไบต์

คำถามนี้มี 33 upvotes และมี 33 คำตอบดังนั้นฉันต้องโพสต์วิธีแก้ปัญหา 33 ไบต์ ...

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

ลองออนไลน์!


คำอธิบาย

รหัสสามารถแบ่งออกเป็นหลายส่วนเพื่อให้ง่ายต่อการเข้าใจ ส่วนแรกใช้งานได้:

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

สแต็กตอนนี้:

---------
|

ตัวดำเนินการมิรเรอร์w, จากนั้นทำมิรเรอร์สแต็กทั้งหมด, สร้าง:

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

แล้ว:

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

สแต็คตอนนี้เริ่มดูเหมือนสนามเทนนิส:

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

ในการทำให้เสร็จเราใช้ผู้ควบคุมกระจกwอีกครั้งซึ่งสะท้อนถึงสายนี้เพื่อสร้างสนามเทนนิสเต็มรูปแบบ

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

สิ่งที่เหลืออยู่ตอนนี้คือการพิมพ์ซึ่งทำโดย"ตัวละคร


1

Unix Shell; ใช้ dc และ tr; 55 ไบต์: (การเพิ่มประสิทธิภาพของโซลูชัน Mitchell Spector)

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

โซลูชันอื่น ๆ : การใช้งาน; 81 ไบต์;

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

การใช้ dc ในฟังก์ชั่น: 88 ไบต์

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

หรือ

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 

ใช้ bc ในฟังก์ชั่น: 99 ไบต์

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 ไบต์

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

คำอธิบาย: ตรงไปตรงมาของศาล

ทางเลือก, 68 ไบต์

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

คำอธิบาย: quarter-of-the-court ใช้ดัชนีเดียวกันสำหรับการแสดงแถวและคอลัมน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.