Parte rilevante per un servizio di badminton


10

Introduzione:

Ho visto che c'era solo un'altra sfida legata al badminton in questo momento . Da quando gioco a badminton da solo (negli ultimi 13 anni), ho pensato di aggiungere alcune sfide legate al badminton. Qui il secondo (il primo può essere trovato qui ):

Sfida:

Alcune regole sul badminton servono:

  • Un servizio sarà sempre fatto in diagonale sulla rete.
  • Devi sempre servire dopo la linea parallela e più vicina alla rete.
  • L'area in cui è consentito servire varia a seconda che si tratti di un singolo (1 vs 1) o doppio / mix (2 vs 2).
    • Per i single (1 vs 1), l'area blu nella figura in basso è dove è consentito servire. Quindi questo include la parte sul retro, ma esclude le parti sul lato.
    • Per i doppi / mix (2 vs 2), l'area verde nella figura seguente è dove è consentito il server. Quindi questo esclude la parte posteriore, ma include anche le parti laterali.
  • Non puoi stare in piedi durante il servizio. Ma la navetta sarà ancora dentro se atterrano su una linea.

Ecco il layout di un campo da badminton:
inserisci qui la descrizione dell'immagine

Regole della sfida:

Ingresso:

Ti verranno dati due input:

  • Qualcosa per indicare se stiamo suonando un singolo o doppio / mix (cioè un booleano)
  • Qualcosa per indicare da quale blocco stai servendo (ovvero [1,2,3,4]o ['A','B','C','D']come usato nella foto sopra).

Produzione:

Solo le righe pertinenti per il servizio corrente (inclusa la rete), incluso un Fper indicare da dove servi e multiplo Tper indicare dove servirai potenzialmente.

Sebbene in realtà ti sia permesso di servire da e verso qualsiasi area designata, supponiamo che una persona che servirà rimarrà sempre nell'angolo dell'area di servizio che si chiude al centro della rete, che è dove posizionerai il F. E serviranno a uno dei quattro angoli dell'area in cui devono servire, che è dove posizionerai la Ts.
Come arte ASCII, l'intero campo di badminton sarebbe il seguente (i numeri vengono aggiunti in modo da non doverli contare da soli):

 2        15              15        2

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

Esempi:

Ecco due esempi per l'output solo delle parti rilevanti del servizio:

Ingresso: blocco singolo e di servizio A
Uscita:

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

Come puoi vedere, Fviene aggiunto nell'angolo all'interno del blocco, ma Tstanno sostituendo l' +output nell'ASCI-art.


Ingresso: doppio e blocco di blocco C
Uscita:

                                       

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

                                       

Regole della sfida:

  • Le nuove righe iniziali e finali sono facoltative (comprese le due righe vuote iniziali e finali quando l'input è singolo). Anche gli spazi finali sono opzionali. Gli spazi guida sono tuttavia obbligatori.
  • Sono consentiti quattro input distinti ragionevoli per indicare da quale blocco stiamo servendo (per numeri interi, rimanere nell'intervallo [-999.999]); così come ogni due input distinti ragionevoli per indicare se si tratta di un singolo o doppio / mix (si noti tuttavia questa scappatoia proibita pertinente ). Indica l'I / O che hai usato nella tua risposta!
  • È consentito utilizzare lettere minuscole fe t(o maiuscole / minuscole ) anziché Fe T.
  • È consentito restituire un elenco di righe o matrici di caratteri anziché restituire o stampare una singola stringa di output.

Regole generali:

  • Questo è , quindi vince la risposta più breve in byte.
    Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione.
  • Le regole standard si applicano alla tua risposta con le regole I / O predefinite , quindi puoi utilizzare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
  • Sono vietate le scappatoie predefinite .
  • Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
  • Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.

Ah, badminton. L'unico gioco a cui ho sempre voluto giocare ma che non ho mai visto perché ho dimenticato / non sono riuscito a trovare i giocatori con cui giocare
Quintec

@Quintec Sentiti libero di venire a visitare il nostro club nei Paesi Bassi per una serata gratuita; p
Kevin Cruijssen

1
Affare, se paghi il mio biglietto aereo e l'hotel? :)
Quintec,

1
@Quintec Se vinci, pagherò indietro il biglietto aereo, haha ​​xD
Kevin Cruijssen

1
@MagicOctopusUrn Sì, ci sono alcuni giocatori professionisti di badminton dei Paesi Bassi. Non sono sicuro di quale rango abbiano nella lista del mondo, ma non guardo spesso il badminton (e di solito sono solo 5 minuti sulle notizie sportive se menzionate comunque .. tutto il tempo è sprecato con il calcio). E no, come miglior giocatore potresti a malapena guadagnare un reddito, penso. Sicuramente non milioni.
Kevin Cruijssen,

Risposte:


2

Carbone , 81 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Prende il primo input come 1o 2per singoli o doppi, il secondo input come uno ABCDcome nella domanda. Spiegazione:

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

Passa sopra le larghezze e le altezze pertinenti del Dcampo e disegna i rettangoli.

×=¹⁸O⟲O↙⁴

Disegna la rete e applica la simmetria rotazionale per aggiungere il Acampo.

J¹±³F

Aggiungi Fal Dcampo.

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

Aggiungi la Ts ai luoghi pertinenti del Atribunale.

F№ABη‖↑F№ACη‖

Riflettere l'output necessario per servire dal tribunale corretto.


1
@KevinCruijssen Ci scusiamo per il fatto che dovrebbe essere risolto ora, grazie.
Neil

3

Python 2 , 285 284 byte

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

Provalo online!

Accetta input come 0/1(o False/True) per il tipo di gioco ( Double/Single),

e 0-3per servire il blocco ( 0,1,2,3= C,D,A,B)


È stato veloce! Bella risposta.
Kevin Cruijssen,

1
@ Sì, l'ho provato un po 'da sandbox la scorsa settimana: P
TFeld

1

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

Accetta input come (block)(double), dove blocco è (in alto a destra), (in basso a sinistra), (in basso a destra) o (in alto a sinistra) e doppio è un valore booleano.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)

Provalo online!

Versione formattata

Come?

Ripetiamo da a e da a per ogni valore di .y=0y=30x=0x=39y

Definiamo prima e .X=x19Y=y15

Le variabili p = X * Y * b < 0e q = Y > 0 ^ b & 1vengono utilizzate per determinare cosa disegnare in ogni trimestre in base al blocco .b

Da ora in poi, sia che sono al quadrato per testare facilmente le posizioni assolute all'interno di ogni quarto del campo.XY

L'espressione x * 24 % 35 > 2produce false se appartiene a (le posizioni delle linee verticali) o true in caso contrario.x{0,3,19,35,38}

Provalo online!

L'espressione ~16 >> Y % 62 % 6 & 2produce se appartiene a (le posizioni delle linee orizzontali, esclusa la rete) o contrario.0y{0,2,12,18,28,30}2

Provalo online!

La variabile è definita come il risultato di un OR bit a bit tra i due valori sopra, ed è quindi interpretata come:i

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

L'espressione (d ? Y : X - 87) > 169viene utilizzata per ritagliare il campo in base al tipo di gioco (singolo o doppio). L'espressione simile viene utilizzata per disegnare le posizioni appropriate.d(d ? X - 87 : Y) % 169T


* Apre TIO e inizia a verificare l'output * Sembra buono; tutte e otto le uscite sono corrette, come previsto. * Guarda il codice reale * Huh .. wth sta succedendo ?? ..: S In attesa di quella spiegazione in seguito, @Arnauld . Una quantità inaspettata di calcoli aritmetici, ternari e bit per bit per una sfida di arte ASCII. xD
Kevin Cruijssen

1
@KevinCruijssen In realtà, vorrei che le mie formule fossero ancora più strane in modo da poter ottenere questo sotto i 200 byte, che era il mio obiettivo iniziale. ;) Ma il mio approccio è probabilmente troppo ottimizzato per disegnare l'intero campo e non abbastanza per tenere conto dei parametri a un costo in byte ragionevole.
Arnauld

Probabilmente sì, dato che ho permesso qualsiasi valore di input nell'intervallo [-999,999]per i quattro input distinti, quindi forse potresti in qualche modo usarlo a tuo vantaggio per giocare a golf di alcuni byte. Significherebbe ricominciare parzialmente, il che forse non vale la pena. Purtroppo non posso darti consigli sul golf per aiutarti sotto i 200 byte; Posso solo augurarti buona fortuna nei tuoi tentativi. ; p
Kevin Cruijssen,

@KevinCruijssen Fatto. :)
Arnauld

1

Gelatina , 108 99 byte

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

Provalo online!

Sono sicuro che questo può essere migliorato.

Collegamento diadico con argomento sinistro 0 o 1 per singoli / doppi e argomento destro 0,1,2,3 per diversi quadranti di servizio. Restituisce un elenco di stringhe

Grazie a @KevinCruijssen per aver salvato un byte!


Non conosco Jelly, quindi probabilmente dico qualcosa di stupido qui, ma con “|-+TO= ”“F”, non si può “F”giocare a golf con un altro tipo di stringa per singoli personaggi? In 05AB1E per esempio, ci sono builtin per stringhe di dimensione 1 ( '), 2 ( ) o 3 ( ), quindi potrebbe essere 'F. Non sai se Jelly ha qualcosa di simile o se hai un'altra ragione per farlo “|-+TO= ”“F”?
Kevin Cruijssen,

1
@KevinCruijssen Grazie e bella sfida. Io non la penso così. Esistono due caratteri letterali (con⁾), ma non uno. Potrei usare un numero 7 e aggiungere la F alla ricerca, ma è lo stesso numero di caratteri a causa della necessità di seguire il 7 con un 21 che quindi ha bisogno di uno spazio per separare i due.
Nick Kennedy,

Bene, come ho detto, non conosco Jelly. Pensavo che potesse avere anche alcuni builtin per stringhe di 1 o 2 caratteri, ma se dici di no, ti credo. :)
Kevin Cruijssen,

@KevinCruijssen Sono contento che qualcun altro faccia un salto, sto ancora imparando!
Nick Kennedy,

1
@KevinCruijssen Mi mancava completamente che potesse essere usato letteralmente per un singolo personaggio - oops! Grazie per aver salvato un byte.
Nick Kennedy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.