Wird es schweben?

10

Die Herausforderung

Bei einer 2D-Zeichenfolge, die den Boden eines Bootes als Eingabe darstellt, müssen Sie bestimmen, ob das Boot schwimmt oder nicht. Diese 2D-Zeichenfolge kann in einem beliebigen Format vorliegen. (Zeichenfolge mit Zeilenumbrüchen, Liste der Zeichenfolgen, Liste der Zeichen usw.) Drucken Sie einen Wahrheitswert, wenn er schwebt, und einen Falschwert, wenn er sinkt.

Ein Boot kippt um, wenn der Boden eine inkonsistente Dichte hat, daher muss jedes Zeichen von gleich sein. Wenn ein Boot große Löcher hat, die durch Leerzeichen dargestellt werden, sinkt es, sodass Ihr Boot keine Löcher mit einer Fläche von mehr als 4 haben darf. Hier ein Beispiel:

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

Dieses Boot ist gültig, weil das größte Loch in ihm eine Fläche von 4 hat. Dieses Boot:

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

ist ungültig, da es ein Loch mit einer Fläche von 7 hat. Sie können davon ausgehen, dass die Außenseite jedes Eingangs ein durchgehendes Rechteck ohne Löcher ist. Hier sind einige weitere Tests:

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

Regeln

  • IO kann in jedem vernünftigen Format vorliegen.
  • Es gelten Standardlücken.
  • Die kürzeste Antwort in Bytes gewinnt.
  • Die angegebene Zeichenfolge besteht vollständig aus druckbarem ASCII.
James
quelle
Was ist der Boden ? Was ist der Rahmen ?
Fehler
@flawr Der untere Bereich ist die Zeichenfolge, die Sie als Eingabe verwenden. Der Rahmen ist eine schlechte Wortwahl, die ich herausarbeiten werde.
James
Eine "2d Saite"? Du meinst eine Liste von Strings?
Fund Monica Klage
Ich denke, das &Boot existiert
l4m2
"Ein Boot kippt um, wenn der Boden eine inkonsistente Dichte hat, daher muss jeder Charakter gleich sein." Wenn die Außengrenze ein Zeichen und das Innere ein anderes Zeichen wäre, wäre die Dichte inkonsistent, aber sie würde nicht umkippen, oder?
Jerry Jeremiah

Antworten:

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)

Die Eingabe ist eine Matrix von Zeichen, z. B. für den ersten Testfall:

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

Erläuterung:

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
fehlerhaft
quelle