Цель этой задачи - идентифицировать, очистить и выделить все лица на любом «изображении».
Что в лице?
Лицо будет квадратом ZxZ, где Z - нечетное целое число больше 1. Верхний левый и правый углы и центр будут состоять из символов «O», а нижняя строка будет достаточно окружать символами «\» и «/». '_' символы, чтобы заполнить оставшуюся часть строки. Примеры:
лицо 3х3:
O O
O
\_/
лицо 5х5:
O O
O
\___/
лицо 7х7:
O O
O
\_____/
и т.п.
вход
Ввод будет осуществляться через STDIN и будет состоять из ряда строк символов одинаковой длины.
Выход
Выходными данными должны быть входные данные со всеми очищенными распознаваемыми лицами (т. Е. Все символы, кроме глаз, носа и рта должны быть удалены из границ лица) и в рамке (окружены символами +, - и |). Если две или более грани перекрываются, обе должны быть очищены и помещены в квадрат, но приоритет должен быть отдан большей грани (она должна быть размещена сверху); если оба лица имеют одинаковый размер, приоритет остается на усмотрение разработчика. Если у входа нет граней, вывод должен совпадать с вводом.
Некоторые примеры
Входные данные:
*******
*******
**O*O**
***O***
**\_/**
*******
*******
Выход:
*******
*+---+*
*|O O|*
*| O |*
*|\_/|*
*+---+*
*******
Ввод (неполное лицо):
*******
*******
**O*O**
*******
**\_/**
*******
*******
Выход:
*******
*******
**O*O**
*******
**\_/**
*******
*******
Ввод (вложенные грани):
*******
*O***O*
**O*O**
***O***
**\_/**
*\___/*
*******
Выход:
+-----+
|O O|
| |
| O |
| |
|\___/|
+-----+
Ввод (несколько лиц):
~{$FJ*TBNFU*YBVEXGY%
FOCO$&N|>ZX}X_PZ<>}+
X$OOPN ^%£)LBU{JJKY%
@\_/$£!SXJ*)KM>>?VKH
SDY%£ILO(+{O:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJO$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@\___/GER%^*BI
@{PO{_):<>KNUYT*&G&^
Выход:
+---+*TBNFU*YBVEXGY%
|O O|&N|>ZX}X_PZ<>}+
| O |N ^%£)LBU{JJKY%
|\_/|£+-----+M>>?VKH
+---+I|O O|HO(UR$W
XVBFTE| |LO*(&P:
>?LKPO| O |&L:}~{&
~@?}{)| |@~}P>OU
:@<L::|\___/|ER%^*BI
@{PO{_+-----+YT*&G&^
Вход (около границы):
~{$FJ*TBNFU*YBVEXGY%
OCO$&N|>ZX}X_PZ<>}+^
$OOPN ^%£)LBU{JJKY%{
\_/$£!SXJ*)KM>>?VKHU
SDY%£ILO(+{8:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJ^$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@BJYT*GER%^*BI
@{PO{_):<>KNUYT*&G&^
Выход:
---+J*TBNFU*YBVEXGY%
O O|&N|>ZX}X_PZ<>}+^
O |N ^%£)LBU{JJKY%{
\_/|£!SXJ*)KM>>?VKHU
---+£ILO(+{8:HO(UR$W
XVBFTER^&INLNLO*(&P:
>?LKPO)UJ^$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@BJYT*GER%^*BI
@{PO{_):<>KNUYT*&G&^
Ввод (перекрывающиеся грани):
~{$FJ*TBNFU*YBVEXGY%
FXC£$&N|>ZX}X_PZ<>}+
X$*OPN O%£)LBO{JJKY%
@:U%$£!SXJ*)KM>>?VKH
SDY%£OLO(+{P:HO(UR$W
XVBFTER^&IOLNLO*(&P:
>?L\___/JR$£^&L:}~{&
~@?}{)JKOINLM@~}P>OU
:@<L::@\_____/R%^*BI
@{PO{_):<>KNUYT*&G&^
Выход:
~{$FJ*TBNFU*YBVEXGY%
FX+---+-------+Z<>}+
X$|O |O O|JJKY%
@:| | |>?VKH
SD| O| |(UR$W
XV| | O |*(&P:
>?|\__| |:}~{&
~@+---| |}P>OU
:@<L::|\_____/|%^*BI
@{PO{_+-------+*&G&^