Tarefa
Dado um diagrama ASCII de um loop
por exemplo
....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................
E um local no loop
por exemplo
(7,1)
Você deve encontrar o interior e o exterior do loop
por exemplo
00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000
Especificações
Você pode receber entradas para o diagrama como uma sequência separada por novas linhas ou equivalente óbvio
Você receberá uma coordenada no loop (0 ou 1 indexado) como parte de sua entrada. Você pode colocar sua origem em qualquer lugar que desejar. Você pode levar essa coordenada
(<row>, <column>)
,(<column>, <row>)
ou como a posição linear na corda. Você pode receber esses dados de qualquer maneira razoável. Todos os caracteres no loop serão iguais aos caracteres nesse índice.A saída preferida é uma matriz bidimensional de valores de verdade e falsidade, no entanto, cadeias de caracteres
1
e0
separadas por novas linhas ou qualquer equivalente óbvio das duas últimas são aceitas. O interior e o exterior devem ter valores de verdade diferentes, mas não importa qual é qual.Um loop é definido como um grupo de caracteres, de modo que todos tenham o mesmo caractere ( por exemplo
@
) e, para que cada caractere no loop tenha um caminho para o caractere original (o caractere na coordenada de entrada) que passa apenas pelo mesmo caractere (geometria do táxi, sem diagonais ).O interior é todo o loop em si e os lugares que não podem alcançar a borda do diagrama sem cruzar o loop.
O exterior está em qualquer outro lugar
Isso é código-golfe
[['.', '.'],['.', '@']]
vez de uma string com novas linhas?Respostas:
MATLAB,
163 159 14678 bytesObrigado @ rahnema1 por -66 bytes !!!
Agora ele funciona Experimente o online! MAS alguns ajustes foram necessários, pois MATLAB e Octave não são totalmente compatíveis.
Explicação
Primeiro, criamos uma imagem binária que apenas mascara todos os caracteres iguais ao caractere inicial. Em seguida, determinamos o componente conectado no qual o caractere inicial está.
Depois disso, criamos uma imagem desse componente conectado e aplicamos o preenchimento de todos os "orifícios" na imagem.
fonte
MATLAB: 67 bytes
Algumas advertências:
A
é assumido como uma matriz de caracteres.output = f(A,2,8)
).bwlabel
eimfill
fazem parte da caixa de ferramentas de processamento de imagem.fonte