Terinspirasi oleh pembukaan oleh buku What-If.
Input adalah persegi panjang spasi sebagai string, daftar string, dll., Dengan objek yang terbuat dari #
dalamnya:
########
# #
########
### ####
### ####
###
Objek akan selalu non-berpotongan, tidak menyentuh, persegi panjang. Objek lunak didefinisikan sebagai objek yang tidak diisi dengan #
's di tengah dan hanya perbatasan, objek keras adalah yang diisi. Objek dengan lebar atau tinggi <=2
dianggap keras. Semua benda itu keras atau lunak.
Jika ada lebih banyak objek keras di input, output "Hard"
, jika lebih lunak, output "Soft"
, jika mereka sama, output "Equal"
.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
Uji Kasus
Kasing-kasing ini bukan input penuh, melainkan apa yang harus dicirikan oleh setiap objek. Masukan yang sebenarnya akan seperti ascii-art di bagian atas pertanyaan.
Keras
#
####
##
##
##########
##########
##########
Lembut
###
# #
###
###################
# #
# #
# #
###################
####
# #
# #
# #
# #
# #
# #
# #
####
Kasus Uji Aktual
########
# #
########
### ####
### ####
###
Hard
###
###
###
###################
# #
# #
# #
###################
Equal
######
# #
######
###
## # # #
###
########
# #
########
Soft
sumber
Jawaban:
MATL ,
105104585049 byteTerima kasih kepada @Neil untuk saran yang memungkinkan saya menghapus 46 byte!
Input adalah array char 2D, dengan baris dipisahkan oleh
;
. Contoh dalam tantangannya adalahIni contoh lain:
Ini sesuai dengan
dan karenanya harus memberi
'Equal'
.Sebagai contoh ketiga, terkait dengan
'Soft'
,itu adalah,
Cobalah online!
Penjelasan
Ini menggunakan konvolusi 2D untuk mendeteksi bentuk. Input dikonversi ke array 2D dengan
1
menunjukkan#
dan-1
untuk ruang; dan diisi dengan bingkai-1
nilai. Ini memastikan bahwa bentuk-bentuk di tepi bidang asli juga terdeteksi.Sebuah objek yang lembut terdeteksi oleh topeng
yang sesuai dengan sudut kiri atas objek dengan satu titik interior kosong. Perhatikan bahwa konvolusi membalikkan mask, sehingga didefinisikan seperti
[-1 1; 1 1]
dalam kode. Jumlah S dari posisi di mana konvolusi sama dengan4
adalah jumlah total objek lunak.Sebuah objek (lunak atau keras) terdeteksi oleh topeng
yang sesuai dengan sudut kiri atas objek bersama-sama dengan beberapa titik eksterior kosong. Topeng ini adalah versi yang dinegasikan dari yang sebelumnya, sehingga hasil konvolusi sebelumnya dapat digunakan kembali. Secara khusus, jumlah T dari posisi di mana hasil yang sama dengan itu
-4
adalah jumlah total objek.Jumlah H dari benda keras adalah T - S . Output string ditentukan oleh tanda S - H = 2 * S - T .
sumber
JavaScript (ES6),
123121118 byteDisimpan 2 byte berkat @ edc65!
Mengambil input sebagai string multiline yang diisi dengan spasi untuk membentuk kisi.
Penjelasan / Tes
Sangat dekat dengan panjang MATL!Pada dasarnya, ia mencari garis atas#
s dari setiap objek, dan jika panjang garis atas kurang dari 2 atau 2 karakter pertama di bawah garis atas adalah sama, itu sulit, jika tidak lembut.sumber
###
kembaliEqual
.~g.search(/$/m)
sedikit lebih mudah dibaca daripada~g.search`\n`||-1
.||-1
memasang untuk memperbaikinya, tetapi saran Anda membuat saya menyadari bahwa menambahkan|$
ke regex akan menghemat 2 byte. Terima kasih!n=l=...
n>l?...:n<l?...:...
Jelly,
5049464338343332 byteCobalah online! atau verifikasi semua kasus uji .
Latar Belakang
Ada 16 pola blok dan spasi 2 × 2 yang berbeda :
Dari jumlah tersebut, karena dua benda tidak akan pernah menyentuh,
tidak akan pernah terjadi pada input, meninggalkan kita dengan 14 pola yang mungkin.
Menetapkan
nilai 0 dan
#
nilai 1 , kita dapat mengkodekan 2 × 2 polasebagai 2 (2a + c) + (2b + d) = 4a + 2b + 2c + d , meninggalkan nilai berikut untuk 14 pola.
Untuk pola parsial 2 × 1 , 1 × 2 atau 1 × 1 di batas bawah dan / atau kanan, kami akan memperlakukannya seolah-olah diisi dengan spasi, masing-masing dikodekan sebagai 4a + 2b , 4a + 2c dan 4a . .
Dengan cara ini, setiap objek (lunak atau keras) akan memiliki tepat satu 4 pola (sudut kanan bawahnya); setiap objek lunak akan memiliki tepat dua pola 7 (kiri bawah dan sudut kanan atas).
Jadi, mengurangkan jumlah 4 pola dari jumlah 7 pola yang ditemui dalam input akan menghasilkan (s + h) - 2s = h - s: = d , di mana h dan s adalah jumlah benda keras dan lunak yang mereka bentuk.
Kami mencetak Hard jika d> 0 , Soft jika d <0 dan Equal jika d = 0 .
Bagaimana itu bekerja
sumber
Julia,
999593 byte!
mengharapkan array Char dua dimensi sebagai argumen. Cobalah online!Bagaimana itu bekerja
Ini menggunakan ide yang hampir sama persis dengan jawaban Jelly saya , dengan satu peningkatan:
Alih-alih menghitung jumlah 4 dan 7 , kami menghapus semua angka lainnya, lalu kurangi 5,5 untuk memetakan (4, 7) menjadi (-1,5, 1,5) . Dengan cara ini, tanda jumlah perbedaan yang dihasilkan menentukan keluaran yang benar.
sumber
TSQL,
328249 byteMendeklarasikan variabel dan data uji:
Kode:
Kode kempes:
Penjelasan:
Script memindai teks untuk polanya:
Masing-masing adalah awal dari sebuah kotak
Untuk posisi itu, skrip kemudian memeriksa polanya, tidak perlu memeriksa x pertama:
Ketika yang ada itu adalah objek yang lunak, kalau tidak itu adalah objek yang keras.
sumber