Czy będzie unosić się?

10

Wyzwanie

Biorąc pod uwagę ciąg 2d reprezentujący dno łodzi jako dane wejściowe, musisz ustalić, czy łódź będzie unosić się na wodzie. Ten ciąg 2D może być w dowolnym dogodnym formacie. (Ciąg znaków z nowymi liniami, lista ciągów, lista znaków, itp.) Wydrukuj wartość prawdy, jeśli będzie zmienna, i wartość falsey, jeśli opadnie.

Łódź przewróci się, jeśli dno ma niespójną gęstość, więc każda postać musi być taka sama. Ponadto, jeśli łódź ma duże dziury, reprezentowane przez spacje, tonie, więc twoja łódź nie może mieć otworów o powierzchni większej niż 4. Oto przykład:

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

Ta łódź jest ważna, ponieważ największa dziura w niej ma powierzchnię 4. Ta łódź:

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

jest nieprawidłowy, ponieważ ma otwór o powierzchni 7. Możesz bezpiecznie założyć, że na zewnątrz każdego wejścia będzie bryła prostokąta bez otworów. Oto kilka innych testów:

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

Zasady

  • IO może mieć dowolny rozsądny format.
  • Obowiązują standardowe luki.
  • Najkrótsza odpowiedź w bajtach wygrywa.
  • Podany ciąg będzie w całości składał się z drukowalnego ASCII.
James
źródło
Co jest na dole ? Jaka jest rama ?
flawr 30.04.16
@flawr Dół jest ciągiem, który bierzesz jako dane wejściowe. Rama jest ubogi wybór brzmienia, które będę edytować zewnątrz.
James
„Ciąg 2d”? Masz na myśli listę ciągów?
Pozew Fund Moniki w dniu
Myślę, że &łódź istnieje
l4m2
„Łódź przewróci się, jeśli dno ma niespójną gęstość, więc każda postać musi być taka sama”. Gdyby zewnętrzna granica była jedną postacią, a wnętrze inną postacią, byłaby to niespójna gęstość, ale nie przewróciłaby się, prawda?
Jerry Jeremiah

Odpowiedzi:

3

Matlab, 106 bajtów

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

Dane wejściowe to macierz znaków, np. Dla pierwszego przypadku testowego:

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

Wyjaśnienie:

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
wada
źródło