Чи пливе?


10

Змагання

Враховуючи 2d-рядок, що представляє дно човна як вхід, ви повинні визначити, чи буде човен плавати чи ні. Цей двовимірний рядок може бути в будь-якому зручному форматі. (Рядок з новими рядками, список рядків, список списків символів тощо). Друкуйте значення truthy, якщо воно буде плавати, і значення 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 рядок"? Ви маєте на увазі список рядків?
Позов по

Я думаю, що &човен існує
l4m2

"Човен перекинеться, якщо дно має непостійну щільність, тому кожен символ повинен бути однаковим". Якби зовнішня межа була одним символом, а внутрішня - іншим характером, вона була б непостійною щільністю, але вона не перевернеться, чи не так?
Джеррі Єремія

Відповіді:


3

Матлаб, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.