Contando Gemas
fundo
Minha caixa de jóias caiu! Existem muitas gemas de formas diferentes no chão. E sua tarefa é contar o número de um certo tipo de gema.
I / O
- Seu código deve receber duas entradas
S
eG
, que pode ser uma string com novas linhas, uma matriz de linhas, uma matriz bidimensional de caracteres, um arquivo de texto ou em qualquer formato razoável (se houver, indique-o claramente). - Estas duas cordas só irá conter
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(a partir0x21
de0x7E
na tabela ASCII), espaço e novas linhas (forma binária dependendo da sua plataforma). - Em cada sequência, as linhas têm o mesmo comprimento.
S
é a gema que queremos contar. Existem duas circunstâncias.- Incluído e não contém nenhuma área fechada aninhada. (no exemplo 1/2)
- Não contém nenhuma área fechada. (no exemplo 3/4)
- Os espaços circundantes não são considerados parte da gema.
G
é a forma de gemas no chão.- É aceitável que seu código exija entrada extra para especificar as dimensões
S
eG
- É aceitável que seu código aceite valores ASCII como entradas, em vez de caracteres próprios. Mas você não deve substituir caracteres por números inteiros mais simples (0,1,2,3). Seu programa deve ser capaz de processar caracteres ou valores ASCII.
Exemplo 1 (Caractere como entrada)
Entrada S
:
+-+
| +-+
| | |
| | |
| +-+
+-+
Entrada G
:
+-+ +-+
| +-+ +-+ |
| | | | | |
| | | | | |
| +-+ +-+ |
+-+ +-+
+-+
+---+ | +-+
| | | | |
| | | | |
| | | +-++
| | +-+| +-+
+---+ | | |
| | |
+-+ | +-+
| +-+ +-+
| |-|
| |-|
| +-+
+-+
Ouptut:
2
Exemplo 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
Resultado:
1
Visualizado S
(32 substituído por -):
-- -- -- -- -- -- -- --
-- -- -- -- 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 -- --
Exemplo 3 (Não incluído)
Graças a @ Draco18s
Entrada S
AB
Entrada G
AAB BA CAB
Resultado
2
Exemplo 4 (2D não incluído)
Entrada S
ABCD
GE
F
Entrada G
ABCD
BGGED
CDEFE
F
Resultado
1
Observações
- Apenas duas gemas de uma forma exata são consideradas iguais.
- A mesma forma em direções diferentes não é considerada a mesma.
- No entanto, conforme descrito no exemplo de E / S, é possível sobrepor. Sob tais circunstâncias, apenas os completos são contados.
+
,-
e|
no exemplo não tem significados especiais. Eles não indicam nenhum canto ou borda da forma.- Você pode assumir que a entrada é sempre válida.
- Você pode assumir que duas gemas alvo nunca compartilham exatamente a mesma vantagem.
- As brechas padrão são proibidas.
- Este é um código de golfe, então o código mais curto vence!
code-golf
string
array-manipulation
Keyu Gan
fonte
fonte
G
contidoS
?S
no meio deG
.S = "AB"
,G=" AAB BA CAB"
, = saída?Respostas:
C (gcc) , 303
305326bytesTodas as otimizações precisam ser desativadas e funcionam apenas no GCC de 32 bits.
O código usa o floodfill para substituir os espaços ao redor
\0
e procura correspondências enquanto ignora\0
.ungolfed e macros calculadas (algumas letras são diferentes da versão golfed, mas a lógica permanece a mesma):
fonte