यह चैलेंज सेंट बनाता है


29

मुझे पता है, शीर्षक आपको दरार देता है


पैसे के उत्पादन की मात्रा को देखते हुए सिक्कों की सबसे कम संख्या उस राशि को बनाती है

उदाहरण

0.1
1 dime

0.01
1 penny

0.28
1 quarter 3 penny

0.56
2 quarter 1 nickel 1 penny

1.43
5 quarter 1 dime 1 nickel 3 penny

कल्पना

  • एक डॉलर में 100 सेंट।
  • प्रत्येक प्रकार के सिक्के का मूल्य है:
    • penny 1 प्रतिशत
    • nickel 5 सेंट
    • dime 10 सेंट
    • quarter 25 सेंट

बिल्ट-इन जो इस कार्य को तुच्छ करते हैं उन्हें अनुमति नहीं है।

आई / ओ

इनपुट एक दशमलव है जो कुल के डॉलर मूल्य का प्रतिनिधित्व करता है

  • बहुवचन की जरूरत नहीं है
  • क्रम: quarter->penny
  • आउटपुट होना चाहिए <#_of_coins> <coin type>
  • सेपरेटर: ,या ,या

केवल अनुगामी व्हाट्सएप की अनुमति एकल अनुगामी न्यूलाइन / स्पेस है।


यदि सिक्के के प्रकार का शून्य है, तो उस सिक्के का प्रकार नहीं दिखाया जाना चाहिए । जैसे 0.25-> 1 quarter नहीं 1 quarter 0 dime 0 nickel 0 penny


@VoteToClose नहीं, लेकिन मैं एक अल्पाहार के रूप में अल्पविराम की अनुमति दूंगा
डाउनगैट

अंतिम उदाहरण है 1.43जो से अधिक है,1
लुइस Mendo

@LuisMendo ओह वूप्स, (less than 1)भाग वहाँ नहीं होना चाहिए था। सैंडबॉक्स में मुझे हटाने के लिए भूल गया कि मुझे लगता है
डाउनगैट

यदि आउटपुट है तो क्या यह ठीक है 2 quarter(2 spaces)1 nickel 1 penny?
कोनोर ओ'ब्रायन

1
@DigitalTrauma 13.00एक संभावित इनपुट हो सकता है लेकिन इनपुट कभी नहीं होगा 13। मेरे पास हमेशा एक दशमलव होगा
डाउगाट

जवाबों:


5

CJam, 60

q~e2i[25A5]{md}/]" quarterx dimex nickelx penny"'x/.+{0#},S*

इस लिपि में सुधार के लिए बहुत कुछ है लेकिन यह अब तक की तुलना में कम है। यह अंतर्निहित "md" कमांड का उपयोग करता है जो किसी विभाजन के पूर्णांक परिणाम और शेष दोनों को वापस करता है। यह निम्न कार्य करता है:

  • इनपुट पढ़ता है (यदि यह एक फ़ंक्शन था जो मुझे लगता है कि आप दो कम वर्णों के लिए q ~ निकाल सकते हैं)
  • इनपुट को 100 से गुणा करता है और इसे पूर्णांक में परिवर्तित करता है
  • [25 10 5] का उपयोग करके "md" करता है जिसके परिणामस्वरूप स्टैक पर अवशेष रहते हैं
  • संख्याओं और सिक्कों के नामों को जोड़ती है
  • यदि नंबर 0 है तो संख्या और सिक्के का नाम हटा देता है
  • पूर्व-संख्या शून्य जोड़ता है

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

पूर्व संस्करण:

q~e2i[25A5]{md}/]_:!:!" quarter x dime x nickel x penny"'x/.*.+e_0-
q~e2i[25A5]{md}/]_:!:!\" quarter x dime x nickel x penny"'x/.+.*

11

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

n=>((n*=100)/25|0)+` quarter ${(n%=25)/10|0} dime ${n%10/5|0} nickel ${n%5|0} penny`.replace(/ ?0 \S+/g,"")

सरल गणित।


अच्छी नौकरी! मैंने सोचा था कि एक बंद सूत्र ईश समाधान है
कॉनर ओ'ब्रायन

? क्या यह सिक्का प्रकार का उत्पादन नहीं करता है अगर उस सिक्के के प्रकार के शून्य हैं?
फ्रांटोस

@Frentos नहीं, अंत में एक Rexx है जो सिक्के के प्रकारों को हटाता है जिसमें शून्य सिक्के हैं
Downgoat

@ Do @: क्षमा करें, दृश्य सुराग की अनुपस्थिति में सही स्क्रॉल किए गए पाठ क्षेत्र को महसूस नहीं किया :-)
Frentos

क्या आप के |0बाद की जरूरत है n%5?
नील

11

पायथन 2, 120 बाइट्स

n=int(round(input()*100))
a=25
for b in"quarter","dime","nickel","penny":
 if n>=a:print"%d "%(n/a)+b,
 n%=a;a=40/a+5^12

बस सुरक्षित होने के लिए, कुछ ऐसा बदल गया जो निश्चित रूप से @ ओगडे की टिप्पणी को ठीक करने के लिए काम करता है, अब कम से कम। मैं अनिश्चित हूं कि मुझे इसकी आवश्यकता है या नहीं int(), लेकिन मुझे खुद को समझाने में परेशानी हो रही है कि मैं नहीं।

print`n/a`+" "+b,

एक अतिरिक्त बाइट है, लेकिन Lबड़े इनपुट के लिए एक अतिरिक्त प्रिंट करता है (हालांकि यह कोड फ्लोटिंग परिशुद्धता के कारण, वैसे भी बहुत बड़े इनपुट के लिए काम नहीं करता है)।


1
आपने अभी-अभी मैंने मेगो को बर्बाद करने के लिए अपने समाधान को बेहतर बनाने के लिए हर समय खर्च किया। हालांकि अच्छी नौकरी!
अलेक्जेंडर रेवो

1
+1 - काश मुझे पता होता कि आप किस जादू के साथ आते थेa=40/a+5^12
डिजिटल ट्रॉमा

@DigitalTrauma ने अंकगणित ऑपरेटरों के एक समूह की कोशिश की, उदाहरण के लिए [x^k for x in [10, 5, 1]]और [k/y for y in [25, 10, 5]]अलग-अलग के लिए k, फिर देखा कि दो सूचियों को ऑफसेट किया गया था 5. संभवतया सबॉप्टीमल, लेकिन मेरे पास बल को भंग करने का समय नहीं है।
23

यह वास्तव में की इनपुट पर (कम से कम मेरे लिए) में विफल रहता है 10.03और 10.04। यह पायथन के फ़्लोट्स के प्रतिनिधित्व के साथ करना है और यह उन्हें किलों को कैसे गोल करता है। कोशिश करो "print %d"%(10.03*100)
18

n=int(''.join(raw_input().split(".")))काम कर सकते हैं, लेकिन यह बहुत क्रिया है।
शेरलाक

7

dc, १०४

"पठनीयता" के लिए नई कड़ियाँ जोड़ी गईं :

[dn[ quarter ]n]sq
[dn[ dime ]n]sd
[dn[ nickel ]n]sn
[d1/n[ penny ]n]sp
?A0*
25~rd0<qst
A~rd0<dst
5~rd0<nst
d0<p

15
डीसी: अब पठनीयता ™ के साथ
एलेक्स ए।

6

रेटिना , 97

धन्यवाद (हमेशा की तरह) @randomra को - 1 बाइट को बचाया।

मान लिया गया इनपुट के रूप में या तो है xxx.yyया xxx.y

\..$
$&0
\.

.+
$0$*:
(:{25})+
$#1 quarter 
(:{10})+
$#1 dime 
(:{5})+
$#1 nickel 
(:)+
$#1 penny

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


1
$&जैसा कि $0आप में एक बाइट बचा सकता है के रूप में ही $0.0है $&0
14

0.9999999 की तरह कुछ इनपुट करके, आउटपुट थोड़ा पागल है
एंथनी फाम

@PythonMaster मैं इसके लिए समर्थन जोड़ूंगा, जब फेड 10 माइक्रोप्नी के टुकड़ों का खनन शुरू करता है ;-)
डिजिटल ट्रामा

4

विटी, 110 100 97 बाइट्स

हाँ, रुको, मैं अभी भी इसे व्यवस्थित कर रहा हूँ।

aa**Dv52^1m([N' retrauq 'Z]v52^MDva1m([N' emid 'Z]vDvaM51m([N' lekcin 'Z]v5MD([N'ynnep 'Z]
/D1M-D

जल्द ही आने वाली क्रिया मोड में स्पष्टीकरण:

push a;
push a;
multiply top two;
multiply top two;
duplicate top item;
save top as temporary variable;
push 5;
push 2;
push second to top to the power of top;
push 1;
goto top method;
if (int) top is 0;
begin recursive area;
output top as number;
push " quarter ";
output stack as chars;
end recursive area;
save top as temporary variable;
push 5;
push 2;
push second to top to the power of top;
modulo top two;
duplicate top item;
save top as temporary variable;
push a;
push 1;
goto top method;
if (int) top is 0;
begin recursive area;
output top as number;
push " dime ";
output stack as chars;
end recursive area;
save top as temporary variable;
duplicate top item;
save top as temporary variable;
push a;
modulo top two;
push 5;
push 1;
goto top method;
if (int) top is 0;
begin recursive area;
output top as number;
push " nickel ";
output stack as chars;
end recursive area;
save top as temporary variable;
push 5;
modulo top two;
duplicate top item;
if (int) top is 0;
begin recursive area;
output top as number;
push " penny";
output stack as chars;
end recursive area;
:
divide top two;
duplicate top item;
push 1;
modulo top two;
subtract top two;
duplicate top item;

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


2
retrauqलगभग एक शब्द की तरह लगता है ...
कॉनर ओ'ब्रायन


निश्चित, क्षमा करें। पुराना कोड लिंक। : पी
एडिसन क्रम्प

3

जावा 8 लैम्ब्डा, 165 बाइट्स

इनपुट की अपेक्षा yडबल या फ्लोट के रूप में किया जाता है।

y->{int c,d=(int)(y*100);return(((c=d/25)>0)?c+" quarter ":"")+(((c=(d=d%25)/10)>0)?c+" dime ":"")+(((c=(d=d%10)/5)>0)?c+" nickel ":"")+(((d=d%5)>0)?d+" penny":"");}

इतना तीखा। ; -;


;-;वो क्या है? क्या वह वैंपा है?
बीकर

@ बीकर रोना।
Addison Crump

2

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

मुझे आशा है कि यह गोल्फ हो सकता है ...

r=>eval('i=[.25,.1,.05,.01];v=[0,0,0,0];for(k=0;k<4;k++)for(;r>=i[k];v[k]++,r-=i[k],r=((r*100+.01)|0)/100);v.map((x,i)=>x?x+" "+"quarter0dime0nickel0penny".split(0)[i]:"").join` `.replace(/ +/g," ")')

अघोषित कोड:

function m(r){
    i=[.25,.1,.05,.01]
    v=[0,0,0,0]
    for(k=0;k<4;k++)for(;r>=i[k];v[k]++,r-=i[k],r=((r*100+.01)|0)/100);
    return v.map((x,i)=>x?x+" "+"quarter0dime0nickel0penny".split(0)[i]:"").join(" ").replace(/ +/g," ");
}

2

LabVIEW, 62 LabVIEW प्राइमिटिव

नामों और मूल्यों के लिए 2 एर्रेज़ की पहचान की और एक मॉडुलो ऑपरेटर (आर आईक्यू चीज़) का उपयोग करके उनके ऊपर से (इंडेक्स सरणी विथ आई) जाएँ। शेष सिक्कों को शिफ्ट रजिस्टर में पास किया जाता है।

यदि मान 0 से बड़ा है, तो मैं संख्या को स्ट्रिंग में परिवर्तित कर देता हूं और पास किए गए स्ट्रिंग को संख्या और सिक्के के नाम से अलग कर देता हूं और इसे शिफ्ट रजिस्टर में वापस डाल देता हूं।

इज्स ने महसूस किया कि मेरे जिफ को झूठा मामला नहीं दिखा, लेकिन फिर भी देखने के लिए कुछ भी नहीं है, यह सिर्फ उस स्ट्रिंग से गुजरता है जो अंदर आया था।


"आदिम" बाइट्स की तुलना कैसे करते हैं? जब x <y "x बाइट" को "y बाइट्स" हराता है? बस पूछ रहा है
लुइस मेंडो

आप यह देखने के लिए लिंक देख सकते हैं कि कैसे आदिमों की गणना की जाती है। बाइट में labview कोड का आकार देना थोड़े बेकार होगा, क्योंकि एक खाली vi पहले से ही ~ 10kb बड़ा होता है। अनुभव से, एक गोल्फ की भाषा में बाइट्स की तुलना में कुछ अधिक आदिम हैं इसलिए यह सीजेएम या इस तरह के लगभग 50-60 बाइट्स होंगे।
Eumel 16

1
@LuisMendo हम एक बाइट प्रति फ़ाइल की सूचना सामग्री को एक बाइट प्रति आदिम से बाउंड नहीं कर सकते हैं, इसलिए LabView को एक बाइट प्रति प्राइमिटिव में गिनना अनुचित होगा।
4

@ThomasKwa tbh एक अच्छी तरह से बनाई गई गोल्फ भाषा के साथ, जो आप शायद कर सकते हैं, प्रत्येक ऑपरेशन 1 बाइट प्रत्येक तार के लिए 1 बाइट प्रति तार 2-4 बाइट्स के लिए 2-4 बाइट्स हैं और व्हाइल्स 3 आदिम हैं और इसी तरह
Eumer

2

जाप, 77 बाइट्स

` {U*=L /25|0} quÂòr {U%=25 /A|0} ÜX {U%A/5|0} Íõel {U%5|0} p¿ny` r" 0 %S+" x

शुक्र है, सभी चार सिक्के के नाम संक्षिप्त हैं। ¿शाब्दिक बाइट 0x81 होना चाहिए। इसे ऑनलाइन टेस्ट करें!


बस कुछ यादृच्छिक आदानों के साथ यह कोशिश की, यह 18.33 पर एक प्रतिशत की छूट है 73 quarter 1 nickel 2 penny:। 73 * .25 + 1 * .05 + 2 * .01 = 18.33 के बजाय 18.32।
डी। स्ट्रैट

2

सी, 147 144 142 142 बाइट्स

a[]={25,10,5,1},m,i=0;f(float n){for(m=n*100;i<4;m%=a[i++])m/a[i]&&printf("%d %s ",m/a[i],(char*[]){"quarter","dime","nickel","penny"}[i]);}

परीक्षण के साथ अधूरा:

#include <stdio.h>

a[]={25,10,5,1},m,i=0;

f(float n)
{
    for(m=n*100;i<4;m%=a[i++])
        if(m/a[i])
            printf("%d %s ",m/a[i],(char*[]){"quarter","dime","nickel","penny"}[i]);
}

int main()
{
    float test[] = {.1, .01, .28, .56, 1.43};
    for(int j = 0; j < 5; i = 0)
    {
        f(test[j++]);
        printf("\n");
    }
}

1
हो सकता है कि जगह की कोशिश char*[]के साथ char**, int a[]के साथ int*a, और डाल m%=a[i++]पाश के लिए के अंतिम भाग में। 4 बाइट बचानी चाहिए। अभी तक इसका परीक्षण नहीं किया गया है, इसलिए उनमें से प्रत्येक का प्रयास करें।
टेकरा

@ minerguy31 यदि मैं सरणियों के बजाय पॉइंटर्स का उपयोग करता हूं तो मैं सूची आरंभीकरण का उपयोग करने में सक्षम नहीं होगा। m%=a[i++]हालांकि, थोड़ा सा आगे बढ़ा ।
अलेक्जेंडर रेवो

1
इसके अलावा, आप को बदलने के लिए सक्षम हो सकता है if(m/a[i])के साथ m/a[i]&&2 और बाइट्स बचाने के लिए।
टेकरा

इसके अलावा "quarter\0dime\0nickel\0penny"प्रिंटफ में इस्तेमाल करके देखें । प्रत्येक \ 0 स्ट्रिंग को समाप्त कर देता है, जिससे प्रत्येक 1
चारे की

@ minerguy31 स्ट्रिंग के उपयोग \0से प्रोग्राम क्रैश होने का कारण बनता है। मुझे यकीन नहीं है कि कैसे पुनरावृत्ति को ऐसे स्ट्रिंग पर काम करना चाहिए।
अलेक्जेंडर रेवो


1

जावास्क्रिप्ट, 156 145 144 बाइट्स

ETHproduction के सूत्र के उत्तर से कोई मेल नहीं, लेकिन फिर भी ...

function c(t){n=['quarter','dime','nickel','penny'];v=[.25,.1,.05,.01];s='';for(i in v){c=t/v[i]|0;if(c>0)s+=c+' '+n[i]+' ';t-=c*v[i];}return s}

यह गोल्फ के मेरे पहले दौर में से एक है, इसलिए किसी भी सुधार की बहुत सराहना की जाती है! मैंने पहले ही ETH का "xor trunc" चुरा लिया - माफ करना यार, यह बहुत ही स्मार्ट था :-)

अधिक पठनीय:

function c(t)
{
  n = ['quarter', 'dime', 'nickel', 'penny'];
  v = [.25, .1, .05, .01];
  s = '';
  for(i in v)
  {
    c = t/v[i]|0;
    if(c>0) s += c+' '+n[i]+' ';
    t -= c*v[i];
  }
  return s
}

नोट: परीक्षण करते समय मैंने महसूस किया कि जावास्क्रिप्ट (कम से कम मेरी मशीन पर?) में विभाजित 1.13 / 0.01है 1.12999..., जिससे मेरी (और शायद अन्य सभी JS प्रस्तुतियाँ) 100% ठीक से काम नहीं कर रही हैं ...


मुझे नहीं लगता कि आपको बहुत अंतिम अर्धविराम की आवश्यकता है।
डाउनगेट

0

पर्ल 5 - 128 124 बाइट्स

मुझे लगता है कि यह बहुत छोटा होने के लिए फिर से लिखा जा सकता है लेकिन मैं वास्तव में इसे नहीं देख सकता।

$s=<>*100;@v=($s/25,$s%2.5,$s%25%10/5,$s%250%5);map{$l=int($_);print$l.$".qw(quarter dime nickel penny)[$i].$"if$l>0;$i++}@v

संपादित करें: 4 वर्णों को बचाने के लिए सिर्फ एक गणित की चाल।


0

पर्ल 6 , 96 बाइट्स

$/=get;put map {$_=Int($//$^a);$/%=$a;"$_ $^b" if $_},<.25 quarter .1 dime .05 nickel .01 penny>
$/ = get; # set $/ to the input

# print the following list with spaces between
# and a newline at the end
put map {
  # the parameters to this block are $a, and $b
  # which are declared as placeholder parameters $^a, and $^b

  $_ = Int( $/ / $^a ); # set $_ to the count of the current coin

  $/ %= $a;             # set $/ to the modulus of itself and the current coin

  "$_ $^b" if $_        # return a string if $_, otherwise return Empty
},
<
  .25 quarter
  .1  dime
  .05 nickel
  .01 penny
>

उपयोग:

for amount in  0.1  0.01  0.28  0.56  1.43; do
  echo $amount | perl6 -e'…';
done
1 dime
1 penny
1 quarter 3 penny
2 quarter 1 nickel 1 penny
5 quarter 1 dime 1 nickel 3 penny

0

पायथन 2, 167 161 बाइट्स

अद्यतन 1: इनपुट का उपयोग करने के लिए Sp3000 का विचार चुरा लिया () और एक फ़ंक्शन के बजाय मेरे कोड को स्क्रिप्ट बनाएं।

a=input()*100;k={25:0,10:0,5:0,1:0}
for i in k:k[i]=a//i;a%=i
print' '.join(['%d %s'%(k[x],{25:'quarter',10:'dime',5:'nickel',1:'penny'}[x]) for x in k if k[x]])

0

सी, 162 बाइट्स

दुर्भाग्य से, बिना काम नहीं करता है #include

#include <stdlib.h>
i,a[]={25,10,5,1};main(c,v)char**v;{for(c=atof(v[1])/.01;c;c%=a[i++])c/a[i]?printf("%d %s ",c/a[i],"quarter\0dime\0   nickel\0 penny"+8*i):0;}

Ungolfed

#include <stdlib.h>

i,a[]={25,10,5,1}; /* loop index, coin values */

main(c,v) char**v;
{
    /* Get dollar amount from command line, convert to pennies */
    for (c=atof(v[1])/.01;c;c%=a[i++]) /* loop while still change... */
    {
        c/a[i] /* if there are coins at this index... */
            ? printf("%d %s ", c/a[i], "quarter\0dime\0   nickel\0 penny"+8*i) /* print out how many */
            : 0;
    }
}

0

लुआ 5.3, 141 139 132 131 बाइट्स

Sp3000 के पायथन उत्तर के आधार पर क्रमबद्ध करें, लेकिन मेरे अपने जादू फार्मूला के साथ।

n=.5+100*io.read'n'a=25
for s in("quarter dime nickle penny "):gmatch".- "do
_=n<a or io.write(s,~~(n//a)," ")n=n%a
a=35%a|#s%2
end

संपादित करें - सुधार हुआ a सूत्र में । पहले यह था a=a*3%13~#s%4

2 संपादित करें - पहले मैं math.ceilगोल और पूर्णांक में परिवर्तित करने के लिए उपयोग कर रहा था । अब मैं पुन: उपयोग कर रहा हूं//~~ पूर्णांक में बदलने के लिए गोल और जोड़ने के लिए कर ।

संपादित 3 - से पैटर्न बदलकर एक चरित्र मुंडा "%w+ "को ".- "


0

के (ओके) , 95 78 बाइट्स

समाधान:

{" "/,/`quarter`dime`nickel`penny{("";$y,x)y>0}'(-c,1)!'{y!x}\x,c:25 10 5}100*

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

उदाहरण:

{" "/,/`quarter`dime`nickel`penny{("";$y,x)y>0}'(-c,1)!'{y!x}\x,c:25 10 5}100*0.92
"3 quarter 1 dime 1 nickel 2 penny"
{" "/,/`quarter`dime`nickel`penny{("";$y,x)y>0}'(-c,1)!'{y!x}\x,c:25 10 5}100*0.95
"3 quarter 2 dime"

स्पष्टीकरण:

प्रत्येक सिक्के के इनपुट को मोडुलो करें, फिर परिणाम द्वारा सिक्कों को विभाजित करें।

एक फ़ंक्शन में सिक्के के नाम के साथ प्रत्येक परिणाम फ़ीड करें, यदि दोनों सिक्कों की संख्या गैर-शून्य है, तो स्ट्रिंग मान लौटाएं।

सब कुछ समतल करें और व्हॉट्सएप के साथ जुड़ें।


0

कोटलिन , 147 बाइट्स

{listOf("quarter" to 25,"dime" to 10,"nickel" to 5,"penny" to 1).fold((it*100).toInt()){d,(n,a)->val z=d/a
if(z>0){print("$z $n ")
d-(z*a)}else d}}

सजा हुआ

{
    listOf(
            "quarter" to 25,
            "dime" to 10,
            "nickel" to 5,
            "penny" to 1).fold((it * 100).toInt()) { d, (n, a) ->
        val z = d / a
        if (z > 0) {
            print("$z $n ")
            d - (z * a)
        } else d
    }
}

परीक्षा

import java.io.ByteArrayOutputStream
import java.io.PrintStream

var f:(Double)->Unit =
{listOf("quarter" to 25,"dime" to 10,"nickel" to 5,"penny" to 1).fold((it*100).toInt()){d,(n,a)->val z=d/a
if(z>0){print("$z $n ")
d-(z*a)}else d}}

val TEST = listOf(
        0.1 to "1 dime",
        0.01 to "1 penny",
        0.28 to "1 quarter 3 penny",
        0.56 to "2 quarter 1 nickel 1 penny",
        1.43 to "5 quarter 1 dime 1 nickel 3 penny"
)

fun main(args: Array<String>) {
    val temp = ByteArrayOutputStream()
    System.setOut(PrintStream(temp))
    for ((input, output) in TEST) {
        temp.reset()
        f(input)
        println()
        val text = temp.toString().trim()
        if (text != output) {
            throw AssertionError("$input '$output' != '$text'")
        }
    }
}

TIO

TryItOnline

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