Это будет плавать?

10

Соревнование

Учитывая 2d строку, представляющую дно лодки в качестве входных данных, вы должны определить, будет ли лодка плавать. Эта 2D-строка может быть в любом удобном для вас формате. (Строка с символами новой строки, списком строк, списком символов и т. Д.) Выведите истинное значение, если оно будет всплывать, и значение Falsey, если оно опустится.

Лодка опрокинется, если дно будет иметь непостоянную плотность, поэтому каждый символ должен быть одинаковым. Кроме того, если в лодке имеются большие отверстия, представленные пробелами, она утонет, поэтому в вашей лодке не должно быть отверстий с площадью больше 4. Вот пример:

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

Эта лодка действительна, потому что самая большая дыра в ней имеет площадь 4. Эта лодка:

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

является недопустимым, поскольку имеет отверстие с площадью 7. Можно с уверенностью предположить, что снаружи каждого входа будет сплошной прямоугольник без отверстий. Вот еще несколько тестов:

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

правила

  • IO может быть в любом разумном формате.
  • Применяются стандартные лазейки.
  • Кратчайший ответ в байтах побеждает.
  • Данная строка будет полностью состоять из печатного ASCII.
Джеймс
источник
Что такое дно ? Какая рамка ?
flawr
@flawr Внизу строка, которую вы берете в качестве ввода. Кадр является плохим выбором формулировки , что я буду вычеркивать.
Джеймс
"2d строка"? Вы имеете в виду список строк?
Фонд Моники судебный процесс
Я думаю, что &лодка существует
м2 18
«Лодка опрокинется, если дно будет иметь непостоянную плотность, поэтому каждый символ должен быть одинаковым». Если бы внешняя граница была одним символом, а внутренняя часть была другим символом, это была бы непоследовательная плотность, но это не перевернулось бы, не так ли?
Джерри Иеремия

Ответы:

3

Matlab, 106 байт

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

Ввод представляет собой матрицу символов, например, для первого теста:

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

Объяснение:

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
источник