Lo scopo di questo compito è quello di identificare, ripulire e contrassegnare tutti i volti in una data "immagine".
Cosa c'è in una faccia?
Una faccia sarà un quadrato ZxZ in cui Z è un numero intero dispari maggiore di 1. Gli angoli in alto a sinistra e a destra e il centro saranno caratteri 'O', e la linea di fondo sarà un '\' e un '/' abbastanza circostante '_' caratteri per riempire il resto della riga. Esempi:
una faccia 3x3:
O O
O
\_/
una faccia 5x5:
O O
O
\___/
una faccia 7x7:
O O
O
\_____/
eccetera.
Ingresso
L'input sarà su STDIN e consisterà in un numero di stringhe di caratteri di uguale lunghezza.
Produzione
L'output dovrebbe essere l'input con tutti i volti riconoscibili eliminati (ovvero tutti i caratteri tranne gli occhi, il naso e la bocca devono essere rimossi dai limiti del viso) e inscatolati (circondati da +, - e | caratteri). Laddove due o più facce si sovrappongano, entrambe devono essere cancellate e inscatolate, ma la priorità dovrebbe essere data alla faccia più grande (dovrebbe essere posizionata in alto); se entrambe le facce hanno le stesse dimensioni, la priorità viene lasciata alla discrezione dell'attuatore. Se l'input non ha facce, l'output dovrebbe essere uguale all'input.
Qualche esempio
Ingresso:
*******
*******
**O*O**
***O***
**\_/**
*******
*******
Produzione:
*******
*+---+*
*|O O|*
*| O |*
*|\_/|*
*+---+*
*******
Input (faccia incompleta):
*******
*******
**O*O**
*******
**\_/**
*******
*******
Produzione:
*******
*******
**O*O**
*******
**\_/**
*******
*******
Input (facce nidificate):
*******
*O***O*
**O*O**
***O***
**\_/**
*\___/*
*******
Produzione:
+-----+
|O O|
| |
| O |
| |
|\___/|
+-----+
Input (più facce):
~{$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&^
Produzione:
+---+*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&^
Input (vicino al confine):
~{$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&^
Produzione:
---+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&^
Input (facce sovrapposte):
~{$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&^
Produzione:
~{$FJ*TBNFU*YBVEXGY%
FX+---+-------+Z<>}+
X$|O |O O|JJKY%
@:| | |>?VKH
SD| O| |(UR$W
XV| | O |*(&P:
>?|\__| |:}~{&
~@+---| |}P>OU
:@<L::|\_____/|%^*BI
@{PO{_+-------+*&G&^