pengantar
Biarkan bidang menjadi persegi panjang yang hanya diisi dengan karakter -
dan [0-9]
. Contoh bidang adalah:
11-011123
111-010--
0010---01
111-01234
Anda melihat bahwa bidang ini telah dipisahkan menjadi tiga area yang lebih kecil:
Untuk menghitung skor area yang lebih kecil, kami hanya menambahkan semua angka. Sebagai contoh:
11
111
0010
111
1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 = 9
Total skor untuk area ini adalah 9 . Kami sekarang melakukan hal yang sama untuk area kedua:
011123
010
0 + 1 + 1 + 1 + 2 + 3 + 0 + 1 + 0 = 9
Total skor juga 9 . Sekarang kita harus memeriksa area terakhir:
01
01234
0 + 1 + 0 + 1 + 2 + 3 + 4 = 11
Ini memiliki skor total 11 . Skor tertinggi di lapangan adalah 11, jadi inilah yang perlu kami hasilkan.
Tugas
Diberikan bidang (dalam bentuk string 2D, array, dll.), Menghasilkan skor tertinggi di bidang tersebut. Anda dapat mengasumsikan bahwa bidang yang diberikan akan selalu mengandung setidaknya 1 digit. Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Uji kasus
Uji kasus 1:
Input:
1
Output:
1
Uji kasus 2:
Input:
1-1-1-1
-1-1-1-
2-1-1-1
-1-1-1-
Output:
2
Uji kasus 3:
Input:
12-45-
4-65-9
87-654
12-487
45----
684764
Output:
69
Uji kasus 4:
Input:
111-12
------
21--10
Output:
3
["111", "01234"]
?-
memisahkan daerah? Bisakah Anda membuat bagian "apa yang mendefinisikan suatu area" menjadi lebih jelas?Jawaban:
MATL ,
545149 byteInput adalah array char 2D dalam format MATL (AB), dengan
;
pemisah baris. Masukan dalam contoh dan dalam kasus uji masing-masing:Cobalah online!
Penjelasan
Ini bekerja dengan membangun matriks adjacency dari grafik yang didefinisikan oleh hubungan "sedang terhubung". Sebagai contoh, perhatikan bidang 3 × 4
Entri dalam array 2D mudah dijelaskan dalam MATL menggunakan pengindeksan linear (kolom-utama). Dalam kasus 3 × 4, indeks linier dari setiap entri diberikan sebagai
Matriks adjacency dibangun dalam langkah-langkah menggunakan perkalian matriks. Pada langkah pertama, segera tetangga dianggap. Misalnya, titik yang diindeks 3 adalah tetangga itu sendiri dan itu dengan indeks 2. Itu bukan tetangga dari 6 karena titik itu tidak mengandung angka sesuai dengan bidang. Dalam contoh ini, matriks adjacency dari relasi "tetangga langsung" adalah matriks 12x12 L yang diberikan sebagai
(Dapat dilihat bahwa kolom 3 memiliki nilai
1
pada baris 2 dan 3.) Matriks ini selalu simetris dan diagonalnya memiliki nilai1
untuk poin yang tidak mengandung-
.Langkah selanjutnya adalah matriks kedekatan hubungan "terhubung dengan paling banyak satu titik di antara ". Untuk mendapatkannya, cukup untuk mengalikan L dengan sendirinya dan mengatur entri bukan nol ke
1
. Secara umum, matriks adjacency dari relasi "dihubungkan oleh beberapa lintasan", M , diperoleh dengan menaikkan L ke eksponen (dalam arti matriks) yang mewakili panjang lintasan maksimum yang mungkin. Sebuah batas atas panjang jalur maksimum adalah jumlah nol entri dalam L .Menghitung daya matriks secara langsung dapat menyebabkan overflow, karena sejumlah besar cepat terjadi. Jadi lebih baik untuk secara bertahap mengalikan dengan matriks yang sama, mengubah entri bukan nol menjadi 1 setelah setiap langkah untuk mencegah peningkatan jumlah besar.
Kolom i dari M menunjukkan titik-titik yang terhubung (dengan jalur apa pun) dengan titik i . Sekarang, bidang level dapat dikurangi menjadi vektor kolom c dalam urutan linier, di mana setiap entri berisi angka yang sesuai atau nilai yang tidak ditentukan untuk
-
. Jadi dalam hal ini c akanMengubah setiap kolom M dengan elemen- c dan menghitung jumlah setiap kolom memberi, untuk setiap poin i , skor total dari titik area yang saya miliki. Suatu area didefinisikan oleh semua titik yang saling terhubung. Perhatikan bahwa banyak kolom akan memberikan hasil yang sama; yaitu, kolom i dan j akan memberikan jumlah yang sama jika poin i dan j terhubung (milik area yang sama). Hasil akhir adalah jumlah maksimal dari jumlah tersebut.
sumber
JavaScript (ES6), 157 byte
Penjelasan
Mengambil bidang input sebagai string. Untuk setiap angka di bidang, jumlah semua angka di area. Ini dilakukan dengan mengulangi setiap angka dalam bidang beberapa kali, menambahkan angka ke skor jika sel yang berdekatan berisi nomor yang dihitung sebelumnya. Angka yang dihitung yang merupakan bagian dari area diwakili dengan mengaturnya ke 99 sehingga mereka tidak dihitung lagi. Menghasilkan skor tertinggi sebagai angka.
sumber
Pyth, 93 byte
Cobalah online!
Bagaimana itu bekerja
Langkah pertama: baca input
Langkah kedua: tentukan fungsi untuk mengevaluasi satu area
Langkah ketiga: baca semua area dan temukan nilai maksimum yang diinginkan
sumber