Flottera-t-il?

10

Le défi

Étant donné une chaîne 2d représentant le fond d'un bateau en entrée, vous devez déterminer si le bateau flottera ou non. Cette chaîne 2D peut être dans le format le plus pratique. (Chaîne avec sauts de ligne, liste de chaînes, liste de listes de caractères, etc.) Imprimez une valeur véridique si elle flotte, et une valeur falsey si elle coule.

Un bateau basculera si le fond a une densité irrégulière, donc chaque caractère de doit être le même. De plus, si un bateau a de gros trous, représentés par des espaces, il coulera, donc votre bateau ne doit pas avoir de trous d'une superficie supérieure à 4. Voici un exemple:

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

Ce bateau est valide car le plus grand trou a une superficie de 4. Ce bateau:

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

n'est pas valide car il possède un trou d'une superficie de 7. Vous pouvez supposer en toute sécurité que l'extérieur de chaque entrée sera un rectangle plein sans trous. Voici quelques tests supplémentaires:

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

Règles

  • IO peut être dans n'importe quel format raisonnable.
  • Des échappatoires standard s'appliquent.
  • La réponse la plus courte en octets l'emporte.
  • La chaîne donnée consistera entièrement en ASCII imprimable.
James
la source
Quel est le fond ? Quel est le cadre ?
flawr
@flawr Le bas est la chaîne que vous prenez en entrée. Le cadre est un mauvais choix de formulation que je vais modifier.
James
Une "chaîne 2D"? Vous voulez dire une liste de chaînes?
Fund Monica's Lawsuit
Je pense que le &bateau existe
l4m2
"Un bateau bascule si le fond a une densité irrégulière, donc chaque caractère de doit être le même." Si la bordure extérieure était un caractère et l'intérieur était un caractère différent, ce serait une densité incohérente, mais cela ne basculerait pas, n'est-ce pas?
Jerry Jeremiah

Réponses:

3

Matlab, 106 octets

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

L'entrée est une matrice de caractères, par exemple pour le premier cas de test:

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

Explication:

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
la source