Odpowiednia część do serwowania badmintona

10

Wprowadzenie:

Widziałem, że teraz jest tylko jedno wyzwanie związane z badmintonem . Ponieważ sam gram w badmintona (od 13 lat), pomyślałem, że dodam kilka wyzwań związanych z badmintonem. Oto drugi ( pierwszy można znaleźć tutaj ):

Wyzwanie:

Niektóre zasady dotyczące badmintona służą:

  • Podanie zawsze będzie wykonywane po przekątnej przez sieć.
  • Zawsze musisz służyć po linii równoległej i najbliższej sieci.
  • Obszar, w którym możesz służyć, różni się w zależności od tego, czy jest to singiel (1 vs 1), czy podwójny / mix (2 vs 2).
    • W przypadku singli (1 vs 1) niebieski obszar na poniższym obrazku to miejsce, w którym możesz serwować. Dotyczy to więc części z tyłu, ale z wyłączeniem części z boku.
    • W przypadku debla / mixu (2 vs 2), zielony obszar na obrazku poniżej to miejsce, w którym możesz serwować. To wyklucza część z tyłu, ale obejmuje części z boku.
  • Podczas serwowania nie możesz stać na linii. Ale prom nadal będzie w środku, jeśli wyląduje na linii.

Oto układ boiska do badmintona:
wprowadź opis zdjęcia tutaj

Zasady konkursu:

Wejście:

Otrzymasz dwa dane wejściowe:

  • Coś, co wskazuje, czy gramy pojedynczy czy podwójny / mix (tj. Boolean)
  • Coś, co wskazuje, z którego bloku służysz (tj. [1,2,3,4]Lub ['A','B','C','D']jak na powyższym obrazku).

Wynik:

Tylko odpowiednie wiersze dla bieżącego serwowania (w tym sieć), w tym znak Fwskazujący, skąd serwujesz, oraz wielokrotność Twskazująca, gdzie potencjalnie będziesz służyć.

Chociaż w rzeczywistości możesz serwować z dowolnego miejsca w wyznaczonych obszarach, zakładamy, że osoba, która będzie serwować, będzie zawsze stać w rogu obszaru serwowania blisko środka sieci, czyli tam, gdzie umieścisz F. I będą służyć w dowolnym z czterech rogów obszaru, w którym muszą służyć, czyli tam, gdzie umieścisz je T.
Jako sztuka ASCII całe pole do badmintona wyglądałoby następująco (liczby są dodawane, więc nie musisz ich sam liczyć):

 2        15              15        2

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

Przykłady:

Oto dwa przykłady wyprowadzania tylko odpowiednich części serw:

Wejście: Pojedynczy i obsługujący blok A
Wyjście:

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

Jak widać, Fdodaje się go w rogu bloku, ale Tzastępują one +wyjście ASCI-art.


Wejście: Podwój i podaj blok C
Wyjście:

                                       

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

                                       

Zasady konkursu:

  • Początkowe i końcowe znaki nowej linii są opcjonalne (w tym początkowe i końcowe dwie puste linie, gdy dane wejściowe są pojedyncze). Spacje końcowe są również opcjonalne. Wiodące miejsca są jednak obowiązkowe.
  • Dozwolone są cztery rozsądne odrębne dane wejściowe wskazujące, z którego bloku obsługujemy (dla liczb całkowitych, pozostań w zakresie [-999,999]); a także dowolne dwa uzasadnione odrębne dane wejściowe wskazujące, czy jest to pojedynczy czy podwójny / mix (należy jednak zwrócić uwagę na tę istotną zabronioną lukę ). Podaj we / wy użyte w odpowiedzi!
  • Możesz używać małych fi t(lub mieszanych) liter zamiast Fi T.
  • Możesz zwrócić listę linii lub macierzy znaków zamiast zwracać lub drukować pojedynczy ciąg wyjściowy.

Główne zasady:

  • To jest , więc najkrótsza odpowiedź w bajtach wygrywa.
    Nie pozwól, aby języki code-golf zniechęciły Cię do publikowania odpowiedzi w językach innych niż kodowanie Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania.
  • Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
  • Domyślne luki są zabronione.
  • Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
  • Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Kevin Cruijssen
źródło
Ach, badminton. Jedną grą, w którą zawsze chciałem zagrać, ale nigdy nie dotarłem do niej, ponieważ zapomniałem / nie mogłem znaleźć graczy do gry
Quintec
@Quintec Zapraszamy do odwiedzenia naszego klubu w Holandii na wolny wieczór; p
Kevin Cruijssen
1
Okazja, jeśli zapłacisz za mój bilet lotniczy i hotel? :)
Quintec,
1
@Quintec Jeśli wygrasz, zapłacę za bilet lotniczy, haha ​​xD
Kevin Cruijssen
1
@MagicOctopusUrn Tak, jest kilku profesjonalnych graczy w badmintona z Holandii. Nie jestem pewien, jaką rangę mają na światowej liście, nie oglądam tak często badmintona (i zazwyczaj jest to tylko 5 minut w wiadomościach sportowych, jeśli w ogóle są wymienione ... cały czas marnuje się na piłkę nożną). I nie, myślę, że jako najlepszy gracz ledwo zarobisz. Zdecydowanie nie miliony.
Kevin Cruijssen

Odpowiedzi:

2

Węgiel drzewny , 81 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Pobiera pierwsze wejście jako 1lub 2dla pojedynczych lub podwójnych, drugie wejście jako jedno z ABCDpytań. Wyjaśnienie:

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

Zapętlić odpowiednie szerokości i wysokości Dboiska i narysować prostokąty.

×=¹⁸O⟲O↙⁴

Narysuj siatkę i zastosuj symetrię obrotową, aby dodać Aboisko.

J¹±³F

Dodać Fdo Dsądu.

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

Dodaj Ts do odpowiednich miejsc w Asądzie.

F№ABη‖↑F№ACη‖

W razie potrzeby odzwierciedlaj dane wyjściowe, aby podawać je z właściwego sądu.

Neil
źródło
1
@KevinCruijssen Przepraszamy za przeoczenie tego, należy to teraz naprawić, dzięki.
Neil,
3

Python 2 , 285 284 bajtów

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

Wypróbuj online!

Pobiera dane jako 0/1(lub False/True) dla typu gry ( Double/Single),

i 0-3do serwowania bloku ( 0,1,2,3= C,D,A,B)

TFeld
źródło
To było szybkie! Niezła odpowiedź.
Kevin Cruijssen
1
@ Tak, w zeszłym tygodniu próbowałem go z piaskownicy: P
TFeld
1

JavaScript (ES7),  216 ... 205 201  199 bajtów

Pobiera dane wejściowe jako (block)(double), gdzie blok jest albo2 (w prawym górnym rogu), 1 (na dole po lewej), 1 (na dole po prawej) lub 2(lewy górny róg), a double jest wartością logiczną.

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)

Wypróbuj online!

Wersja sformatowana

W jaki sposób?

Wykonujemy iterację y=0 do y=30 i od x=0 do x=39 dla każdej wartości y.

Najpierw definiujemy X=x19 i Y=y15.

Zmienne p = X * Y * b < 0i q = Y > 0 ^ b & 1służą do określenia, co rysuje w każdym kwartale zgodnie z blokiemb.

Od teraz oba X i Y są podniesione do kwadratu, aby łatwo przetestować pozycje bezwzględne w każdej ćwiartce pola.

Wyrażenie x * 24 % 35 > 2zwraca false jeślix należy do {0,3,19,35,38}(pozycje linii pionowych) lub prawda inaczej.

Wypróbuj online!

Wyrażenie ~16 >> Y % 62 % 6 & 2ustępuje0 gdyby y należy do {0,2,12,18,28,30} (pozycje linii poziomych, z wyłączeniem siatki) lub 2 Inaczej.

Wypróbuj online!

Zmienna i jest zdefiniowany jako wynik bitowego OR między dwiema powyższymi wartościami i dlatego jest interpretowany jako:

  • 3: spacja
  • 2: |
  • 1: -
  • 0: +lubT

Wyrażenie (d ? Y : X - 87) > 169służy do kadrowania pola zgodnie z typem gryd(pojedynczy lub podwójny). Podobne wyrażenie (d ? X - 87 : Y) % 169jest używane do rysowania Tw odpowiednich pozycjach.

Arnauld
źródło
* Otwiera TIO i rozpoczyna weryfikację wyjścia * Wygląda dobrze; wszystkie osiem wyników jest prawidłowe, zgodnie z oczekiwaniami. * Patrzy na rzeczywisty kod * Huh .. wth trwa dalej ..: S Czekam na wyjaśnienie później, @Arnauld . Nieoczekiwana ilość obliczeń arytmetycznych, trójskładnikowych i bitowych dla wyzwania ASCII-art. xD
Kevin Cruijssen
1
@KevinCruijssen W rzeczywistości chciałbym, aby moje formuły były jeszcze bardziej dziwaczne, aby uzyskać mniej niż 200 bajtów, co było moim początkowym celem. ;) Ale moje podejście jest prawdopodobnie zbyt mocno zoptymalizowane w celu narysowania pełnego pola, a niewystarczające w celu uwzględnienia parametrów przy rozsądnych kosztach bajtów.
Arnauld,
Prawdopodobnie tak, ponieważ pozwoliłem na dowolną wartość wejściową w zakresie [-999,999]dla czterech różnych danych wejściowych, więc być może mógłbyś w jakiś sposób wykorzystać to na swoją korzyść, aby zagrać w niektóre bajty. Oznaczałoby to częściowe rozpoczęcie od nowa, co być może nie jest warte wysiłku. Niestety nie mogę dać ci żadnych wskazówek dotyczących gry w golfa, które pomogłyby ci poniżej 200 bajtów; Mogę tylko życzyć powodzenia w twoich próbach. ; p
Kevin Cruijssen
@KevinCruijssen Gotowe. :)
Arnauld
1

Galaretka , 108 99 bajtów

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

Wypróbuj online!

Jestem pewien, że można lepiej grać w golfa.

Dyadic link z lewym argumentem 0 lub 1 dla pojedynczych / podwójnych i prawym argumentem 0,1,2,3 dla różnych kwadrantów serw. Zwraca listę ciągów

Dzięki @KevinCruijssen za uratowanie bajtu!

Nick Kennedy
źródło
Nie znam Jelly, więc pewnie mówię tu coś głupiego, ale “|-+TO= ”“F”czy nie “F”można grać w golfa na inny typ łańcucha dla pojedynczych postaci? Na przykład w 05AB1E są wbudowane wbudowane ciągi o rozmiarze 1 ( '), 2 ( ) lub 3 ( ), więc może tak być 'F. Nie wiesz, czy Jelly ma coś podobnego, czy masz inny powód “|-+TO= ”“F”?
Kevin Cruijssen
1
@KevinCruijssen Dzięki i miłe wyzwanie. Nie wydaje mi się Istnieją dwa literały znakowe (z⁾), ale nie jeden. Mógłbym użyć liczby 7 i dodać literę F do wyszukiwania, ale jest to ta sama liczba znaków z powodu potrzeby podążania za 7 za pomocą 21, które w związku z tym potrzebują spacji do oddzielenia dwóch.
Nick Kennedy,
Cóż, jak powiedziałem, nie znam Jelly. Pomyślałem, że może mieć również wbudowane łańcuchy dla 1 lub 2 znaków, ale jeśli powiesz, że nie, wierzę ci. :)
Kevin Cruijssen
@KevinCruijssen Cieszę się, że ktoś wskoczył - wciąż się uczy!
Nick Kennedy,
1
@KevinCruijssen Całkowicie tęskniłem za literą jednoznakową - ups! Dzięki za uratowanie bajtu.
Nick Kennedy,