Retrouvez le Père Noël et ses rennes dans une scène bondée.
Contribution
L'entrée se fera sur STDIN et sera un nombre variable de lignes de caractères de longueur égale mais variable. Si le Père Noël (représenté par le personnage S
) est dans la scène, son sac de cadeaux (représenté par le personnage P
) sera dans l'une des positions adjacentes à lui (horizontalement, verticalement ou en diagonale). Ses rennes (chacun représenté par le personnage R
) seront tous dans le carré 5x5 qui l'entoure. Si un S
apparaît dans la scène qui n'a pas de sac de cadeaux ou n'est pas accompagné d'au moins 4 rennes, alors ce n'est pas le Père Noël.
Production
La scène a été débarrassée de tout obscurcissement (tous les personnages non-Père Noël, non-présents, non-rennes remplacés par un espace), montrant le Père Noël, son sac de cadeaux et son renne - tous les autres personnages doivent être remplacés par des espaces. Si le Père Noël et ses rennes ne sont pas dans la scène, sortez-les inchangés. Il est garanti qu'il n'y aura qu'une seule solution, il n'y aura donc jamais plus d'un Père Noël valide et il ne transportera jamais plus d'un sac de cadeaux.
Exemples
Dans ces exemples , je suis juste en utilisant le *
caractère pour le rendre facile de voir les S
, P
et les R
caractères, mais votre programme devrait être capable de gérer tous les caractères ascii de !
à `
(33 à 96). J'ai omis les caractères minuscules et supérieurs pour éviter toute confusion.
Contribution:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Sortie: (ignorer les points, ils doivent forcer la page à afficher les lignes vides)
.
.
.
R
P
S
R
R R
.
.
.
.
Entrée: (pas assez de rennes)
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Production:
***********
***********
***********
***********
******P****
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Entrée: (pas de sac de cadeaux)
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Production:
***********
***********
***********
*****R*****
***********
*****S*****
*****R*****
****R**R***
***********
***********
***********
***********
Entrée: (présente pas assez proche)
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Production:
***********
***********
***********
*****R*****
***********
*****S*P***
*****R*****
****R**R***
***********
***********
***********
***********
Entrée: (l'un des rennes n'est pas dans le carré 5x5 autour du Père Noël)
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Production:
***********
***********
***********
*****R*****
******P****
*****S*****
*****R*****
****R******
*******R***
***********
***********
***********
Scripts de test
Comme dans certaines de mes questions précédentes, j'ai une fois de plus massacré des scripts de test créés à l'origine par Joey et Ventero pour fournir des cas de test pour cette question:
Usage: ./test [your program and its arguments]
Version en texte brut des tests pour référence: texte en clair
Récompenses
Chaque entrée dont je peux vérifier qu'elle répond aux spécifications, réussit les tests et a évidemment eu une tentative de golf recevra un vote positif de ma part (veuillez donc fournir des instructions d'utilisation avec votre réponse). La solution la plus courte d'ici la fin du 31/12/2013 sera acceptée comme gagnante.
Réponses:
MATLAB: 110
, 95caractèresJe ne suis pas sûr de la façon dont l'entrée est censée être traitée, mais le reste est assez simple.
Version normalement formatée:
Exemple d'entrée:
la source
*
caractères comme foule pour faciliter la visualisation des caractèresS
,P
etR
- alors que les tests du script de test utilisent tous les caractères ascii à partir de 33 (!
). au (et y compris) 96 (`` ''). Je vais le préciser dans la question. J'ai fait une version en texte brut des tests que vous devez passer, que j'ajouterai également à la question.Q
Noël ne porte pas d' uilt, cela m'aurait sauvé au moins 2 caractères.SQL_2
dans l'entrée échantillon ... sympa :)Python 2 (
353381)Première tentative d'écriture de code aussi compact que possible. Python n'est pas vraiment le langage pour cela, car l'indentation et les nouvelles lignes sont simplement requis par la conception. J'ai principalement choisi d'utiliser cette langue, en raison de la façon dont vous pouvez jouer avec des listes et des chaînes sous forme de listes. Un langage avec une manipulation aisée de la matrice serait idéal pour cette tâche, mais malheureusement je n'en connais aucun.
Pour tester quelque chose, quelque chose doit être assigné à un, par exempleLa principale chose intéressante dans ce code est probablement:
qui est une façon d'écrire de fantaisie: "b devient une liste d'une représentation (chaîne de 25 caractères) de chaque carré 5x5 dans la représentation originale".
la source
Il ne devrait y avoir qu'un seul Père Noël dans le fichier (si plus de 2 "S", j'ai besoin de mettre à jour le code).
Utiliser awk
Exécutez la commande awk comme ci-dessous
Résultat
la source
S
sont autorisés tant qu'un seul est un père Noël «valide». Les tests (fournis dans la question) ont quelques cas qui échoueraient pour cette raison.