Parte relevante para un servicio de bádminton

10

Introducción:

Vi que solo había otro desafío relacionado con el bádminton en este momento . Como yo mismo juego al bádminton (durante los últimos 13 años), pensé que agregaría algunos desafíos relacionados con el bádminton. Aquí el segundo (el primero se puede encontrar aquí ):

Desafío:

Algunas reglas sobre el bádminton sirven:

  • Un servicio siempre se realizará en diagonal sobre la red.
  • Siempre debe servir después de la línea paralela y más cercana a la red.
  • El área en la que se le permite servir difiere dependiendo de si es un solo (1 contra 1) o doble / mixto (2 contra 2).
    • Para los solteros (1 vs 1), el área azul en la imagen a continuación es donde se les permite servir. Esto incluye la parte posterior, pero excluye las partes laterales.
    • Para dobles / mix (2 vs 2), el área verde en la imagen a continuación es donde se le permite al servidor. Esto excluye la parte posterior, pero incluye las partes laterales.
  • No puede pararse en las líneas cuando sirve. Pero el transbordador seguirá estando adentro si aterrizan en la parte superior de una línea.

Aquí el diseño de un campo de bádminton:
ingrese la descripción de la imagen aquí

Reglas de desafío:

Entrada:

Se le darán dos entradas:

  • Algo para indicar si estamos jugando un single o doble / mix (es decir, un booleano)
  • Algo para indicar desde qué bloque está sirviendo (es decir, [1,2,3,4]o ['A','B','C','D']como se usa en la imagen de arriba).

Salida:

Solo las líneas relevantes para el servicio actual (incluida la red), incluido un Fpara indicar de dónde sirve, y múltiples Tpara indicar dónde potencialmente servirá.

Aunque en realidad se le permite servir desde y hacia cualquier lugar en las áreas designadas, asumimos que una persona que servirá siempre se parará en la esquina del área de servicio y se cerrará en el medio de la red, que es donde colocará el F. Y servirán en cualquiera de las cuatro esquinas del área donde tienen que servir, que es donde colocará el Ts.
Como ASCII-art, todo el campo de bádminton sería el siguiente (los números se agregan para que no tenga que contarlos usted mismo):

 2        15              15        2

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

Ejemplos:

Aquí hay dos ejemplos para generar solo las partes relevantes del servicio:

Entrada: bloque individual y de servicio A
Salida:

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

Como puede ver, el Fse agrega en la esquina dentro del bloque, pero Testá reemplazando el +en la salida de arte ASCI.


Entrada: doble y servir bloque C
Salida:

                                       

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

                                       

Reglas de desafío:

  • Las líneas nuevas iniciales y finales son opcionales (incluidas las dos líneas vacías iniciales y finales cuando la entrada es única). Los espacios finales también son opcionales. Sin embargo, los espacios iniciales son obligatorios.
  • Se permiten cuatro entradas distintas razonables para indicar desde qué bloque estamos sirviendo (para enteros, permanezca dentro del rango [-999,999]); así como también dos entradas distintas razonables para indicar si es simple o doble / mix (tenga en cuenta esta escapatoria prohibida relevante ). ¡Indique la E / S que utilizó en su respuesta!
  • Puede usar minúsculas fy t(o mayúsculas y minúsculas ) en lugar de Fy T.
  • Se le permite devolver una lista de líneas o matriz de caracteres en lugar de devolver o imprimir una sola cadena de salida.

Reglas generales:

  • Esto es , la respuesta más corta en bytes gana.
    No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación.
  • Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
  • Las lagunas predeterminadas están prohibidas.
  • Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
  • Además, se recomienda agregar una explicación para su respuesta.
Kevin Cruijssen
fuente
Ah, bádminton. El único juego que siempre quise jugar pero que nunca tuve porque olvidé / no pude encontrar jugadores para jugar
Quintec el
@Quintec Siéntase libre de visitar nuestro club en los Países Bajos para una noche libre; p
Kevin Cruijssen
1
Oferta, si pagas mi boleto de avión y mi hotel? :)
Quintec
1
@Quintec Si ganas, pagaré el billete de avión, jaja xD
Kevin Cruijssen
1
@MagicOctopusUrn Sí, hay algunos jugadores profesionales de bádminton de los Países Bajos. No estoy seguro de qué rango tienen en la lista mundial, por cierto, no veo bádminton con tanta frecuencia (y generalmente solo son 5 minutos en las noticias deportivas si se mencionan de todos modos ... el resto del tiempo se pierde con el fútbol). Y no, como jugador superior, apenas podrías obtener ingresos, creo. Definitivamente no millones.
Kevin Cruijssen

Respuestas:

2

Carbón , 81 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Toma la primera entrada como 1o 2para individuales o dobles, la segunda entrada como una de las ABCDde la pregunta. Explicación:

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

Pase sobre los anchos relevantes y las alturas de la Dcancha y dibuje los rectángulos.

×=¹⁸O⟲O↙⁴

Dibuja la red y aplica simetría rotacional para agregar la Acancha.

J¹±³F

Agregue el Fa la Dcorte.

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

Agregue los Ts a los lugares relevantes en la Acorte.

F№ABη‖↑F№ACη‖

Refleje la salida según sea necesario para servir de la corte correcta.

Neil
fuente
1
@KevinCruijssen Perdón por pasar por alto eso, debería arreglarse ahora, gracias.
Neil
3

Python 2 , 285 284 bytes

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

Pruébalo en línea!

Toma la entrada como 0/1(o False/True) para el tipo de juego ( Double/Single),

y 0-3para servir bloque ( 0,1,2,3= C,D,A,B)

TFeld
fuente
¡Eso fue rápido! Buena respuesta.
Kevin Cruijssen
1
@ Sí, lo probé desde sandbox la semana pasada: P
TFeld
1

JavaScript (ES7),  216 ... 205 201  199 bytes

Toma la entrada como (block)(double), donde el bloque es2 (parte superior derecha), 1 (abajo a la izquierda), 1 (abajo a la derecha) o 2(arriba a la izquierda) y double es un valor booleano.

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)

Pruébalo en línea!

Versión formateada

¿Cómo?

Iteramos desde y=0 a y=30 y desde x=0 a x=39 por cada valor de y.

Primero definimos X=x19 y Y=y15.

Las variables p = X * Y * b < 0y q = Y > 0 ^ b & 1se usan para determinar qué dibujan en cada trimestre de acuerdo con el bloqueb.

De ahora en adelante, ambos X y Y están al cuadrado para probar fácilmente las posiciones absolutas dentro de cada cuarto del campo.

La expresión x * 24 % 35 > 2produce falso six pertenece a {0,3,19,35,38}(las posiciones de las líneas verticales) o verdadero de lo contrario.

Pruébalo en línea!

La expresión ~16 >> Y % 62 % 6 & 2produce0 Si y pertenece a {0,2,12,18,28,30} (las posiciones de las líneas horizontales, excluyendo la red) o 2 de otra manera.

Pruébalo en línea!

La variable i se define como el resultado de un OR bit a bit entre los dos valores anteriores y, por lo tanto, se interpreta como:

  • 3: espacio
  • 2: |
  • 1: -
  • 0: +oT

La expresión (d ? Y : X - 87) > 169se utiliza para recortar el campo según el tipo de juego.d(simple o doble). La expresión similar (d ? X - 87 : Y) % 169se usa para dibujar los T's en las posiciones apropiadas.

Arnauld
fuente
* Abre TIO y comienza a verificar la salida * Se ve bien; las ocho salidas son correctas, como se esperaba. * Mira el código real * Huh ... ¿Qué está pasando? ... S: Esperando esa explicación más adelante, @Arnauld . Una cantidad inesperada de cálculos aritméticos, ternarios y bit a bit para un desafío de arte ASCII. xD
Kevin Cruijssen
1
@KevinCruijssen En realidad, desearía que mis fórmulas fueran aún más extrañas para poder obtener esto por debajo de 200 bytes, que era mi objetivo inicial. ;) Pero mi enfoque probablemente esté demasiado optimizado para dibujar el campo completo y no lo suficiente para tener en cuenta los parámetros a un costo de byte razonable.
Arnauld
Probablemente sí, ya que permití cualquier valor de entrada en el rango [-999,999]para las cuatro entradas distintas, por lo que tal vez podría usarlo de alguna manera para su ventaja para jugar algunos bytes. Significaría comenzar parcialmente de nuevo, lo que quizás no valga la pena. Lamentablemente, no puedo darte ningún consejo de golf para ayudarte con menos de 200 bytes; Solo puedo desearle buena suerte en sus intentos. ; p
Kevin Cruijssen
@KevinCruijssen Hecho. :)
Arnauld
1

Gelatina , 108 99 bytes

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

Pruébalo en línea!

Estoy seguro de que esto se puede jugar mejor.

Enlace diádico con argumento izquierdo 0 o 1 para individuales / dobles y argumento derecho 0,1,2,3 para diferentes cuadrantes de servicio. Devuelve una lista de cadenas

¡Gracias a @KevinCruijssen por guardar un byte!

Nick Kennedy
fuente
No conozco a Jelly, así que probablemente diga algo estúpido aquí, pero con “|-+TO= ”“F”, ¿no se “F”puede usar otro tipo de cadena para caracteres individuales? En 05AB1E, por ejemplo, hay incorporados para cadenas de tamaño 1 ( '), 2 ( ) o 3 ( ), por lo que podría ser 'F. ¿No sabe si Jelly tiene algo similar o si tiene otra razón para que sea “|-+TO= ”“F”?
Kevin Cruijssen
1
@KevinCruijssen Gracias, y buen desafío. No lo creo. Hay dos literales de caracteres (con⁾), pero no uno. Podría usar un número 7 y agregar la F a la búsqueda, pero es el mismo número de caracteres debido a la necesidad de seguir el 7 con un 21 que, por lo tanto, necesita un espacio para separar los dos.
Nick Kennedy el
Bueno, como dije, no conozco a Jelly. Pensé que también podría tener algunas incorporaciones para cadenas de 1 o 2 caracteres, pero si dices que no, te creo. :)
Kevin Cruijssen
@KevinCruijssen Estoy feliz de que alguien más intervenga, ¡todavía estoy aprendiendo!
Nick Kennedy el
1
@KevinCruijssen Extrañé por completo que podría usarse para un solo carácter literal - ¡Uy! Gracias por guardar un byte.
Nick Kennedy