Parte relevante para um saque de badminton

10

Introdução:

Vi que havia apenas mais um desafio relacionado ao badminton no momento . Como eu mesmo jogo badminton (nos últimos 13 anos), imaginei que adicionaria alguns desafios relacionados ao badminton. Aqui o segundo (o primeiro pode ser encontrado aqui ):

Desafio:

Algumas regras sobre o badminton servem:

  • Um saque sempre será feito na diagonal pela rede.
  • Você deve sempre servir após a linha paralela e mais próxima da rede.
  • A área na qual você pode veicular difere dependendo se é um single (1 vs 1) ou duplo / mix (2 vs 2).
    • Para solteiros (1 vs 1), a área azul na figura abaixo é onde você pode servir. Portanto, isso inclui a parte de trás, mas exclui as partes ao lado.
    • Para duplas / mixagens (2 x 2), a área verde na figura abaixo é onde você tem permissão para servidor. Portanto, isso exclui a parte de trás, mas inclui as partes ao lado.
  • Você pode não ficar na linha ao servir. Mas o ônibus ainda estará dentro se pousar em cima de uma linha.

Aqui o layout de um campo de badminton:
insira a descrição da imagem aqui

Regras do desafio:

Entrada:

Você receberá duas entradas:

  • Algo para indicar se estamos tocando um single ou double / mix (ou seja, um booleano)
  • Algo para indicar de qual bloco você está servindo (por exemplo, [1,2,3,4]ou ['A','B','C','D']conforme usado na figura acima).

Resultado:

Somente as linhas relevantes para a veiculação atual (incluindo a rede), incluindo uma Fpara indicar de onde você é veiculado e várias Tpara indicar para onde você potencialmente será veiculado.

Embora, na realidade, você possa servir de e para qualquer lugar nas áreas designadas, presumimos que uma pessoa que servirá estará sempre no canto da área de serviço perto do meio da rede, que é onde você colocará o F. E eles servirão para qualquer um dos quatro cantos da área em que devem servir, que é onde você colocará os T.
Como arte ASCII, todo o campo de badminton seria o seguinte (os números são adicionados para que você não precise contá-los):

 2        15              15        2

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

Exemplos:

Aqui estão dois exemplos para gerar apenas as partes relevantes do serviço:

Entrada: Escolha e sirva o bloco A
Saída:

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

Como você pode ver, o Fé adicionado no canto dentro do bloco, mas Testá substituindo o +na saída ASCI-art.


Entrada: Dobrar e servir o bloco C
Saída:

                                       

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

                                       

Regras do desafio:

  • As novas linhas à esquerda e à direita são opcionais (incluindo as duas linhas vazias à esquerda e à direita quando a entrada é única). Os espaços à direita também são opcionais. Espaços principais são obrigatórios no entanto.
  • Quaisquer quatro entradas distintas razoáveis ​​para indicar de qual bloco estamos servindo são permitidas (para números inteiros, permaneça dentro do intervalo [-999.999]); bem como quaisquer duas entradas distintas razoáveis ​​para indicar se é um single ou double / mix (observe essa brecha proibida relevante ). Indique a E / S que você usou em sua resposta!
  • Você tem permissão para usar letras minúsculas fe t(ou maiúsculas e minúsculas ) em vez de Fe T.
  • Você tem permissão para retornar uma lista de linhas ou matriz de caracteres em vez de retornar ou imprimir uma única sequência de saída.

Regras gerais:

  • Isso é , então a resposta mais curta em bytes vence.
    Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação.
  • As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
  • As brechas padrão são proibidas.
  • Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
  • Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Kevin Cruijssen
fonte
Ah, badminton. O jogo que eu sempre quis jogar, mas nunca cheguei a porque esqueci / não poderia encontrar jogadores para jogar com
Quintec
@Quintec Sinta-se livre para vir visitar o nosso clube na Holanda para uma noite livre; p
Kevin Cruijssen
11
Negócio, se você pagar pelo meu bilhete de avião e hotel? :)
Quintec
11
@Quintec Se você ganhar, eu vou pagar o bilhete de avião de volta, haha xD
Kevin Cruijssen
11
@MagicOctopusUrn Sim, existem alguns jogadores profissionais de badminton da Holanda. Não tenho certeza de qual classificação eles têm na lista mundial, eu não assisto badminton com tanta frequência (e geralmente são apenas 5 minutos no noticiário do esporte, se mencionado de qualquer maneira .. todo o tempo é desperdiçado com futebol). E não, como melhor jogador, você mal consegue obter uma renda, eu acho. Definitivamente não milhões.
Kevin Cruijssen 02/04/19

Respostas:

2

Carvão vegetal , 81 bytes

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

Experimente online! Link é a versão detalhada do código. Toma a primeira entrada como 1ou 2para individuais ou duplos, segunda entrada como uma das ABCDperguntas da pergunta. Explicação:

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

Passe as larguras e alturas relevantes da Dquadra e desenhe os retângulos.

×=¹⁸O⟲O↙⁴

Desenhe a rede e aplique simetria rotacional para adicionar a Aquadra.

J¹±³F

Adicione o Fao Dtribunal.

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

Adicione Ts aos locais relevantes no Atribunal.

F№ABη‖↑F№ACη‖

Reflita a saída conforme necessário para servir da quadra correta.

Neil
fonte
11
@KevinCruijssen Desculpe por ignorar isso, deve ser corrigido agora, obrigado.
194 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

Experimente online!

Recebe entrada como 0/1(ou False/True) para o tipo de jogo ( Double/Single),

e 0-3para bloco de veiculação ( 0,1,2,3= C,D,A,B)

TFeld
fonte
Isso foi rápido! Boa resposta.
Kevin Cruijssen 01/04/19
11
@Yeah, tentei meio-lo da caixa de areia na semana passada: P
TFeld
1

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

(block)(double)2112

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)

Experimente online!

Versão formatada

Como?

y=0y=30x=0x=39y

X=x19Y=y15

p = X * Y * b < 0q = Y > 0 ^ b & 1b

XY

x * 24 % 35 > 2x{0,3,19,35,38}

Experimente online!

~16 >> Y % 62 % 6 & 20y{0,2,12,18,28,30}2

Experimente online!

i

  • 3: espaço
  • 2: |
  • 1: -
  • 0: +ouT

(d ? Y : X - 87) > 169d(d ? X - 87 : Y) % 169T

Arnauld
fonte
* Abre o TIO e começa a verificar a saída * Parece bom; todas as oito saídas estão corretas, conforme o esperado. * Observa o código real * Huh .. o que está acontecendo ...: S Ansioso para essa explicação mais tarde, @Arnauld . Uma quantidade inesperada de cálculos aritméticos, ternários e bit a bit para um desafio da arte ASCII. xD
Kevin Cruijssen
11
@KevinCruijssen Na verdade, gostaria que minhas fórmulas fossem ainda mais esquisitas, para que eu pudesse obter isso com menos de 200 bytes, que era meu alvo inicial. ;) Mas minha abordagem provavelmente é muito otimizada para desenhar o campo completo e não é suficiente para levar em consideração os parâmetros a um custo razoável de bytes.
Arnauld #
Provavelmente sim, desde que eu permiti qualquer valor de entrada no intervalo [-999,999]para as quatro entradas distintas, então talvez você possa, de alguma forma, usar isso como vantagem para obter alguns bytes. Significaria recomeçar parcialmente, o que talvez não valha a pena. Infelizmente, não posso dar dicas de golfe para ajudá-lo com menos de 200 bytes; Só posso lhe desejar boa sorte em suas tentativas. ; p
Kevin Cruijssen 02/04/19
@KevinCruijssen Done. :)
Arnauld
1

Geléia , 108 99 bytes

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

Experimente online!

Tenho certeza que isso pode ser melhor jogado.

Link diádico com argumento esquerdo 0 ou 1 para singles / duplos e argumento direito 0,1,2,3 para diferentes quadrantes de saque. Retorna uma lista de strings

Agradecemos a @KevinCruijssen por salvar um byte!

Nick Kennedy
fonte
Eu não conheço Jelly, então provavelmente digo algo estúpido aqui, mas com “|-+TO= ”“F”, não é “F”possível jogar golfe com outro tipo de string para caracteres únicos? No 05AB1E, por exemplo, existem componentes internos para cadeias de tamanho 1 ( '), 2 ( ) ou 3 ( ), portanto pode ser 'F. Você não sabe se Jelly tem algo parecido ou se você tem outro motivo para isso “|-+TO= ”“F”?
Kevin Cruijssen 02/04/19
11
@KevinCruijssen Obrigado, e bom desafio. Acho que não. Existem literais de dois caracteres (com⁾), mas não um. Eu poderia usar um número 7 e adicionar F à pesquisa, mas é o mesmo número de caracteres devido à necessidade de seguir o 7 com um 21, que, portanto, precisa de um espaço para separar os dois.
19499 Nick Kennedy
Bem, como eu disse, não conheço Jelly. Pensei que poderia ter alguns componentes internos para seqüências de caracteres de 1 ou 2 caracteres, mas se você disser que não, acredito em você. :)
Kevin Cruijssen 02/04/19
@KevinCruijssen Estou feliz que outra pessoa participe - ainda aprendendo!
19699 Nick Kennedy
11
@KevinCruijssen Perdi completamente que poderia ser usado para um único caractere literal - oops! Obrigado por salvar um byte.
99919 Nick Kennedy