Menghitung Permata
Latar Belakang
Kotak perhiasan saya baru saja jatuh! Ada terlalu banyak permata dengan bentuk berbeda di tanah. Dan tugas Anda adalah menghitung jumlah jenis permata tertentu.
I / O
- Kode Anda harus mengambil dua input
S
danG
, yang bisa berupa string dengan baris baru, array garis, array karakter dua dimensi, file teks atau dalam format apa pun yang wajar (jika demikian, sebutkan dengan jelas). - Dua string ini hanya akan berisi
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(dari0x21
ke0x7E
dalam tabel ASCII), spasi dan baris baru (bentuk biner tergantung pada platform Anda). - Di setiap string, garis memiliki panjang yang sama.
S
adalah permata yang ingin kita hitung. Ada dua keadaan.- Terlampir dan tidak mengandung area terlampir yang bersarang. (dalam contoh 1/2)
- Tidak mengandung area tertutup. (misalnya 3/4)
- Ruang di sekitarnya tidak dianggap sebagai bagian dari permata.
G
adalah bentuk permata di tanah.- Dapat diterima bahwa kode Anda memerlukan input tambahan untuk menentukan dimensi
S
danG
- Dapat diterima bahwa kode Anda mengambil nilai ASCII sebagai input, bukan karakter itu sendiri. Tetapi Anda tidak harus mengganti karakter dengan bilangan bulat yang lebih sederhana (0,1,2,3). Program Anda harus dapat memproses karakter, atau nilai ASCII.
Contoh 1 (Karakter sebagai input)
Masukan S
:
+-+
| +-+
| | |
| | |
| +-+
+-+
Masukan G
:
+-+ +-+
| +-+ +-+ |
| | | | | |
| | | | | |
| +-+ +-+ |
+-+ +-+
+-+
+---+ | +-+
| | | | |
| | | | |
| | | +-++
| | +-+| +-+
+---+ | | |
| | |
+-+ | +-+
| +-+ +-+
| |-|
| |-|
| +-+
+-+
Ouptut:
2
Contoh 2 (nilai ASCII sebagai input)
Masukan S
:
32 32 32 32 32 32 32 32
32 32 32 32 99 32 99 32
32 32 32 99 32 99 32 99
32 32 32 99 32 32 32 99
32 32 32 99 32 32 32 99
32 32 32 99 32 32 32 99
32 32 32 32 99 32 99 32
32 32 32 32 32 99 32 32
32 32 32 32 32 32 32 32
Masukan G
:
32 99 32 99 32 99 32 99 32 32 99 32
99 32 99 32 99 32 99 32 99 99 32 99
99 32 32 32 99 32 32 32 99 32 32 99
99 99 32 32 99 32 32 32 99 32 32 99
99 32 32 32 99 32 32 32 99 32 32 99
32 99 32 99 32 99 32 99 99 32 99 32
32 32 99 32 32 32 99 32 32 99 32 32
Keluaran:
1
Divisualisasikan S
(32 diganti dengan -):
-- -- -- -- -- -- -- --
-- -- -- -- 99 -- 99 --
-- -- -- 99 -- 99 -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- -- 99 -- 99 --
-- -- -- -- -- 99 -- --
-- -- -- -- -- -- -- --
Divisualisasikan G
:
-- 99 -- 99 -- 99 -- 99 -- -- 99 --
99 -- 99 -- 99 -- 99 -- 99 99 -- 99
99 -- -- -- 99 -- -- -- 99 -- -- 99
99 99 -- -- 99 -- -- -- 99 -- -- 99
99 -- -- -- 99 -- -- -- 99 -- -- 99
-- 99 -- 99 -- 99 -- 99 99 -- 99 --
-- -- 99 -- -- -- 99 -- -- 99 -- --
Contoh 3 (Tidak terlampir)
Terima kasih kepada @ Draco18s
Memasukkan S
AB
Memasukkan G
AAB BA CAB
Keluaran
2
Contoh 4 (Tidak termasuk 2D)
Memasukkan S
ABCD
GE
F
Memasukkan G
ABCD
BGGED
CDEFE
F
Keluaran
1
Catatan
- Hanya dua permata dari satu bentuk yang dianggap sama.
- Bentuk yang sama dalam arah yang berbeda tidak dianggap sama.
- Namun, seperti dijelaskan dalam contoh I / O, tumpang tindih dimungkinkan. Dalam keadaan seperti itu, hanya yang lengkap yang dihitung.
+
,-
dan|
dalam contoh tidak memiliki arti khusus. Mereka tidak menunjukkan sudut atau tepi bentuk.- Anda mungkin menganggap input selalu valid.
- Anda dapat mengasumsikan dua permata target tidak pernah berbagi tepi yang sama persis.
- Celah standar dilarang.
- Ini adalah kode-golf, jadi kode terpendek menang!
code-golf
string
array-manipulation
Keyu Gan
sumber
sumber
G
terkandung di dalamnyaS
?S
di tengahG
.S = "AB"
,G=" AAB BA CAB"
, = keluaran?Jawaban:
C (gcc) , 303
305326byteSemua optimisasi perlu dimatikan dan hanya bekerja pada GCC 32-bit.
Kode ini menggunakan timbunan banjir untuk menggantikan ruang di sekitarnya dengan
\0
dan mencari kecocokan sambil mengabaikan\0
.ungolfed dan macro dihitung (beberapa huruf berbeda dari versi golf, tetapi logika tetap sama):
sumber