Skenarionya
Saya berkendara di sepanjang jalan dengan mobil saya dan hujan mulai turun. Tetesan hujan jatuh di jendela saya secara acak dan sekarang saya bertanya pada diri sendiri, di mana area basah terbesar yang terhubung?
Tugas
Untuk membuatnya lebih mudah, jendela itu terbagi dalam matriks 10 * 10 kotak. Tugas Anda adalah menemukan area tetesan air terhubung terbesar di jendela.
Memasukkan
Ada dua input yang mungkin, Anda dapat menggunakan Array 2 dimensi atau yang 1 dimensi. Anda dapat memilih antara input apa saja seperti stdin, dll ...
Contoh:
// 2-dimensional:
[[0,1,0,0,0,0,1,0,0,0],
[0,1,1,0,0,0,0,1,1,0],
[0,1,1,0,0,0,0,1,0,0],
[0,1,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,1,0],
[0,0,0,1,1,0,0,0,1,0],
[0,0,0,1,1,0,0,0,1,0],
[0,0,0,0,0,1,1,0,1,0],
[0,0,0,0,0,1,1,0,1,0],
[0,0,0,0,0,0,0,0,0,0]]
// 1-dimensional
[0,1,0,0,0,0,1,0,0,0,
0,1,1,0,0,0,0,1,1,0,
0,1,1,0,0,0,0,1,0,0,
0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,1,0,
0,0,0,1,1,0,0,0,1,0,
0,0,0,1,1,0,0,0,1,0,
0,0,0,0,0,1,1,0,1,0,
0,0,0,0,0,1,1,0,1,0,
0,0,0,0,0,0,0,0,0,0]
Keluaran
Kode Anda harus memadamkan ukuran area terhubung terbesar dan koordinat x- dan y dari tetesan air yang termasuk dalam area ini dalam format
"Ukuran: Z Koordinat: (X1, Y1) (X2, Y2) .. "
Contoh untuk input sebelumnya:
Size: 6 Coordinates: (1,0) (1,1) (2,1) (1,2) (2,2) (1,3)
Urutan Koordinat tidak masalah.
Aturan
- Tetesan air terhubung, jika mereka saling menyentuh secara orthogonal
- Koneksi diagonal tidak masuk hitungan
- Mungkin ada banyak area dan kode Anda harus menemukan yang terbesar
- Bidang kosong direpresentasikan sebagai "0" dan bidang basah sebagai "1"
- Posting solusi Anda dengan penjelasan singkat dan output dari input sebelumnya
- Kode terpendek dalam 7 hari ke depan akan menang
- Jika ada dua area dengan ukuran yang sama, Anda dapat memilih satu
Jawaban:
Ruby, 171 karakter
Input melalui parameter baris perintah sebagai array satu dimensi.
Output untuk input sampel:
Size: 6 Coordinates: (1,0) (1,1) (1,2) (1,3) (2,2) (2,1)
Jawaban ini menggunakan pendekatan pengisian banjir sederhana, membangun daftar koordinat untuk setiap kelompok curah hujan. Sebagian besar kode sebenarnya digunakan untuk memeriksa batas dan I / O.
sumber
Python - 192
Input (Tempel sebelum kode):
Terima kasih Calvin Hobbies untuk suntingan yang disarankan!
sumber
map(f,range(100))
alih-alih[f(i)for i in range(100)]
menyimpan 8 karakter. Saya juga percaya bahwa koordinat Anda (y, x) tidak (x, y).C # -
548523522511503476(di bawah 500 ... ya)
Saya yakin ada banyak ruang untuk perbaikan.
Cara saya memasukkan data adalah menginisialisasi array. Saya tidak memasukkan array itu ke dalam skor (jika Anda pikir ini curang, saya dapat mengubah kode, tetapi akan menambahkan kode yang relatif banyak karena C # tidak hebat dalam mem-parsing array)
Cobalah di http://ideone.com/UCVCPM
Catatan: Versi saat ini tidak berfungsi di ideone karena tidak suka
using l=System.Collections...
, jadi versi ideone sedikit usang (dan lebih lama)Bagaimana itu bekerja
Ini pada dasarnya memeriksa apakah ada
1
. Jika menemukan satu, ia menggunakan algoritma Flood Fill untuk mengganti semua yang berdekatan1
dengan0
dan menambahkan koordinat yang diganti ke daftar sementara. Setelah itu membandingkan daftar teratas (m
) ke daftar sementara (t
) dan diaturm
ket
jikat
berisi lebih banyak elemen.sumber
Mathematica - 180 byte
Fungsi ini membutuhkan array 2 dimensi.
Golf
Cantik
Contoh
Outputnya sedikit anomali. Mathematica mulai mengindeks pada 1 bukannya 0, dan digunakan
{}
untuk menunjukkan posisi. Tambahkan 2 byte (-1
) jika posisi harus diindeks 0. Tambahkan banyak byte jika harus digunakan()
alih-alih{}
:(Penjelasan
f
adalah fungsi darix
. Ini didefinisikanc
sebagai transformasix
, di mana masing-masing (i, j) sekarang sama dengan bilangan bulat yang sesuai dengan komponen terhubung yang dimilikinya. Ini melibatkan pekerjaan utama:Kemudian
m
hitung berapa banyak elemen dalam setiap komponen, urutkan berdasarkan angka itu, dan ambil hasil terakhir (artinya, dengan elemen terbanyak). Baris terakhir mencetak hitungan, dan posisi dalamc
indeks terkandung dalamm
.sumber
Haskell, 246
Memasukkan
Dua dimensi dan rekatkan sebelum kode sebagai
g
, misalnya:Tidak disatukan
sumber
Fungsi C # 374byte
Ini adalah versi modifikasi dari jawaban saya untuk Apakah Anda berada di ruangan terbesar? . Dibutuhkan array int satu dimensi, dan mengembalikan string sesuai gaya yang diperlukan. Ia bekerja dengan membangun set terpisah dari input (loop pertama), menghitung ukuran setiap set dan menemukan set terbesar (loop kedua) dan kemudian menambahkan sel dalam set ke string output (loop ketiga) yang kemudian dikembalikan .
Lebih sedikit golf (dan dengan kode tes):
sumber
JavaScript (EcmaScript 6) 183
189Fungsi dengan input array dan nilai pengembalian string. Jika output nyata diperlukan (tidak jelas bagi saya) tambahkan 7 byte untuk 'alert ()'.
Output Uji
Lebih mudah dibaca
Penjelasan
Dapatkan array dimensi tunggal dan parameter opsional dengan ukuran baris. Fungsi ini juga berfungsi dengan dimensi array yang berbeda, bahkan x! = Y.
Kode palsu:
sumber
JavaScript, 273
Function mengambil array dan mengembalikan string. Upaya pertama saya adalah ~ 500 karakter dan tidak menggunakan Flood Fill. Yang ini. Saya sedang mempelajari JavaScript sehingga saran apa pun akan dihargai.
Fungsi ini loop melalui array input dan untuk masing-masing 1 ditemukan mulai di sana dan mengubah semua terhubung ke 1s ke 0 menggunakan fungsi Fill. Saat melakukan hal itu ia mengingat gumpalan dengan paling 1s. Fungsi Fill mengubah posisi saat ini menjadi 0 dan kemudian memanggil dirinya sendiri pada posisi di atas, ke kanan, di bawah, dan ke kiri.
Tes di sini: http://goo.gl/9Hz5OH
Kode yang Dapat Dibaca
sumber
Scala, 420
Hai, entri saya mengambil array 2d sebagai
List[List[Int]]
, mengembalikan aString
Penjelasan
Diberikan jendela sebagai
List[List[Int]]
, pertama kita menemukan masing-masing "1" dan menyimpan koordinat dalam daftar. Selanjutnya kita ubah daftar itu menjadi aMap
koordinat dari masing-masing "1" ke daftar koordinat setiap "1" yang berdekatan. Kemudian gunakan peta adjacency untuk secara transitif menghubungkan sub-gumpalan ke dalam gumpalan, dan akhirnya kami mengembalikan gumpalan terbesar (dan mengabaikan gumpalan duplikat karena urutan koordinat yang dikembalikan tidak masalah).Lebih Mudah Dibaca
Kritik sangat dihargai.
sumber