अंग्रेजी में स्टारबक्स


12

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 हैं। कस्टम फ़ील्ड और सिरप फ़ील्ड प्रत्येक में कई मानों का संयोजन हो सकता है। आप किसी भी सुविधाजनक उपखंड का उपयोग कर सकते हैं। यहां के उदाहरण अंतरिक्ष का उपयोग करते हैं। शॉट्स फील्ड एक (संभव) संख्या और कप के आकार का एक पदनाम भी है (जो कि भौतिक कप में निहित है लेकिन स्वाभाविक रूप से एन्कोडिंग में इस जगह में फिट बैठता है)।

डेकाफ क्षेत्र मूल्यों को इस तरह शब्दों में अनुवादित किया जाता है

-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

सिरप फ़ील्ड में कई वैकल्पिक-संख्या / लेटरकोड टोकन में से एक या अधिक हो सकते हैं। एक सिरप की अधिकतम संख्या 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 आदेश रख सकता है बशर्ते कि अन्य ध्यान भंग बहुत अधिक सिर के कमरे का उपभोग न करें। :)


5
मुझे खुशी है कि आपने कॉफ़ी के बजाय पेय के रूप में इनका उल्लेख किया है।
नील

आपका क्या मतलब है जब तक मैं मोबाइल से ऑर्डर नहीं कर रहा हूं, सभी स्टारबक्स बरिस्ता मैंने कभी देखा है अभी भी इसे एक काले मार्कर के साथ लिख रहा हूं।
जो जेड।

@JoeZ। बस मेरी हताशा कि पुराने तरीके की सादगी लगातार मिट रही है। व्यवस्था को आदेश इनपुट करने के तरीके से खुद बरिस्ता को तीसरे रूप में अनुवाद करना होगा। और ड्राइव-थ्रू के साथ एक स्टोर के लिए, स्टिकर पर चौथे रूप में ऑर्डर प्रिंट किया जाता है। जबकि हेड-अप कतार में लिस्टिंग का पांचवा अलग प्रारूप है (सभी सिरप संख्या को छोड़ना)।
लूज़र ने

1
s / कुंठा / विलाप /
luser droog

जवाबों:


3

रेटिना 0.8.2 , 640 बाइट्स

अपेक्षित आउटपुट में इनपुट को बदलने के लिए प्रतिस्थापन की एक श्रृंखला करता है।

-
no 
x
extra 
Wh
whole-milk
%
2-percent
N
skim
B
breve
X
deJ
1/2
half-J
1/3
1Q-J
2/3
2Qs-J
Q
-third
J
caf 
^,
 ,
 ,1(?=\D.*E)
,soloZ
 ,2(?=\D.*E)
,doppioZ
Z,,,,E$
Z
 ,(\d+)
,$1UleZ
,1U
,sing
,2U
,doub
,3U
,trip
\d+(?!\d*U)
$&Y 
U
-tup
,4-.
,quadr
,5-
,quin
 ,
Z
S
short
T
tall
G
grande
ZV
 venti
M(?=[^,]*,\w*$)
MR
E
espresso
M$
 macchiato
CP
 con panna
A
americano
L
latte
C$
cappuccino
F
foam
WC
whip
R
 drizzle
4Y
fourY
6Y
sixY
7Y
sevenY
9Y
nineY
10Y
ten
11Y
eleven
12Y
twelve
13Y
thirK
15Y
fifK
18Y
eighK
20Y
twenty
1Y
one
2Y
two
3Y
three
5Y
five
8Y
eight
1(\w*)Y
$1K
K
teen
V
vanilla
C
caramel
M
mocha
H
hazelnut
 -
-
Z,*| ?,+
 
^ |Y

इसे ऑनलाइन आज़माएं!

ज्यादातर यह बहुत सरल प्रतिस्थापन है। कुछ दिलचस्प हिस्से हैं:

 ,1(?=\D.*E)
,soloZ
 ,2(?=\D.*E)
,doppioZ

"एस्प्रेसो" शब्द वाले पेय के लिए विशेष मामलों को संभालता है। यह 1 और 2 को "सोलो" और "डोपियो" में बदल देता है, इससे पहले कि हम स्टेज पर पहुँचें जहाँ हम उन संख्याओं को लैटिन टुपल रूप में बदलते हैं।

Z,,,,E$
Z

"एस्प्रेसो" शब्द को हटा दें तो "सोलो" या "डोपियो" केवल अन्य संशोधक हैं।

M(?=[^,]*,\w*$)
MR

इसके और स्ट्रिंग के अंत के बीच केवल एक अल्पविराम के साथ Rकिसी को भी जोड़ता है M। यह हमें Rबाद में सभी एस को "रिमझिम" में बदलने की अनुमति देता है ।

1(\w*)Y
$1K
K
teen

हमें 14,16,17 और 19 को उनके शब्द रूपों में एक साथ बदलने की अनुमति देता है, क्योंकि हम 4,6,7 और 9 को पहले से बदल देते हैं।


6

जावास्क्रिप्ट ईएस 6, 902 900 बाइट्स

s=>(R=(l,r)=>(l.split`.`.map((e,i,l)=>!(i%2)&&(r=r.split(e).join(l[i+1]+" "))),r),R("-.no.!.-tuple.1/2.half-caf.1/3.one-third-caf.2/3.two-thirds-caf.ECP.Econ panna.CM.RY.CR.RZ.EM.EY.WC.whip.Wh.whole-milk.A.americano.B.breve.C.cappuccino.D.extra.E.espresso.F.foam.G.grande.H.hazelnut.I.venti.L.latte.M.OZ.N.skim.O.mocha.R.caramel.S.short.T.tall.V.vanilla.X.decaf.Y.macchiato.Z.drizzle.%.two-percent",R(",1,,,,E.solo.,2,,,,E.doppio",s).split`,`.map((e,i)=>(`1VI.2MO.2CR.4xD`.split`.`.map(k=>k[0]==i&&(e=e.split(k[1]).join(k[2]))),i==1?(e=R("1!.single.2!.double.3!.triple.4!.quadruple.5!.quintuple",e.replace(/(\d+)/,"$1!"))):i==2?(e=R("10.ten.20.twenty.11.eleven.12.twelve.13.thir0.14.four0.15.fif0.16.six0.17.seven0.18.eigh0.19.nine0.0.teen.1.one.2.two.3.three.4.four.5.five.6.six.7.seven.8.eight.9.nine",e)):s.includes`E`&&(e=R("single.solo.double.doppio",e)),e)).join` `).replace(/\s+/g," ").trim())

"Ungolfed":

s=>(
  R=(l,r)=>(l.split`.`.map((e,i,l)=>!(i%2)&&(r=r.split(e).join(l[i+1]+" "))),r),                                   // consecutive string replacement function
  R("-.no.!.-tuple.1/2.half-caf.1/3.one-third-caf.2/3.two-thirds-caf.ECP.Econ panna.CM.RY.CR.RZ.EM.EY.WC.whip.     // replace all symbols with appropriate values
     Wh.whole-milk.A.americano.B.breve.C.cappuccino.D.extra.E.espresso.F.foam.G.grande.H.hazelnut.I.venti.L.latte.
     M.OZ.N.skim.O.mocha.R.caramel.S.short.T.tall.V.vanilla.X.decaf.Y.macchiato.Z.drizzle.%.two-percent",
    R(",1,,,,E.solo.,2,,,,E.doppio",s)                                                                             // if special espresso cases, directly replace entire string
    .split`,`.map((e,i)=>(                                                                                         // split input at commas
      `1VI.2MO.2CR.4xD`.split`.`.map(k=>k[0]==i&&(e=e.split(k[1]).join(k[2]))),                                    // substitute duplicate symbols with unique symbols
      i==1?(e=R("1!.single.2!.double.3!.triple.4!.quadruple.5!.quintuple",e.replace(/(\d+)/,"$1!"))):              // if in shots section, expand all numbers
      i==2?(e=R("10.ten.20.twenty.11.eleven.12.twelve.13.thir0.14.four0.15.fif0.16.six0.17.seven0.18.eigh0.        // if in syrup section, expand all numbers
                  19.nine0.0.teen.1.one.2.two.3.three.4.four.5.five.6.six.7.seven.8.eight.9.nine",e)):
      s.includes`E`&&(e=R("single.solo.double.doppio",e)),                                                         // replace single,double with solo,doppio if espresso is in the string
    e)).join` `).replace(/\s+/g," ").trim())                                                                       // join sections, cleanup whitespaces

उदाहरण चलता है:

f(",3G,V,Wh,,L")              -> triple grande vanilla whole-milk latte
f("X,2T,,N,,L")               -> decaf double tall skim latte
f("1/2,V,,,,CM")              -> half-caf venti caramel macchiato
f("2/3,3V,3V,B,WC,L")         -> two-thirds-caf triple venti three vanilla breve whip latte
f(",G,,,xCR,CM")              -> grande extra caramel drizzle caramel macchiato
f("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
f(",2,1V,B,,EM")              -> doppio one vanilla breve espresso macchiato
f(",1,,,,E")                  -> solo
f(",2,,,,E")                  -> doppio
f(",3,,,,E")                  -> triple espresso

इसे आज़माएं: (R=...)("=-.no.!...(आर इनलाइन को परिभाषित करें फिर परिणाम को एक फ़ंक्शन के रूप में उपयोग करें)
कॉनर ओ'ब्रायन

4

पायथन, 824 815 807 805 बाइट्स

f=lambda s,a=0:a==0and" ".join(" ".join(f(" "+s.split(",")[i],(["X,deC,1/2,half-C,1/3,oneT-C,2/3,twoTs-C,C,caf,T,-third","".join(" %i"%i+f(",%i-tupL,"%i,["1","x","2","y"])for i in range(6,21))+"1,solo,2,doppio,"*('E'in s)+"1,singL,2,doubL, 3,tripL, 4,quadrupL, 5,quintupL,x,1,y,2,S,short,T,tall,G,grande,V,Vnti","V, vanilla,H, hazelnut,10,ten,11,eleVn,12,twelV,13,thirT,14,4T,15,fifT,16,6T,17,7T,18,8een,19,9T,20,twenty,1,one,2,two,3,three,4,four,5,fiV,6,six,7,seVn,8,eight,9,nine,T,teen","Wh,whole-milk,%,two-percent,N,skim,B,breV","x,extra ,-,no ,F,foam,WC,whip,M,MR,R, drizzL","CM,xM,E,espresso,M, macchiato,CP, con panna,A,americano,L,latte,C,cappuccino,x,C"][i]+",C, caramel,M, mocha,L,le ,V,ve").split(","))for i in range(6-(s in",1,,,,E,2,,,,E"))).split())or a and f(s.replace(a[0],a[1]),a[2:])or s

थोड़ा अधिक पठनीय:

def f(s,a=0):
 if a==0:
  a=["X,deC,1/2,half-C,1/3,oneT-C,2/3,twoTs-C,C,caf,T,-third"]
  a+=["".join(" %i"%i+f(",%i-tupL,"%i,["1","x","2","y"])for i in range(6,21))+"1,solo,2,doppio,"*('E'in s)+"1,singL,2,doubL, 3,tripL, 4,quadrupL, 5,quintupL,x,1,y,2,S,short,T,tall,G,grande,V,Vnti"]
  a+=["V, vanilla,H, hazelnut,10,ten,11,eleVn,12,twelV,13,thirT,14,4T,15,fifT,16,6T,17,7T,18,8een,19,9T,20,twenty,1,one,2,two,3,three,4,four,5,fiV,6,six,7,seVn,8,eight,9,nine,T,teen"]
  a+=["Wh,whole-milk,%,two-percent,N,skim,B,breV"]
  a+=["x,extra ,-,no ,F,foam,WC,whip,M,MR,R, drizzL"]
  a+=["CM,xM,E,espresso,M, macchiato,CP, con panna,A,americano,L,latte,C,cappuccino,x,C"]
  return" ".join(" ".join(f(" "+s.split(",")[i],(a[i]+",C, caramel,M, mocha,L,le ,V,ve").split(","))for i in range(6-(s in",1,,,,E,2,,,,E"))).split())
 elif a:
  return f(s.replace(a[0],a[1]),a[2:])
 else:
  return s

Https://repl.it/C8Hz/3 पर डेमो


3

रूबी -plaF, , 975 870 बाइट्स

मुझे इस प्रश्न का मेरे पुराने, लगभग चार-वर्षीय उत्तर पर एक यादृच्छिक उभार मिला, और मेरी टिप्पणी के कारण कि यह कितनी बुरी तरह से चला गया (आप पोस्ट इतिहास की जांच कर सकते हैं यदि आप यह देखना चाहते हैं कि मैंने पहले क्या लिखा था) इसे बेहतर बनाने के लिए प्रेरित किया गया (उर्फ: जमीन से इसे फिर से लिखना) और इसे बंद करके सौ से अधिक बाइट्स करने में कामयाब रहे। अभी भी पायथन जवाब से अधिक लंबा है, लेकिन मैं बहुत खुश हूं कि चीजें अब कैसे बदल गईं।

लगभग 20 बाइट्स कॉमा संरचना पर विशिष्ट भागों को प्रभावित करने के लिए कॉमा संरचना के विशिष्ट भागों को प्रभावित करने के -aF,लिए रीगेक्स पैटर्न को चलाने की कोशिश करने से स्विच करके बचाए गए थे, कॉमा पर इनपुट की एक पंक्ति को स्वचालित रूप से सहेजने के लिए $Fऔर इसे एक साथ सिलाई करने से पहले कुछ तत्वों को संशोधित करने की अनुमति देता है। अंत में पिछले कुछ sub/ gsubआदेशों के साथ आउटपुट चर को संशोधित करना ।

ईमानदारी से, यहां किए गए रेगेक्स रिप्लेसमेंट की संख्या का मतलब है कि इसमें से अधिकांश रेटिना प्रोग्राम हो सकता है, लेकिन मैं रेटिना को इसके लिए पर्याप्त रूप से नहीं जानता।

g=->n,c{n.grep(/^ ?#{c}/i)[0]}
n=%w"0 one two three four five six seven eight nine ten eleven twelve thir four fif";n+=n[6,4]<<'twenty'
$F[1].sub!(/(\d*)(\w)?/){i=eval$1;"#{i&&(%w"0 sing doub trip quadrup quintup"[i]||$1+"-tup")+"le"} #{g[%w"short tall grande venti",$2]if$2}"}
$F[2].gsub!(/(\d*)(\w)/){i=eval$1;"#{i&&n[i]}#{'teen'if(13..19)===i} #{g[%w"vanilla caramel mocha hazelnut",$2]}"}
$F[3].sub!(/.+/){%w"skim whole-milk breve two-percent"[$&.sum%26%4]}
$F[4].gsub!(/(x|-)?(\w+)/){"#{%w"extra no"[$1.ord%2]if$1} #{g[%w"caramelD mochaD whip foam",$2[0]].sub ?D,' drizzle'}"}
$_=$F*' '
sub(/^\S+/){%w"de - half- one-third- two-thirds-"[$&.sum%8]+"caf"}
sub'CP',' con pana'
sub'CM','caramel'+m=' macchiato'
e='espresso'
gsub(/[A-Z]/){g[%w"americano latte cappuccino"+[m,e],$&]}
gsub(/ +/,' ')
$_.strip!
sub(/[sd]...le/){g[%w"doppio solo",$&[0]]}if$_[e]
sub'o '+e,?o

इसे ऑनलाइन आज़माएं!


स्थिति बदलने पर मैं स्वीकृति को अपडेट करूंगा!
लूज़र ने

1
शायद? मैं अन्य दो उत्तरों की तरह सूचना संपीड़न में बहुत अच्छा नहीं हूँ; शायद कोई और होगा जो अजगर को हरा देगा क्योंकि यह एक बहुत ही भोली समाधान है
वैल्यू इंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.