Ada array 2D persegi panjang yang mengandung virus yang dilambangkan dengan 'v', penangkal1 dilambangkan dengan 'a', dan penawar2 dilambangkan dengan 'b' (tidak ada nilai selain 'v', 'a' dan 'b').
Antidote1 dapat membunuh virus tetangga hanya dalam arah horisontal dan vertikal, tetapi penangkal2 dapat membunuh virus tetangga (jika ada) dalam arah horizontal, vertikal dan diagonal.
Setelah penangkal diaktifkan, berapa banyak virus yang akan tetap ada pada akhirnya?
Contoh:
Memasukkan:
vv
vv
Output: 4
Memasukkan:
av
vv
Output: 1
Memasukkan:
vvv
vbv
vvv
Output: 0
Memasukkan:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Output: 3
Jawaban:
Python 3 , 135 byte
Cobalah online!
-2 byte terima kasih kepada Kevin Cruijssen
Penjelasan
Ganti semua 'v' ke 'b' jika ditemukan di sebelah 'b'. Selanjutnya, ganti semua 'v' ke 'c' jika ditemukan di sebelah 'a'. Iterasi kedua dengan versi array yang dipindahkan menghapus semua virus vertikal dan diagonal. Akhirnya, ia akan mengembalikan jumlah 'v's yang tersisa.
Sebagai fungsi rekursif yang lebih mudah dibaca (155 byte)
sumber
y>1else
. Pendekatan yang bagus. Pada awalnya saya tidak yakin bagaimana ini berurusan dengan diagonalb
, tetapi itu tampaknya berfungsi dengan baik karena penggantian Anda. :) +1 dari saya.j=''.join
dalam versi tetap AndaJavaScript (ES7), 108 byte
Mengambil input sebagai matriks karakter.
Cobalah online!
Mirip dengan jawaban asli saya, tetapi melakukan
V>'a'>(x-X)**2+y*y-2
sebenarnya 1 byte lebih pendek daripada menggunakan trik hexa yang dijelaskan di bawah ini. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 byte
Mengambil input sebagai matriks karakter.
Cobalah online!
Bagaimana?
Mempertimbangkan koordinat integer, tampilannya sebagai berikut:
Karena itu:
Berkomentar
sumber
05AB1E ,
333029 byteCobalah secara online atau verifikasi beberapa kasus uji lagi .
Port dari @Jitse 's Python 3 menjawab , jadi pastikan untuk mengunggahnya!
-1 byte terima kasih kepada @Jitse .
Penjelasan:
Versi lawas memiliki keuntungan karena dapat mem-zip / mengubah-daftar string, di mana versi baru akan membutuhkan yang eksplisit
S
danJ
, karena hanya bekerja dengan daftar karakter. Namun, versi baru masih 3 byte lebih pendek dengan menggunakan€Â
kombinasi dengan string terkompresi yang lebih pendek. Di versi lawas,€
hanya akan menyimpan nilai terakhir di tumpukan di dalam peta, tetapi di versi baru, itu akan menyimpan semua nilai di tumpukan di dalam peta.Lihat ini 05AB1E ujung tambang (bagian Cara string kompres bukan bagian dari kamus? ) Untuk memahami mengapa
.•s¯}˜?•
adalah"vbvabbca"
.sumber
bc
=>ba
jika Anda menerapkanbv
=>ba
sebelumav
=>ac
. Jadi.•6øнãI•
(bentuk terkompresi `" bvavbaac ") sudah cukup, menghemat 2 byte..:
(ganti semua satu kali) alih-alih:
(terus ganti semua sampai tidak ada lagi). Tapi tetap -1. :) Terima kasih telah memberi tahu saya.Java 10,
211209 byteModifikasi jawaban saya untuk tantangan All the single eights .
-2 byte terima kasih kepada @ceilingcat .
Cobalah online.
Penjelasan:
sumber
Arang , 39 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Gabungkan string input dengan
\r
karakter dan gambarkan hasilnya ke kanvas.Hapus jumlah virii langsung.
Ulangi karakter dalam input.
Jika karakter saat ini adalah virus dan tidak ada yang bersebelahan
b
dalam arah apa pun atau secaraa
ortogonal maka menambah jumlah virii hidup.Ulangi dengan karakter berikutnya.
Kosongkan kanvas dan cetak jumlah total virii hidup.
sumber
Perl (
-00lp
), 82 byteMenggunakan regex untuk mengganti
v
dengan spasi, lalu hitungv
sTIO
sumber