Saya penggemar berat game Creeper World, dan terutama sekuelnya. Anda tidak perlu tahu bagaimana game ini bekerja untuk menjawab pertanyaan, saya hanya ingin menyebutkan dari mana pertanyaan saya berasal.
Dalam gim, tujuan Anda adalah menghancurkan Emitter yang memunculkan Creeper, menggunakan senjata yang dikenal sebagai nullifier.
Nullifiers dapat menghancurkan emitor dalam radius ini:
eee
eeeee
eenee
eeeee
eee
Setiap nullifier BISA menargetkan beberapa Emitter.
Tujuan Anda
Diberikan array yang mensimulasikan peta 2D yang terdiri dari apa - apa dan penghasil emisi dengan karakter apa pun yang Anda suka, bisa berupa spasi dan e atau angka - pastikan saja mereka dapat dibedakan, output peta yang sama dengan jumlah optimal dari nullifiers n (atau apa yang Anda inginkan ) ditempatkan, sehingga emitor dihancurkan dengan jumlah paling sedikit dari nullifiers.
Jika ada beberapa cara optimal untuk melakukannya, hanya mengeluarkan satu akan baik-baik saja. Namun, jika tugas tersebut tidak dapat dipecahkan, katakanlah ada begitu banyak emitor yang tidak ada tata letak yang akan menghantam semuanya, Anda harus menampilkan sesuatu yang sangat berbeda, null akan mencukupi
Aturan Cepat:
- Input: array multidimensi
- Input akan berisi dua karakter, yang berarti apa - apa dan emitor , termasuk apa yang ada dalam jawaban Anda
- Output: array multidimensi
- Output akan berisi tiga karakter, yang berarti apa-apa , emitor dan nullifier ATAU output yang dapat dibedakan jika input tidak dapat dipecahkan
- Anda hanya dapat mengganti karakter kosong dengan nullifier
- Sebuah nullifier dapat mengenai banyak emitor, dan akan selalu mengenai semua yang ada dalam jangkauan
- Sebuah nullifier dapat mengenai area yang ditentukan di atas, dan akan selalu mengenai semua emitor yang dapat ditargetkan
- Jawaban terpendek dalam byte menang
- celah standar terlarang
Contohnya
Memasukkan:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Keluaran:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Memasukkan:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Keluaran:
[[e,e,e,e,e],
[e, ,n, ,e],
[e, , , ,e],
[e, ,n, ,e],
[e,e,e,e,e]]
Memasukkan:
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
[ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
[ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
[ , , , ,e, ,e, , , , , , , , , , , , , ],
[e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, , , ,e, , , , , ],
[ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
[ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]
Output (Output ini buatan tangan, dan mungkin bukan output yang optimal):
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , ,n,e,e, , , ,n,e, , , , ],
[ ,n,e, , ,n,e, ,e, ,e, ,e, ,e, ,e, ,n, ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , ,n,e, ,e, ,e, , , ,n, , , , , ,e, , ],
[ ,e,e, ,e, ,n, ,e, ,e,e, ,e, ,e,n,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, ,n, , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e,n, , ,n,e, , , ,n, , ,e,e, ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, ,n, , , ,e, , ,e, ,e, ,e, ,e, ],
[ ,n, , ,e, ,e, , , , , , , ,n, , , ,n, ],
[e,e, , ,e,e, , ,e,n, ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, ,n, ,e, , ,n, , ],
[ , ,e, ,n, ,e, ,e, , , ,e, ,n, , ,e, , ],
[ , , ,e, ,e, ,e, ,n,e,e, , ,e,e, , ,e, ]]
Memasukkan:
[[e,e],
[e,e]]
Keluaran:
null
sumber
0
,1
dan2
atau serupa?Jawaban:
Python 3 ,
558511509 byteCobalah online!
Ini sangat gila, tapi saya tidak cukup tahu tentang Python untuk mengoptimalkannya lebih lanjut. Saya memang belajar beberapa hal dari jawaban ovs, jadi itu menyenangkan.
Input (dimodifikasi untuk membuatnya lebih mudah untuk menulis kasus uji ) mengharapkan '' atau 'e', sedangkan output menggunakan '', 'n' untuk nullifier, dan 'x' untuk emitor yang dibatalkan. Fungsi mengambil input yang diharapkan yang dijelaskan dalam pertanyaan.
Saya mengatur variabel e, w, n, dan d di luar karena mereka dapat dengan mudah diganti dengan angka dan, jika input dan output dimodifikasi untuk menggunakan angka juga, itu akan mencetak hal yang sama. Saya menggunakan huruf karena mereka membuatnya lebih mudah dibaca saat mengerjakannya.
Pertanyaan menyenangkan, OP! Creeper World hebat dan itu adalah inspirasi keren untuk pertanyaannya :)
Sunting: -47 bytes berkat Erik the Outgolfer
sumber
Python 2 ,
267263 byteCobalah online!
0
untuk emitor,2
untuk pembatal dan1
untuk ruang kosong.sumber
Bahasa Wolfram (Mathematica) ,
173168 byteCobalah online!
Memecahkan test case terbesar dalam 1 detik .
Program lengkap. Sebagai fungsi, ini lebih pendek, hanya 130 byte .
Gunakan
,
0
untuk1
untukn
dan2
untuke
.Program ini dapat digunakan untuk mengonversi dari format input dalam tantangan.
Jika tidak ada solusi, itu akan mencetak pesan kesalahan
lpdim
seperti ini , ataulpsnf
seperti ini .Versi yang menggunakan
Outer
(meskipun lebih mudah dibaca) adalah 2 byte lebih lama, meskipun nama pendeknyaOuter
: Coba online!Penjelasan.
Perhatikan bahwa ini dapat dikurangi menjadi masalah pemrograman linear integer.
Setiap
e
sel ditetapkan pada 2, setiap sel kosong adalah variabel integer, yang dapat berupa0
(kosong) atau1
(nullifier). Daftar koordinat variabel disimpan dalam variabelp
. (Position
dalamt
itu adalah0
)Tujuannya adalah untuk meminimalkan jumlah nullifier yang digunakan, sehingga jumlah variabel integer tersebut harus diminimalkan. (
1&/@p
, vektor terdiri dari semua1
dan dengan panjang yang sama denganp
panjangnya, menunjukkan fungsi objektif)2
q
Ini dirumuskan dengan matriks
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(untuk setiap elemen dalamq
, buat baris dengan elemen menjadi1
jika jarak kuadrat (Norm
) ke koordinat yang sesuai dip
kurang dari6
) dan vektorb
=1&/@q
.Setelah itu
ReplacePart
danThread
"menerapkan" nilai variabel ket
dan mencetaknya.sumber
Echo
dapat digunakan sebagai gantiPrint
tetapi output berisi pendahulunya>>
.1^p
tidak berhasil (bukan1&/@p
).