Starbucks는 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"
논리적으로, 분수 값은 샷 수가 분모로 나눌 수있는 경우에만 허용됩니다. 그러나이 문제에 대해서는이 오류를 감지하거나 진단 할 필요가 없습니다.
샷 필드는 숫자 구성 요소 (있는 경우)와 크기 식별자로 구분해야합니다. 숫자는 라틴 튜플 형식으로 표시해야합니다. 단일, 이중, 삼중, 4 중, 5 중, 5를 넘어 서면 숫자와 접미사 "-튜플"을 인쇄하면됩니다. 7-tuple,16-tuple . 크기 지정은 다음과 같습니다.
S short
T tall
G grande
V venti
예 :
2T double tall
3G triple grande
시럽 필드에는 여러 개의 선택적 숫자 / 문자 코드 토큰 중 하나 이상이 포함될 수 있습니다. 시럽의 최대 수는 20 개입니다. LOL.
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또는 -부호 가있는 하나 이상의 여러 수정자가 포함될 수 있습니다 .
x extra F foam
- no WC whip
M mocha drizzle
CR caramel drizzle
음료 필드에는 음료 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드링크 자체의 경우, 다른 스펙 만이이 두 개의 특별히 교체 된 샷 수 중 하나 인 경우 단어 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 를 적용 할 목적으로 단일 단위가된다 . 따라서이 기술을 가진 바리 스타는 다른 방해 요소가 너무 많은 헤드 룸을 소비하지 않는 한 5-9 주문을 머리에 담을 수 있습니다. :)