これらの新しいステッカープリンターとワイヤレスドライブスルーヘッドセットパームトップスキャナーの契約が結ばれる前のスターバックスの昔、スターバックスは、2000年代の繁忙期に、厳密な構文と付随するエンコード形式で飲料を説明する簡潔なシステムを備えていました。
カップの垂直方向には、特定の値を含む一連のラベル付きボックスがあります。
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
ただし、操作を簡単にするために、水平フォームを使用します。これらは、入力の6つのフィールドの名前であり、便利な形式にすることができます。ここでの例は単純なCSVです。カスタムフィールドとシロップフィールドは、それぞれ複数の値を連結したものにすることができます。任意の便利なサブデリミタを使用できます。ここの例ではスペースを使用しています。Shotsフィールドは、(可能な)数とカップサイズの指定の連結でもあります(物理的なカップでは暗黙的ですが、エンコードのこの場所には自然に適合します)。
Decafフィールドの値はこのような単語に変換されます
-blank- -nothing-
X "decaf"
1/2 "half-caf"
1/3 "one-third-caf"
2/3 "two-thirds-caf"
論理的には、小数値は、ショット数が分母で割り切れる場合にのみ許容されます。ただし、この課題では、このエラーを検出または診断する必要はありません。
Shotsフィールドは、数値コンポーネント(存在する場合)とサイズ識別子に分割する必要があります。数字はラテンタプル形式で表示する必要があります。1、2、3、4、5、5を超えると、数字と接尾辞 "-tuple"を出力するだけです。7-tuple、16-tuple。サイズの指定は次のとおりです。
S short
T tall
G grande
V venti
例えば。
2T double tall
3G triple grande
Syrupフィールドには、いくつかのオプション番号/文字コードトークンの1つ以上が含まれる場合があります。シロップの最大数は20です。それでも多すぎます。笑。
V vanilla
C caramel
M mocha
H hazelnut
例えば。
2V 2C two vanilla two caramel
H hazelnut
M H 1V mocha hazelnut one vanilla
牛乳フィールドには、次のいずれかが含まれます。
Wh whole-milk
% two-percent
N skim
B breve
カスタムフィールドには、オプションxまたは-記号付きのいくつかの修飾子が1つ以上含まれる場合があります。
x extra F foam
- no WC whip
M mocha drizzle
CR caramel drizzle
ドリンクフィールドには、1つのドリンクIDが含まれています。
E espresso
EM espresso macchiato
ECP espresso con panna
A americano
L latte
C cappuccino
CM caramel macchiato
サイズの指定とドリンクIDを除き、どのフィールドも空白にできます。
例。
,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
「泡がない...カプチーノ*」などの誤った、または非論理的な調合を診断する必要はありません。
追加の合併症
単語のある飲み物のみについてespressoは、数字singleをに置き換えsolo、doubleをに置き換えdoppioます。また、サイズは未指定で省略される場合があります。また、ベアespressoドリンク自体についてのみ、他の唯一の仕様がこれら2つの特別に置き換えられたショット数の1つである場合、単語espresso自体は省略されます。
,2,1V,B,,EM => doppio one vanilla breve espresso macchiato
,1,,,,E => solo
,2,,,,E => doppio
,3,,,,E => triple espresso
「カップを読む」に関する追加の観察
この部分はこの課題の要件ではありませんが、この種の言語化されたシステムを他のドメインに適用する上で役立つ改良になる可能性があります。
冒頭で構文について述べましたが、着信する単語の流れにスキーマを適用することで、注文を複数の注文者が口頭でバリスタに送信して飲料を作ることができます。大まかなフレームワークSIZE .... DRINKは、一度に話されるいくつかの命令間の境界を提供します。したがって、すべての内部属性を形容詞句として作成する傾向があるため、順序にも有効な英語の名詞句構造があります。だから、whip多くの場合、話されているwith whipかwhippedとfoam頻繁に話されていますfoamyかwith foam。
したがって、一部の昔のバリスタにとっては、正しい形式で順序を繰り返しても、「修正する」ことはありません(まあ、...時々)。彼らは単にすべての詳細を正確に思い出す目的で情報を整理しているだけです。情報を図式化することにより、マジックナンバー7プラスまたはマイナス2を適用するために、飲料注文全体が1つの単位になります。したがって、このスキルを持つバリスタは、他の気晴らしがヘッドルームをあまり消費しない限り、頭に5〜9のオーダーを保持できます。:)