In den klassischen Tagen von Starbucks, bevor diese neuen Sticker-Drucker und kabellosen Headset-Palmtop-Scanner für Headsets angeboten wurden, verfügte Starbucks in den berauschenden Tagen des Jahres 2000 über ein präzises System zur Beschreibung von Getränken mit einer strengen Syntax und der dazugehörigen codierten Form.
Vertikal auf der Tasse befindet sich eine Reihe von beschrifteten Kästchen, die bestimmte Werte enthalten können :.
Decaf
[ ] -blank- X 1/2 1/3 2/3
Shots
[ ] -blank- 0 1 2 3 ... 20 followed by S T G V
Syrup
[ ] -blank- V M C H
Milk
[ ] -blank- Wh % N B
Custom
[ ] -blank- ((-|x)?(F|WC|M|CR) )+
Drink
[ ] E EM ECP A L C CM
Wir werden jedoch eine horizontale Form verwenden, um die Manipulation zu erleichtern. Dies sind die Namen der 6 Felder der Eingabe, die eine beliebige Form haben können. Beispiele hierfür sind einfache CSV. Die Felder Benutzerdefiniert und Sirup können jeweils eine Verkettung mehrerer Werte sein. Sie können einen beliebigen geeigneten Subbegrenzer verwenden. Beispiele hier verwenden Raum. Das Feld "Schüsse" ist auch eine Verkettung einer (möglichen) Zahl und einer Bezeichnung der Bechergröße (die im physischen Becher enthalten ist, aber natürlich an diese Stelle in der Codierung passt).
Die Decaf-Feldwerte werden in solche Wörter übersetzt
-blank- -nothing-
X "decaf"
1/2 "half-caf"
1/3 "one-third-caf"
2/3 "two-thirds-caf"
Logischerweise sind die Bruchwerte nur zulässig, wenn die Anzahl der Schüsse durch den Nenner teilbar ist; Für diese Herausforderung ist es jedoch nicht erforderlich, diesen Fehler zu erkennen oder zu diagnostizieren.
Das Feld "Aufnahmen" sollte in seine numerische Komponente (falls vorhanden) und die Größenkennung unterteilt werden. Die Nummer sollte in lateinischer Tupelform angezeigt werden: einfach, doppelt, dreifach, vierfach, fünffach, über 5 hinaus drucken Sie einfach die Nummer und das Suffix "-tuple", dh. 7-tuple
,16-tuple
. Die Größenbezeichnungen sind:
S short
T tall
G grande
V venti
Z.B.
2T double tall
3G triple grande
Das Sirupfeld kann einen oder mehrere von mehreren optionalen Zahlen- / Buchstabencode-Token enthalten. Die maximale Anzahl eines Sirups beträgt 20. Auch das ist zu viel. LOL.
V vanilla
C caramel
M mocha
H hazelnut
Z.B.
2V 2C two vanilla two caramel
H hazelnut
M H 1V mocha hazelnut one vanilla
Das Milchfeld kann eines der folgenden Elemente enthalten .
Wh whole-milk
% two-percent
N skim
B breve
Das Feld Benutzerdefiniert kann einen oder mehrere von mehreren Modifikatoren mit optionalem x
oder -
Vorzeichen enthalten.
x extra F foam
- no WC whip
M mocha drizzle
CR caramel drizzle
Das Feld Getränk enthält eine Getränke-ID.
E espresso
EM espresso macchiato
ECP espresso con panna
A americano
L latte
C cappuccino
CM caramel macchiato
Jedes Feld kann leer sein, mit Ausnahme der Größenbezeichnung und der Getränke-ID.
Beispiele.
,3G,V,Wh,,L => triple grande vanilla whole-milk latte
X,2T,,N,,L => decaf double tall skim latte
1/2,V,,,,CM => half-caf venti caramel macchiato
2/3,3V,3V,B,WC,L => two-thirds-caf triple venti three vanilla breve whip latte
,G,,,xCR,CM => grande extra caramel drizzle caramel macchiato
X,4T,2M 2C,B,xWC -F xM,C =>
decaf quadruple tall two mocha two caramel breve extra whip no foam extra mocha drizzle cappuccino
Es besteht keine Notwendigkeit, fehlerhafte oder unlogische Zubereitungen wie "kein Schaum ... Cappuccino *" zu diagnostizieren.
Zusätzliche Komplikation
Für nur die Getränke mit dem Wort espresso
sollte die Nummer single
durch solo
und double
durch ersetzt werden doppio
. Und die Größe kann nicht spezifiziert und weggelassen werden. Nur für das bloße espresso
Getränk espresso
selbst sollte das Wort selbst weggelassen werden , wenn die einzige andere Spezifikation eine dieser beiden speziell ersetzten Schusszahlen ist .
,2,1V,B,,EM => doppio one vanilla breve espresso macchiato
,1,,,,E => solo
,2,,,,E => doppio
,3,,,,E => triple espresso
Zusätzliche Beobachtungen zum Thema "Lesen einer Tasse"
Dieser Teil ist keine Voraussetzung für diese Herausforderung, kann jedoch eine nützliche Verfeinerung bei der Anwendung dieser Art von verbalisiertem System in anderen Bereichen sein.
Ich habe die Syntax ganz am Anfang erwähnt, und durch Anwenden des Schemas auf eingehende Wortströme konnten Befehle von mehreren Auftragnehmern mündlich an den Barista übertragen werden, der Getränke herstellt. Der grobe Rahmen SIZE .... DRINK
bietet eine Abgrenzung zwischen mehreren gleichzeitig gesprochenen Befehlen. Es besteht daher die Tendenz, alle inneren Attribute als Adjektivphrasen zu definieren, sodass die Reihenfolge auch eine gültige englische Nominalphrasenstruktur aufweist. So whip
wird oft gesprochen with whip
oder whipped
und foam
wird oft gesprochen foamy
oder with foam
.
Daher "korrigieren" einige Baristas aus alter Zeit Sie nicht, wenn sie die Reihenfolge im richtigen Format wiederholen ( na ja , ... manchmal ). Sie organisieren die Informationen einfach, um sich alle Details genau zu merken. Durch die schematische Darstellung der Informationen wird eine gesamte Getränkebestellung zu einer Einheit, um die magische Zahl 7 plus oder minus 2 anzuwenden . Ein Barista mit dieser Fähigkeit kann also 5-9 Befehle in seinem Kopf halten, vorausgesetzt, andere Ablenkungen verbrauchen nicht zu viel Kopffreiheit. :) :)
Antworten:
Python,
824815807805 BytesEtwas besser lesbar:
Demo unter https://repl.it/C8Hz/3
quelle
Javascript ES6,
902900 Bytes"Ungolfed":
Beispielläufe:
quelle
(R=...)("=-.no.!...
(Definieren Sie R inline und verwenden Sie das Ergebnis als Funktion)Ruby, 957 Bytes
Vielleicht habe ich den falschen Ansatz gewählt; Ich könnte eine Lösung finden, besonders nachdem ich herausgefunden hatte, dass die Frage mitten in der Ausarbeitung meiner Antwort angenommen worden war. Die Art und Weise, wie es jetzt ist, ist jedoch noch schlimmer als Javascript ...
In der Tat sollte ein anderer Ruby-Codierer höchstwahrscheinlich eine viel bessere Antwort einreichen, anstatt Vorschläge zu machen, um meine Antwort weiter zu spielen
Probieren Sie es online aus, während ich in der Ecke weine
quelle