एक टिप की गणना करें


16

आप और एक दोस्त एक बार में चलते हैं। बारटेंडर आपके साथ अच्छा व्यवहार करता है, इसलिए आप उसे टिप देने का फैसला करते हैं। तो आप अपने भरोसेमंद पॉकेट कंप्यूटर को बाहर निकालते हैं और आपके लिए एक टिप की गणना करने के लिए एक त्वरित प्रोग्राम लिखते हैं क्योंकि इसका कोई कैलकुलेटर नहीं बनाया गया है। लेकिन रुकें! आपकी ऑपरेटर कुंजियाँ टूट गई हैं! आपका कार्य किसी भी इनपुट राशि के लिए 20% टिप की गणना करना है। परीक्षण इनपुट xx.xx के रूप में होगा जैसे 20.96। ये नियम हैं:

  • गणितीय रूप संचालकों में निम्नलिखित का कोई उपयोग नहीं: + - * / %(धन्यवाद पश्चिम पश्चिम)
  • प्रतिशत कार्यों या एपीआई में निर्मित का कोई उपयोग नहीं
  • नेटवर्क तक पहुंच नहीं है
  • evalया समान का कोई उपयोग नहीं
  • कोई Windows कैलक्यूलेटर (हाँ लोगों ने इसके साथ उत्तर दिया है)
  • टिप फ़ंक्शंस में निर्मित नहीं (ऐसा नहीं है कि किसी भी भाषा में एक होगा)

आउटपुट को दो दशमलव स्थानों तक गोल किया जाना चाहिए।

स्कोर बाइट्स में लंबाई पर आधारित है।

-20% अगर आपका प्रोग्राम किसी भी टिप राशि को स्वीकार कर सकता है। राशि के लिए इनपुट xx के रूप में दिया जाएगा जैसे 35 नहीं 0.35


5
@mniip: एक टिप एक विचित्र अतिरिक्त राशि है जो आपको एक रेस्तरां में भुगतान करने की उम्मीद है जो आधिकारिक मूल्य का हिस्सा नहीं है। मुझे नहीं पता कि क्या वे रूस में ऐसा करते हैं।
user2357112

5
ओह, वह नई पीढ़ी ... अगर मैं मानसिक रूप से 5 से संख्या को विभाजित नहीं कर सकता तो मैं कागज और कलम का उपयोग
करूंगा

4
@VisioN नोट: पांच से विभाजित करना 10 से विभाजित करने के बराबर है, फिर 2 से गुणा करना और दोनों ही बहुत आसान मानसिक संचालन होना चाहिए।
user12205

1
क्या कोई नियमों को स्पष्ट कर सकता है: यदि आप उन ऑपरेटरों का उपयोग नहीं करते हैं, तो निषिद्ध संचालन का उपयोग कर रहा है? यदि आप उपयोग नहीं करते तो क्या गुणा की अनुमति है *?
य्प्निपन

2
@ क्या यह वास्तव में एक डुप्लिकेट है? क्योंकि यह जोड़ नहीं है।
मिलो

जवाबों:


18

जावास्क्रिप्ट 81

संपादित करें : परिणाम अब एक वास्तविक दौर है, न कि काट दिया गया।

यहां किसी भी गणित का उपयोग न करें, बस स्ट्रिंग हेरफेर और बिटवाइज़ ऑपरेटर।
सभी +चार परिवर्तन करने के लिए स्ट्रिंग संयोजन, या स्ट्रिंग हैं
(X) x.xx प्रारूप में किसी भी xx.xx इनपुट और आउटपुट के लिए काम करता है

s='00'+(prompt().replace('.','')<<1);(+s.replace(/(.*)(...)/,'$1.$2')).toFixed(2)

ट्रिक बताई: 20% को 10 से विभाजित किया गया और 2 से गुणा किया गया।

  • बाईं ओर डॉट को स्थानांतरित करके 10 से एक विभाजन बनाएं (स्ट्रिंग हेरफेर)
  • बिट्स को बाईं ओर ले जाकर प्रत्येक भाग को 2 से गुणा करें (बिटवाइज़ ऑपरेशन)

जब इनपुट होता 99.99है 19.998, तो यह रिटर्न होता है , इसलिए यह ओपी के अनुसार "दो दशमलव स्थानों तक गोल नहीं होता है"।
जॉयबिट्स

2
उम्म यह एक लंबा समाधान है, लेकिन इसमें 12 उत्थान हैं। कोड-गोल्फ की वोटिंग के साथ क्या हो रहा है?
जस्टिन

@Quincunx हाँ आप सही हैं इसकी लोकप्रियता प्रतियोगिता नहीं है!
मुकुल कुमार

चूंकि यह एक कोड-गोल्फ है, मैं शायद जीत नहीं पाऊंगा, लेकिन इसका मतलब यह नहीं है कि लोग मेरे समाधान को पसंद नहीं कर सकते ... अक्सर, कोड-गोल्फ विजेता वे नहीं होते हैं जो सबसे अधिक अपवित्र होते हैं।
माइकल एम।

@ n @hlya̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, पूरी तरह से! इस बारे में बताने के लिए शुक्रिया। अब तय है :)
माइकल एम।

6

जे (9 अक्षर)

J में एक संक्षिप्त उत्तर:

^.(^.2)^~ 32

1
... और मैं नहीं बोलता जे। यह क्या कहता है?
कज़िन कोकीन

यह कहता है: पावर लॉग (२) में ३२ गणना; आमतौर पर, घातांक सही होता है, ^लेकिन यहां ~यह इंगित करता है कि आदेश उलटा होना चाहिए; (^.2)लॉग (.2) है, और आरंभिक ^.जिसे अंतिम रूप से निष्पादित किया जाता है वह स्पष्ट रूप से गणना करने वाली हर चीज का लघुगणक है: इस प्रकार लॉग (32 ^ लॉग (.2))
थॉमस बरूचेल

4

शुद्ध बैश, 50 43 चरस

बहुत यकीन है कि यह हरा दिया जाएगा, लेकिन यहाँ एक शुरुआत है:

a=$[10#${1/.}<<1]
echo ${a%???}.${a: -3:2}

टिप्पणियों के अनुसार:

  • /यहां एक डिवीजन ऑपरेटर नहीं है, यह एक पैटर्न प्रतिस्थापन पैरामीटर विस्तार का हिस्सा है
  • % यहाँ एक मॉडुलो ऑपरेटर नहीं है, यह एक पैरामीटर विस्तार का हिस्सा है
  • - यहाँ एक घटाव ऑपरेटर नहीं है, यह एक निषेध है, जिसे टिप्पणियों के अनुसार अनुमति दी गई थी

आउटपुट:

$ ./20pct.sh 0.96
.19
$ ./20pct.sh 20.96
4.19
$ ./20pct.sh 1020.96
204.19
$ 

मुझे लगता है कि मैं वहाँ एक आगे स्लैश देखता हूं।
मिलो

@ मायो जो बैश पैरामीटर विस्तार/ का हिस्सा है न कि डिवीजन ऑपरेटर। अनुमति है या नहीं?
डिजिटल ट्रामा

1
मैं इसकी अनुमति
दूंगा

1
-3 एक निषेध के रूप में कार्य करता है, एक घटाव नहीं ... @ मिलो, आपको नकारात्मकता और अन्य तरीकों के लिए खाते की आवश्यकता है जो इन ऑपरेटरों को उनके गणितीय समकक्षों से अलग किया जा सकता है ... उदाहरण के लिए + जावास्क्रिप्ट में एक concatenator के रूप में उपयोग किया जा सकता है। .. क्या मैं एक सुझाव दूं? बदलें "निम्नलिखित ऑपरेटरों की कोई उपयोग: + - * /%" के लिए "उनके गणितीय रूप में निम्नलिखित ऑपरेटरों की कोई उपयोग: + - * /%"
WallyWest

2
@ शैतान का वकील खेलना, यहाँ उपेक्षा अभी भी एक गणितीय ऑपरेटर है। शायद "गैर-गैर-गणितीय रूप में निम्नलिखित ऑपरेटरों का कोई उपयोग नहीं: + - * /%"; ;-)
डिजिटल ट्रामा

4

पायथन 98 * 0.8 = 78.4

d=`len('X'*int("{}{:>02}".format(*(raw_input()+".0").split('.')))*2)`;print'%s.%s'%(d[:-3],d[-3:])

पायथन 74 (बोनस के बिना)

d=len('X'*int(raw_input().replace('.',''))*2);print'%s.%s'%(d[:-3],d[-3:])

ध्यान दें

  • + स्ट्रिंग संघनन के लिए प्रयोग किया जाता है
  • * स्ट्रिंग की प्रतियां बनाने के लिए उपयोग किया जाता है

Ungolfed

def tip():
    amount = raw_input()
    #Add an extra decimal point so that we can accept integer
    #amount
    amount += ".0"
    #Split the integer and decimal part
    whole, frac = amount.split('.')
    #Multiply amount by 100 :-)
    amount = "{}{:>02}".format(whole, frac)
    #Create amount copies of a character
    st = 'X'*amount
    #Double it
    st *= 2
    #Calculate the Length
    d = len(st)
    #Display the result as 3 decimal fraction
    print'%s.%s'%(d[:-3],d[-3:])

ध्यान दें

प्रश्न की भावना में, मेरा मानना ​​है कि निम्नलिखित समाधान हालांकि प्रश्न के सभी नियमों का पालन है

अजगर ४१

print __import__("operator")(input(),0.2)

आखिरकार

यदि आप जोर देते हैं कि गणितीय प्रतीकों को निषिद्ध है, तो वह एक 90 वर्ण समाधान है

पायथन 90 (बिना किसी गणितीय प्रतीक के)

print' '.join(str(int(raw_input().replace(".",""))<<1)).replace(' ','.',1).replace(' ','')

1
जैसा कि पहले ही कहा गया है, *और +टूटे हुए कुंजी (जो भी आप उनके लिए उपयोग करते हैं) टूट गए हैं।
थॉमस बरूचेल

2
@ @רו אל No use of the following in mathematical form operators: + - * / % (Thanks Wally West):। दूसरे शब्दों में, प्रश्न को फिर से परिभाषित करने की आवश्यकता है। और मैंने उन्हें गणितीय रूप में उपयोग नहीं किया है
अभिजीत

ठीक है, लेकिन उस मामले में, एपीएल समाधान के नीचे वास्तव में उचित नहीं था, क्योंकि उस कारण से कोई अन्य समाधान नहीं किया गया है।
थॉमस बरूचेल

आपके उत्तर में धन की न्यूनतम राशि, जैसे कि समस्या है 0.05
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

आप `input`इसके बजाय (शामिल बैकटीक्स) का उपयोग कर सकते हैं raw_input
nyuszika7h

4

APL (9 वर्ण, 7 वर्णों के साथ नया कोड, 13 वर्णों के साथ नियत)

दी गई राशि का 20% गणना करें।

{⍟⍵*⍨*.2} 32

APL *में घातीय ऑपरेटर है।

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

लेकिन उसके लिए एक फ़ंक्शन का उपयोग क्यों करें? यह नया संस्करण देखें:

⍟(*.2)* 32

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

कृपया, डाउनवोटिंग से पहले, *इसे एक कुंजी के रूप में मना नहीं किया गया है और इसका मतलब यहाँ गुणा नहीं है।

ठीक है, यहाँ 2 डेसीमल (Dyalog APL) का संस्करण है:

⎕PP←2⋄⍟(*.2)* 32.01

2
एक्सपेंसेशन अभी भी एक गणितीय ऑपरेशन है, और *चुनौती के नियमों के अनुसार किसी भी गणितीय रूप में अस्वीकृत है।
टोनी एलिस

यहाँ एक्सपोज़रिएशन की मनाही नहीं है और अन्य समाधान वास्तव में इसका उपयोग करते हैं, लेकिन आप इस तथ्य के विषय में सही हैं कि *एक कुंजी के रूप में निषिद्ध है और इसके गणितीय अर्थ के रूप में नहीं।
थॉमस बरूचेल

@ टॉनी एच। कृपया, आप अपने डाउनवोट को हटा सकते हैं, क्योंकि स्पष्ट रूप से अन्य समाधानों में सभी टिप्पणियां अंततः ऐसे कुंजीशब्दों को स्वीकार करने लगती हैं, जब तक कि उन्हें प्रारंभिक सूची में निषिद्ध गणितीय कार्यों के लिए उपयोग नहीं किया जाता है।
थॉमस बरुचेल

1
@ ברו אל यह मेरी समझ है कि गणितीय अर्थ से संबंधित किसी भी तरह से तारांकन का उपयोग निषिद्ध है, जिसमें घातांक भी शामिल है। इस प्रकार दूर-दूर तक उपयोग करने वाले हर दूसरे उत्तर में एक भाषा है जो ^ऐसे ऑपरेटर के लिए कैरट ( ) का उपयोग करता है , या फ़ंक्शन कॉल का उपयोग किया जाता है। ओपी द्वारा कोई विनिर्देश नहीं है जो *केवल तभी अस्वीकृत है जब इसका उपयोग गुणन के संदर्भ में किया जाता है। मुझे संदेह है कि अगर ओपी इस पर शासन करने के लिए, हम में से एक को चुनौती के नियमों का गलत अर्थ निकालने और भ्रम को दूर करने के लिए मददगार होगा।
टोनी एलिस

1
शायद ×और ÷अनुमति दी जाती है, जिन्हें सूचीबद्ध नहीं किया गया है।
मारिनस

4

आर, 30 27 36 34

2 दशमलव स्थानों पर गोल करने के लिए अद्यतन किया गया

प्लेनैपस के लिए धन्यवाद 2 वर्ण सहेजे गए

एक वेक्टर को 0 से x तक बनाता है और दूसरा तत्व लेता है।

a=function(x)round(seq(0,x,l=6)[2],2)

उदाहरण:

> a(20.36)
[1] 4.07

आगे की व्याख्या:

seq(0,x,len=6)

समान मान के बीच के मानों के साथ इनपुट मान x से लंबाई 6 का एक वेक्टर बनाता है।

> seq(0,5,len=6)
[1] 0 1 2 3 4 5

पहला मान फिर 0%, दूसरा 20%, तीसरा 40%, आदि है।


रुको क्या ? कृपया इस बारे में अधिक जानकारी दें कि यह उन (मेरे जैसे) के लिए कैसे काम करता है जो R. नहीं जानते हैं
माइकल एम।

@ मिचेल ने कोड समझाने के लिए मेरे जवाब को अपडेट किया
Rift

आपका समाधान कोई गोल नहीं करता है।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n @h righta̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ आप सही हैं (लेकिन अधिकांश समाधान कुछ भी नहीं कर रहे हैं)। 9 अतिरिक्त चरित्र "सामान्य" राउंडिंग करेंगे। केवल राउंडिंग कठिन होगा ...
दरार

@ दरार: मैंने कई जवाबों का परीक्षण किया है (ज्यादातर पायथन, जेएस और पर्ल, क्योंकि वे आसानी से उपलब्ध हैं) और उनमें से ज्यादातर गोल हैं। उनमें से कोई भी मैंने राउंड अप का परीक्षण नहीं किया है, हालांकि।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

3

डीसी + सेड + पाइप (44 अक्षर)

मेरा तीसरा उत्तर (एक एपीएल, एक जे, और अब एक पुराना और आदरणीय डीसी के साथ)।

dc -e 5o?p|sed -e 's/\(.\)$/.\1/'|dc -e 5i?p

यह एक INTEGER इनपुट के लिए पूछेगा और 20% एक पेचीदा तरीके से गणना करेगा। इनपुट को बेस 5 में बदल दिया गया है (कई अन्य उपकरणों के साथ करना आसान है लेकिन प्रतीक्षा करें ...); सीड के साथ अंतिम अंक से पहले एक डॉट जोड़ा गया है (दुर्भाग्य से, डीसी बहुत अच्छी तरह से तार को संभाल नहीं सकता है), और फिर, डीसी फ्लोट नंबर पर आधार 5 से वापस धर्मान्तरित करता है (सभी उपकरण ऐसा नहीं कर सकते हैं)।


1
"INTEGER इनपुट" कल्पना को पूरा नहीं करता है। मुझे लगता है कि आप अपनी sed अभिव्यक्ति बदलकर इसे ठीक कर सकते हैं dc -e 5o?p|sed 's/\(.\)\./.\1/'|dc -e 5i?p:। इसके साथ और seds -es को हटा दें , तो यह 42 है। लेकिन परिणाम अभी भी कल्पना नहीं है (2 दशमलव स्थानों पर नहीं)
डिजिटल ट्रामा

@DigitalTrauma। तुम सही हो। लेकिन यह समाधान वास्तव में अवधारणा का प्रमाण था और मुझे डीसी में आधार रूपांतरण की असामान्य संपत्ति (और बीसी में भी) से अधिक दिलचस्पी थी। आपकी टिप्पणी के लिए धन्यवाद और आपके sed में ठीक करने के लिए।
थॉमस बरुचेल

2

पायथन, 88

यह वह जगह नहीं है जहां कम है, लेकिन यह प्रदर्शित करता है कि पांच द्वारा एक सामान्य मानसिक विभाजन कैसे किया जाना चाहिए। यह मानता है कि इनपुट xx.xx फॉर्म का होना चाहिए

import math
a,b=raw_input().split('.')
print'%.2f'%math.ldexp(float(a[0]+'.'+a[1]+b),1)

या किसी भी लंबाई के इनपुट के लिए, 3 वर्णों के अतिरिक्त की आवश्यकता होती है।

import math
a,b=raw_input().split('.')
print'%.2f'%math.ldexp(float(a[:-1]+'.'+a[-1]+b),1)

स्पष्टीकरण: हम इनपुट को स्ट्रिंग के रूप में लेते हैं, फिर दशमलव बिंदु को एक स्थान आगे (10 से विभाजित करके) स्थानांतरित करें। हम फिर इसे एक फ्लोट में डालते हैं, और उपयोग करते हैंldexp फ़ंक्शन का इसे 2 से गुणा करने के लिए किया।

ध्यान दें कि इस उत्तर में, +स्ट्रिंग संघनन ऑपरेटर हैं, और %प्रारूप के लिए उपयोग किए जाते हैंprint

यदि आप इनमें से किसी भी वर्ण का उपयोग नहीं करने पर जोर देते हैं, तो यहां 159 वर्ण समाधान है:

import math
a,b=raw_input().split('.')
l=[a[0]]
l.append('.')
l.append(a[1])
l.append(b)
c=str(math.ldexp(float(''.join(l)),1))
print ''.join([c[0:2],c[2:4]])

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

@ ברו אל: मेरे जवाब में अपनी टिप्पणी के लिए मेरी प्रतिक्रिया देखें
अभिजीत

.split('.')मेरे जवाब में आपका इस्तेमाल किया , एक चार को काट दिया
user80551

2

डीसी + सेड - 45 * 0.8 = 36

( ררוiredאל के उत्तर से प्रेरित )

  • किसी भी टिप राशि (पूर्णांक या फ्लोट) को संभालता है

उदाहरण रन (इनपुट STDIN के माध्यम से स्वीकार किया जाता है):

$ dc -e 5o?.0+p|sed 's/\(.\)\./.\1/'|dc -e 5i?p
42
8.400
$ dc -e 5o?.0+p|sed 's/\(.\)\./.\1/'|dc -e 5i?p
20.96
4.1920

.0+विचार बहुत अच्छा है; मैंने आपके द्वारा प्रेरित समाधान के लिए मतदान किया, लेकिन कुछ आपको बता सकते हैं कि आप इसके अतिरिक्त उपयोग कर रहे हैं; शायद कुछ हल? मैंने कोशिश की dc -e 9k5o?v2^pलेकिन यह 2 अक्षर अधिक है।
थॉमस बरुचेल

@ मुझे पता ही नहीं चला कि इस संदर्भ में भी + इसके अतिरिक्त योग्य हो सकते हैं।
devnull

@ ברו אל मैं इसे हटा दूंगा। आपसे अनुरोध है कि आप इसे संशोधित करें ताकि यह फ़्लोट को संभाल सके और इसके लिए अर्हता प्राप्त कर सके -20%!
devnull

2

गणितज्ञ, १ ९

Log[(E^.2)^Input[]]

के गणितीय ऑपरेटर का कोई उपयोग नहीं +, -, *, /, या %। उत्तर की गणना करने के लिए लघुगणक के गुणों का उपयोग करता है; जब आप अभिव्यक्ति को सरल करते हैं, तो आप प्राप्त करते हैं.2*Input[]

बोनस के साथ ( 30 * 0.8 = 24 ):

Log[((E^.01)^Input[])^Input[]]

पहले प्रतिशत इनपुट करें, फिर राशि।

जब आप अभिव्यक्ति को सरल करते हैं, तो आप प्राप्त करते हैं Input[]*Input[]*.01

कोड को छोटा करने में मदद के लिए ברוכאל का धन्यवाद ।


3
क्या आपको वाकई यकीन है कि इसे सरल नहीं किया जा सकता है? मुझे Log[E^2]या Log[E^Input[]]अधिक शीघ्र ही लिखा जा सकता है। यहां तक ​​कि 10^-1लिखा जा सकता है .01(हालांकि मैं गणित का उपयोग नहीं करता हूं, लेकिन मुझे पूरा यकीन है कि यह हो सकता है)। संपूर्ण अभिव्यक्ति (E^10^-1)^Log[E^2]कुछ इस तरह की लगती है E^.2, है ना?
थॉमस बरूचेल

1

TI-89 बेसिक - 39 * 0.8 = 31.2

Input y:Input x:Disp ln(((e^y)^.01)^x))

दो संख्याओं को इनपुट करके काम करता है, फिर गणना करने के लिए लघुगणक गुणों का उपयोग करता है x * y / 100

अगर मैं वैश्विक चर में प्लेसमेंट से इनपुट ग्रहण कर सकता हूं , xऔर yयह 17 * 0.8 = 13.6 के स्कोर के लिए बहुत कम है :

ln(((e^y)^.01)^x)

बिना बोनस ( 12 ):

ln((e^.2)^x)

लेकिन अगर इसे किसी फंक्शन में लपेटना है, तो यह काम करता है ( 38 चार्ट, 30.4 के लिए ):

:f(x,y):Func:ln(((e^y)^.01)^x):EndFunc

कृपया, मेरी टिप्पणियों को अपने अन्य समाधान में देखें (गणितज्ञ में); इस कोड को वास्तव में बहुत सरल बनाया जा सकता है।
थॉमस बरूचेल

Input x,y??? 83/84 में काम करता है।
टिमटेक

@Timtech 89 में काम नहीं करता है, लेकिन शायद मैं ऐसा कुछ कर सकता हूं Input{x,y}(83/84 है ln?)
जस्टिन

@Quincunx हां, मेरा नया उत्तर देखें।
टाइमटेक

žr¹msmžr.n- इस कोड का बेशर्म पोर्ट 05AB1E में।
मैजिक ऑक्टोपस Urn

1

PHP 107 * .8 = 85.6

वास्तव में PHP के साथ कोड-गोल्फ के लिए नहीं चल सकता है, लेकिन कम से कम मैं स्ट्रिंग्स पर काम कर सकता हूं। दोनों संख्याओं को कमांड-लाइन तर्क के रूप में स्वीकार करता है।

<? @$r=strrev;unset($argv[0]);echo$r(substr_replace($r(str_replace('.','',array_product($argv)))),'.',2,0);

दो बार रिवर्स करने के बाद से मैं -2 का उपयोग नहीं कर सकते हैं :(


1

पायथन, 81 80 89 वर्ण

a,b=map(str,raw_input().split('.'));c=str(int(a+b)<<1).zfill(4);print c[:-3]+'.'+c[-3:-1]

व्याख्या

x = raw_input()       # say 20.96
a , b = x.split('.')  # a = 20 , b = 96
c = a + b             # c = '2096'      # string concatenation , multiplying by 100
d = int(c)<<1         # multiply by 2 by bitshift left , c = 4096
e = str(d).zfill(4)   # zfill pads 0's making the string 
                      # atleast 4 chars which is required 
                      # for decimal notation next

#     divide by 1000 (4) + . (4.) + fraction rounded to 2 decimals (4.09)
print        e[:-3]      +   '.'  +              e[-3:-1]

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


मुझे लगता है कि आप [-3:]इसके बजाय[-3:-1]
जस्टिन

@Quincunx नहीं कर सकता, -1 दो दशमलव तक छोटा है।
user80551

@ n @h ,a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ हां, इसे ठीक कर दिया।
user80551

1

जावास्क्रिप्ट 251 (मजबूर प्रतिबंध: नहीं +, -, *, या किसी भी तरीके से%)

जबकि मुझे पता है कि यह नहीं जीतेगा, मुझे लगा कि मैं बहुत सख्त रुख अपनाते हुए ब्राउनी पॉइंट हासिल करने की कोशिश करूँगा और किसी भी आकार या रूप में प्रतिबंधित ऑपरेटरों का उपयोग करने के बारे में भी नहीं सोचूँगा ... नतीजतन, मैं साथ आया यह सुंदरता ...

A=(x,y)=>{for(;x;)b=x^y,x=(a=x&y)<<1,y=b;return y};D=(x,y,i=x,j=0)=>{for(;i>=y;)i=A(i,A(~y,1)),j=A(j,1);return j};alert(parseFloat((x="00".concat(String(D(prompt().replace(".",""),5)))).substr(0,A(x.length,y=A(~2,1))).concat(".").concat(x.substr(y))))

ऐड फंक्शन बनाने के लिए मैंने बिटवाइज़ ऑपरेशंस का इस्तेमाल किया A , और फिर वहाँ से आगे बढ़ना शुरू किया:

पूर्णांक विभाजन फ़ंक्शन Dने नकारात्मक परिवर्धन की एक श्रृंखला का उपयोग किया ( A(x,A(~y,1)एक लूप के रूप में घटाव ; शेष स्ट्रिंग हेरफेर और संयोजन है ताकि उपयोग करने से बचें+ संघनन संचालकों ...

इस कार्य के लिए दो दशमलव स्थानों के साथ दशमलव रूप में संख्या प्रदान की जानी चाहिए ...


आह, यह अब होगा ... हालांकि अगर मुझे नए नियमों को रखना था, तो मुझे इस पर विस्तार करना था ... अब 251 बाइट्स ...
वैलीवेस्ट

1

पर्ल, 50 60 बाइट्स

$_=<>;s|\.||;$_<<=1;$_="00$_";m|\d{3}$|;printf'%.2f',"$`.$&"

इनपुट एसटीडीआईएन पर अपेक्षित है। इसमें दशमलव विभाजक दो दशमलव अंकों के साथ होना चाहिए। आउटपुट STDOUT को लिखा गया है।

अद्यतन: कदम $_<<=1प्रमुख शून्य को हटाता है। इसलिए m|\d{3}$|बिलों के लिए मिलान नहीं होगा <1. इसलिए दस बाइट्स $_="00$जोड़े गए थे, अब भी0.00 काम करता है।

उदाहरण:

  • इनपुट: 20.96आउटपुट:4.19
  • इनपुट: 12.34आउटपुट:2.47

Ungolfed संस्करण:

$_=<>;
s|\.||; # multiply by 100
$_ <<= 1; # multiply by 2
$_="00$_";
m|\d{3}$|; # divide by 1000
printf '%.2f'," $`.$&"

पहले नंबर को STDIN से पढ़ा जाता है। फिर दशमलव डॉट को हटा दिया जाता है, जिसे 100 से गुणा किया जाता है। फिर राशि को एक शिफ्टिंग ऑपरेटर द्वारा दोगुना कर दिया जाता है। तब दशमलव डॉट को फिर से जोड़ दिया जाता है और परिणाम मुद्रित और दो दशमलव अंकों तक गोल होता है।

50 बाइट्स, यदि बिल: 1:

यदि x.xxइससे अधिक या बराबर है 1.00, तो 10 बाइट्स निकाले जा सकते हैं:

$_=<>;s|\.||;$_<<=1;m|\d{3}$|;printf'%.2f',"$`.$&"

@ n @h ,a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳: धन्यवाद, अब तय किया गया।
हेइको ओबर्डिएक

1

जावास्क्रिप्ट (ईएस 6) (रेगेक्स) 142

रेगेक्स महान है और यह कई चीजें कर सकता है। यह गणित भी कर सकता है!

a=('x'.repeat(prompt().replace('.', ''))+'xxxx').match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);c=a[3].length;alert(a[2].length+'.'+(c<10?'0'+c:c))

पठनीय संस्करण:

function tip(m) {
    var s = 'x'.repeat(m.replace('.', '')) + 'xxxx';
    var a = s.match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);
    var c = a[3].length;
    if (c < 10) c = '0' + c;
    return a[2].length + '.' + c;
}

tip()समारोह की उम्मीद स्ट्रिंग तर्क, बल्कि संख्या की तुलना में।

के सभी उदाहरणों *, /, +गणित संचालन से संबंधित नहीं हैं।

  • + यह उपयोग किया जाता है सभी उदाहरणों में स्ट्रिंग संघनन है।
  • * RegExp सिंटैक्स का हिस्सा है
  • / RegExp शाब्दिक का परिसीमन है

इनपुट को दशमलव बिंदु के रूप में उपयोग करना चाहिए. , और दशमलव बिंदु के बाद 2 अंक होना चाहिए।

ढेर स्निपेट

<button onclick = "a=('x'.repeat(prompt().replace('.', ''))+'xxxx').match(/^((x*)\2{99}(x{0,99}))\1{4}x{0,4}$/);c=a[3].length;alert(a[2].length+'.'+(c<10?'0'+c:c))">Try it out</button>


0

हास्केल 32 चार्ट -20% = 25.6 चार्ट

t y x=log $(^x)$(**0.01)$ exp y

इस तथ्य का दुरुपयोग करता है कि प्रतिपादक लघुगणक में गुणा हो जाते हैं।

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