Vor der Entdeckung von Fingerabdrücken und DNA-Tests verwendete die britische Polizei ein anthropometrisches System, um Wiederholungstäter zu identifizieren. Bestimmte Körperteile von Kriminellen wurden vermessen und in Aufzeichnungen gespeichert. Es wurde angenommen, dass sich diese Körperteile nach dem Erwachsenenalter nicht in ihrer Größe verändert haben. Dieses System wurde als Bertillonnage bezeichnet .
Das folgende Diagramm zeigt ein Ablagesystem, mit dem die Polizei schnell auf diese Aufzeichnungen zugreifen kann.
Abbildung 1: Ein Ablagesystem mit nummerierten Schubladen.
Hinweis: Wenn Sie das Bild nicht sehen können, versuchen Sie es mit dem Imgur Mirror oder kompilieren Sie es selbst .
Der Aktenschrank besteht aus 81 nummerierten Schubladen. Jede Schublade enthält Karten, und jede Karte enthält Maße für bestimmte Körperteile eines Kriminellen:
- Die Länge ihres Kopfes (
H
) - Die Breite ihres Kopfes (
B
) - Die Breite ihres rechten Ohrs (
E
) - Die Länge ihres Zeigefingers (
F
)
Jede Messung wird als klein, mittel oder groß klassifiziert.
Zum Beispiel enthält Schublade 56 Karten mit den folgenden Eigenschaften: H klein, groß B, mittlere E und F. Dieser kleine notiert werden kann mit den Buchstaben S
, M
, und L
anstelle von kleinen, mittleren und großen:
SH,LB,ME,SF
Beachten Sie, dass zuerst der Größenbuchstabe und dann das Maß angegeben wird. Zusätzlich kann ein Ausrufezeichen !
vorangestellt werden, um ein Negativ hervorzurufen:
!SH,LB,!ME,SF
Dies weist auf Karten mit den folgenden Merkmalen hin: nicht klein H, groß B, nicht mittel E und klein F. Es gibt vier Fächer, die Karten mit diesen Merkmalen enthalten - 58, 60, 61 und 63.
Ihre Aufgabe ist es, ein Programm zu schreiben, das, wenn eine Zeichenfolge mit bestimmten Merkmalen angegeben wird, alle Schubladen ausgibt, die Karten mit diesen Merkmalen enthalten. Wenn es keine Schubladen gibt, die Karten mit den angegebenen Merkmalen enthalten, wird ausgegeben 0
.
Hier sind einige Beispiele für Ein- und Ausgänge.
- Eingabe:
SH,LB,ME,SF
Ausgabe:56
- Eingabe:
!SH,LB,!ME,SF
Ausgabe:58,60,61,63
- Eingabe:
SB,!MF,!LF
Ausgabe:1,2,3,4,5,6,7,8,9
- Eingabe:
MH,!MH
Ausgabe:0
Dies ist Codegolf, also gewinnt der kürzeste Eintrag. Stellen Sie Fragen in den Kommentaren, wenn die Spezifikation nicht klar ist.
Antworten:
GolfScript 95 ( DEMO )
quelle
Ruby 1.9.3 -
173 157143Bearbeiten:
Online-Demo: http://ideone.com/lodTLt
quelle
select
ist ein kürzeres Synonym fürfind_all
. Sie könnten noch zwei Zeichen trimmen durch Ersetzeny[-2..-1]
mity[-2,2]
, und drei weitere noch durch den Einsatz==[]
statt.empty?
.Scala - 951
Wird auf keinen Fall gewinnen, hauptsächlich aufgrund der Namen der eingebauten Funktionen, denke ich.
Das Argument wird an die Funktion übergeben
f
f("SH,LB,ME,SF")
=56
quelle
T-SQL -
547544Kein Gewinner, aber für diese Art von Problem geeignet.
Rastertabellen-Setup - 254
Abfrage -
293290Die Eingabe erfolgt durch Deklaration von @i vor der Abfrage
Ich könnte weitere 89 Zeichen speichern, wenn die Ausgabe keine durch Kommas getrennte Zeile sein muss
quelle
Mathematica
191235Stellt jede Zellennummer in Basis 3 dar. Jede Ziffernposition repräsentiert ein Körpermerkmal. Der Wert der Ziffer {0,1,2} steht für "Klein", "Mittel" bzw. "Groß".
Die Merkmale entsprechen den Ziffern wie folgt:
Zum Beispiel die Eingabe,
bedeutet:
2001
in der Basis 3 ist 55 in der Basis 10.Wir müssen eins hinzufügen, da wir Zellen von 1 und nicht von Null zählen.
Code
Testfälle
quelle
Python 3 - 192 - Probieren Sie es aus!
quelle
Python 2 - 194
Output hat eckige Klammern und kümmert sich nicht um die Ausgabereihenfolge.
Einige Vorschläge von Falko und ein paar von mir, 10 Zeichen auszuziehen.
quelle