Давайте пограємо в теніс


45

Мені раптом дуже хочеться пограти в теніс, але на жаль, у мене немає корта!

Сюрприз! Ось куди ви заходите.

Ви повинні надрукувати тенісний корт для мене, але ви повинні це зробити в декількох можливих байтах з конфіденційних причин.

Тенісний корт

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

Це , тому найкоротший код у байтах виграє!


1
Дозволений останній рядок?
Ерік Атголфер

1
Чи можна зробити великі прогалини у рядках 2 та 8 за допомогою вкладок?
FlipTack

3
@ Flp.Tkc, я не думаю, що так. Я думаю, оскільки ніхто з шести опублікованих відповідей не знав, що це було б несправедливо.
Даніель

2
Це напрочуд складний виклик для такого короткого вихідного рядка! Мені це подобається. :)
Лінн

7
Ви можете просто назвати цей виклик "Денніс-корт", оскільки всі знають, хто все одно переможе ... :)
RudolfJelin

Відповіді:



13

Python 2, 65 байт

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

Flp.Tkc зберегла байт.


Це якась божевільна нарізка. Приємно!
Гурупад Мамадапур

Ви можете використовувати '|'+' '*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.
Чарівна восьминіжка Урна





6

Желе , 25 байт

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

СпробуйтеItOnline!

Я сподівався використати 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 байт

Збережено байт завдяки Згарбу!

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

@Zgarb ах, приємно!
Conor O'Brien

4

Рубін, 60 байт

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

Безумовно

-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

інструменти bash / Unix, 58 57 байт

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

Тільки чотири символи, крім нового рядка, відображаються в бажаному висновку, що дозволяє кодувати кожен рядок як базовий номер 4. Ці цифри потім записуються шістнадцятковим у сценарії для стислості.

Універсальний калькулятор постійного струму використовується як для перетворення бази-16 в базову-4, так і для маніпулювання стеком для легкого повторення рядків у потрібних місцях.

Редагувати: Поголив один байт, замінивши дві основні-4 цифри, що використовуються для кодування символів, дозволяючи команді tr бути на один байт коротшою, ніж у попередній версії.


4

JavaScript, 85 байт

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

4

JavaScript (ES6), 86 84 83 81 байт

Збережено 2 байти, завдяки Нілу

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 байт

Запропоновано Нілом:

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 Я не впевнений, що тут дозволяється просто повернути вихід: Ви повинні надрукувати тенісний корт
Арнольд

Просте кодування довжини запуску - байт коротший, ніж ваш альтернативний метод: 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очевидно, замініть новим рядком).
Ніл

Інша формулювання 92-байтовий: console.log('-\n |\n-\n |\nx\n |\n-\n |\n-'.replace(/.*/g,s=>s.repeat(9).slice(-9))).
Ніл

Вибачте, перед кожним має бути 7 або 3 пробіли |, а не один пробіл, який з’являється у моєму коментарі.
Ніл

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 = `---------
| |
--------- `; b =` | | |
`; console.log (a +`)
`+ b +` xxxxxxxxx
`+ b + a)

Тест тут:

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


Ви можете зберегти 4 байти, додавши новий рядок на початку b, оскільки це означає, що ви можете видалити новий рядок після xxxxxxxxxта той, який ви додасте між aі b. Ви можете заощадити ще 3 байта, встановивши aв ---------першому , а потім зчепленню другого рядка і перед самим собою.
Ніл


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. Ви можете зробити їх 65 с <?=$a=($b="---------\n|")."....
Тит

@Titus Мені подобається ваша пропозиція. -nнабагато коротше, ніж -d error_reporting=0:-) У відповіді дійсно лише 66 корисних символів. Я порахував їх за допомогою ls -lта забув, що моя viналаштована на те, щоб файл закінчувався новим рядком. Я покращив ваше вдосконалення і видавив ще 3 байти. Дякую.
аксіак

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

Пайк, 28 26 25 байт

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

Спробуйте тут!

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

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

Vim, 32 байти

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

Це надрукує тенісний корт у буфер vim. ^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

Спробуйте в Інтернеті!

Просто деяке множення рядків, встановлення змінних та забезпечення їх інкапсуляції в паренах для розміщення копій на конвеєрі. За замовчуванням Write-Outputпри завершенні програми нам пропонуються нові рядки безкоштовно.

Завдяки @ConnorLSW за збереження очевидного байта.


$(' '*7)насправді 8 символів, було б коротше, а просто | |пробіли.
colsw

@ConnorLSW О, ха-ха. Дякую за очевидний гольф! : D
AdmBorkBork

щойно повертаю вам ToLower()
гроші

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: дев'ять х, повернення
C-SPC: встановлена ​​позначка
| M-3 SPC | M-3 SPC | RET: труба, три пробіли, труба, три пробіли, труба, повернення
M-9 - RET: дев'ять дефісів, повернення
| M-7 SPC | RET: труба, сім пробілів, труба, повернення
M-9 - RET: дев'ять дефісів, повернення
C-x C-x: пункт обміну та позначка, вибір регіону
M-w: область копіювання
C-p: попередній рядок
C-y: yank скопійований текст
M-x rev-r RET: reverse-regionкоманда Execute


1

Луа, 82 байт.

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

Я спробував багато методів, і все ж цей виявився переможцем.


1

Пушистий , 33 байти

На це запитання було 33 відгуків, і було 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 Байт: (Оптимізація рішення Мітчелл Спектор)

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

Інші рішення: Використання sed; 81 байт;

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

Використання функції постійного струму: 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]}

Пояснення: чверть суду використовує однакові індекси для відображення рядків і стовпців

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.