Galleggerà?


10

La sfida

Data una stringa 2d che rappresenta il fondo di una barca come input, è necessario determinare se la barca galleggerà o meno. Questa stringa 2D può essere in qualsiasi formato più conveniente. (Stringa con newline, elenco di stringhe, elenco di elenchi di caratteri, ecc.) Stampa un valore di verità se galleggia e un valore di falsa se affonderà.

Una barca si ribalterà se il fondo ha una densità incoerente, quindi ogni personaggio di deve essere lo stesso. Inoltre, se una barca ha grandi buchi, rappresentati da spazi, affonderà, quindi la tua barca non deve avere buchi con un'area maggiore di 4. Ecco un esempio:

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

Questa barca è valida perché la buca più grande ha una superficie di 4. Questa barca:

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

non è valido perché ha un foro con un'area di 7. Puoi tranquillamente supporre che l'esterno di ogni input sia un rettangolo solido senza buchi. Ecco alcuni altri test:

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

Regole

  • IO può essere in qualsiasi formato ragionevole.
  • Si applicano scappatoie standard.
  • Vince la risposta più breve in byte.
  • La stringa data sarà interamente costituita da ASCII stampabile.

Qual è il fondo ? Qual è la cornice ?
flawr

@flawr La parte inferiore è la stringa che prendi come input. La cornice è una cattiva scelta di parole che modificherò.
James,

Una "stringa 2d"? Intendi un elenco di stringhe?
Finanzi la causa di Monica il

Penso che la &barca esista
l4m2

"Una barca si ribalterà se il fondo ha una densità incoerente, quindi ogni personaggio di deve essere lo stesso." Se il bordo esterno fosse un personaggio e l'interno fosse un personaggio diverso, sarebbe una densità incoerente ma non si ribalterebbe?
Jerry Jeremiah,

Risposte:


3

Matlab, 106 byte

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

L'input è una matrice di caratteri, ad esempio per il primo caso di test:

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

Spiegazione:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.