Sudah lama sejak Anda membunuh hydra itu , Anda berjemur dalam kemuliaan selama bertahun-tahun, tetapi sekarang orang-orang memanggil Anda mandi, sudah. Nah saat Anda membuktikannya salah, Anda pernah mendengar keberadaan hydra lain. Cukup bunuh saja dan Anda akan diberikan semua kemuliaan yang layak Anda dapatkan.
Anda tiba di gudang senjata untuk menerima pedang Anda tetapi mereka semua kehabisan pedang biasa yang tersisa adalah Sektor. Suatu n-sektor akan membagi jumlah kepala pada Hydra dengan n, tetapi hanya dapat digunakan jika jumlah kepala dibagi dengan n.
Sekali lagi Anda akan menulis beberapa kode untuk membantu Anda membunuh hydra. Kode Anda akan diambil sebagai input jumlah head hydra, mulai pertarungan dengan, jumlah head hydra tumbuh setiap belokan, dan daftar n-sektor yang dapat Anda gunakan. Kode Anda akan menampilkan pola gerakan optimal untuk membunuh hydra secepat mungkin
Setiap putaran pertarungan Anda dapat memilih satu pedang untuk digunakan, jika setelah irisan hydra hanya memiliki satu kepala Anda menang, jika tidak itu menumbuhkan kepala. Anda mungkin tidak pernah bergerak, dan jika tidak ada gerakan yang tersedia, Anda kalah.
Jika tidak ada solusi yang mungkin Anda dapat menampilkan apa pun selain solusi, misalnya daftar kosong, tidak ada, angka nol, dll.
Ini adalah kode-golf sehingga jawaban akan dinilai sebagai jumlah byte mereka, dengan lebih sedikit lebih baik.
Uji kasus
Berikut adalah beberapa kasus uji super dasar, lebih banyak kasus uji akan ditambahkan berdasarkan permintaan.
24 heads, 1 heads per turn, [2,3] -> [3,3,2,3]
25 heads, 2 heads per turn, [2,3] -> No solutions
4 heads, 2 heads per turn, [2] -> No solutions
4 heads, 3 heads per turn, [2,5] -> [2,5]
10 heads, 17 heads per turn, [2, 3, 7, 19] -> No solutions
10 heads, 6 heads per turn, [1,16] -> [1,16]
6 heads, 2 heads per turn, [2, 3, 5] -> [2, 5]
125 heads, 1 head per turn, [1, 2, 3, 127] -> [1, 1, 127]
Jawaban:
JavaScript (ES6),
111105 byteDisimpan 4 byte berkat @ThePirateBay
Saya telah membuang rekursi kedalaman-pertama yang saya coba gunakan untuk loop pertama yang jauh lebih aman. Outputs solusi sebagai array jika ada, berjalan selamanya jika tidak. Jika ini tidak diijinkan, inilah yang akhirnya berhenti (pada kebanyakan kasus, bagaimanapun):
sumber
JavaScript,
191190 byteMenyimpan satu byte berkat Langkah Hen
sumber
Python 2 ,
169195222 byte+26 byte untuk menangani regenerasi kepala siklik dengan benar pada pilihan senjata yang buruk. (Terima kasih kepada @ThePirateBay untuk menunjukkannya)
+27 byte untuk memperbaiki kasus tepi tertentu yang menyebabkan kesalahan.
Cobalah online!
sumber
VB.NET (.NET 4.5), 439 + 35 (impor) = 474 byte
Membutuhkan
Imports System.Collections.Generic
Fungsi ini
Z
mengambil duaInt64
(jumlah head dan head regrow rate), dan aList(Of Int64)
(Sektor), dan mengembalikanList(Of Int64) (the ordered choice of Sectors). Returns
Nothing` jika tidak ada solusi.Asumsikan Sektor disajikan dalam urutan diurutkan dari terbesar ke terkecil.
The
Optional
parameter untuk panggilan rekursif untuk menyelamatkan negara. Mereka melacak urutan Sektor saat ini yang digunakan, urutan Sektor terpendek yang pernah ada, dan jumlah kepala yang pernah ditemui. Jika kita menemukan jumlah kepala yang sama lagi, pasti ada cara yang lebih pendek untuk mencapainya.Satu-satunya pemesanan Sektor yang penting adalah saya harus
1
menjadi yang terakhir jika ada. Kalau tidak, hydra akan tumbuh tanpa batas karena saya bisa setiap saat hanya menggunakan1
Sektor dan tidak pernah mencoba yang lain.Saya menyatakan konstanta
N
untuk diwakiliNothing
, mencukur 6 byte setiap kali saya ingin menggunakannyaNothing
.And
/Or
bukan hubungan arus pendek, jadi saya menggunakan operator kondisional null (?.
) untuk menghindari objek null error. Dalam kode nyata, saya akan menggunakanAndAlso
/OrElse
yang melakukan hubungan pendek.Cobalah online!
Z
un-golfed untuk keterbacaansumber