Saya menyaksikan kejuaraan snooker dunia dan itu membuat saya bertanya-tanya ..
Snooker mencetak gol
Dalam permainan snooker ada beberapa aturan yang harus Anda patuhi juga:
- Ketika ada bola merah di atas meja, selama giliran Anda, Anda harus terlebih dahulu memasang bola merah
- Setelah pot setiap bola merah, Anda harus pot bola berwarna (bukan merah) (bola berwarna pot kemudian diganti ke atas meja)
- Setelah semua bola merah naik (ada 15), pertama Anda dapat memilih bola berwarna dan kemudian Anda mulai dengan bola skor terendah dan bekerja sampai bola skor tertinggi (ini tidak diganti)
- Tidak pot pada titik mana pun mengakhiri giliran Anda.
- Poin per bola
- Bola merah: 1 poin
- Bola kuning: 2 poin
- Bola hijau: 3 poin
- Bola coklat: 4 poin
- Bola biru: 5 poin
- Bola merah muda: 6 poin
- Bola hitam: 7 poin
Pertanyaan
Anda mulai dengan sebuah meja dengan semua bola masih di atasnya - 15 merah dan satu dari masing-masing bola berwarna lainnya - dan diberi skor pemain di snooker setelah giliran pertama mereka, apa cara yang bisa mereka lakukan untuk mencapai ini skor?
Input akan berupa skor dari 1 hingga 147. Anda dapat memilih apakah bilangan bulat atau string. Output harus berupa kombinasi yang berbeda dari berapa kali Anda menempatkan setiap bola.
Kasus uji:
Input: 4
Output:
1r 1g
2r 1y
Input: 25
Output:
4r 3b
5r 2b 1br 1y
5r 2b 2g
...
9r 8y
Aturan:
- Anda dapat memilih apakah Anda menampilkan kemungkinan yang dibagi dengan baris baru atau pemisah semacam (/,; | | atau bahkan yang lain yang saya lewatkan)
Ini codegolf, jadi kode terpendek menang.
"5r 3b 2g"
bisa menjadi output[5,0,2,0,3,0,0]
(selama ini konsisten)?b
untuk cokelat danbl
biru; jadibk
untuk hitam? Bisakah kita menggunakann
,e
dank
(huruf terakhir) untuk ketiganya? Bagaimanadleruna
mengidentifikasi delapan warna (masing-masing 3 huruf)?Jawaban:
Jelly , 66 byte
Yah, terlalu lambat untuk TIO sekarang!
... jadi di sini adalah rekat dari 2636 cara untuk membuat persis 100 diproduksi offline.
... dan di sini adalah versi yang akan berjalan di sana dengan hanya ENAM merah (maksimum istirahat = 75)
Mencetak kisi angka masing-masing garis menjadi daftar nilai bola yang dipisahkan ruang (mis. Tiga merah dan dua hijau akan berada pada pembacaan garis
1 1 1 3 3
).Untuk versi yang dikelompokkan nilai yang mencetak garis jumlah bersama dengan nama lengkap bola, pada 102 byte:
Bagaimana?
sumber
JavaScript (ES7),
188180178 byteMengembalikan array array (diurutkan dari merah ke hitam).
Berkomentar
Catatan : Versi ini tidak termasuk optimisasi terakhir pada
p
(sekarang diinisialisasi ke 7) yang membuat logika lebih sulit untuk dipahami.Contoh output
Di bawah ini adalah output untuk n = 140:
Demo
Ini terlalu lambat untuk cuplikan. Anda bisa mencobanya di sini . (Anda mungkin mendapatkan satu atau dua lansiran skrip yang tidak responsif , tetapi akhirnya akan selesai.)
sumber