Finde den Weihnachtsmann und sein Rentier in einer überfüllten Szene.
Eingang
Die Eingabe erfolgt auf STDIN und ist eine variable Anzahl von Zeichenzeilen gleicher, aber variabler Länge. Wenn sich der Weihnachtsmann (dargestellt durch den Charakter S
) in der Szene befindet, befindet sich sein Sack mit Geschenken (dargestellt durch den Charakter P
) in einer der ihm benachbarten Positionen (horizontal, vertikal oder diagonal). Sein Rentier (jedes durch den Charakter dargestellt R
) wird sich alle innerhalb des ihn umgebenden 5x5-Quadrats befinden. Wenn eine S
in der Szene erscheint, die keinen Sack Geschenke hat oder nicht von mindestens 4 Rentieren begleitet wird, dann ist es nicht der Weihnachtsmann.
Ausgabe
Die Szene wurde von jeglicher Verschleierung befreit (alle Nicht-Weihnachtsmann-, Nicht-Geschenk-, Nicht-Rentier-Charaktere, die durch ein Leerzeichen ersetzt wurden) und zeigt den Weihnachtsmann, seinen Sack mit Geschenken und sein Rentier - alle anderen Charaktere sollten durch Leerzeichen ersetzt werden. Wenn der Weihnachtsmann und sein Rentier nicht in der Szene sind, geben Sie sie unverändert aus. Es ist garantiert, dass es nur eine Lösung gibt, es wird also nie mehr als einen gültigen Weihnachtsmann geben und er wird niemals mehr als einen Sack Geschenke tragen.
Beispiele
In diesen Beispielen verwende ich nur den *
Charakter , um es die leicht zu machen , zu sehen S
, P
und R
Zeichen, aber Ihr Programm soll beliebige ASCII - Zeichen aus zu handhaben können, !
zu `
(33 bis 96). Ich habe Kleinbuchstaben und höher weggelassen, um Verwirrung zu vermeiden.
Eingang:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Ausgabe: (Punkte ignorieren, sie sollen die Seite zwingen, die leeren Zeilen anzuzeigen)
.
.
.
R
P
S
R
R R
.
.
.
.
Input: (nicht genug Rentiere)
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Ausgabe:
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Input: (kein Sack mit Geschenken)
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Ausgabe:
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Input: (Geschenke nicht nah genug)
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Ausgabe:
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Eingabe: (eines der Rentiere nicht innerhalb des 5x5 Quadrats um den Weihnachtsmann)
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Ausgabe:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Testskripte
Wie in einigen meiner früheren Fragen habe ich auch hier einige Testskripte geschlachtet, die ursprünglich von Joey und Ventero erstellt wurden , um einige Testfälle für diese Frage bereitzustellen:
Verwendung: ./test [your program and its arguments]
Klartextversion der Tests als Referenz: Klartext
Belohnung
Jeder Beitrag, bei dem ich nachprüfen kann, ob er der Spezifikation entspricht, die Tests besteht und offensichtlich einen Golfversuch unternommen hat, wird von mir positiv bewertet (bitte geben Sie die Verwendungsanleitung mit Ihrer Antwort an). Die kürzeste Lösung bis Ende 31.12.2013 wird als Sieger anerkannt.