Соответствующая часть для подачи бадминтона


10

Введение:

Я видел, что сейчас был только один вызов, связанный с бадминтоном . Так как я сам играю в бадминтон (последние 13 лет), я решил добавить несколько проблем, связанных с бадминтоном. Здесь второе ( первое можно найти здесь ):

Вызов:

Несколько правил о бадминтоне:

  • Подача всегда будет делаться по диагонали через сеть.
  • Вы должны всегда служить после линии, параллельной и ближайшей к сети.
  • Область, в которой вам разрешено служить, различается в зависимости от того, является ли это синглом (1 против 1) или двойным / смешанным (2 против 2).
    • Для одиноких (1 против 1) синяя область на рисунке ниже - это место, где вам разрешено служить. Так что это включает в себя часть сзади, но исключая части сбоку.
    • Для удвоения / смешивания (2 против 2) зеленая область на рисунке ниже - это то место, где вам разрешено работать на сервере. Так что это исключая часть сзади, но включая части сбоку.
  • Вы не можете стоять на линии при обслуживании. Но шаттл все еще будет внутри, если он приземлится на вершине линии.

Вот расположение поля для бадминтона:
введите описание изображения здесь

Правила вызова:

Входные данные:

Вам будут предоставлены два входа:

  • Что-то, чтобы указать, играем ли мы сингл или дабл / микс (т.е. булево)
  • Что-то, чтобы указать, с какого блока вы обслуживаете (то есть [1,2,3,4]или ['A','B','C','D']как используется на картинке выше).

Вывод:

Только соответствующие строки для текущей подачи (включая сеть), в том числе, Fчтобы указать, откуда вы служите, и несколько, Tчтобы указать, где вы будете потенциально служить.

Хотя на самом деле вам разрешено служить из любого места в указанных местах, мы предполагаем, что человек, который будет служить, всегда будет стоять в углу зоны подачи, ближе к середине сетки, где вы будете размещать F. И они будут служить любому из четырех углов области, где они должны служить, где вы будете размещать Ts.
Как и ASCII-арт, все поле для бадминтона будет выглядеть следующим образом (числа добавляются, поэтому вам не нужно считать их самостоятельно):

 2        15              15        2

+--+---------------+---------------+--+
|  |               |               |  |    1
+--+---------------+---------------+--+
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |    9
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
+--+---------------+---------------+--+
|  |               |               |  |    2
|  |               |               |  |
O=====================================O    37 times '='
|  |               |               |  |
|  |               |               |  |    2
+--+---------------+---------------+--+
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |    9
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
|  |               |               |  |
+--+---------------+---------------+--+
|  |               |               |  |    1
+--+---------------+---------------+--+

Примеры:

Вот два примера для вывода только соответствующих частей подачи:

Вход: одиночный и обслуживающий блок. A
Выход:

                   T---------------T   
                   |               |   
                   +---------------+   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   |               |   
                   T---------------T   
                   |               |    
                   |               |    
O=====================================O
   |               |                     
   |               |                     
   +---------------+                   
   |              F|                   
   |               |                   
   |               |                   
   |               |                   
   |               |                   
   |               |                   
   |               |                   
   |               |                   
   |               |                   
   +---------------+                   
   |               |                   
   +---------------+                   

Как вы можете видеть, Fв углу внутри блока добавляется, но его Tзаменяет +выход ASCI-art.


Вход: двойной и обслуживающий блок. C
Выход:

                                       

+--+---------------+                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |               |                   
|  |              F|                   
+--+---------------+                   
|  |               |                   
|  |               |                   
O=====================================O
                   |               |  |
                   |               |  |
                   T---------------+--T
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   |               |  |
                   T---------------+--T

                                       

Правила вызова:

  • Лидирующие и завершающие символы новой строки являются необязательными (включая начальную и конечную две пустые строки, когда ввод одинарный). Конечные пробелы также являются необязательными. Однако пробелы обязательны.
  • Разрешены любые четыре разумных различных входа для указания, из какого блока мы обслуживаем (для целых чисел, оставайтесь в пределах диапазона [-999,999]); а также любые два разумных различных входа, чтобы указать, является ли он одинарным или двойным / смешанным (обратите внимание на эту соответствующую запрещенную лазейку , хотя). Пожалуйста, укажите I / O, который вы использовали в своем ответе!
  • Вам разрешено использовать строчные буквы fи t(или смешанный регистр) вместо Fи T.
  • Вам разрешено возвращать список строк или матрицу символов вместо возврата или печати одной выходной строки.

Основные правила:

  • Это , так что кратчайший ответ в байтах выигрывает.
    Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования.
  • Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вам разрешено использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
  • По умолчанию лазейки запрещены.
  • Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
  • Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.

Ах, бадминтон. Единственная игра, в которую я всегда хотел поиграть, но так и не нашел, потому что забыл / не смог найти игроков для игры
Quintec

@ Quintec Не стесняйтесь посетить наш клуб в Нидерландах на бесплатный вечер, р
Кевин Круйссен

1
Сделка, если вы платите за мой билет на самолет и отель? :)
Quintec

1
@Quintec Если ты выиграешь, я заплачу билет обратно, хаха xD
Кевин Круйссен

1
@MagicOctopusUrn Да, есть несколько профессиональных игроков в бадминтон из Нидерландов. Не знаю, какое у них место в мировом списке, я не так часто смотрю бадминтон (и обычно это всего лишь 5 минут на спортивные новости, если они вообще упоминаются… все остальное время тратится на футбол). И нет, как топ-игрок, вы вряд ли сможете заработать, я думаю. Определенно не миллионы.
Кевин Круйссен

Ответы:


2

Древесный уголь , 81 байт

NθF⮌Eθ⁺¹⁶׳ιF✂541⊖θURι±×³Iκ×=¹⁸O⟲O↙⁴J¹±³FF²F²«J×ι±⁺¹²×³θ⁺²×⁻¹⁵׳θκT»F№ABη‖↑F№ACη‖

Попробуйте онлайн! Ссылка на подробную версию кода. Принимает первый вход , как 1и 2для одиночных или двойных, второго входа , как один из , ABCDкак в этом вопросе. Объяснение:

F⮌Eθ⁺¹⁶׳ιF✂541⊖θURι±×³Iκ

Обведите соответствующие ширины и высоты Dдвора и нарисуйте прямоугольники.

×=¹⁸O⟲O↙⁴

Нарисуйте сеть и примените вращательную симметрию, чтобы добавить Aкорт.

J¹±³F

Добавьте Fк Dсуду.

F²F²«J×ι±⁺¹²×³θ⁺²×⁻¹⁵׳θκT»

Добавьте Ts в соответствующие места в Aсуде.

F№ABη‖↑F№ACη‖

Отразите вывод по мере необходимости, чтобы служить от правильного суда.


1
@KevinCruijssen Извините, что упустил это, должно быть исправлено сейчас, спасибо.
Нил

3

Python 2 , 285 284 байта

R=str.replace
s,q=input()
A=' '*19
l='| '[s]+'  |'+A[4:]+'|'+A
r=['T--+','   T'][s]+'-'*15+'T'+A
h=[r]+[l,R(r,*'T+')]*s+[l]*8+[l[:18]+'F'+'|'+A,r,l,l,'O'+'='*37+'O']
h+=[R(l[::-1],*'T+')for l in h[-2::-1]]
h[9+2*s]=R(h[9+2*s],*'F ')
for l in[l[::q%2*2-1]for l in h[::q/2*2-1]]:print l

Попробуйте онлайн!

Принимает ввод как 0/1(или False/True) для типа игры ( Double/Single),

и 0-3для обслуживающего блока ( 0,1,2,3= C,D,A,B)


Это было быстро! Хороший ответ.
Кевин Круйссен

1
@ Да, я на прошлой неделе попробовал это из песочницы: P
TFeld

1

JavaScript (ES7),  216 ... 205 201  199 байт

Принимает ввод как (block)(double), где блок либо2 (в правом верхнем углу), 1 (внизу слева), 1 (внизу справа) или 2(вверху слева) и double - это логическое значение.

b=>d=>(g=x=>y<31?`+-| =OTF
`[X=x-19,Y=y-15,p=X*Y*b<0,q=Y>0^b&1,X*=X,Y*=Y,i=x*24%35>2|~16>>Y%62%6&2,x<39?Y?p*X|(d?Y:X-87)>169?3:i?X-1|Y-16|q?i:7:q*(d?X-87:Y)%169&&6:x%38?4:5:++y&&8]+g(-~x%40):'')(y=0)

Попробуйте онлайн!

Отформатированная версия

Как?

Итерируем из y=0 в y=30 и от x=0 в x=39 для каждого значения y,

Сначала мы определим X=x19 а также Y=y15,

Переменные p = X * Y * b < 0и q = Y > 0 ^ b & 1используются для определения того, что рисуют в каждом квартале в соответствии с блокомb,

Отныне оба X а также Y возводятся в квадрат, чтобы легко проверить абсолютные позиции в каждой четверти поля.

Выражение x * 24 % 35 > 2дает ложь, еслиx принадлежит {0,3,19,35,38}(положения вертикальных линий) или верно в противном случае.

Попробуйте онлайн!

Выражение ~16 >> Y % 62 % 6 & 2дает0 если y принадлежит {0,2,12,18,28,30} (положения горизонтальных линий, исключая сеть) или 2 в противном случае.

Попробуйте онлайн!

Переменная i определяется как результат побитового ИЛИ между двумя вышеуказанными значениями и поэтому интерпретируется как:

  • 3: пространство
  • 2: |
  • 1: -
  • 0: +илиT

Выражение (d ? Y : X - 87) > 169используется для обрезки поля в соответствии с типом игрыd(одиночный или двойной). Подобное выражение (d ? X - 87 : Y) % 169используется для рисования Tв соответствующих позициях.


* Открывает TIO и начинает проверять вывод * хорошо выглядит; все восемь выходов правильные, как и ожидалось. * Смотрит на реальный код * Ха ... что происходит ...: S С нетерпением жду этого объяснения позже, @Arnauld . Неожиданное количество арифметических, троичных и побитовых вычислений для задачи ASCII-art. xD
Кевин Круйссен

1
@KevinCruijssen На самом деле, я бы хотел, чтобы мои формулы были еще более причудливыми, чтобы я мог получить их до 200 байт, что и было моей первоначальной целью. ;) Но мой подход, вероятно, слишком оптимизирован для рисования полного поля и недостаточно для учета параметров при разумной стоимости в байтах.
Arnauld

Вероятно, да, поскольку я допустил любое входное значение в диапазоне [-999,999]для четырех различных входов, так что, возможно, вы могли бы как-то использовать это в своих интересах, чтобы выиграть несколько байтов. Это будет означать частично начать все сначала, что, возможно, не стоит усилий. К сожалению, я не могу дать вам никаких советов по игре в гольф, чтобы помочь вам до 200 байтов; Я могу только пожелать вам удачи в ваших попытках. ; p
Кевин Круйссен

@KevinCruijssen Готово. :)
Арно

1

Желе , 108 99 байт

“¢¥Þ‘Ṭ+þ³ḤN+“¢¤€‘¤ṬḤ;Ø0¤×3R¤¦€³+0x39¤µ‘03³?‘;20¤¦€1,-2¦;565DWx“¢%¢‘¤;UṚ$ị“|-+TO= ””F21¦€³Ḥ_⁵¤¦UṚƭ⁴¡

Попробуйте онлайн!

Я уверен, что это может быть лучше в гольф.

Диадическая связь с левым аргументом 0 или 1 для одиночных / двойных чисел и правым аргументом 0,1,2,3 для разных секторов подачи. Возвращает список строк

Спасибо @KevinCruijssen за сохранение байта!


Я не знаю Желе, поэтому я, вероятно, говорю здесь что-то глупое, но с тем “|-+TO= ”“F”, нельзя “F”ли приставить к другому типу струны для одиночных персонажей? Например, в 05AB1E есть встроенные функции для строк размера 1 ( '), 2 ( ) или 3 ( ), так что это может быть 'F. Не знаете, есть ли у Желе что-то подобное, или у вас есть другая причина для этого “|-+TO= ”“F”?
Кевин Круйссен

1
@KevinCruijssen Спасибо и хороший вызов. Я так не думаю. Есть два символьных литерала (с⁾), но не один. Я мог бы использовать число 7 и добавить F к поиску, но это то же количество символов из-за необходимости следовать за 7 с 21, который поэтому должен разделять два пробела.
Ник Кеннеди

Ну, как я уже сказал, я не знаю желе. Хотя, возможно, у него есть несколько встроенных строк для 1 или 2-символьных строк, но если вы скажете, что нет, я вам верю. :)
Кевин Круйссен

@KevinCruijssen Я рад, что кто-то еще прыгнул - все еще учится!
Ник Кеннеди

1
@KevinCruijssen Мне совершенно не хватало того, что можно было бы использовать для односимвольного литерала - упс! Спасибо за сохранение байта.
Ник Кеннеди
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.