Tantangan ini diadaptasi dari Olimpiade Informatika Inggris .
Game dadu
Dua pemain memainkan permainan dadu di mana mereka masing-masing melempar sepasang dadu, dan jumlah tertinggi menang. Pasangan dadu memiliki jumlah sisi yang sama, tetapi tidak harus memiliki nilai yang sama di setiap sisi. Oleh karena itu, permainan ini adil jika untuk kedua pasang dadu semua jumlah yang mungkin dapat dibuat dengan probabilitas yang sama.
Misalnya, jika Pemain 1 memiliki dadu berikut:
{1,2,3,4,5,6} {1,2,3,4,5,6}
Kemudian mereka dapat menghasilkan jumlah berikut:
1 2 3 4 5 6
+------------------
1| 2 3 4 5 6 7
2| 3 4 5 6 7 8
3| 4 5 6 7 8 9
4| 5 6 7 8 9 10
5| 6 7 8 9 10 11
6| 7 8 9 10 11 12
Jika Player 2 memiliki:
{1,2,2,3,3,4} {1,3,4,5,6,8}
Mereka dapat menghasilkan:
1 2 2 3 3 4
+------------------
1| 2 3 3 4 4 5
3| 4 5 5 6 6 7
4| 5 6 6 7 7 8
5| 6 7 7 8 8 9
6| 7 8 8 9 9 10
8| 9 10 10 11 11 12
Permainan ini adil karena minimum untuk keduanya adalah 2, maksimal 12, dan setiap jumlah terjadi jumlah yang sama, misalnya 7 dapat dibuat 6 cara dengan masing-masing pasangan.
Tantangan
Tulis program / fungsi yang mengambil dua dadu sebagai input, dan opsional bilangan bulat yang mewakili jumlah sisi yang berisi setiap dadu, dan cetak / kembalikan sepasang dadu yang berbeda yang dapat digunakan untuk memainkan permainan yang adil dengan dua dadu masukan, atau nilai falsey jika tidak ada solusi yang berbeda dari input.
Spesifikasi
Jumlah sisi pada kedua dadu harus sama, dan sama dengan jumlah sisi pada pasangan input dadu. Angka ini akan selalu berupa bilangan bulat yang lebih besar dari atau sama dengan 1.
Dua dadu yang dikembalikan bisa sama, tetapi pasangannya tidak boleh sama dengan pasangan masukan.
Pasangan pesanan yang berbeda tidak berbeda; {1,2,3} {4,5,6} sama dengan {4,5,6} {1,2,3}.
Program Anda tidak perlu menghasilkan hasil dengan cepat, asalkan pada akhirnya akan menghasilkan output yang benar.
Nilai pada pasangan input dadu akan selalu berupa bilangan bulat antara 1 dan 9 inklusif, tetapi nilai yang dikembalikan dapat berupa bilangan bulat ≥1.
Jika ada lebih dari satu solusi yang mungkin, hanya satu yang perlu dikembalikan.
Input / Output dapat dalam format yang masuk akal.
Uji Kasus
6
1 2 2 3 3 4
8 6 5 4 3 1
1 2 3 4 5 6
1 2 3 4 5 6
4
1 1 1 1
1 4 5 8
1 1 4 4
1 1 5 5
3
1 3 5
2 4 6
False
8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
Any of the following:
1 2 2 3 3 4 4 5 | 1 2 2 3 5 6 6 7 | 1 2 3 3 4 4 5 6
1 3 5 5 7 7 9 11 | 1 3 3 5 5 7 7 9 | 1 2 5 5 6 6 9 10
9
? Saya hanya melihat hukum tentang sisi-sisi yang ada>=1
, tetapi apakah ada maks? Jika bisa lebih tinggi dari 9, maukah Anda menambahkan test case untuknya?Jawaban:
Jelly , 34 byte
Mengembalikan daftar semua pasangan dadu yang mungkin ke urutan dadu dan wajah * (tidak termasuk yang dadu sama dengan pasangan input).
Cobalah online!
Ini adalah brute-forcer, dan tidak efisien (terlalu lambat untuk menjalankan test case 6-face di TIO).
* Yaitu jika
[[1,1,4,4],[1,1,5,5]]
kemungkinan (seperti dalam salah satu contoh) tidak akan ada seorang[[1,1,5,5],[1,1,4,4]
atau[[1,4,1,4],[1,1,5,5]]
, dllsumber
C ++ 14, 130 byte
Sebagai lambda tanpa nama dengan asumsi
M
sepertistd::vector<std::vector<int>>
. Adil0
, hal lain tidak adil.Tidak Disatukan:
sumber
Python, 228 byte
Ini sudah lama sekali; Saya mungkin bisa bermain golf ini sedikit lebih baik sekarang.
sumber