क्या आप पब को संभाल सकते हैं?


23

पृष्ठभूमि

शुक्रवार की दोपहर देर हो चुकी है और आप और आपके दोस्त उस शाम को पब में आने का फैसला करते हैं, लेकिन पब में जाने से पहले आपको लगता है कि आपको कुछ पेय पदार्थ लेने चाहिए। हालाँकि, चीजें जल्दी बढ़ जाती हैं; आपके मित्र शाडॉक पॉमप्लस ने इस सप्ताह की शुरुआत में लॉटरी जीती और विभिन्न पेय पदार्थों के साथ टोकरे लाने का फैसला किया। पब में सुरक्षा बहुत सख्त है, और यदि आप परिसर में प्रवेश करने की कोशिश करने से पहले ओवरकॉन्स करते हैं तो आपको अंदर जाने की अनुमति नहीं है। यद्यपि आप सभी प्रोग्रामर हैं - इसलिए आप चीजों को आंकते हैं, वैसे भी महान बनेंगे।

चुनौती

यदि आप उचित पब सीमा से ऊपर / नीचे हैं, तो आपको अल्कोहल मीटर प्रोग्राम करने की आवश्यकता है जो सत्य / मिथ्या को आउटपुट करता है। इससे पहले कि आप पब में जाते हैं, आप उस राशि और पेय प्रकार को दर्ज करते हैं जो आपने शाम को खाया है, stdinजिस पर आपका माप कार्यक्रम पढ़ता है। यदि यह सच्चाई का उत्पादन करता है, तो आप पब की सीमा से ऊपर हैं और घर पर रहते हैं। यदि यह झूठा उत्पादन करता है, तो आप जाने के लिए अच्छा है।

इनपुट

एक से अधिक पूर्णांक 0जो आपके शरीर के वजन को किलोग्राम में दर्शाते हैं उसके बाद एक नई रेखा। इस इनपुट के बाद निम्नलिखित फॉर्म पर एक अंकों की मात्रा और पेय पदार्थों की एक श्रृंखला होती है:

<amount><amount type>o<beverage type>

बीयर की एक बोतल के लिए यह इस तरह दिखेगा:

1Bob

प्रत्येक इनपुट को एक स्थान से अलग किया जाता है।

इनपुट विनिर्देशन

प्रत्येक पेय में एक इकाई होती है जो इसके कारण होने वाले प्रभाव के अनुरूप होती है। यदि आप दो वज़न से विभाजित अपने वज़न से अधिक इकाइयों का उपभोग करते हैं, तो अब कोई विकल्प नहीं है।

(यह वास्तविकता को प्रतिबिंबित कर सकता है या नहीं भी हो सकता है)

निम्नलिखित वैध पेय पदार्थ हैं और पेय की संबंधित मादक इकाइयाँ हैं:

  • बीयर: b, 1इकाई

  • ऊर्जा पेय: e, 0इकाइयों

  • गर्म सॉस: h, 2इकाइयों (मजबूत सामान)

  • रस (जैविक फल आदि से बना): j, 0इकाइयों

  • रम: r, 6इकाइयों

  • टकीला: t, 7इकाइयों

  • वोदका: v, 6इकाइयों

  • शराब: w, 3इकाइयों

विभिन्न राशि प्रकार हैं:

  • बोतल: B

  • टोकरा: C

  • कांच: G

  • केग: K

  • घूंट: S

प्रत्येक राशि प्रकार में एक गुणक होता है जो इसमें निहित पेय की मादक इकाइयों को गुणा करता है:

  • बोतल: 3

  • टोकरा: 25

  • कांच: 2

  • केग: 50

  • घूंट: 0.2

उत्पादन

यदि आपका उपभोग की गई राशि आपके शरीर के वजन से 2 से ऊपर / नीचे है, तो आपका कार्यक्रम सत्य / मिथ्या को आउटपुट करेगा stdout। यदि उपभोग की गई राशि आपके वजन से 2 के बराबर है, तो आपको झूठा उत्पादन करना चाहिए।

संभव इनपुट और आउटपुट के नमूने

इनपुट

70
1Bob 3Soj

उत्पादन

False

इनपुट

2
1Cov

उत्पादन

1

इनपुट

50
1Cob

उत्पादन

0

इनपुट

100
4Gow 1Koe 1Bov 1Gow 2Sot

उत्पादन

True

बाइट्स जीत में सबसे छोटा कार्यक्रम!


1
1. ऐसा लगता है कि यह oएक प्रारूप चरित्र है, हालाँकि आपने ऐसा विशेष रूप से नहीं कहा है। आपको इसे स्पष्ट करना चाहिए (जैसा oकि जैतून का तेल भी संदर्भित करता है।) 2. यदि हम वास्तव में सीमा पर हैं तो हम क्या उत्पादन करते हैं? या इससे कोई फर्क नहीं पड़ता?
लेवल रिवर सेंट

1
अच्छा निर्णय; मैं पूरी तरह से चूक गया। मैं जैतून का तेल निकाल रहा हूं (जो वैसे भी पीता है?) सीमा के नीचे या इसके बराबर में नकली उत्पादन होना चाहिए। मैं जोड़ दूंगा।
स्वेरापॉटो 20

1
क्या कभी ड्रिंक का एक से अधिक अंक होगा? जैसे 43Gow,?
मॉर्गन थ्रैप

6
+1 अच्छा सवाल है, लेकिन यह शुक्रवार दोपहर है और मुझे एक बियर के लिए बाहर जाने की आवश्यकता है। हो सकता है सोमवार :)
मिकट

1
मैंने इसे किसी भी राशि के लिए वास्तव में करने का इरादा किया - नकारात्मक राशियों को छोड़कर। मुझे नहीं लगता था कि यह अस्पष्ट के रूप में आएगा। मुझे एहसास है कि अगर मैं इसे बदल देता हूं तो यह आपके उत्तर को अमान्य कर देगा, और यही नहीं हम चीजों को कैसे करते हैं। राशि को एक अंक के रूप में स्पष्ट किया जाएगा।
स्वेरापॉटो

जवाबों:


4

सीजेएम, 53 बाइट्स

6:B50:C2*:K4:G.4:S];q"behjrtvwo ""10206763*"er~*]:-U<

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

6:B          e# Push 6 and save it in B.
50:C         e# Push 50 and save it in C.
2*:K         e# Multiply by 2 to push 100 and save it in K.
4:G          e# Push 4 and save it in G.
.4:S         e# Push 0.4 and save it in S.
             e#
             e# The letters representing the types will now push its doubled
             e# (to avoid diving the weight by 2) associated multiplier.
];           e# Clear the stack.
q            e# Read all input.
"behjrtvwo " e# Push the string of beverages, concatenated with "o ".
"10206763*"  e# Push the string of associated units of alcohol and '*'.
er           e# Transliterate. This replaces each beverage letter with the
             e# associated units of alcohol, and each 'o' and ' ' with '*'.
             e#
             e# For example, the input
             e# 70
             e# 1Bob 3Soj
             e# is transformed into
             e# 70
             e# 1B*1*3S*0
             e#
~            e# Evaluate the resulting string.
             e#
             e# For the example this does the following:
             e#   + Push 70.
             e#   + Push 1, push 6, multiply, push 1, multiply.
             e#   + Push 3, push 0.4, multiply, push 0.
             e#
*            e# Multiply the last two (for the lack of a trailing space).
]            e# Collect all results in an array.
:-           e# Reduce by subtraction; subtract all other elements from the
             e# first element (body weight).
U<           e# Compare the result with 0.

8

पायथन 3, 131

अब हम सांप के साथ गोल्फ खेल रहे हैं!

बची हुई 18 बाइट्स शेबंग की बदौलत।
DSM की बदौलत 4 और बाइट्स बचाए।
तज़मन की बदौलत बहुत सारे बाइट्स बचे।

अगर यह एक मूल्य नहीं मिल .find()रहा है, -1तो गाली की शानदार चाल के लिए बहुत धन्यवाद ।

वर्तमान में यह इस पेय प्रारूप को चुनौती के रूप में बताया गया है, ठीक उसी तरह, जैसे कि प्रत्येक पेय का केवल 1 अंक।

w=input()
print(sum([6,50,4,100,.4]['BCGKS'.find(b)]*int(a)*int('1267730'['bhrtvw'.find(v)])for a,b,_,v in input().split())>int(w))

मुझे लगता है कि यह अच्छा हो सकता है यदि आपने डीकट्स को गिरा दिया और प्रिंट स्टेटमेंट में सब कुछ किया। इसलिए, बिट को हटाएं mऔर बदलें , और उसी के साथ । मैं आपके कोड में उन परिवर्तनों के साथ 168 पर पहुँच गया। m[p[-1]][3,25,2,50,.2]['BCGKS'.find(p[-1])]d
केड

4

मिंकोलंग 0.11 , 59 बाइट्स

126763355*25l*2l$:"SKGCBwvtrhb"m(0pI)n(no0qoxo0q**2*-$I)`N.

इसे यहाँ आज़माएँ।

व्याख्या

126763355*25l*2l$:    Pushes the values of the characters
"SKGCBwvtrhb"         Pushes the characters themselves
m                     Merge; interleaves the first and second halves of the stack
(                     Open while loop
 0p                   Put character's value in character's place in the codebox
   I)                 Close while loop when stack is empty
n                     Read in integer (weight)
(                     Open while loop
 n                    Read in integer, ignoring any non-numeric characters
  o0q                 Read in character and get its value from the codebox
     ox               Read in character and dump it
       o0q            Read in character and get its value from the codebox
          **          Multiply the three numbers together
            2*-       Multiply by 2 and subtract from weight
               $I)    Close while loop when input is empty
`                     1 if less than 0, 0 otherwise
 N.                   Output as integer and stop.

मुझे लगता है कि CJam पुरानी हो रही है ... मुझे अपनी भाषा खत्म करने की आवश्यकता है
aoksquirrel

@anOKsquirrel: या यों कहें, आपने अभी इसे पर्याप्त नहीं बनाया है। :)
एल'एंडिया स्ट्रोमैन

या यों कहें, दोनों। : P
aoksquirrel

नहीं, वास्तव में, मैं सिर्फ बुरा हूँ: p
aoksquirrel

3

सीजेएम, 54 बाइट्स

ldlS/{A,s"CbretjvwSBK"+f#A,[25X6T7T6Z.2Z50Y]+f=:*-}/0<

थोड़ा फिजूल और शायद सबॉप्टिमल, लेकिन मुझे लगता है कि यह ठीक है। इसे ऑनलाइन आज़माएं

व्याख्या

ld             Read first line, convert to double
lS/            Read second line, split by space
{...}/         For each item in the second line...
  A,s"..."+f#    Get index in "0123456789CbretjvwSBK", or -1 if not found
  A,[...]+f=     Index into [0 1 2 3 4 5 6 7 8 9 25 1 6 0 7 0 6 3 0.2 3 50 2]
  :*             Take product
  -              Subtract from weight
0<             Check if < 0

ध्यान दें कि संख्यात्मक सरणी के अंत में 2 हैं, जिसका अर्थ है Gho, जो पहली स्ट्रिंग से गायब हैं, 2 से मैप करें।



2

VBA, 251 बाइट्स

Function k(x) As Boolean:q=Split(x):g="b1e0h2j0r6t7v6w3":h="B03C25G02K50S.2":For i=1 To UBound(q):j=j+Left(q(i),Len(q(i))-3)*Mid(h,InStr(h,Mid(Right(q(i),3),1,1))+1,2)*Mid(g,InStr(g,Mid(Right(q(i),3),3,1))+1,1):Next i:If q(0)/2<j Then k=1
End Function

:इसके बजाय न्यूलाइन का उपयोग करने से यह छोटा नहीं होता है, लेकिन यह अधिक गोल्फ दिखता है!

पठनीय प्रारूप

Function b(x) As Boolean
q = Split(x)
g = "b1e0h2j0r6t7v6w3"
h = "B03C25G02K50S.2"
For i = 1 To UBound(q)
j = j + Left(q(i), Len(q(i)) - 3) * _          'Left most digits would be the Quantity
Mid(h, InStr(h, Mid(Right(q(i), 3), 1, 1)) + 1, 2) * _  'Find the Container value in h
Mid(g, InStr(g, Mid(Right(q(i), 3), 3, 1)) + 1, 1)      'Find the Drink value in g
Next i
If q(0) / 2 < j Then b = 1 'Checks if Drunk or not
End Function

प्रिटी श्योर इस गोल्फ हो सकती है। मेरे स्ट्रिंग हेरफेर के साथ Mid(Right())अत्यधिक चिंताजनक लगता है, लेकिन सरणी चलाना हालांकि StrReverseइसे लंबा बनाता है। यदि हम मान लें कि आप किसी भी विशेष पेय का केवल 0-9 ही पी सकते हैं तो हम मुट्ठी भर बाइट बचा सकते हैं

एक स्ट्रिंग के रूप में इनपुट को एक स्थान से अलग वजन के साथ लें क्योंकि VBAखुराक मल्टी लाइन इनपुट का समर्थन नहीं करता है


2

रूबी, 153 बाइट्स

मुझे किसी तरह gsubs से छुटकारा पाने की आवश्यकता है

w=gets.to_i;$><<(eval(gets.chars{|c|c[/[0-9]/]!=p ? ($_[c]+='*'):0}.tr('behjrtvwo BG','10206763*+32').gsub('C','25').gsub('K','50').gsub('S','0.2'))>w/2)

2

जावास्क्रिप्ट, 131 134 139 बाइट्स

यह एक पूर्ण कार्यक्रम है और मूल रूप से मेरे PHP उत्तर का एक रूपांतरण है :

for(c=prompt,b=c(a=c(s=i=0));b[i];i+=2)s+=b[i++]*{B:3,C:25,G:2,K:50,S:.2}[b[i++]]*{b:1,h:2,r:6,t:7,v:6,w:3}[b[++i]]||0;alert(s>a/2)

यह दो मानों का उपयोग करके पढ़ता है prompt और alertके रूप में परिणाम है [true|false]


संपादित करता

  • तार्किक अभिव्यक्ति का उपयोग करके 5 बाइट्स सहेजे गए||0 बजाय साथ पेय पदार्थों की घोषणा 0इकाइयों। उपयोगकर्ता81655 के लिए धन्यवाद ।
  • एक चर में भंडारण और आरंभीकरण को छोटा करके 3 बाइट्स सहेजे गए promptStefnotch को धन्यवाद ।

1
आप को बदलने के द्वारा 6 बाइट्स बचा सकता है ,e:0,j:0}[b[++i]]के लिए }[b[++i]]|0
user81655

@ user81655 कल मैं सोच रहा था, कैसे-कैसे छुटकारा 0पाऊं। खैर, मैंने ऐसा नहीं सोचा था। ||बिटकॉइन ऑपरेटर के बजाय उपयोग करना था । फिर भी 5 बाइट कम। धन्यवाद।
१०

कोई बात नहीं। मैं संभव गैर-पूर्णांक मानों के बारे में भूल गया।
user81655

1
for(s=i=0,a=prompt(),b=prompt();में बदला जा सकता है:for(c=prompt,b=c(a=c(s=i=0));
स्टीफनोट

1
@Stefnotch यह चतुर है। मुझें यह पसंद है। 3 बाइट्स बचाने के लिए धन्यवाद।

1

बैश (+ बीसी + जीएनयू सेड), २०० ४ बाइट्स

read x
read y
y="$(sed 's/^/((/;s/$/))/;s/ /)+(/g;s/o/*/g;s/b/1/g;s/[ej]/0/g;s/h/2/g;s/[rv]/6/g;s/w/3/g;s/t/7/g;s/B/*3/g;s/C/*25/g;s/G/*2/g;s/K/*50/g;s/S/*0.2/g'<<<"$y")"
echo "$y>$x/2"|bc -l

1

जावास्क्रिप्ट, 159 बाइट्स

function b(t){return a={B:3,C:25,G:2,K:50,S:.2,b:1,h:2,w:3,r:6,v:6,t:7},t.split(/\W/).reduceRight(function(t,n,r){return r?n[0]*a[n[1]]*a[n[3]]+t||t:t>n/2},0)}

चूंकि जावास्क्रिप्ट को STDIN तक पहुंचने के लिए एक पुस्तकालय की आवश्यकता होती है, यह कोड केवल एक फ़ंक्शन है जो इनपुट की संपूर्णता को स्वीकार करता है, अर्थात b("100\n4Gow 1Koe 1Bov 1Gow 2Sot")


1
एक नोट के रूप में: prompt()आमतौर पर जावास्क्रिप्टSTDIN में एक वैध विकल्प के रूप में स्वीकार किया जाता है ।
सम्मिलित

1
आप ES6 पर जाकर तीर-ऑपरेटर का उपयोग करके 30 बाइट बचा सकते हैं :। b=t=>(a={B:3,C:25,G:2,K:50,S:.2,b:1,h:2,w:3,r:6,v:6,t:7},t.split(/\W/).reduceRight((t,n,r)=>r?n[0]*a[n[1]]*a[n[3]]+t||t:t>n/2,0))
सम्मिलित

1

पायथन 3, 157 बाइट्स

n,l,d,u=int(input()),input(),"behjrtvwBCGKS",[1,0,2,0,6,7,6,3,3,25,2,50,.2]
print(sum(map(lambda x:int(x[0])*u[d.find(x[1])]*u[d.find(x[3])],l.split()))>n/2)

1

PHP, 163 169 बाइट्स

for($a=fgets(STDIN),$b=fgets(STDIN),$v=[b=>1,h=>2,r=>6,t=>7,v=>6,w=>3,B=>3,C=>25,G=>2,K=>50,S=>.2];$b[$i];$i+=2)$s+=$b[$i++]*$v[$b[$i++]]*$v[$b[++$i]];echo$s>$a/2;

आउटपुट 1या कुछ भी नहीं, सभी परीक्षण मामलों के लिए काम करता है।


मुझे अभी भी आश्चर्य है कि यह गर्म सॉस क्या है, जिसमें 2 इकाइयाँ हैं


संपादित करता

  • पेय और गुणक के लिए दो सरणियों को मर्ज करके और से हटाकर 6 बाइट्स सहेजे0 गए 0.2

1

केग , 165 बाइट्स (SBCS)

¿®w?(: =[_]")0®u(!4/|\0-&:B=[&3*&|:C=[&55**&|:G=[&2*&|:K=[&\2*&|&15/*&]]]]__:b=[&1*&|:e=[&0&|:h=[&2*&|:j=[&0&|:r=[&6*&|:t=[&7*&|:v=[&6*&|&3*&]]]]]]]_©u&+®u)©w2/:©u<.

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

मुझे लगता है जैसे कि एक केजी उत्तर कभी भी अधिक उपयुक्त नहीं रहा है! यह शायद गोल्फ हो सकता है, लेकिन मुझे नहीं लगता कि यह हो सकता है।

व्याख्या की

¿®w                                                                         #Take the weight and store it in a variable
?(: =[_]")                                                                  #Take the second line and remove spaces
0®u                                                                         #Store the units in a variable
(!4/|                                                                       #For every part in the input
\0-&                                                                        #Store the amount of drink in the register
:B=[&3*&|:C=[&55**&|:G=[&2*&|:K=[&\2*&|&15/*&]]]]__                         #Determine the beverage multiplier
:b=[&1*&|:e=[&0&|:h=[&2*&|:j=[&0&|:r=[&6*&|:t=[&7*&|:v=[&6*&|&3*&]]]]]]]_   #Determine the drink
©u&+®u)                                                                     #Add the amount to units
©w2/:©u<.                                                                   #Check the condition and print
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.