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. Ini yang pertama:
Tantangan:
Input: Dua bilangan bulat
Output: Salah satu dari tiga output yang berbeda dan unik dari pilihan Anda sendiri. Satu menunjukkan bahwa input adalah skor bulu tangkis yang valid DAN set telah berakhir dengan pemenang; satu menunjukkan bahwa input adalah skor badminton yang valid DAN set masih dimainkan; satu menunjukkan input bukan skor bulu tangkis yang valid.
Dengan bulutangkis, kedua (pasangan) pemain mulai dengan 0 poin, dan Anda berhenti ketika salah satu dari dua (pasangan) pemain telah mencapai skor 21, dengan perbedaan minimal 2 poin, hingga maksimum 30-29.
Jadi ini semua pasangan-pasangan input yang memungkinkan (dalam urutan mana pun) yang mengindikasikan skor badminton yang valid DAN set telah berakhir:
[[0,21],[1,21],[2,21],[3,21],[4,21],[5,21],[6,21],[7,21],[8,21],[9,21],[10,21],[11,21],[12,21],[13,21],[14,21],[15,21],[16,21],[17,21],[18,21],[19,21],[20,22],[21,23],[22,24],[23,25],[24,26],[25,27],[26,28],[27,29],[28,30],[29,30]]
Dan ini semua adalah pasangan input yang memungkinkan (dalam urutan apa pun) yang menunjukkan itu adalah skor badminton yang valid TETAPI set masih dimainkan:
[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7],[2,8],[2,9],[2,10],[2,11],[2,12],[2,13],[2,14],[2,15],[2,16],[2,17],[2,18],[2,19],[2,20],[3,3],[3,4],[3,5],[3,6],[3,7],[3,8],[3,9],[3,10],[3,11],[3,12],[3,13],[3,14],[3,15],[3,16],[3,17],[3,18],[3,19],[3,20],[4,4],[4,5],[4,6],[4,7],[4,8],[4,9],[4,10],[4,11],[4,12],[4,13],[4,14],[4,15],[4,16],[4,17],[4,18],[4,19],[4,20],[5,5],[5,6],[5,7],[5,8],[5,9],[5,10],[5,11],[5,12],[5,13],[5,14],[5,15],[5,16],[5,17],[5,18],[5,19],[5,20],[6,6],[6,7],[6,8],[6,9],[6,10],[6,11],[6,12],[6,13],[6,14],[6,15],[6,16],[6,17],[6,18],[6,19],[6,20],[7,7],[7,8],[7,9],[7,10],[7,11],[7,12],[7,13],[7,14],[7,15],[7,16],[7,17],[7,18],[7,19],[7,20],[8,8],[8,9],[8,10],[8,11],[8,12],[8,13],[8,14],[8,15],[8,16],[8,17],[8,18],[8,19],[8,20],[9,9],[9,10],[9,11],[9,12],[9,13],[9,14],[9,15],[9,16],[9,17],[9,18],[9,19],[9,20],[10,10],[10,11],[10,12],[10,13],[10,14],[10,15],[10,16],[10,17],[10,18],[10,19],[10,20],[11,11],[11,12],[11,13],[11,14],[11,15],[11,16],[11,17],[11,18],[11,19],[11,20],[12,12],[12,13],[12,14],[12,15],[12,16],[12,17],[12,18],[12,19],[12,20],[13,13],[13,14],[13,15],[13,16],[13,17],[13,18],[13,19],[13,20],[14,14],[14,15],[14,16],[14,17],[14,18],[14,19],[14,20],[15,15],[15,16],[15,17],[15,18],[15,19],[15,20],[16,16],[16,17],[16,18],[16,19],[16,20],[17,17],[17,18],[17,19],[17,20],[18,18],[18,19],[18,20],[19,19],[19,20],[20,20],[20,21],[21,21],[21,22],[22,22],[22,23],[23,23],[23,24],[24,24],[24,25],[25,25],[25,26],[26,26],[26,27],[27,27],[27,28],[28,28],[28,29],[29,29]]
Sepasang bilangan bulat lainnya akan menjadi skor bulutangkis yang tidak valid.
Aturan tantangan:
- I / O fleksibel, jadi:
- Anda dapat mengambil input sebagai daftar dua angka; dua angka yang terpisah melalui STDIN atau parameter fungsi; dua string; dll.
- Output akan menjadi tiga nilai berbeda dan unik dari pilihan Anda sendiri. Dapat bilangan bulat (yaitu
[0,1,2]
,[1,2,3]
,[-1,0,1]
, dll); bisa menjadi Booleans (yaitu[true,false,undefined/null/empty]
); dapat berupa karakter / string (yaitu["valid & ended","valid","invalid"]
); dll. - Silakan tentukan I / O yang Anda gunakan dalam jawaban Anda!
- Anda diizinkan mengambil bilangan bulat input yang dipesan lebih dulu dari terendah ke tertinggi atau sebaliknya.
- Bilangan bulat input bisa negatif, dalam hal ini tentu saja tidak valid.
Aturan umum:
- Ini adalah kode-golf , 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 saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O standar , sehingga Anda diperbolehkan 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.
Kasus uji:
Kasus uji ini valid, dan set telah berakhir:
0 21
12 21
21 23
28 30
29 30
Kasing uji ini valid, tetapi set masih dalam permainan:
0 0
0 20
12 12
21 21
21 22
Kasus uji ini tidak valid:
-21 19
-19 21
-1 1
12 22
29 31
30 30
42 43
1021 1021
b-61<~a<a>b/22*b-3
), Anda dapat menyimpan 3 byte.lambda a,b:-(a<0)|cmp(2+max(19,a)%30-a/29,b)
JavaScript (ES6),
55 5348 byte(a)(b)
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) ,
5352 byteDisebut sebagai
f(max)(min)
. Mengembalikan 3 untuk tidak valid, 1 untuk selesai, 2 untuk berkelanjutan.Disimpan 1 byte berkat Kevin Cruijjsen
Cobalah online!
sumber
Jelly , 25 byte
Cobalah online!
Argumen kiri: minimum. Argumen yang tepat: maksimum.
Valid:
0
. Yang sedang berlangsung:1
. Berakhir:2
.Penjelasan:
sumber
VDM-SL , 80 byte
Fungsi ini mengambil skor yang dipesan dalam urutan menaik dan mengembalikan set kosong jika skor tidak valid atau set yang berisi apakah set selesai (jadi {true} jika set lengkap dan valid dan {false} jika set tidak lengkap dan sah)
Program lengkap untuk dijalankan mungkin terlihat seperti ini:
Penjelasan:
sumber
Java (JDK) ,
5948 byteCobalah online!
Mengembalikan
Object
, yang merupakanInteger
0
untuk game yang tidak valid danBoolean
strue
danfalse
untuk game yang sedang berlangsung yang valid dan untuk game yang sudah selesai secara valid. Mengambil skor yang dipesan (dan kari), dengan skor yang lebih tinggi terlebih dahulu.-2 bytes
dengan membalikkan cek akhir pertandingan.-11 bytes
dengan menjelajah, menggunakan operator bitwise, dan beberapa tipu daya autoboxing tipe kembali - terima kasih kepada @KevinCruijssenTidak disatukan
sumber
APL (Dyalog Unicode) , 35 byte SBCS
Fungsi infix tacit di mana berakhir adalah 2, berkelanjutan adalah 1, tidak valid adalah 0, skor lebih kecil dan lebih besar dibiarkan.
Cobalah online!
Menerapkan formula matematika Erik the Outgolfer yang digabungkan menjadi
dan diterjemahkan langsung ke APL (yang benar-benar asosiatif, jadi kami menghindari beberapa tanda kurung):
yang merupakan solusi kami;
(,≡30 31|,)×(⊢<2+X)×1+⊢>X←29⌊20⌈1+⊣
:⊣
argumen kiri;1+
satu ditambah itu;20⌈
maksimal 20 dan itu;29⌊
minimal 29 dan itu;X←
tetapkan itu untukX
;⊢>
Apakah argumen yang benar lebih besar (0/1)?;1+
tambahkan satu;(
...)×
gandakan yang berikut dengan itu;2+X
dua plusX
;⊢<
adalah argumen yang benar kurang dari itu (0/1);(
...)×
gandakan yang berikut dengan itu;,
menggabungkan argumen;30 31|
sisa ketika dibagi dengan angka-angka ini;,≡
apakah argumen gabungan identik dengan itu (0/1)?;sumber
x86 Assembly, 42 Bytes
Mengambil input
ECX
danEDX
register. Catatan yangECX
harus lebih besar dariEDX
.Keluaran menjadi
EAX
, di mana0
berarti game masih menyala,1
mewakili game yang berakhir dan-1
(aliasFFFFFFFF
) mewakili skor yang tidak valid.Atau, lebih mudah dibaca di Intel Syntax:
Fakta menyenangkan: fungsi ini hampir mengikuti aturan Konvensi Pemanggilan C tentang register mana yang harus dilestarikan, kecuali saya harus mengalahkan
EBX
untuk menghemat beberapa byte pada penggunaan stack.Optional (not included in byte-count)
Dengan menambahkan 6 byte berikut secara langsung sebelum memulai kode di atas, Anda dapat lulus
ECX
danEDX
tidak berurutan:Berikut ini adalah sintaks Intel yang dapat dibaca:
sumber
Retina 0.8.2 , 92 byte
Cobalah online! Tautan termasuk kasus uji. Mengambil input dalam urutan menaik. Penjelasan: Tahap pertama hanya mengkonversi dari desimal ke unary sehingga skor dapat dibandingkan dengan benar. Tahap kedua berisi enam pola alternatif, dikelompokkan menjadi tiga kelompok sehingga tiga nilai berbeda dapat menjadi output, yang
10
untuk menang,01
untuk yang sedang berlangsung dan00
untuk yang ilegal. Polanya adalah:sumber
APL (Dyalog Unicode) ,
3332 byte SBCSCobalah online!
di: sepasang dalam urutan menurun
keluar: 2 = sedang berlangsung, 1 = berakhir, 0 = tidak valid
tes dicuri dari jawaban Adam
sumber
Bash 4+,
97899188 byteAsumsikan bahwa input sedang naik. Konsep yang digunakan dari jawaban VDM-SL . Cobalah Online
z==0
- game dalam prosesz==1
- permainan selesaiz==2
- tidak valid-8 dengan pembersihan braket dari
(( & | ))
kondisi+2 memperbaiki bug, terima kasih kepada Kevin Cruijssen
-3 peningkatan logika oleh Kevin Cruijssen
sumber
1
bukan2
untuk0 30
. Versi 97 byte Anda berfungsi dengan benar, jadi jika Anda tidak dapat memperbaikinya, Anda selalu dapat mengembalikannya. Terpilih untuk versi 97 itu. :)29 30
:( harus "selesai"i>29
harus beradaj>29
di terner kedua untuk memperbaikinya.