सोमवार मिनी-गोल्फ # 7: घटक माप को सरल बनाएं


12

सोमवार मिनी-गोल्फ: लघु चुनौतियों की एक श्रृंखला , प्रत्येक सोमवार को पोस्ट (उम्मीद है!)।
माफ करना देर हो गई; मुझे एक अलग विचार लिखने के माध्यम से 90% रास्ते का एहसास हुआ कि यह एक डुप्लिकेट था।

मेरा परिवार बड़ा है, इसलिए हम बहुत सारा खाना खाते हैं। हमें आम तौर पर पर्याप्त भोजन बनाने के लिए डबल, ट्रिपल या चौगुनी व्यंजनों की आवश्यकता होती है! लेकिन जैसा कि माप को गुणा करना एक दर्द हो सकता है, हमारे लिए ऐसा करने के लिए एक कार्यक्रम करना अच्छा होगा।

चुनौती

आपकी चुनौती एक प्रोग्राम या फ़ंक्शन बनाना है जो माप में एक नंबर एन और एक पत्र एल के रूप में लेता है , और एक ही माप लौटाता है, जितना संभव हो उतना सरल। यहाँ आवश्यक माप इकाइयाँ हैं (सभी अमेरिकी हैं, जैसे मेरा परिवार), और उनके अनुरूप पत्र:

1 cup (c) = 16 tablespoons (T) = 48 teaspoons (t)
1 pound (l) = 16 ounces (o)
1 gallon (g) = 4 quarts (q) = 8 pints (p) = 128 fluid ounces (f)

"जितना संभव हो उतना सरलीकृत" का अर्थ है:

  • संभव सबसे बड़ी माप इकाई का उपयोग करना। प्रत्येक इकाई में 1/4, 1/3, 1/2, 2/3, या 3/4 शेष रह सकते हैं।
  • यदि आवश्यक हो, तो परिणाम को मिश्रित संख्या में बदलना।

उदाहरण के लिए, 4 oचार औंस है, जो 1/4 lएक चौथाई पाउंड बन जाता है । 8 t, 8 चम्मच, बन जाता है 2 2/3 T

विवरण

  • इनपुट को किसी भी उचित प्रारूप में लिया जा सकता है; आउटपुट के साथ भी। ( 1 t, 1,"t", 1\nt, आदि)
  • सुनिश्चित करें कि किसी भी भिन्नात्मक भाग को ठीक से निपटाया गया है। ( 11/4के स्थान पर 1 1/4अनुमति नहीं है।)
  • संख्या हमेशा एक मिश्रित संख्या हो जाएगा, और हमेशा की विभाजक होगा 2, 3या 4(या कोई भी)। (नहीं 1 1/8 T, नहीं 1.5 T, आदि)
  • उपरोक्त के परिणामस्वरूप, कभी भी नीचे की ओर रूपांतरण (जैसे कप से बड़े चम्मच) की आवश्यकता नहीं होती है।
  • पत्र हमेशा ऊपर सूचीबद्ध अक्षरों में से एक होगा ( Tcfglopqt)।

परीक्षण के मामलों

यहाँ एक बड़ी सूची है, उम्मीद है कि सभी प्रकार के मामलों को कवर किया जाएगा:

Input   | Output
--------+--------
1/2 t   | 1/2 t
3/4 t   | 1/4 T
1 t     | 1/3 T
1 1/2 t | 1/2 T
2 t     | 2/3 T
2 1/4 t | 3/4 T
2 1/2 t | 2 1/2 t
3 t     | 1 T
10 t    | 3 1/3 T
16 t    | 1/3 c
5 1/3 T | 1/3 c
8 T     | 1/2 c
16 T    | 1 c
36 T    | 2 1/4 c
1/4 c   | 1/4 c
1024 c  | 1024 c
1 o     | 1 o
4 o     | 1/4 l
5 1/3 o | 1/3 l
5 2/3 o | 5 2/3 o
8 o     | 1/2 l
28 o    | 1 3/4 l
28 l    | 28 l
2 f     | 2 f
4 f     | 1/4 p
8 f     | 1/4 q
16 f    | 1/2 q
32 f    | 1/4 g
64 f    | 1/2 g
128 f   | 1 g
2/3 p   | 1/3 q
1 1/3 p | 2/3 q
2 p     | 1/4 g
1 q     | 1/4 g

स्कोरिंग

हमारी रसोई बहुत छोटी है, इसलिए कोड जितना संभव हो उतना छोटा होना चाहिए, ताकि रसोई अधिक तंग न हो। बाइट्स जीत में सबसे कम वैध कोड; टाईब्रेकर प्रस्तुत करने के लिए जाता है जो पहले अपनी अंतिम बाइट गिनती तक पहुंच गया। विजेता को अगले सोमवार, 9 नवंबर को चुना जाएगा। शुभकामनाएँ!

कृपया ध्यान दें कि यह चुनौती विश्व बिग डोसा की नकल के समान है, लेकिन इसकी नकल नहीं है ।



@AlexA। आह, हाँ, मैं उससे लिंक करना भूल गया था। IMHO, यह पर्याप्त रूप से अलग है: 1) यह एक अलग इनपुट प्रारूप लेता है। 2) आउटपुट काफी अलग है। 3) अधिक रूपांतरण प्रकारों की आवश्यकता है। 3 ए) 1/8 माप का उपयोग नहीं किया जाता है।
ETHproductions

@ETHproductions डुप्लिकेट के बराबर है नकली आत्मा।
आकांक्षा

9
यह कभी भी उचित नहीं होगा, मुझे माफ करना, मीट्रिक इकाइयाँ;)
एड्रियन

5
आपके गोल्फ कम और कम होते जा रहे हैं।
डेनिस

जवाबों:


2

गणितज्ञ, 349 334 330 322 बाइट्स

यह उत्तर खंड थोड़ा अकेला महसूस हुआ। तो उह, यहाँ मेरा प्रयास है। परीक्षण मामलों में इनपुट दिया जाना चाहिए।

n=ToExpression@StringSplit@InputString[];i=#~Mod~1&;b=#&@@n;If[Length@n==3,{x,y,z}=n,{x,y,z}=If[IntegerQ@b,{b,0,Last@n},{0,b,Last@n}]];v={0,1/4,1/3,1/2,2/3,3/4};s=<|T->16,t->3,o->16,q->4,p->2,f->16|>;r=<|T->c,t->T,o->l,f->p,p->q,q->g|>;If[v~MemberQ~i[a=(x+y)/s@z],{x,y,z}={Floor@a,i@a,r@z}]~Do~3;Print@Row[{x,y,z}/. 0->""]

व्याख्या

पहले उपयोगकर्ता इनपुट प्राप्त करें, उस इनपुट को व्हॉट्सएप पर विभाजित करें, और उसे असाइन करें ni=#~Mod~1&एक फ़ंक्शन बनाता है जो किसी संख्या का आंशिक भाग प्राप्त करता है, इसे 1 मॉड करके। b=#&@@nबस में पहला आइटम मिलेगा n; यह पहली जगह तक सब कुछ होगा।

यदि n3 तत्व लंबा है, तो इसका मतलब है कि हमारे पास एक पूर्णांक, एक अंश और एक इकाई है। {x,y,z}=nअसाइन किया जाएगा x, yऔर zतीन भाग होंगे n। अन्य मामला यह है कि n3 तत्व लंबे नहीं हैं; इसका मतलब है कि इसके बजाय 2 तत्व लंबे होंगे। ऊपर से सुसंगत रहने के लिए, हम xपूर्णांक भाग, yअंश और zइकाई बनना चाहते हैं । तो इस मामले में, हमें जाँच करने की आवश्यकता है:

  • यदि b(का पहला तत्व n) एक पूर्णांक है, तो x=b, y=0और z=Last@n(अंतिम तत्व n)।
  • यदि bपूर्णांक नहीं है, तो इसका अर्थ है कि हमारे पास केवल पूर्णांक नहीं है। इसलिए हम स्वैप करना चाहते हैं xऔर yऊपर से; इसके बजाय, x=0, y=b, और zइसके बाद के संस्करण के रूप में ही है।

अब हमें कुछ सूचियाँ सेट करने की आवश्यकता है:

v = {0, 1/4, 1/3, 1/2, 2/3, 3/4} स्वीकार्य अंशों की सूची है, जैसा कि प्रश्न में कहा गया है।

s = <|T -> 16, t -> 3, o -> 16, q -> 4, p -> 2, f -> 16|>एक संघ (कुंजी-मूल्य जोड़ी, पायथन में एक शब्दकोष की तरह) है जो किसी दिए गए इकाई की जरूरत की राशि का प्रतिनिधित्व करता है ताकि अगली सबसे बड़ी इकाई में से एक "ऊपर" जा सके। उदाहरण के लिए, o -> 16क्योंकि 1 पाउंड तक जाने से पहले 16 औंस की आवश्यकता होती है।

r = <|T -> c, t -> T, o -> l, f -> p, p -> q, q -> g|>वह संघ है जो वास्तव में यह दर्शाता है कि अगली इकाई क्या है। उदाहरण के लिए, T -> cTablespoons से बड़ी एक इकाई का मतलब है कप।

If[v~MemberQ~i[a = (x + y)/s@z], {x, y, z} = {Floor@a, i@a, r@z}]~Do~3

अब, हमें एक इकाई के ऊपर जाने की अधिकतम संख्या 3 है; वह द्रव औंस (f) -> पिंट्स (p) -> क्वार्ट्स (q) -> गैलन (g) होगा। तो, अब हम निम्नलिखित 3 बार करते हैं:

  • जोड़ें xऔर y, (पूर्णांक और आंशिक भागों)
  • से sऊपर संघ, तत्व मिल z; वह है, वर्तमान इकाई का उपयोग, और उस एसोसिएशन में संबंधित मूल्य प्राप्त करें।
  • उस मान से विभाजित (x + y) करें, जो हमने ऊपर दिया है, उसे असाइन करें a, फिर उसका अंश प्राप्त करें।
  • यदि वह भाग सूची में है v, तो हम एक इकाई तक जा सकते हैं; सेट xकरने के लिए aगोल नीचे (पूर्णांक भाग), सेट yके आंशिक हिस्से के लिए aहै, तो संघ का उपयोग rवर्तमान यूनिट के साथ zसेट अगले इकाई उठना, और कहा कि करने के लिए z
  • यदि इसके बजाय इसका हिस्सा नहीं हैv , तो हम कुछ भी नहीं करते हैं, क्योंकि इसे सरल नहीं किया जा सकता है।

3 बार कर लेने के बाद, हम परिणाम का प्रिंट आउट लेते हैं:

Print@Row[{x,y,z}/. 0->””]

यह बस {x,y,z}एक पंक्ति में प्रिंट करता है , लेकिन किसी भी शून्य को बदल देता है (यदि कोई पूर्णांक नहीं है, या कोई अंश नहीं है), एक खाली स्ट्रिंग के साथ, ताकि वे प्रिंट न करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.