এই চ্যালেঞ্জ সেন্ট করে তোলে


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>
  • Seperators: ,বা ,বা

কেবলমাত্র পশ্চাদগামী শ্বেতস্পেসের অনুমতি হ'ল একক ট্রেলিং নিউলাইন / স্পেস।


যদি মুদ্রার ধরণের শূন্য থাকে তবে সেই মুদ্রার প্রকারটি প্রদর্শিত হবে না । যেমন 0.25-> 1 quarter না 1 quarter 0 dime 0 nickel 0 penny


@ ভোটটোক্লস নং, তবে আমি সেপারার হিসাবে কমা দেব
ডাউনগোট

সর্বশেষ উদাহরণ 1.43যা চেয়ে অনেক বেশী,1
লুইস Mendo

@ লুইস মেন্ডো ওহ ওফফ, (less than 1)অংশটি সেখানে থাকা উচিত হয়নি। স্যান্ডবক্সে এটি অনুমান করার জন্য ভুলে
গিয়েছি

আউটপুট হলে ঠিক আছে 2 quarter(2 spaces)1 nickel 1 penny?
কনর ও'ব্রায়েন

1
@ ডিজিটালট্রামা 13.00একটি সম্ভাব্য ইনপুট হতে পারে তবে ইনপুট কখনই হবে না 13। আমার সর্বদা একটি দশমিক থাকবে
ডাউনগোট

উত্তর:


5

সিজেম, 60

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

এই স্ক্রিপ্টটিতে উন্নতির জন্য অনেকগুলি জায়গা রয়েছে বলে মনে হয় তবে এটি এখন পর্যন্ত যে কোনওটির চেয়ে কম। এটি "এমডি" কমান্ডটি বিল্ট ইন ব্যবহার করে যা একটি বিভাগ এবং বাকী অংশের পূর্ণসংখ্যার ফলাফল প্রদান করে। এটি নিম্নলিখিতগুলি করে:

  • ইনপুট পড়ুন (এটি যদি কোনও ফাংশন হত বলে আমি অনুমান করি আপনি দুটি কম অক্ষরের জন্য q remove মুছে ফেলতে পারেন)
  • ইনপুটটি 100 দ্বারা গুণিত করে এবং এটি পূর্ণসংখ্যায় রূপান্তর করে
  • [25 10 5] ব্যবহার করে "এমডি" সম্পাদন করে যা স্ট্যাকের বাকী অংশগুলিতে ফলাফল দেয়
  • সংখ্যা এবং মুদ্রার নাম একত্রিত করে
  • প্রাক্তন 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

জাভাস্ক্রিপ্ট ES6, 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,"")

সরল গণিত


সুন্দর কাজ! আমি ভেবেছিলাম একটি বদ্ধ-সূত্র ইশ সমাধান রয়েছে
কনর ও'ব্রায়েন

? এই আউটপুটটি মুদ্রার ধরণটি যদি সেই মুদ্রার ধরণের শূন্য হয় না?
ফ্রেন্টস

@ ফ্রেন্টস নো, শেষে একটি রেইজেক্স রয়েছে যা মুদ্রার ধরণের শূন্য মুদ্রা সরিয়ে দেয়
ডাউনগোট

@ দো: দুঃখিত, ভিজ্যুয়াল
ক্লুজের

আপনি কি |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
ডিজিটাল ট্রমা

@ ডিজিটালট্রামা গণিত অপারেটরদের একগুচ্ছ চেষ্টা করেছেন, উদাহরণস্বরূপ [x^k for x in [10, 5, 1]]এবং [k/y for y in [25, 10, 5]]পৃথকভাবে k, তারপরে দেখলেন যে দুটি তালিকা ৫ টি দ্বারা অফসেট হয়েছিল সম্ভবত সাবঅপটিমাল, তবে আমার জোর করার সময় হয়নি।
Sp3000

এটি আসলে এর ইনপুট উপর (অন্তত আমার জন্য) ব্যর্থ 10.03এবং 10.04। পাইথনের ফ্লোটগুলির প্রতিনিধিত্ব এবং এটি কীভাবে তাদের কীটপত্রে নিয়ে আসে তা করা। ব্যবহার করে দেখুন "print %d"%(10.03*100)
ওগাদে

n=int(''.join(raw_input().split(".")))কাজ করতে পারে, কিন্তু এটি বেশ ভার্জোজ।
শার্লক 9


6

রেটিনা , 97

@ রেন্ডোমরা - (বরাবরের মত) ধন্যবাদ - 1 বাইট সংরক্ষিত

অনুমান ইনপুট হয় ফর্ম হয় xxx.yyবা xxx.y

\..$
$&0
\.

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

এটি অনলাইনে চেষ্টা করুন।


1
$&হিসাবে একই $0আপনি একটি বাইট সংরক্ষণ করতে পারবেন, যাতে $0.0দ্বারা $&0
এলোমেলো

0.9999999 এর মতো কিছু ইনপুট করে আউটপুটটি খানিকটা ক্রেজি
অ্যান্টনি ফ্যাম

@PythonMaster আমি যে জন্য সমর্থন যোগ করব যখন ফেড 10 micropenny টুকরা ;-) প্রচলন শুরু হয়
ডিজিটাল ট্রমা

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":"");}

এত ত্রৈমণি। ; -;


;-;এটা কি? ওটা কি একটা ওয়্যাম্পা?
বেকার

@ বেকার কান্নাকাটি
অ্যাডিসন ক্রম্প

2

জাভাস্ক্রিপ্ট ES6, 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

ল্যাবভিউ, 62 ল্যাবভিউ পুরষ্কার

নাম এবং মানগুলির জন্য 2 টি অ্যারে আইক্রেটেড করা হয়েছে এবং একটি মডুলো অপারেটর (আর আইকিউ জিনিস) ব্যবহার করে উপরের (i এর সাথে সূচক অ্যারে) মাধ্যমে যান। বাকি কয়েন শিফট রেজিস্টারে পাস করা হয়।

যদি মান 0 এর চেয়ে বড় হয় তবে আমি সংখ্যাকে স্ট্রিংয়ে রূপান্তর করি এবং পাসের ডাউন স্ট্রিংটি নম্বর এবং মুদ্রার নামকে সম্মতি জানাই এবং এটিকে আবার শিফট রেজিস্টারে রাখি।

ইজুস বুঝতে পেরেছিল আমার জিআইএফ মিথ্যা মামলাটি প্রদর্শন করে না তবে যাইহোক দেখার মতো কিছুই নেই, এটি কেবল যে স্ট্রিংটি এসেছে তার মধ্যে দিয়ে চলে যায়।


"আদিম" কীভাবে বাইটের সাথে তুলনা করে? X x y হলে "x আদিম" "y বাইটস" কে পরাজিত করে? কেবল জিজ্ঞাসা করছেন
লুইস মেন্ডো

আদিম গণনা করা হয় তা দেখতে আপনি লিঙ্কটি পরীক্ষা করতে পারেন। বাইটে ল্যাবভিউ কোডের আকার দেওয়া নিখরচায় অর্থহীন, যেহেতু একটি খালি vi ইতিমধ্যে k 10 কেবি বড়। গল্ফিং ভাষায় বাইটের চেয়ে অভিজ্ঞতার সাথে আরও কয়েকটি আদিম চিহ্ন রয়েছে তাই এটি সিজেমে বা এর মতো প্রায় 50-60 বাইট হতে পারে।
Eumel

1
@ লুইসেমেন্ডো আমরা কোনও ল্যাবভিউ ফাইলের তথ্য বিষয়বস্তুকে আদিম প্রতি এক বাইট দ্বারা সীমাবদ্ধ করতে পারি না, তাই প্রতি বাইটে আদিম প্রতি লাইটভিউ গণনা করা অন্যায় হবে।
lirtosiast

@ থমাসকওয়া টিবিএইচএইচ এটি খুব ভালভাবে তৈরি গল্ফিং ভাষার সাহায্যে আপনি করতে পারেন, প্রতিটি ইনপুট লুপের জন্য প্রতিটি অপারেশন 1 বাইট 1 বাইটের জন্য 2-4 বাইটের জন্য হয় এবং সময়গুলি 3 টি আদিম এবং তাই হয়
Eumel

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.32 18.33 এর পরিবর্তে।
ডি স্ট্রাউট

2

সি, 147 144 142 140 বাইট

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
এছাড়াও, আপনি আরও 2 বাইট সংরক্ষণের if(m/a[i])সাথে প্রতিস্থাপন করতে সক্ষম হতে পারেন m/a[i]&&
তাকরা

"quarter\0dime\0nickel\0penny"প্রিন্টফে ব্যবহার করার চেষ্টা করুন । প্রতিটি \ 0 স্ট্রিংটি সমাপ্ত করে, 1
টির

@ minerguy31 স্ট্রিং ব্যবহার \0করে প্রোগ্রামটি ক্র্যাশ করে। আমি নিশ্চিত না যে পুনরাবৃত্তি যেভাবে যাইহোক এই জাতীয় স্ট্রিংয়ের উপর কাজ করে।
আলেকজান্ডার রেভো


1

জাভাস্ক্রিপ্ট, 156 145 144 বাইট

ইটিএইচ প্রডাকশনের সূত্র উত্তরের সাথে কোনও মিল নেই, তবে যাইহোক ...

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}

এটি আমার প্রথম দফার গল্ফগুলির মধ্যে একটি, তাই কোনও উন্নতি অত্যন্ত প্রশংসা করা হয়! আমি ইটিএইচ এর "এক্সওর ট্রাঙ্ক" ইতিমধ্যে চুরি করেছি - দুঃখিত মানুষ, এটি খুব স্মার্ট ছিল :-)

আরও পঠনযোগ্য:

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..., যাতে আমার (এবং সম্ভবত সমস্ত জেএস জমা দেওয়া) সঠিকভাবে 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: ইনপুট () ব্যবহার এবং আমার কোডটিকে কোনও ফাংশনের পরিবর্তে স্ক্রিপ্ট বানানোর জন্য স্প 3000 এর ধারণাটি চুরি করেছে।

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পূর্ণসংখ্যার বৃত্তাকার এবং রূপান্তর করতে ব্যবহার করছিলাম । এখন আমি //গোল করে আবার যুক্ত করছি adding~~ পূর্ণসংখ্যায় রূপান্তর করতে করছি।

সম্পাদনা করুন 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"

ব্যাখ্যা:

প্রতিটি মুদ্রা দ্বারা ইনপুটটি Modulo করুন, তারপরে ফলাফল দ্বারা কয়েনগুলি ভাগ করুন।

মুদ্রার নাম সহ প্রতিটি ফলাফলকে একটি ফাংশনে ফিড করুন, মুদ্রার সংখ্যা শূন্য যদি না হয় তবে উভয়ের স্ট্রিংয়ের মান প্রদান করে।

সবকিছু নীচে ফ্ল্যাট করুন এবং সাদা স্থানের সাথে একত্রিত হন।


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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.