Bagian yang Relevan untuk Melayani Bulutangkis

10

Pengantar:

Saya melihat hanya ada satu tantangan terkait bulu tangkis lainnya saat ini . Karena saya bermain bulutangkis sendiri (selama 13 tahun terakhir sekarang), saya pikir saya akan menambahkan beberapa tantangan terkait bulutangkis. Di sini yang kedua (yang pertama dapat ditemukan di sini ):

Tantangan:

Beberapa aturan tentang bulutangkis berfungsi:

  • Servis akan selalu dilakukan secara diagonal di atas net.
  • Anda harus selalu melayani setelah garis yang paralel dan terdekat ke jaring.
  • Area di mana Anda diizinkan untuk menyajikan berbeda tergantung pada apakah itu tunggal (1 vs 1) atau ganda / campuran (2 vs 2).
    • Untuk lajang (1 vs 1), area biru pada gambar di bawah ini adalah tempat Anda diizinkan untuk melayani. Jadi ini termasuk bagian di belakang, tetapi tidak termasuk bagian di samping.
    • Untuk ganda / campuran (2 vs 2), area hijau pada gambar di bawah ini adalah tempat Anda diperbolehkan ke server. Jadi ini tidak termasuk bagian di belakang, tetapi termasuk bagian di samping.
  • Anda mungkin tidak berdiri di garis ketika melayani. Tetapi pesawat ulang-alik masih akan berada di dalam jika mereka mendarat di atas garis.

Berikut tata letak lapangan bulutangkis:
masukkan deskripsi gambar di sini

Aturan tantangan:

Memasukkan:

Anda akan diberikan dua input:

  • Sesuatu untuk menunjukkan apakah kita memainkan tunggal atau ganda / campuran (yaitu boolean)
  • Sesuatu untuk menunjukkan dari mana Anda melayani blok (yaitu [1,2,3,4]atau ['A','B','C','D']seperti yang digunakan dalam gambar di atas).

Keluaran:

Hanya baris yang relevan untuk penayangan saat ini (termasuk jaring), termasuk Funtuk menunjukkan dari mana Anda melayani, dan beberapa Tuntuk menunjukkan di mana Anda akan berpotensi untuk ditayangkan.

Meskipun pada kenyataannya Anda diizinkan untuk melayani dari dan ke mana saja di area yang ditentukan, kami menganggap seseorang yang akan melayani akan selalu berdiri di sudut area servis dekat ke tengah jaring, yang merupakan tempat Anda akan menempatkan itu F. Dan mereka akan melayani ke salah satu dari empat sudut area di mana mereka harus melayani, yang mana Anda akan menempatkan Ts.
Sebagai ASCII-art, seluruh lapangan bulutangkis akan menjadi sebagai berikut (jumlahnya ditambahkan sehingga Anda tidak perlu menghitungnya sendiri):

 2        15              15        2

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

Contoh:

Di sini dua contoh untuk hanya menampilkan bagian-bagian yang relevan dari servis:

Input: Tunggal dan melayani blok A
Output:

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

Seperti yang Anda lihat, Fitu ditambahkan di sudut dalam blok, tetapi Tmenggantikan +dalam output ASCI-art.


Input: Gandakan dan tayangkan blok C
Output:

                                       

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

                                       

Aturan tantangan:

  • Leading dan trailing newlines adalah opsional (termasuk dua baris awal dan akhir kosong ketika input tunggal). Ruang tambahan juga opsional. Ruang-ruang terkemuka adalah wajib namun.
  • Empat input berbeda yang masuk akal untuk menunjukkan dari mana blok yang kami layani diizinkan (untuk bilangan bulat, tetap berada dalam kisaran [-999.999]); dan juga dua input berbeda yang masuk akal untuk mengindikasikan apakah itu single atau double / mix (harap dicatat bahwa ini adalah celah terlarang yang relevan ). Harap sebutkan I / O yang Anda gunakan dalam jawaban Anda!
  • Anda diizinkan menggunakan huruf kecil fdan t(atau case campuran) alih-alih Fdan T.
  • Anda diperbolehkan mengembalikan daftar garis atau matriks karakter alih-alih mengembalikan atau mencetak string keluaran tunggal.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'.
  • Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
  • Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kevin Cruijssen
sumber
Ah, bulu tangkis. Satu permainan yang selalu ingin saya mainkan tetapi tidak pernah berhasil karena saya lupa / tidak dapat menemukan pemain untuk dimainkan
Quintec
@Quintec Jangan ragu untuk datang mengunjungi klub kami di Belanda untuk malam gratis; p
Kevin Cruijssen
1
Kesepakatan, jika Anda membayar tiket pesawat dan hotel saya? :)
Quintec
1
@Quintec Jika Anda menang, saya akan membayar kembali tiket pesawat, haha ​​xD
Kevin Cruijssen
1
@MagicOctopusUrn Ya, ada beberapa pemain bulutangkis profesional dari Belanda. Tidak yakin peringkat apa yang mereka miliki di daftar dunia tbh, saya tidak terlalu sering menonton bulutangkis (dan biasanya hanya 5 menit di berita olahraga jika disebutkan sama sekali ... semua waktu lain terbuang dengan sepak bola). Dan tidak, sebagai pemain top Anda mungkin hampir tidak menghasilkan uang, saya pikir. Jelas bukan jutaan.
Kevin Cruijssen

Jawaban:

2

Arang , 81 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input pertama sebagai 1atau 2untuk lajang atau ganda, input kedua sebagai salah satu ABCDseperti dalam pertanyaan. Penjelasan:

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

Lingkari lebar yang relevan dan ketinggian Dpengadilan dan gambarlah persegi panjang.

×=¹⁸O⟲O↙⁴

Gambarkan jaring dan terapkan simetri rotasi untuk menambahkan Apengadilan.

J¹±³F

Tambahkan Fke Dpengadilan.

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

Tambahkan huruf Ts ke tempat-tempat yang relevan di Apengadilan.

F№ABη‖↑F№ACη‖

Refleksikan hasil yang diperlukan untuk melayani dari pengadilan yang benar.

Neil
sumber
1
@KevinCruijssen Maaf karena mengabaikan itu, harus diperbaiki sekarang, terima kasih.
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

Cobalah online!

Mengambil input sebagai 0/1(atau False/True) untuk jenis game ( Double/Single),

dan 0-3untuk blok penayangan ( 0,1,2,3= C,D,A,B)

TFeld
sumber
Itu cepat! Jawaban bagus.
Kevin Cruijssen
1
@Yeah, saya agak mencobanya dari sandbox minggu lalu: P
TFeld
1

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

Mengambil input sebagai (block)(double), di mana blok adalah (kanan atas), (kiri bawah), (kanan bawah) atau (kiri atas) dan dobel adalah nilai Boolean.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)

Cobalah online!

Versi terformat

Bagaimana?

Kami beralih dari ke dan dari dari ke untuk setiap nilai .y=0y=30x=0x=39y

Kami pertama-tama mendefinisikan dan .X=x19Y=y15

Variabel p = X * Y * b < 0dan q = Y > 0 ^ b & 1digunakan untuk menentukan apa yang menggambar di setiap kuartal sesuai dengan blok .b

Mulai sekarang, dan dikuadratkan untuk dengan mudah menguji posisi absolut dalam setiap kuartal lapangan.XY

Ekspresi x * 24 % 35 > 2menghasilkan false jika milik (posisi garis vertikal) atau true sebaliknya.x{0,3,19,35,38}

Cobalah online!

Ekspresi ~16 >> Y % 62 % 6 & 2menghasilkan jika milik (posisi garis horizontal, tidak termasuk jaring) atau sebaliknya.0y{0,2,12,18,28,30}2

Cobalah online!

Variabel didefinisikan sebagai hasil dari bitwise OR antara dua nilai di atas, dan karenanya ditafsirkan sebagai:i

  • 3: ruang
  • 2: |
  • 1: -
  • 0: +atauT

Ekspresi (d ? Y : X - 87) > 169digunakan untuk memotong bidang sesuai dengan tipe permainan (tunggal atau ganda). Ekspresi serupa digunakan untuk menggambar 's di posisi yang sesuai.d(d ? X - 87 : Y) % 169T

Arnauld
sumber
* Buka TIO dan mulai memverifikasi output * Terlihat bagus; semua delapan output sudah benar, seperti yang diharapkan. * Melihat kode aktual * Hah .. dengan apa yang terjadi¿ ..: S Menantikan penjelasan itu nanti, @Arnauld . Jumlah tak terduga perhitungan aritmatika, terner, dan bitwise untuk tantangan ASCII-art. xD
Kevin Cruijssen
1
@KevinCruijssen Sebenarnya, saya berharap formula saya lebih aneh sehingga saya bisa mendapatkan ini di bawah 200 byte, yang merupakan target awal saya. ;) Tapi pendekatan saya mungkin terlalu banyak dioptimalkan untuk menggambar bidang penuh dan tidak cukup untuk memperhitungkan parameter dengan biaya byte yang masuk akal.
Arnauld
Mungkin ya, karena saya mengizinkan nilai input apa pun dalam kisaran [-999,999]untuk empat input berbeda, jadi mungkin Anda bisa menggunakannya untuk keuntungan Anda dalam golf beberapa byte. Ini berarti memulai kembali sebagian, yang mungkin tidak sepadan dengan usaha. Sayangnya saya tidak bisa memberi Anda tips bermain golf untuk membantu Anda di bawah 200 byte; Saya hanya bisa berharap semoga sukses dalam usaha Anda. ; p
Kevin Cruijssen
@KevinCruijssen Selesai. :)
Arnauld
1

Jelly , 108 99 byte

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

Cobalah online!

Saya yakin ini bisa menjadi golf yang lebih baik.

Hubungan diad dengan argumen kiri 0 atau 1 untuk lajang / ganda dan argumen kanan 0,1,2,3 untuk kuadran servis yang berbeda. Mengembalikan daftar string

Terima kasih kepada @KevinCruijssen karena telah menghemat satu byte!

Nick Kennedy
sumber
Saya tidak tahu Jelly, jadi saya mungkin mengatakan sesuatu yang bodoh di sini, tetapi dengan “|-+TO= ”“F”, tidak bisakah “F”golf ke jenis string lain untuk karakter tunggal? Di 05AB1E misalnya, ada bawaan untuk string ukuran 1 ( '), 2 ( ), atau 3 ( ), jadi bisa jadi 'F. Tidak tahu apakah Jelly memiliki sesuatu yang serupa, atau apakah Anda memiliki alasan lain untuk itu “|-+TO= ”“F”?
Kevin Cruijssen
1
@KevinCruijssen Terima kasih, dan tantangan yang bagus. Saya kira tidak. Ada dua karakter literal (dengan⁾), tetapi tidak satu. Saya bisa menggunakan angka 7 dan menambahkan F ke dalam pencarian, tetapi jumlah karakter yang sama karena kebutuhan untuk mengikuti 7 dengan 21 yang karenanya membutuhkan ruang untuk memisahkan keduanya.
Nick Kennedy
Seperti yang saya katakan, saya tidak tahu Jelly. Kupikir itu mungkin memiliki beberapa bawaan untuk string 1 atau 2 karakter juga, tetapi jika Anda mengatakan tidak, saya percaya Anda. :)
Kevin Cruijssen
@KevinCruijssen Saya senang orang lain ikut - masih belajar!
Nick Kennedy
1
@KevinCruijssen Saya benar-benar merindukan yang dapat digunakan untuk satu karakter literal - oops! Terima kasih telah menyimpan byte.
Nick Kennedy