Latar Belakang:
Jack adalah labu yang suka menakuti penduduk desa di dekat petak labu setiap Halloween. Namun, setiap tahun setelah seseorang menyalakan lilin di dalam dirinya, ia memiliki waktu terbatas untuk menakuti semua orang sebelum lilin habis, sehingga tidak dapat menakuti penduduk desa lagi karena tidak ada yang bisa melihatnya. Dalam beberapa tahun terakhir, dia hanya mampu menakuti sejumlah kecil desa karena keputusannya yang buruk, tetapi sekarang dia memiliki Anda untuk membantunya, ia akan mampu menakuti desa sebanyak mungkin!
Tugas:
Diberikan daftar lokasi desa dan masa hidup lilin, hasilkan jumlah maksimum desa yang dapat dikunjungi Jack. Anda tidak harus mencetak jalur itu sendiri.
Memasukkan:
Umur lilin dan daftar lokasi desa dalam sistem koordinat Kartesius. Patch labu tempat Jack berasal akan selalu sebesar 0,0. Anda dapat memformat input sesuai keinginan Anda. Untuk menyederhanakan gerakan Jack, ia hanya bisa bergerak secara horizontal, vertikal, atau diagonal, yang berarti lilinnya akan kehilangan 1 atau 1,5 (dia butuh sedikit lebih lama secara diagonal) unit kehidupan setiap gerakan. Lilin menyala ketika umur kurang dari atau sama dengan 0.
Keluaran:
Bilangan bulat dengan jumlah maksimum desa yang dapat dikunjungi Jack sebelum lilin habis.
Aturan:
Ini adalah kode-golf , jadi kode terpendek dalam byte menang. Tidak ada celah standar.
Kasus uji:
// Format [lifespan] [list of village coordinates] -> [maximum visit-able villages]
4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3
4 1,1 2,2 3,3 -> 2
5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4
sumber
Jawaban:
Jelly,
30292725 byteCobalah online!
Rupanya produk dot Jelly hanya mengabaikan ketidakcocokan ukuran daftar dan tidak melipatgandakan elemen tambahan dari array lain, hanya menambahkannya. Memotong 2 byte.
Penjelasan
sumber
Java 7,
206201 byteTerima kasih kepada @KevinCruijssen karena telah menghemat 5 byte
Tidak disatukan
sumber
i-x
dua kali danb[c]-y
dua kali, sehingga Anda dapat menambah,t
int, dan kemudian menggunakan ini:Math.sqrt((t=i-x)*t+(t=b[c]-y)*t)*1
bukanMath.sqrt((i-x)*(i-x)+(b[c]-y)*(b[c]-y))*1
.Scala, 196 byte
Tidak Disatukan:
Penjelasan:
sumber
JavaScript (ES6), 145
Fungsi rekursif anonim, parameter
s
adalah umur lilin, parameterl
adalah daftar koordinat desa.Sebuah Pencarian Pertama Kedalaman , berhenti ketika jarak reachs umur lilin
Kurang bermain golf, lihat cuplikan di bawah ini
Uji
sumber
MATL , 27 byte
EDIT (26 November 2016): Karena perubahan
Xl
fungsi, itu harus diganti dalam kode di atas oleh2$X>
. Tautan di bawah ini memasukkan modifikasi itu.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
The labu jarak antara dua kota terpisah Δ x dan Δ y di setiap koordinat dapat diperoleh sebagai (| Δ x | + | Δ y | + max (| Δ x |, | Δ y |)) / 2.
Kode ini mengikuti langkah-langkah ini:
Kode yang dikomentari:
sumber
Python 2.7 , 422 byte
terima kasih kepada NoOneIsHere karena telah menunjukkan peningkatan tambahan!
terima kasih kepada edc65 karena tidak menyimpan daftar tetapi gunakan iterators sebagai gantinya!
Cobalah online!
Penjelasan:
Fungsi menghitung jarak antara dua titik sesuai dengan aturan yang diberikan, loop berulang melalui semua permutasi yang dihasilkan oleh generator dari input dan menghitung jarak, jika jaraknya lebih rendah dari umur lilin itu mengurangi dan menambah tempat ke penghitung, jika penghitung itu lebih besar dari maks saat ini ia menggantinya.
ungolfed:
sumber
current
c
, danll
m
.PHP, 309 byte
Kekuatan benar-benar kasar dan bahkan tidak terlalu pendek. Gunakan seperti:
Dengan lebih banyak ruang putih dan disimpan dalam file:
sumber
Python, 175 byte
c
adalah umur lilin,l
adalah daftar tupel - koordinat desa,v
adalah jumlah desa yang dikunjungi,(x,y)
adalah pasangan koordinat desa Jack saat ini.r(t)
adalah fungsi yang menghitung jarak ke posisi saat ini dan digunakan untuk mengurutkan daftar sehingga terdekat menjadil[0]
. Rumus yang digunakan adalah | Δx | + | Δy | - mnt (| Δx |, | Δy |) / 2.Coba di sini!
sumber
Raket
Pengujian:
Keluaran:
Namun, kode di atas tidak berfungsi untuk nilai negatif x dan y.
sumber