Contando gemas
Antecedentes
¡Mi joyero se cayó! Hay demasiadas gemas de diferentes formas en el suelo. Y su tarea es contar el número de un cierto tipo de gema.
I / O
- Su código debe tener dos entradas
S
yG
, que podría ser una cadena con líneas nuevas, una matriz de líneas, una matriz bidimensional de caracteres, un archivo de texto o en cualquier formato razonable (si es así, indíquelo claramente). - Estas dos cadenas solo contendrán
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(de0x21
a0x7E
en la tabla ASCII), espacio y nuevas líneas (forma binaria dependiendo de su plataforma). - En cada cadena, las líneas tienen la misma longitud.
S
es la gema que queremos contar. Hay dos circunstancias- Cerrado y no contiene ningún área cerrada anidada. (en el ejemplo 1/2)
- No contiene ningún área cerrada. (en el ejemplo 3/4)
- Los espacios circundantes no se consideran parte de la gema.
G
Es la forma de gemas en el suelo.- Es aceptable que su código requiera una entrada adicional para especificar las dimensiones de
S
yG
- Es aceptable que su código tome valores ASCII como entradas, en lugar de los propios caracteres. Sin embargo, usted debe no sustituir caracteres con números enteros simples (0,1,2,3). Su programa debe poder procesar caracteres o valores ASCII.
Ejemplo 1 (Carácter como entrada)
Entrada S
:
+-+
| +-+
| | |
| | |
| +-+
+-+
Entrada G
:
+-+ +-+
| +-+ +-+ |
| | | | | |
| | | | | |
| +-+ +-+ |
+-+ +-+
+-+
+---+ | +-+
| | | | |
| | | | |
| | | +-++
| | +-+| +-+
+---+ | | |
| | |
+-+ | +-+
| +-+ +-+
| |-|
| |-|
| +-+
+-+
Ouptut:
2
Ejemplo 2 (valor ASCII como entrada)
Entrada 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
Entrada 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
Salida:
1
Visualizado S
(32 reemplazado con -):
-- -- -- -- -- -- -- --
-- -- -- -- 99 -- 99 --
-- -- -- 99 -- 99 -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- 99 -- -- -- 99
-- -- -- -- 99 -- 99 --
-- -- -- -- -- 99 -- --
-- -- -- -- -- -- -- --
Visualizado 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 -- --
Ejemplo 3 (no incluido)
Gracias a @ Draco18s
Entrada S
AB
Entrada G
AAB BA CAB
Salida
2
Ejemplo 4 (2D no incluido)
Entrada S
ABCD
GE
F
Entrada G
ABCD
BGGED
CDEFE
F
Salida
1
Observaciones
- Solo dos gemas de una forma exacta se consideran iguales.
- La misma forma en diferentes direcciones no se considera igual.
- Sin embargo, como se describe en el ejemplo de E / S, es posible la superposición. En tales circunstancias, solo se cuentan las completas.
+
,-
y|
en el ejemplo no tienen significados especiales. No indican ninguna esquina o borde de la forma.- Puede suponer que la entrada siempre es válida.
- Puede suponer que dos gemas objetivo nunca comparten exactamente el mismo borde.
- Las lagunas estándar están prohibidas.
- Este es un código de golf, por lo que gana el código más corto.
code-golf
string
array-manipulation
Keyu Gan
fuente
fuente
G
contenido dentroS
?S
en el medio deG
.S = "AB"
,G=" AAB BA CAB"
, = salida?Respuestas:
C (gcc) , 303
305326bytesTodas las optimizaciones deben desactivarse y solo funcionan en GCC de 32 bits.
El código utiliza el relleno de inundación para reemplazar los espacios circundantes
\0
y busca coincidencias mientras se ignora\0
.sin golf y macros calculados (algunas letras son diferentes de la versión golfizada, pero la lógica sigue siendo la misma):
fuente