वर्क आउट चेंज [बंद]


10

आप एक स्वचालित कैश रजिस्टर के लिए एक कार्यक्रम लिख रहे हैं। उपयोगकर्ता को उपयोग किए जाने वाले कम से कम सिक्कों के साथ परिवर्तन की आवश्यकता होती है। एक प्रोग्राम लिखें जो एक राशि लेता है ($ 1.53 कहते हैं) और यूएस के संप्रदायों में परिवर्तन देता है - इस उदाहरण में: 1 x एक डॉलर का नोट, 1 x पचास सेंट और 3 x एक प्रतिशत। सबसे छोटा कार्यक्रम विजेता होगा। अन्य मुद्राओं (यानी यूके के संप्रदायों) और असामान्य मुद्राओं (1, 2, 3 सेंट) का समर्थन करने के लिए बोनस अंक?

आपके पास ये अमेरिकी संप्रदाय हैं: 1 सेंट, 5 सेंट, 10 सेंट, 25 सेंट, 50 सेंट, 1 ​​डॉलर (नोट या सिक्का), 2 डॉलर, 5 डॉलर, 10 डॉलर।

आपके पास ये यूके के संप्रदाय हैं: 1 पेंस, 2 पेंस, 5 पेंस, 10 पेंस, 20 पेंस, 50 पेंस, £ 1, £ 2, £ 5 (नोट या सिक्का), £ 10।


3
इसके लिए शायद थोड़ा सा स्पष्टीकरण चाहिए। सबसे पहले आपको संभवतः निर्दिष्ट करना चाहिए कि हम कम से कम सिक्कों की संख्या चाहते हैं (जो बोनस प्रश्न को और अधिक दिलचस्प बनाता है, उदाहरण के लिए {1c, 49c, 50c} और 98c एक भोली एल्गोरिथ्म को तोड़ता है)। दूसरे, एक इनपुट / आउटपुट प्रारूप उपयोगी है। अप्राप्य मूल्यों (निर्मित मुद्राओं के लिए) को संभालने में विशिष्ट मदद मिलेगी। अंत में - आप यहाँ संप्रदायों को सूचीबद्ध करना चाह सकते हैं ताकि लोगों को इसे देखने की ज़रूरत न पड़े यदि वे इससे अपरिचित हों।
नब

बोनस अंक कैसे काम करते हैं? बस अगर सबसे कम कार्यक्रम के लिए एक टाई है?
gnibbler

@gnibber, स्टीफन फ्राई के हवाले से: "[बिंदु हैं] निष्पक्ष रूप से एक जनसांख्यिकी रूप से चयनित ग्राहक सेवा फ़ोकस कंसल्टेंसी द्वारा निर्धारित किया गया है, जो उम्र और लिंग से टूट गया है - अर्थात।"
थॉमस ओ

मैं 50 सी माँगने जा रहा हूँ क्योंकि मैंने अभी तक 50 प्रतिशत सिक्का नहीं देखा है। लेकिन वर्तमान में वे मौजूद हैं: usmint.gov/kids/coinnews/circulating/50centCoin.cfm
मार्टिन यॉर्क

जवाबों:


2

विंडोज पॉवरशेल, 108 111 117

बहुत पहले प्रयास, अब तक असंबद्ध:

$i=+("$input"-replace'[^\d.]')
$args|%{0d+$_}|sort -des|%{$a=[math]::floor($i/$_)
if($a){$i-=$a*$_
"$a×$_"}}

कार्यान्वयन नोट:

  1. पाइपलाइन के माध्यम से वापस जाने के लिए मात्रा को स्वीकार करता है
  2. कमांड-लाइन के माध्यम से मुद्रा संप्रदायों की सूची को स्वीकार करता है
  3. मात्रा एक मुद्रा संकेत के साथ दी जा सकती है; वह छीन लिया जाएगा (वास्तव में, कुछ भी गैर-संख्यात्मक)।
  4. संप्रदायों की सूची को क्रमबद्ध करने की आवश्यकता नहीं है।
  5. यह कार्यक्रम दिए गए मूल्यवर्ग के साथ प्राप्त मात्रा के मुकाबले सबसे बड़े बदलाव का उत्पादन करेगा, अर्थात 1.53 के लिए 1.5 यदि 1-सेंट का सिक्का गायब है।

यदि 3 और 4 को संतुष्ट होने की आवश्यकता नहीं है (यानी मैं इनपुट प्रारूप; ;-)) को नियंत्रित करता हूं , तो निम्नलिखित कार्यक्रम पर्याप्त है (71):

$i=+"$input"
$args|%{$a=[math]::floor($i/$_)
if($a){$i-=$a*$_
"$a×$_"}}

2

गणितज्ञ: 110 वर्ण

Sort[IntegerPartitions[Rationalize@#,Infinity,{10,5,2,1,1/2,1/4,1/10,5/100,1/100}],
    Length@#1<Length@#2&][[1]]&  

प्रयोग

%[0.98]  
{1/100, 1/100, 1/100, 1/10, 1/10, 1/4, 1/2}  

या

Tally@Sort[IntegerPartitions[Rationalize@#,Infinity,
                             {10,5,2,1,1/2,1/4,1/10,5/100,1/100}],
     Length@#1<Length@#2&][[1]]&  

(6 चार्ट अधिक) देता है

{{1/100, 3}, {1/10, 2}, {1/4, 1}, {1/2, 1}}

अन्य संप्रदायों के लिए, बस तर्कसंगत तालिका {10, ...., 5 / 100,1 / 100} बदलें।


2

D: 225 वर्ण

import std.algorithm,std.conv,std.stdio;void main(string[]args){auto m=args[1].findSplit(".");void p(T,S)(T t,T u,S s){foreach(v;[u,10,5,1]){writefln("%s %s%s",t/v,v,s);t-=(t/v)*v;}}p(to!int(m[0]),20,"");p(to!int(m[2]),25,"/100");}

अधिक कानूनी रूप से:

import std.algorithm,std.conv,std.stdio;

void main(string[] a)
{
    auto m = a[1].findSplit(".");

    void p(T, S)(T t, T u, S s)
    {
        foreach(v; [u, 10, 5, 1])
        {
            writefln("%s %s%s", t / v, v, s);
            t -= (t / v) * v;
        }
    }

    p(to!int(m[0]), 20, "");
    p(to!int(m[2]), 25, "/100");
}

केवल अमेरिकी मुद्रा को संभालता है। कमांड लाइन पर एक फ्लोटिंग पॉइंट वैल्यू के रूप में मान लेता है (1 डॉलर के तहत मूल्यों के लिए अग्रणी 0 होना चाहिए)। मान के भाग के रूप में $ स्वीकार नहीं करता है। एक अलग लाइन पर प्रत्येक प्रकार के बिल / सिक्के की संख्या को आउटपुट करता है। उदाहरण के लिए 1.53 में इनपुट:

0 20
0 10
0 5
1 1
2 25/100
0 10/100
0 5/100
3 1/100


1

गणितज्ञ, 51 बाइट्स

#~NumberDecompose~{10,5,2,1,.5,.25,.1,.05,.01}&

इनपुट

[1.53]

उत्पादन

{, 0, 0, 1, 1, 1, 0, 0, 3., 3.}


गणितज्ञ, 82 बाइट्स - BONUS--

(s=#~NumberDecompose~#2;Row@Flatten@Table[Table[#2[[i]]"+",s[[i]]],{i,Length@s}])&

इनपुट

[३ [.६, {१५, 15, २.५, १, ०. 0.2, ०.२, ०.०१}]

उत्पादन

15 +15 +7 +0.2 +0.2 +0.2 +


उम्म, यह प्रश्न डुप्लिकेट से अलग मूल्यवर्ग का उपयोग करता है।
ericw31415

OP इनपुट / आउटपुट प्रारूप को निर्दिष्ट नहीं करता है।
J42161217

यह प्रश्न 100 डॉलर के बिल का उपयोग नहीं करता है और कोई बोनस नहीं है।
ericw31415

ok.fix और कुछ बाइट्स बचाए! बोनस के लिए, मैं आपसे विनम्र निवेदन करता हूं कि आप प्रश्न को फिर से पढ़ें। विशेष रूप से हिस्सा .. "अन्य मुद्राओं का समर्थन करने के लिए बोनस अंक"
J42161217

वूप्स, मुझे लगता है कि मैंने तब नहीं देखा था!
ericw31415

1

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

(n,v=[10,5,2,1,.5,.25,.1,.05,.01],l=[])=>{for(i in v)l[i]=n/v[i]|0,n%=v[i];return l}

(n,v=[10,5,2,1,.5,.25,.1,.05,.01],l=[])=>eval("for(i in v)l[i]=n/v[i]|0,n%=v[i];l")

एक लालची एल्गोरिथ्म का उपयोग करता है।


0

एपीएल (डायलॉग) , 19 बाइट्स

वांछित राशि के लिए संकेत और फिर सबसे छोटी इकाई (पेनी / सेंट) में व्यक्त संप्रदायों के लिए।

CY'dfns'
 stamps

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

⎕CY'dfns'सीपी वाई कार्यक्षेत्रdfns

⎕ stamps⎕ इनपुट के लिए पूछने के लिए और करने के लिए तर्क के रूप में उपयोग समारोहstamps

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