Será que vai flutuar?

10

O desafio

Dada uma sequência 2D que representa o fundo de um barco como uma entrada, você deve determinar se o barco irá ou não flutuar. Essa sequência 2D pode estar no formato que for mais conveniente. (Cadeia de caracteres com novas linhas, lista de cadeias, lista de caracteres, etc.) Imprima um valor verdadeiro, se ele flutuar, e um valor falsey, se afundar.

Um barco tombará se o fundo tiver uma densidade inconsistente; portanto, cada caractere deve ser o mesmo. Além disso, se um barco tiver orifícios grandes, representados por espaços, afundará, portanto, ele não deverá ter orifícios com área maior que 4. Aqui está um exemplo:

########
#   ####
########
#  ## ##
#  #####
########

Este barco é válido porque o maior orifício possui uma área de 4. Este barco:

########
########
#     ##
#  #####
########

é inválido porque possui um orifício com uma área de 7. Você pode assumir com segurança que a parte externa de cada entrada será um retângulo sólido sem orifícios. Aqui estão mais alguns testes:

$$$$$$$$
***$$$$$
***$$$$$
***$$$$$
$$$$$$$$
Invalid density. Sink.

%%%%%%%%
%    % %
%%%%%  %
%    % %
%%%%%%%%
None of the holes are larger than 4. Float.

OOOOOOOO
OOOOOOO 
OOOOOOOO
OOOOOOOO
OOOOOOOO
The outside border is not solid. Undefined.

&&&&&&&&&&&&&
& & & & & & &
&& & & & & &&
& & & & & & &
&& & & & & &&
& & & & & & &
&&&&&&&&&&&&&
Although I would not be comfortable riding in this boat myself, 
none of the holes are larger than 4. It floats.

@@@@@
@   @
@   @
@   @
@@@@@
It sinks.

Regras

  • O IO pode estar em qualquer formato razoável.
  • Aplicam-se brechas padrão.
  • A resposta mais curta em bytes vence.
  • A sequência fornecida consistirá inteiramente em ASCII imprimível.
James
fonte
Qual é o fundo ? Qual é o quadro ?
flawr
@flawr A parte inferior é a string que você usa como entrada. O quadro é uma má escolha de texto que eu editarei.
James
Uma "2d string"? Você quer dizer uma lista de strings?
Fund Monica's Lawsuit
Eu acho que o &barco existe
l4m2 16/06/19
"Um barco tombará se o fundo tiver uma densidade inconsistente; portanto, cada caractere deve ser o mesmo." Se a borda externa tivesse um caractere e o interior fosse um caractere diferente, seria uma densidade inconsistente, mas não tombaria?
Jerry Jeremiah

Respostas:

3

Matlab, 106 bytes

s=input('');im=~(s-32);c=bwconncomp(im,4);disp(~nnz(cellfun(@nnz,c.PixelIdxList)>3)&nnz(unique(s(~im)))<2)

A entrada é uma matriz de caracteres, por exemplo, para o primeiro caso de teste:

`['$$$$$$$$';'***$$$$$';'***$$$$$';'***$$$$$';'$$$$$$$$']`

Explicação:

s=input('');           %read input
im=~(s-32);            %convert input to bw image (space = black)
c=bwconncomp(im,4);    %calculate the connected components (4 connectivity)

disp(
     ~nnz(cellfun(@nnz,c.PixelIdxList)>3) %find out whether we have components that have more at least 4 pixels
     &nnz(unique(s(~im)))<2)              %find out if we have more than 1 non-space character
flawr
fonte