O objetivo desta tarefa é identificar, limpar e marcar todos os rostos em qualquer "imagem".
O que há em um rosto?
Uma face será um quadrado ZxZ onde Z é um número inteiro ímpar maior que 1. Os cantos superiores esquerdo e direito e o centro serão caracteres 'O', e a linha inferior será um '\' e um '/' circundando o suficiente caracteres '_' para preencher o restante da linha. Exemplos:
uma face 3x3:
O O
O
\_/
uma face 5x5:
O O
O
\___/
uma face 7x7:
O O
O
\_____/
etc.
Entrada
A entrada estará em STDIN e consistirá em um número de seqüências de caracteres de comprimento igual.
Resultado
A saída deve ser a entrada com todos os rostos reconhecíveis limpos (ou seja, todos os caracteres, exceto os olhos, nariz e boca, devem ser removidos dentro dos limites do rosto) e encaixotados (cercados por caracteres +, - e |). Onde duas ou mais faces se sobrepõem, ambas devem ser limpas e encaixotadas, mas deve ser dada prioridade à face maior (ela deve ser colocada em cima); se as duas faces tiverem o mesmo tamanho, a prioridade será deixada ao critério do implementador. Se a entrada não tiver faces, a saída deve ser a mesma que a entrada.
Alguns exemplos
Entrada:
*******
*******
**O*O**
***O***
**\_/**
*******
*******
Resultado:
*******
*+---+*
*|O O|*
*| O |*
*|\_/|*
*+---+*
*******
Entrada (face incompleta):
*******
*******
**O*O**
*******
**\_/**
*******
*******
Resultado:
*******
*******
**O*O**
*******
**\_/**
*******
*******
Entrada (faces aninhadas):
*******
*O***O*
**O*O**
***O***
**\_/**
*\___/*
*******
Resultado:
+-----+
|O O|
| |
| O |
| |
|\___/|
+-----+
Entrada (várias faces):
~{$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&^
Resultado:
+---+*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 (perto do limite):
~{$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&^
Resultado:
---+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 (faces sobrepostas):
~{$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&^
Resultado:
~{$FJ*TBNFU*YBVEXGY%
FX+---+-------+Z<>}+
X$|O |O O|JJKY%
@:| | |>?VKH
SD| O| |(UR$W
XV| | O |*(&P:
>?|\__| |:}~{&
~@+---| |}P>OU
:@<L::|\_____/|%^*BI
@{PO{_+-------+*&G&^