El objetivo de esta tarea es identificar, limpiar y marcar todas las caras en cualquier 'imagen' dada.
¿Qué hay en una cara?
Una cara será un cuadrado ZxZ donde Z es un número entero impar mayor que 1. Las esquinas superior izquierda y derecha y el centro serán caracteres 'O', y la línea inferior será una '\' y una '/' rodeando lo suficiente '_' caracteres para llenar el resto de la línea. Ejemplos:
una cara 3x3:
O O
O
\_/
una cara 5x5:
O O
O
\___/
una cara 7x7:
O O
O
\_____/
etc.
Entrada
La entrada estará en STDIN y consistirá en un número de cadenas de caracteres de igual longitud.
Salida
La salida debe ser la entrada con todas las caras reconocibles despejadas (es decir, todos los caracteres, excepto los ojos, la nariz y la boca deben eliminarse de los límites de la cara) y encuadrados (rodeados por caracteres +, - y |). Cuando se superponen dos o más caras, ambas deben borrarse y encuadrarse, pero se debe dar prioridad a la cara más grande (debe colocarse en la parte superior); Si ambas caras son del mismo tamaño, la prioridad queda a discreción del implementador. Si la entrada no tiene caras, la salida debe ser la misma que la entrada.
Algunos ejemplos
Entrada:
*******
*******
**O*O**
***O***
**\_/**
*******
*******
Salida:
*******
*+---+*
*|O O|*
*| O |*
*|\_/|*
*+---+*
*******
Entrada (cara incompleta):
*******
*******
**O*O**
*******
**\_/**
*******
*******
Salida:
*******
*******
**O*O**
*******
**\_/**
*******
*******
Entrada (caras anidadas):
*******
*O***O*
**O*O**
***O***
**\_/**
*\___/*
*******
Salida:
+-----+
|O O|
| |
| O |
| |
|\___/|
+-----+
Entrada (caras múltiples):
~{$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&^
Salida:
+---+*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&^
Entrada (cerca del límite):
~{$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&^
Salida:
---+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&^
Entrada (caras superpuestas):
~{$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&^
Salida:
~{$FJ*TBNFU*YBVEXGY%
FX+---+-------+Z<>}+
X$|O |O O|JJKY%
@:| | |>?VKH
SD| O| |(UR$W
XV| | O |*(&P:
>?|\__| |:}~{&
~@+---| |}P>OU
:@<L::|\_____/|%^*BI
@{PO{_+-------+*&G&^