Anak-anak saya memiliki alas alfabet untuk dimainkan, sesuatu seperti ini:
Setelah berbulan-bulan dengan ubin tikar ditempatkan secara acak, saya lelah dan menempatkan semua ubin tikar dikelompokkan berdasarkan bagian sesuai dengan warna latar belakang mereka. Jadi, jika huruf mewakili warna latar belakang, saya mendapat tikar seperti ini:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Jadi, untuk warna A, B, C, D, dan E selalu ada cara untuk menghubungkan semua ubin dengan warna latar yang sama baik secara horizontal atau vertikal di matras. Itulah yang saya sebut tikar dengan benar dikelompokkan berdasarkan warna . Anda dapat melihat grup untuk contoh sebelumnya di tabel berikut:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Selain itu, hanya ada satu grup untuk setiap warna, jadi ini tidak valid:
ABA
ABA
Karena ubin warna A tidak dikelompokkan hanya dalam satu grup. Ini juga tidak akan valid karena ubin tidak terhubung secara horizontal atau vertikal:
AB
BA
Tantangan
Diberikan susunan karakter 2 dimensi dalam rentang ASCII yang dapat dicetak (tidak harus berbentuk bujur sangkar asalkan ukuran kedua dimensi sama atau lebih besar dari 1), periksa apakah susunan mewakili matras yang dikelompokkan dengan baik oleh warna. (setiap karakter yang berbeda dalam array mewakili warna yang berbeda). Input mungkin dalam format wajar apa pun asalkan mewakili karakter 2 dimensi (array char 2D, array string dengan panjang yang sama, dan sebagainya), dan output harus berupa sepasang nilai kebenaran dan nilai falsey (0 / 1, 't' / 'f', benar / salah, apa pun asalkan sesuatu dikembalikan dan nilai kembali konsisten di seluruh input).
Ini adalah kode-golf, jadi semoga program / fungsi / metode / lambda terpendek untuk setiap bahasa menang!
Contohnya
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Mataku dikelompokkan berdasarkan warna
(Aku masih harus memperbaiki perbatasan itu ...)
Jawaban:
MATL ,
1615 byteInput adalah array char 2D (dengan baris dipisahkan oleh
;
). Output adalah0
jika input memenuhi syarat, atau1
sebaliknya.Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Kode ini pada dasarnya memeriksa apakah setiap karakter dalam input hanya memiliki satu komponen yang terhubung, mempertimbangkan 4-konektivitas (yaitu, tidak ada diagonal).
Karakter berulang diulangi berulang-ulang (yang lebih golf daripada deduplikasi).
sumber
Befunge-93, 317 byte
Sunting: Diperbaiki untuk jumlah byte yang tepat. Juga bisa bermain golf lebih lanjut
Mencetak 1 sebagai kebenaran, 0 sebagai falsey
Cobalah secara Online
Berikut ini visualisasi jalur yang diambil pointer
Catatan: ini untuk versi lama
Bagaimana itu bekerja
Inilah beberapa kodesemu yang cepat dan kotor
Pada dasarnya, setelah menyimpan input, ia melewati semuanya, memeriksa setiap ruang. Ketika menemukan ruang dengan karakter di dalamnya, ia menambahkan koordinat ke stack. Kemudian ia memeriksa ruang di sekitarnya untuk karakter yang sama secara rekursif, mengatur setiap ruang menjadi 0. Ketika telah menghabiskan bagian karakter itu, ia memeriksa apakah karakter itu sudah memiliki bagian. Jika demikian, kembali 0. Jika tidak, tambahkan ke array karakter. Setelah melewati seluruh grid tanpa duplikat, ia mengembalikan 1.
Untuk orang-orang yang akrab dengan Befunge, inilah versi kode yang diberi spasi
sumber
J, 66 byte
c
mendefinisikan kata kerja yang memberitahu Anda jika matriks dari satu dan nol adalah c onnected. Ini memperlakukan yang singleton sebagai kasus khusus yang benar. Kalau tidak, ia membutuhkan hitungan tetangga ortogonal dari setiap sel, lalu signum dari hitungan itu, lalu mengalikannya dengan matriks asli: jika produk itu sama dengan matriks asli, maka itu terhubung.Hitungan tetangga dicapai dengan menggeser ke 4 arah, lalu menjumlahkan. Pergeseran 4 arah dicapai dengan menggunakan fitur "
x
-arg can by a table" dari rotate / shift|.
Akhirnya, jawaban itu sendiri dicapai dengan membuat matriks satu / nol untuk setiap elemen unik
~.
dari input, dan kemudian memastikan bahwa semua matriks tersebut terhubung. Ini adalah kata kerja di baris kedua.Cobalah online!
sumber
JavaScript (ES6), 114 byte
Mengambil input sebagai array string. Pengembalian
0
atau1
.Uji kasus
Tampilkan cuplikan kode
Diformat dan dikomentari
sumber
Bahasa Wolfram (Mathematica) , 96 byte
Cobalah online!
Mengambil input sebagai daftar karakter 2D: misalnya
{{"A","B"},{"C","D"}}
,.The
karakter\[Transpose]
.Bagaimana itu bekerja
Untuk setiap karakter
c
dalam input, ambilSubgraph
dariGridGraph
yang samaDimensions
sebagai masukan yang bersesuaian dengan setiapPosition
di manac
terjadi, dan memeriksa apakah ituConnectedGraphQ
.sumber
Python 2 , 247 byte
Cobalah online!
sumber
JavaScript (ES6), 181 byte
Setiap kali ubin warna baru ditemukan, isi yang terhubung dengan string kosong. Jika keset dikelompokkan berdasarkan warna, semua ubin harus diisi dengan senar kosong.
Kode Uji
Tampilkan cuplikan kode
sumber