¿Flotará?

10

El reto

Dada una cadena 2D que representa el fondo de un bote como entrada, debe determinar si el bote flotará o no. Esta cadena 2D puede estar en el formato que sea más conveniente. (Cadena con líneas nuevas, lista de cadena, lista de lista de caracteres, etc.) Imprima un valor verdadero si flotará y un valor falso si se hunde.

Un bote se volcará si el fondo tiene una densidad inconsistente, por lo que cada carácter debe ser el mismo. Además, si un barco tiene grandes agujeros en él, representados por espacios, se hundirá, por lo que su barco no debe tener agujeros con un área mayor que 4. Aquí hay un ejemplo:

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

Este bote es válido porque el hoyo más grande tiene un área de 4. Este bote:

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

no es válido porque tiene un agujero con un área de 7. Puede suponer con seguridad que el exterior de cada entrada será un rectángulo sólido sin agujeros. Aquí hay algunas pruebas más:

$$$$$$$$
***$$$$$
***$$$$$
***$$$$$
$$$$$$$$
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.

Reglas

  • IO puede estar en cualquier formato razonable.
  • Se aplican lagunas estándar.
  • La respuesta más corta en bytes gana.
  • La cadena dada consistirá completamente en ASCII imprimible.
James
fuente
¿Qué es el fondo ? ¿Cuál es el marco ?
flawr
@flawr La parte inferior es la cadena que toma como entrada. El marco es una mala elección de redacción que editaré.
James
¿Una "cadena 2d"? ¿Te refieres a una lista de cadenas?
Financia la demanda de Mónica el
Creo que el &barco existe
l4m2
"Un bote se volcará si el fondo tiene una densidad inconsistente, por lo que cada personaje debe ser el mismo". Si el borde exterior fuera un carácter y el interior fuera un carácter diferente, sería una densidad inconsistente pero no se volcaría, ¿verdad?
Jerry Jeremiah

Respuestas:

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)

La entrada es una matriz de caracteres, por ejemplo, para el primer caso de prueba:

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

Explicación:

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
falla
fuente