В классические времена Starbucks до того, как эти новомодные принтеры для наклеек и беспроводные беспроводные карманные устройства с гарнитурой были заключены в пышные дни 2000-х годов, у Starbucks была краткая система описания напитков со строгим синтаксисом и сопровождающей кодированной формой.
Вертикально на чашке есть ряд помеченных коробок, которые могут содержать определенные значения.
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. Пользовательские поля и поля сиропа могут представлять собой совокупность нескольких значений. Вы можете использовать любой удобный подподелитель. Примеры здесь используют пробел. Поле «Снимки» также представляет собой объединение (возможного) числа и обозначения размера чашки (что подразумевается в физической чашке, но естественно вписывается в это место в кодировке).
Значения поля Decaf переводятся в слова вроде этого
-blank- -nothing-
X "decaf"
1/2 "half-caf"
1/3 "one-third-caf"
2/3 "two-thirds-caf"
Логически, дробные значения допустимы только тогда, когда количество выстрелов делится на знаменатель; но для этой задачи нет необходимости обнаруживать или диагностировать эту ошибку.
Поле «Снимки» должно быть разбито на числовой компонент (если имеется) и идентификатор размера. Число должно отображаться в виде латинского кортежа: одинарный, двойной, тройной, четырехкратный, пятикратный, после 5 просто выведите число и суффикс "-tuple", т.е. 7-tuple
,16-tuple
. Обозначения размеров:
S short
T tall
G grande
V venti
Например.
2T double tall
3G triple grande
Поле Syrup может содержать один или несколько из нескольких маркеров необязательного числа / буквенного кода. Максимальное количество сиропа - 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
или -
знаком.
x extra F foam
- no WC whip
M mocha drizzle
CR caramel drizzle
Поле Напиток содержит один идентификатор напитка.
E espresso
EM espresso macchiato
ECP espresso con panna
A americano
L latte
C cappuccino
CM caramel macchiato
Любое поле может быть пустым, кроме обозначения размера и идентификатора напитка.
Примеры.
,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 приказов, если другие отвлекающие факторы не занимают слишком много места в голове. :)
Ответы:
Сетчатка 0.8.2 , 640 байт
Выполняет серию замен для преобразования входных данных в ожидаемый выходной.
Попробуйте онлайн!
Большинство из них довольно простые замены. Несколько интересных частей:
Обрабатывает особые случаи для напитков, содержащих слово «эспрессо». Он превращает 1 и 2 в «соло» и «доппио», прежде чем мы доберемся до стадии, на которой мы преобразуем эти числа в форму латинского кортежа.
Удаляет слово «эспрессо», если «соло» или «доппио» - единственный другой модификатор.
Добавляет
R
к любомуM
с одной запятой между ним и концом строки. Это позволяет намR
позже преобразовать все в «моросящий дождь».Позволяет нам одновременно преобразовывать 14, 16, 17 и 19 в их словоформы, поскольку мы заменили 4, 6, 7 и 9 заранее.
источник
Javascript ES6,
902900 байт"Ungolfed":
Пример работы:
источник
(R=...)("=-.no.!...
(определите R inline, затем используйте результат как функцию)Python,
824815807805 байтЧуть более читабельно:
Демо на https://repl.it/C8Hz/3
источник
Рубин
-plaF,
,975870 байтЯ получил случайный ответ на мой старый, почти четырехлетний ответ на этот вопрос, и из-за моих комментариев о том, как ужасно это произошло (вы можете проверить историю сообщений, если хотите увидеть то, что я написал раньше), я был вдохновленный, чтобы сделать это лучше (иначе: переписать большую часть этого с нуля) и сумел сыграть в гольф более ста байтов. Все еще дольше, чем ответ на Python, но я гораздо счастливее, чем все обернулось сейчас.
Приблизительно 20 байтов были сохранены путем перехода от попытки запуска шаблонов регулярных выражений для воздействия на определенные части структуры запятой к использованию
-aF,
флага для автоматического разделения строки ввода на запятые и сохранения ее$F
, что позволяет мне изменять некоторые элементы перед тем, как соединить их вместе, и наконец , изменяя выходную переменный с последнимиsub
/gsub
командами.Честно говоря, количество замен регулярных выражений, сделанных здесь, означает, что большая часть этого может быть программой Retina, но я недостаточно хорошо знаю Retina для этого.
Попробуйте онлайн!
источник