Bisakah wadah ini menampung cairan sebanyak ini?
Tantang Sinopsis
Seperti yang kemungkinan besar Anda ketahui, cairan memiliki bentuk yang tidak terbatas dan volume yang pasti. Karena itu, mereka selalu mengambil bentuk wadah mereka. Namun, mereka tidak dapat memperluas untuk mengisi wadah mereka.
Tugas Anda hari ini adalah menentukan apakah cairan dalam jumlah tertentu (diwakili oleh sejumlah L
karakter atau angka yang mewakili volume bagian, sesuai saran) dapat masuk ke dalam wadah dengan ukuran tertentu (diwakili oleh matriks dari C
karakter) dengan sejumlah ruang kosong (diwakili oleh karakter spasi) di dalamnya. Wadah akan selalu memiliki C
karakter di sekelilingnya.
Program Anda akan mengembalikan nilai kebenaran / kepalsuan berdasarkan apakah cairan tersebut akan masuk ke dalam wadah. Ini hanya akan cocok jika ada area ruang kosong yang terhubung (terdiri dari ruang yang berdekatan satu sama lain secara horizontal, diagonal, atau vertikal) di dalam wadah untuk setiap bagian cairan yang dipisahkan dari yang lain (baik oleh ruang atau oleh dua karakter baris baru).
Uji Kasus
LLL
L
----- True
CCCCC
C CC
C CC
CCCCC
LLL
LL
------ True
CCCCCC
C C C
C CCC
CCCCCC
L L
LLL
----- False (Not enough space)
CCCCC
CCCCC
C CC
CCCCC
LL
------ False (Spaces are not connected but liquid is)
CCCCCC
CCCC C
C CCCC
CCCCCC
L L
------ True
CCCCCC
CCCC C
C CCCC
CCCCCC
L L
------ True (There is a pocket of empty space which holds both parts of the liquid)
CCCCCC
CCC C
CCCCCC
CCCCCC
L
L
------ True (There is a pocket of empty space for each part of the liquid)
CCCCCC
CCCC C
C CCCC
CCCCCC
L L L LL
------ True
CCCCCCCCC
CCCC C C
C CCCCCCC
CCCCCC CC
CCCCCCCCC
L
L
----- True
CCCCC
CCCCC
C CC
CCCCC
Jangan ragu untuk menyarankan uji kasus!
Aturan
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
- Celah standar tidak diijinkan.
L\n\nL
,CCCCC\nCCCCC\nC..CC\nCCCCC
(.
mewakili spasi,\n
mewakili baris baru).L
teks sebagai daftar volume (yaitu daftar jumlahL
s di setiap jumlah)? Karena mengurai ruang dan menggandakan baris baru tampaknya tidak berhubungan dengan inti tantangan. Bisakah kita mengambilC
teks sebagai matriks dari dua nilai berbeda bukan karena alasan yang sama?L
dan satuLL
dengan ruang ukuran 3 dan 2 (sebuah algoritma yang hanya mengisi ruang terkecil terlebih dahulu dengan potongan cairan terkecil yang masih akan digunakan akan menghasilkan Falsey). Mungkin sama tetapi dengan 2L
dan satuLLL
juga, untuk melayani ke arah lain.L
ke daftar integer. Yang kedua adalah parsing inputC
matrix ke daftar integer. Dan yang ketiga adalah pertanyaan menentukan untuk diberikan tas integer A dan B, jika ada partisi di A, ketika menjumlahkan semua bilangan bulat di setiap partisi untuk mendapatkan tas A ', setiap angka terbesar ke-n dalam A' lebih kecil ( <=) dari angka ke-n terbesar di B '.Jawaban:
Siput, 58 byte
Input diambil persis seperti dalam contoh.
Versi 4 byte lebih lama cukup cepat untuk menyelesaikan kasus uji secara instan ( Coba versi ini secara online ):
Format lekukan dari yang terakhir:
sumber
Bersih , 313 byte
Cobalah online!
Menentukan fungsi
$ :: [Int] [[Char]] -> Bool
. TIO link termasuk pembungkus di sekitar STDIN.? :: [Int] -> [[Int]]
adalah penolong untuk menghasilkan berbagai cara volume dapat digabungkan.Diperluas:
sumber