Avant la découverte des empreintes digitales et des tests ADN, la police britannique a utilisé un système anthropométrique pour identifier les récidivistes. Certaines parties du corps des criminels ont été mesurées et stockées dans des dossiers - ces parties du corps ne devaient pas changer de taille après l'âge adulte. Ce système était connu sous le nom de bertillonnage .
Le diagramme ci-dessous montre un système de classement utilisé par la police pour accéder rapidement à ces dossiers.
Schéma 1: Un système de classement avec tiroirs numérotés.
Remarque: si vous ne pouvez pas voir l'image, essayez le miroir imgur ou compilez-le vous-même .
Le classeur se compose de 81 tiroirs numérotés. Chaque tiroir contient des cartes, et chaque carte a des mesures de parties particulières du corps d'un criminel:
- La longueur de leur tête (
H
) - L'étendue de leur tête (
B
) - La largeur de leur oreille droite (
E
) - La longueur de leur index (
F
)
Chaque mesure est classée comme petite, moyenne ou grande.
Par exemple, le tiroir 56 contient des cartes avec les caractéristiques suivantes: petite H, un grand B, E moyen et petit F. Cela peut être transcrite en utilisant les lettres S
, M
et L
à la place des petites, moyennes et grandes:
SH,LB,ME,SF
Notez que la lettre de taille va d'abord, puis quelle est la mesure. De plus, un point d'exclamation !
peut être placé devant pour provoquer un négatif:
!SH,LB,!ME,SF
Cela indique des cartes qui ont les caractéristiques suivantes: pas petit H, grand B, pas moyen E et petit F. Il y a quatre tiroirs qui contiennent des cartes avec ces caractéristiques - 58, 60, 61 et 63.
Votre tâche consiste à écrire un programme qui, lorsqu'il reçoit une chaîne notant certaines caractéristiques, génère tous les tiroirs contenant des cartes avec ces caractéristiques. S'il n'y a pas de tiroirs contenant des cartes avec les caractéristiques données, sortez 0
.
Voici quelques exemples d'entrées et de sorties.
- Entrée:
SH,LB,ME,SF
Sortie:56
- Entrée:
!SH,LB,!ME,SF
Sortie:58,60,61,63
- Entrée:
SB,!MF,!LF
Sortie:1,2,3,4,5,6,7,8,9
- Entrée:
MH,!MH
Sortie:0
C'est le golf de code, donc l'entrée la plus courte gagne. Posez des questions dans les commentaires si la spécification n'est pas claire.
Réponses:
GolfScript 95 ( DEMO )
la source
Ruby 1.9.3 -
173 157143Éditer:
Démo en ligne: http://ideone.com/lodTLt
la source
select
est un synonyme plus court pourfind_all
. Vous pouvez couper deux autres caractères en remplaçanty[-2..-1]
pary[-2,2]
, et trois autres encore en utilisant==[]
au lieu de.empty?
.Scala - 951
Je ne gagnerai certainement pas celui-ci, principalement en raison des noms des fonctions intégrées, je pense.
L'argument est passé dans la fonction
f
f("SH,LB,ME,SF")
=56
la source
T-SQL -
547544Pas une entrée gagnante, mais adaptée à ce type de problème.
Configuration de la table de grille - 254
Requête -
293290L'entrée se fait en déclarant @i avant la requête
Je pourrais enregistrer encore 89 caractères si la sortie ne doit pas être une ligne séparée par des virgules
la source
Mathematica
191235Représente chaque numéro de cellule dans la base 3. Chaque position de chiffre représente une caractéristique corporelle. La valeur du chiffre, {0,1,2}, représente respectivement "Petit", "Moyen", "Grand".
Les caractéristiques correspondent aux chiffres comme suit:
Par exemple, l'entrée,
signifie:
2001
en base 3 est 55 en base 10.Nous devons en ajouter un car nous comptons les cellules à partir de 1 et non de zéro.
Code
Cas de test
la source
Python 3 - 192 - Essayez-le!
la source
Python 2-194
La sortie a des crochets, et ne se soucie pas de l'ordre de sortie.
Quelques suggestions de Falko, et un couple de moi-même pour enlever 10 caractères.
la source