फ्रेड का पानी का बिल


9

फ्रेड एक अर्ध-मैत्रीपूर्ण आदमी है, लेकिन वास्तव में वह मतलबी है।

इस वजह से, फ्रेड लॉस एल्टोस, सीए के एक छोटे से अपार्टमेंट में अकेले रहता है। फ्रेड इसलिए मतलबी है क्योंकि वह पानी को लेकर बहुत खास है। इसलिए, उसे यह पता लगाने में आपकी मदद चाहिए कि उसका पानी का बिल क्या है।

आपका काम एक फ़ंक्शन या प्रोग्राम लिखना है जो इनपुट के रूप में उपयोग किए गए पानी की मात्रा (जो हमेशा पूर्णांक होता है) को दिए गए अपने पानी के बिल को वापस करता है।

पानी की खपत टियर में आती है। इसका मतलब है कि पानी की मात्रा के आधार पर कीमतों की सीमाएं हैं।

ये टियर, उनकी कीमतें, और उनके अनुरूप पानी की मात्रा हैं:

Tier I
   First 10 Ccf: $3.8476/Ccf
Tier II
   Next 17 Ccf: $4.0932/Ccf
Tier III
   All subsequent water: $4.9118/Ccf

के लिए n (CCF) घन फीट के सैकड़ों, निम्नलिखित अतिरिक्त प्रभार के रूप में अच्छी तरह से देखते हैं:

CPUC fee: 1.5% of above charges
LIRA quantity surcharge: $0.047*n
PBOP amoritization surcharge: $0.004*n

टियर I, टियर II, टियर III, CPUC, LIRA और PBOP फीस का योग कुल पानी का बिल है। यह योग आपको दो दशमलव स्थानों पर राउंड कंसोल पर वापस या प्रिंट करना चाहिए।

यहाँ दो उदाहरण हैं:

Input: 15
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: (15-10)*4.0932 = 20.466
Tier III: 0*4.9118 = 0
Tiers sum: 58.942
CPUC: 1.5% of 58.942 = 0.88413
LIRA: 0.047*15 = 0.705
PBOP: 0.004*15 = 0.06
Total sum: 58.942 + 0.88413 + 0.705 + 0.06 = 60.59113
...
Output: 60.59

Input: 100
... Calculations which you do not need to output but here to help explain:
Tier I: 10*3.8476 = 38.476
Tier II: 17*4.0932 = 69.5844
Tier III: (100-10-17)*4.9118 = 358.5614
Tiers sum: 466.6218
CPUC: 1.5% of  = 6.999327
LIRA: 0.047*100 = 4.7
PBOP: 0.004*100 = 0.4
Total sum: 478.721127
...
Output: 478.72

यह कोड गोल्फ है इसलिए बाइट्स जीत में सबसे छोटा कोड है!


कृपया जांच लें कि मेरा संपादन आपकी मंशा से मेल खाता है।
msh210

हां धन्यवाद @ msh210, जो मेरे पास था उससे बहुत स्पष्ट है
डैनियल

यदि आप डाउन-वोटिंग पर प्रतिष्ठा बर्बाद करने को तैयार हैं, तो आप कम से कम यह बता सकते हैं कि क्यों?
डैनियल

@Dappapp कुछ लोगों को सिर्फ चुनौती पसंद नहीं आ सकती है। वहां आप कुछ नहीं कर सकते। जो इसके लायक है, उसके लिए डाउनवोटिंग चुनौतियां, डाउनवॉटर की प्रतिष्ठा से घटती नहीं हैं - केवल उत्तर।
Mego

क्या हमें गैर-पूर्णांक को संभालना है n?
पुरकाकूदरी

जवाबों:


1

पायथ, 55 41 बाइट्स

.R+s*Vv.",9t¬®Ï0NwÝ"lMcUQ,T27*.051Q2

कोड में अनपेक्षित वर्ण हैं, इसलिए यहां एक xxdहेक्सडंप है।

00000000: 2e52 2b73 2a56 762e 222c 3904 1874 c2ac  .R+s*Vv.",9..t..
00000010: c2ae c280 c293 c38f 301c 4e77 c39d 226c  ........0.Nw.."l
00000020: 4d63 5551 2c54 3237 2a2e 3035 3151 32    McUQ,T27*.051Q2

व्याख्या

  1. ."…"एक पैक्ड स्ट्रिंग है जिसमें सम्‍मिलित है 3.8476,4.0932,4.9118
  2. vटपल का मूल्यांकन करता है (3.8476, 4.0932, 4.9118)। ये टीयर की कीमतें सीपीयू के साथ गुणा की गई हैं।
  3. UQरेंज उत्पन्न करता है 0n-1
  4. c,T27बंटवारे कि सीमाएं 10 और 27 पर होती हैं, अगर सीमा बहुत कम है तो अंत में अतिरिक्त खाली सूचियों के साथ।
  5. lM प्रत्येक भाग की लंबाई पाता है, प्रत्येक स्तर के लिए पानी की मात्रा देता है।
  6. *V गुणकों कि टियर 2 से tuple के लिए कीमतों को पाने के लिए।
  7. s परिणाम बताते हैं।
  8. +*Q.051इनपुट को 0.051 से गुणा करता है, यानी LIRA + PBOP।
  9. .R... 2परिणाम को 2 दशमलव तक पूरा करता है।

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


2

मेथेमेटिका, 83 76 69 बाइट्स

1.015{3.8476,.2456(b=Boole)[#>10],.8186b[#>27],51/1015}&~Array~#~Total~2~Round~.01&

बेनामी फ़ंक्शन जो पहले कॉलम में तीन स्तरों की एक सरणी का निर्माण करता है और LIRA और PBOP चौथे कॉलम में एक मनमाना-सटीक संख्या के रूप में प्रतिनिधित्व करता है। पूरी बात से गुणा किया जाता है 1.015और सरणी के सभी तत्वों को संक्षेप और गोल किया जाता है .01। चूंकि 51/1015*1.015वांछित 0.051होगा उत्पादन ओपी में विनिर्देश के रूप में बिल्कुल सटीक है।

एक छोटा सा समाधान, 76 बाइट्स में , जैसा कि मैंने पर्ल समाधान के तहत अपनी टिप्पणी में सुझाया है

{3.956314,.249284(b=Boole)[#>10],.830879b[#>27]}&~Array~#~Total~2~Round~.01&

जहां 1.015शुरू से कीमतों में फैक्टर होता है और फिर LIRA और PBOP को पहले टियर के शीर्ष पर जोड़ा जाता है।

73 बाइट्स (लेकिन मैं अपनी बाइट-काउंट को अपडेट करने के लिए अनिच्छुक हूं क्योंकि यह सीधे पर्ल समाधान के काफी करीब है):

69 बाइट्स - आह क्या बिल्ली, गोल्फ कुछ प्रयास भी लिया।

.01Round[395.6314#+{24.9284,83.0879}.(UnitStep[#-1]#&/@{#-10,#-27})]&

फ्लोटिंग पॉइंट एरर के बारे में EDIT:
मेरे उत्तर के पहले तीन पुनरावृत्तियां उनके दशमलव प्रतिनिधित्व में वास्तव में सटीक हैं, क्योंकि इसमें शामिल सभी गुणांक में दशमलव प्रतिनिधित्व समाप्त होता है। हालांकि, चूंकि गुणांक स्पष्ट रूप से तैरता है, बाइनरी में संग्रहीत और गैर-समाप्ति बाइनरी अभ्यावेदन होने के कारण, बाइनरी प्रतिनिधित्व के कम से कम महत्वपूर्ण अंकों में त्रुटियों को जमा करने के लिए बड़े पर्याप्त इनपुट शुरू हो जाएंगे। मुझे लगता है, जब फ्लोट इतना बड़ा है, कि यह दशमलव बिंदु के दाईं ओर केवल 3-4 अंकों में फिट होता है, तो हम लगभग 1 प्रतिशत की त्रुटियों की उम्मीद कर सकते हैं। सटीक उत्तर के लिए नीचे देखें ।

72 बाइट्स, कुछ हद तक प्रतिरक्षा अशुद्धियों को तैरने के लिए

.01Round[{3956314,249284,830879}.(UnitStep[#-1]#&)/@(#-{0,10,27})/10^4]&

अग्रणी द्वारा गुणा कई .01अंतिम चरण में किया जाता है। उस बिंदु तक, सभी गणना पूर्णांकों के साथ की जाती हैं। इसका मतलब है, कि अगर .01छोड़ दिया गया है, तो एक सटीक परिणाम होगा, लेकिन डॉलर के बजाय सेंट में व्यक्त किया गया है। बेशक, एक फ्लोट द्वारा गुणा पूरे मामले को एक फ्लोट में बदल देता है, और, जैसा कि उल्लेख किया गया है, यह 64 बिट में फिट होने के लिए पर्याप्त छोटा होना चाहिए और अभी भी सटीक होना चाहिए .01


2

05AB1E, 64 58 51 बाइट्स

0T27¹)vy¹‚ï{0è})¥•_ÄÄ™wu24@•2'.:7ô)ø€PO¹"5.1"*+ïTn/

व्याख्या की

0T27¹)                                               # list of price brackets
      vy¹‚ï{0è})                                     # min of each with input
                ¥                                    # calculate deltas to get amounts within each bracket
                 •_ÄÄ™wu24@•2'.:7ô                   # list of price rates with CPUC included
                                  )ø                 # zip with amounts for each rate
                                    €PO              # multiply amounts by their rates and sum
                                       ¹"5.1"*+      # add LIRA/PBOP
                                               ïTn/  # round to 2 decimals

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


1

पर्ल 5, 73 बाइट्स

स्पष्ट समाधान। -neइसके बजाय 72 बाइट्स, प्लस 1 के लिए -e

printf'%.2f',$_*3.956314+($_-10)*($_>10)*.249284+($_-27)*($_>27)*.830879

LLLAMnYP के लिए 5 बाइट्स धन्यवाद सहेजे गए । धन्यवाद!


मेरी पिछली टिप्पणी को फिर से संपादित करें, यह संपादन वास्तव में आपके द्वारा मूल में मौजूद फ्लोटिंग पॉइंट त्रुटियों को समाप्त करने के लिए निकला है ।
LLAMAMYP

@LLAMnYP, निश्चित रूप से किसी भी सन्निकटन में इनपुट के उच्च पर्याप्त मूल्य के लिए एक त्रुटि होनी चाहिए। उम्मीद है कि बाध्य पर्याप्त है कि ओपी को परवाह नहीं है (क्योंकि यह एक व्यक्ति के निवास के लिए पानी की अनुचित मात्रा है)।
msh210 14

@ msh210 आप फ्रेड की कहानी नहीं जानते हैं !!
बिल्ली

नहीं, क्योंकि आप परिमित दशमलव प्रतिनिधित्व के साथ संख्याओं को गुणा और जोड़ रहे हैं। बेशक, जब आप उन्हें तैरते हुए दर्शाते हैं, तो उनके पास इतना बड़ा बाइनरी प्रतिनिधित्व नहीं हो सकता है। आप तब त्रुटियों की उम्मीद कर सकते हैं जब फ्लोट प्रतिनिधित्व दशमलव के दाईं ओर केवल 3-4 अंकों के लिए अनुमति देता है। मेरी पोस्ट के तल पर मेरा "बोनस-जवाब" इस पर काबू पा लेता है, बहुत अंतिम चरण तक पूर्णांक का उपयोग करते हुए (जो सेंट को डॉलर में परिवर्तित करता है)। यदि मैं गुणा गुणा .01करना चाहता था , तो यह तब तक सही रहेगा जब तक पूर्णांक संग्रहीत किया जा सकता है।
LLLAMnYP

1

Oracle SQL 11.2, 151 बाइट्स

SELECT ((DECODE(SIGN(:1-10),1,10,:1)*3.8476)+(DECODE(SIGN(:1-27),1,17,:1-10)*4.0932)+(DECODE(SIGN(:1-27),-1,0,:1-27)*4.9118))*1.015+:1*0.051 FROM DUAL;

संयुक्त राष्ट्र के golfed

SELECT ((DECODE(SIGN(:1-10),1,10,:1)*3.8476)+
       (DECODE(SIGN(:1-27),1,17,:1-10)*4.0932)+
       (DECODE(SIGN(:1-27),-1,0,:1-27)*4.9118))*1.015+
       :1*0.051
FROM DUAL

एक बाइट बचाने के लिए SELECTऔर बीच की जगह से छुटकारा पाएं ((DECODE। नामित तालिका का उपयोग करके अधिक 10 बाइट्स सहेजें! 7 कॉलोनों को हटाकर एक चार कॉलम नाम के साथ-साथ एक चार टेबल नाम का उपयोग करके।
जियाकोमो गारबेलो 12

@ गियाकोमो गैराबेलो: अंतरिक्ष को हटाना हमेशा अशक्त के साथ अशक्त और SQLDeveloper के साथ एक त्रुटि देता है। तालिका तालिका स्क्रिप्ट 10 से अधिक बाइट्स जोड़ता है।
Jeto

आपको रचना लिपि को जोड़ना नहीं है ... यहाँ देखें
जियाको गारबेलो

1

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

x=>(x>27?(x-27)*4.985477+109.681:(x>10?(x-10)*4.1546+39.053:x*3.9053))+.051*x

संयुक्त राष्ट्र के golfed

f = x => {
  if (x > 27) {
    res = (x - 27) * 4.985477 + 109.681306
  } else if (x > 10) {
    res = (x - 10) * 4.154598 + 39.05314
  } else {
    res = x * 3.905314
  }
  return res + 0.051 * x
}

मैंने LIRA और PBOP गुणांकों में फैक्टर किया। अतिरिक्त 1.5% अंत में जुड़ जाता है।

शायद गोल्फ के मामले में सबसे कुशल समाधान नहीं है, लेकिन पर्ल से कुछ अलग है।

फ्लोटिंग पॉइंट एरर बड़ी संख्या के साथ होना चाहिए और प्रत्येक गुणांक में 1 या 2 अतिरिक्त बाइट जोड़कर ठीक किया जा सकता है।

f=x=>(x>27?(x-27)*4.985477+109.681:(x>10?(x-10)*4.1546+39.053:x*3.9053))+.051*x

console.log(f(15))
console.log(f(100))
console.log(f(200000))


आपको इसके ()आसपास की आवश्यकता नहीं है x>10?:, ?:दाएं-से-बाएं सहयोगी हैं। मुझे लगता है कि आप कुछ बाइट्स को भी बढ़ा सकते हैं जैसे कि पेरेंटेटिकल को गुणा करके (x-10)*4.154598+39.05314समान x*4.154598-41.54598+39.05314बराबरी x*4.154598-2.49284
नील

1

आर , 52 बाइट्स

approxfun(c(0,10,27,10^6),c(0,39.56,111.06,5036475))

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

0,10,27 और 10 ^ 6 पर मेरे पिछले उत्तर के मूल्यों के आधार पर, एक रैखिक सन्निकटन फ़ंक्शन उत्पन्न करता है। पकड़: इनपुट पर ऊपरी सीमा 10 ^ 6 है।

approxfun(साथ ecdf, stepfun, splinefun, आदि) के कई अच्छा सुविधाओं में से एक है R


0

VBA, 88 बाइट्स

Function W(V):W=Round(.051*V+.203*(V*19.238-(V-10)*(V>10)*1.228-(V-27)*(V>27)*4.093),2)
 

आधार दर और उच्च उपयोग अंतर दर 5 से गुणा की गई हैं, और सीपीसी शुल्क गुणक 5 (0.203) से विभाजित किया गया है।

वीबी संपादक एक End Functionलाइन जोड़ देगा , यही वजह है कि टर्मिनल लाइन फीड शामिल है।


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