থ্রিপেনিসের মোটে কত গিনি?


32

১৯ 1971১ সালে দশমিকায়িত হওয়া অবধি ব্রিটিশ অর্থ পাউন্ডকে ২৪০ পয়সাতে ভাগ করার উপর ভিত্তি করে ছিল । একটি শিলিং ছিল 12 পেনি তাই 20 শিলিং এক পাউন্ড করে। সবচেয়ে ছোট সংজ্ঞাটি ছিল এক পয়সের এক চতুর্থ অংশে far মুদ্রার জন্য আরও অনেক সংজ্ঞা এবং ডাকনাম ছিল, যা আপনি সিস্টেমে অভ্যস্ত না হলে যথেষ্ট বিভ্রান্তি পেতে পারে।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা পুরানো ইংরাজী অর্থের যে কোনও সংজ্ঞা অন্যকে রূপান্তর করতে পারে। ব্যবহারকারীর পক্ষে এটি আরও সহজ করার জন্য আপনাকে বহুবচন এবং ডাক নামগুলি সমর্থন করতে হবে।

এগুলি হ'ল সংজ্ঞা এবং তাদের সমার্থক পদগুলি আপনাকে অবশ্যই সমর্থন করবে। সুবিধার জন্য ফরথিংয়ে তাদের মান প্রতিটি লাইনে নিয়ে যায়।

1: farthing, farthings
2: halfpence, halfpenny, halfpennies
4: penny, pennies, pence, copper, coppers
8: twopenny, twopennies, twopence, tuppence, half groat, half groats
12: threepence, threepenny, threepennies, threepenny bit, threepenny bits, thruppence, thrupenny, thrupennies, thrupenny bit, thrupenny bits
16: groat, groats
24: sixpence, sixpenny, sixpennies, sixpenny bit, sixpenny bits, tanner, tanners
48: shilling, shillings, bob
96: florin, florins, two bob bit, two bob bits
120: half crown, half crowns
240: crown, crowns
480: half sovereign, half sovereigns
504: half guinea, half guineas
960: pound, pounds, pounds sterling, sovereign, sovereigns, quid, quids
1008: guinea, guineas

(আমি ব্রিটিশ নই, এই তালিকাটি কোনওভাবেই প্রামাণিক নয় তবে এটি চ্যালেঞ্জের পক্ষে যথেষ্ট)

স্টিডিন বা ফাংশন আর্গুমেন্টের মাধ্যমে আপনার ফর্মটির একটি স্ট্রিং নেওয়া উচিত

[value to convert] [denomination 1] in [denomination 2]

এবং ফিরে বা মুদ্রণ

[value to convert] [denomination 1] is [converted value] [denomination 2]

যেখানে [converted value]হয় [value to convert]আখ্যা 1 ইউনিট আখ্যা 2 রূপান্তরিত।

[value to convert]এবং [converted value]ইতিবাচক ভাসে হয়। আউটপুটে উভয়ই 4 টি দশমিক স্থানে গোল করে বা কাটা উচিত। ইচ্ছা করলে আপনি ধরে নিতে পারেন [value to convert]সর্বদা দশমিক পয়েন্ট এবং শূন্য থাকে যখন ইনপুট (যেমন 1.0পরিবর্তে 1)।

সংজ্ঞা 1 এবং 2 উপরের তালিকা থেকে যে কোনও দুটি পদ থাকতে পারে। তারা বহুবচন বা না হওয়া নিয়ে চিন্তা করবেন না, সমস্ত সম্প্রদায় এবং প্রতিশব্দ একইরকম আচরণ করুন। আপনি ইনপুট ফর্ম্যাটটি ধরে নিতে পারেন এবং বর্ণগুলি সর্বদা বৈধ valid

উদাহরণ

1 pounds in shilling1 pounds is 20 shilling
(ভাল 1.0000 pounds is 20.0000 shillingহবে)

0.6 tuppence in tanner0.6 tuppence is 0.2 tanner

24 two bob bits in pounds sterling24 two bob bits is 2.4 pounds sterling

144 threepennies in guineas144 threepennies is 1.7143 guineas

স্কোরিং

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


1
"পেনি" কেবলমাত্র বহু সংখ্যক মুদ্রাকে বোঝাতে ব্যবহৃত হয়, অর্থের পরিমাণ নয়।
ডেভিড রিচার্বি

4
নীট-পিক: দশমিকের পরে পোস্ট, বহুবচন quidহয় quid। পুরানো অর্থের সাথে সম্ভবত এটি একই রকম হত। উদাহরণ: Five quid a pint! Cor blimey guvnor। ব্যতিক্রম: কুইড-ইন
ডিজিটাল ট্রমা

7
আমি সম্ভবত প্রচুর লোককে তাদের "হ্যাপেনি" অন্তর্ভুক্ত করার জন্য গণ্ডগোল করব।
কেইন

3
@ কেইন আমি হ্যাপ্পেনি ছাড়া আর কখনও শুনিনি ny যেমন এন.ইউইকিপিডিয়া.আর.উইকি / হাই ১০27 স্পেনি_ব্রিজ । অবশ্যই, আমি নিজেই খুব অল্প বয়সী হয়েছি যা বক্তৃতাতে খুব বেশি শুনেছি, তবে লিখিতভাবে এস্টোস্ট্রোফ স্ট্যান্ডার্ড বলে মনে হয়।
ট্রিগ

উত্তর:


9

পাইথ , 146 145

K4J24L?*y>b-5>b\t?2>b\t.5}<b2"hatw"@[1K8K12K16J48J1008*JT96*2J960)xc"fapetucothengrsishtagucrflbo"2<b2AGHcz" in"++G%" is %0.4f"*vhcGdcyjdtcGdytHH

আরও পাঠযোগ্য

K4J24
L?*y>b-5>b\t?2>b\t.5
  }<b2"hatw"
  @[1K8K12K16J48J1008*JT96*2J960)
   xc"fapetucothengrsishtagucrflbo"2<b2
AGHcz" in"
++G
  %" is %0.4f"
   *vhcGdcyjdtcGdytH
 H

আপডেট: দেখা যাচ্ছে, স্ট্রিং সূচক ক্রিয়াকলাপ চালানোর আগে স্ট্রিংটিকে 2 টি অক্ষরের স্ট্রিংয়ের তালিকায় কাটাতে 1 অক্ষর ছোট (কোনও জায়গার প্রয়োজন নেই)। /x"string"<b2 2-> xc"string"2<b2। আর কিছুই বদলাতে হবে না।

কিভাবে এটা কাজ করে:

  • এটি @ xnor এর প্রথম দুটি অক্ষর ব্যবহার করে মুদ্রার মূল্য অনুসন্ধান করার পদ্ধতির ব্যবহার করে, পাশাপাশি প্রাথমিকটি সনাক্ত করতে halfবা twoএটি সরিয়ে ফাংশনটিতে আবার কল করার কৌশলটি ব্যবহার করে ।

  • প্রথম দুটি অক্ষরের মান অনুসন্ধান করতে, এটি মুদ্রার প্রথম দুটি অক্ষরের অবস্থান একটি স্ট্রিংয়ের সন্ধান করে, তারপরে 2 দ্বারা বিভক্ত হয় এবং তালিকার সেই সূচকে মানটি নিয়ে যায়। এটি পাইথের ডিকের চেয়ে অনেক খাটো।

  • সত্য যে ব্যবহার xনির্বাণ এড়াতে আয় -1 ব্যর্থতা উপর (STRING মধ্যে এটি) po(কিলোগ্রাম) qu(খইনি) অথবা soস্ট্রিং (শাসনকর্তৃত্ব), এবং কেবল তালিকা, 960 এর শেষ উপাদান ফিরে ডিফল্টরূপে।

  • লুকিং সিস্টেমে মুদ্রার ক্রমটিকে পুনরায় সাজিয়ে এবং সাবধানতার সাথে আরম্ভের মাধ্যমে, K4এবং J24, তালিকার পৃথক সংখ্যার জন্য প্রয়োজনীয় সমস্ত স্থান সরিয়ে ফেলা হয়েছে।

  • পৃথক ভেরিয়েবলের ইনপুটটির শুরু এবং শেষ পেতে পাইপথের দ্বৈত অ্যাসাইনমেন্ট অপারেটরটি Aইনপুট বিভক্ত করে in

  • মূলত শেষে একই চেহারা আছে, যদিও পাইথের কোনও নেই .split(_,1), তাই এটি কিছুটা জটিল।

উদাহরণ:

$ pyth programs/currency.pyth <<< '5 florins in half guineas'
5 florins is 0.9524 half guineas

$ pyth programs/currency.pyth <<< '0.4 quid in sixpenny bits'
0.4 quid is 16.0000 sixpenny bits

3
আমি ছেড়ে দিই ...;)
মার্টিন এন্ডার

আমি জানি না <এবং >স্ট্রিং / তালিকার স্লাইস অপারেটর হিসাবে কাজ করেছি; এটি অনেক বেশি, মাথা বা চপ শেষ হওয়ার চেয়ে অনেক ভাল :)
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান দেখে মনে হচ্ছে এটি ডকুমেন্টেশন থেকেও অনুপস্থিত ছিল - আমি এটি যুক্ত করেছি।
isaacg

আমার সম্ভবত ম্যাক্রোস.পি.-এর মাধ্যমে আরও যত্ন সহকারে পড়া উচিত :)
ফ্রাইআম দ্য এজম্যান

14

রুবি, 345 306 302 288 287 278 273 253 252 242 232 221 202 190 বাইট

f=->s{" !#+/7OďǿȗϟЏ'"[%w{fa fp ^pe|co r..p ^gr x|ta sh|^b fl|b f.c ^c f.s .gu d|v ^g .}.index{|k|s[/#{k}/]}].ord-31}
$><<gets.sub(/ (.+ i)n /){" #{r=$1}s %0.4f ".%$`.to_f/f[$']*f[r]}

STDIN থেকে ইনপুট নেয় এবং STDOUT এ মুদ্রণ করে।

আমি প্রতিটি মানের জন্য কেবলমাত্র পছন্দসই সংজ্ঞা মেলে সংক্ষিপ্ত নিয়মিত এক্সপ্রেশন ব্যবহার করছি। দুটি সূচী রয়েছে, একটি রেগেক্স সহ এবং একটি মান সহ, একই সূচকগুলিতে। রেজেক্স অ্যারে হ'ল একটি স্পেস সীমিত অ্যারে আক্ষরিক, এবং মান অ্যারেটি ইউটিএফ -8 টি অক্ষরের স্ট্রিংয়ে প্যাক করা হয়।

আমি প্রতিটি বর্ণের সাথে মিলে যায় এমন একটি রেজেক্সের সন্ধান করে মানগুলিতে সূচকটি নির্বাচন করছি। আমি টিউপেন্স / হাফ-গ্রোটিস কেস (মান 8) এও ডিফল্ট করছি, কারণ এর জন্য সবচেয়ে দীর্ঘতম রেজেক্স প্রয়োজন। তেমনি, কিছু নিদর্শন ধরে নেওয়া হয় যে অন্যান্য মানগুলি পূর্ববর্তী নিদর্শনগুলির সাথে ইতিমধ্যে মিলেছে, সুতরাং প্রতিটি রেজেক্স কেবলমাত্র বাকী মানগুলি থেকে পছন্দসই মানটিকে পৃথক করে। এটি ব্যবহার করে, আমি সম্ভবত ডিনোমিনেশনের ক্রমটিকে পুনরায় সাজিয়ে আরও কয়েকটি দাগ কেটে ফেলতে পারি।

আমাকে সাহায্য করার জন্য Ventero ধন্যবাদ Pyth বীট এটা খাটো উপার্জন!


1
এটা তোলে Regex ম্যাচিং এর ( s[k]) যে মুছে ফেলা হয় $1ইত্যাদি আপনি একটি ল্যামডা মধ্যে মানচিত্র ব্লক চলন্ত এবং কলিং যে গত লাইনে সরাসরি (এটিও পারবেন আপনি বরাদ্দকরণ জন্য ড্রপ দ্বারা কয়েকটি অক্ষর সংরক্ষণ করতে পারবেন $1এবং $2)। এর .indexচেয়ে ছোটও .find_index
ভেন্টোরো

পছন্দ করুন ধন্যবাদ!
মার্টিন ইন্ডার

1
Regexp.new k/#{k}/এবং $><<gets.sub(/foo/){a=$3;...}gets[/foo/];a=$3;puts...221. মোট আর তুমি অবশ্যই একটি স্ট্রিং মধ্যে int- এ অ্যারে প্যাকিং (ব্যবহার পুরোনো কৌতুক ব্যবহার করতে পারেন .pack("U*")) এবং তারপর যে স্ট্রিং মধ্যে লিপিবদ্ধ করছি। আপনাকে 195 টি চর / 200 বাইটে নামানো উচিত।
ভেন্টোরো

আরও ভাল:a=gets[/foo/,3]
ভেন্টোরো

@ ভেন্তোরো অনেক ধন্যবাদ আমি 196/202 দিয়ে শেষ করেছি, কারণ আমি ছাপানো এএসসিআইআই এড়াতে চর কোডগুলিতে একটি অফসেট যুক্ত করেছি। পাইথের চেয়েও খাটো। ;)
মার্টিন ইন্ডার

8

পাইথন 3: 264 239 অক্ষর

f=lambda c:c[:2]in"hatw"and f(c[5-(c>'t'):])*2/4**(c<'t')or[1,4,4,4,8,12,16,24,24,48,48,96,240,1008,960]['fapecoentuthgrsitashboflcrgu'.find(c[:2])//2]
a,b=input().split(" in ")
x,c=a.split(" ",1)
print(a,"is %0.4f"%(eval(x)*f(c)/f(b)),b)

ফাংশনটি fমুদ্রা-স্ট্রিংয়ের শিলিংয়ের মানটি cপ্রথম দুটি অক্ষরকে একটি স্ট্রিংয়ে সন্ধান করে অভিধান ব্যবহার করে আঙুলের ছাপিয়ে দেয় । "অর্ধ" এবং "দুটি" উপসর্গগুলি উপসর্গ এবং স্থানটি কেটে এবং একটি গুণক প্রয়োগ করে সনাক্ত করা হয় এবং এর জন্য গণনা করা হয়। যেহেতু "হাফপেনি" "অর্ধেক" এর পরে একটি জায়গার অভাব রয়েছে, এর ফলে "এন্নি" আসে, তবে এটি একটি কাল্পনিক "এন" এন্ট্রি সহ পরিচালিত হয়।

অভিধান অনুসন্ধানে অনেক উন্নতির জন্য @ আইসএএসিজি এবং @ জিসিআরকে ধন্যবাদ


আমি জানতাম এটি করা যেতে পারে :) আমি অত্যন্ত বিব্রত বোধ করছি যে আপনি জানেন না যে আপনি এর মতো একটি
অভিধানও

2
@ ফ্রাইআম দ্য এজিগম্যান আমি এই শব্দটিতে কোনও উত্তরটিতে না দেখানো পর্যন্ত আপনি কীওয়ার্ডের মাধ্যমে অভিধানগুলি সংজ্ঞায়িত করতে পারিনি। আপনি গল্ফিং শিখেন এমন জিনিসগুলি ...
xnor

আমি এটির একটি পাইথ সংস্করণ তৈরি করেছি এবং 207 টি অক্ষর পেয়েছি। আপনি কি বরং এখানে আপনার পোস্ট করার জন্য আপনার সম্প্রদায়ের উইকি উত্তর যুক্ত করতে, বা পোস্ট করতে চান?
FryAmTheEggman

1
এই 2/4**(c<'t')অংশের জন্য +1 ।
njzk2

1
.get(c[:2],960)অভিধান থেকে মানটি অনুসন্ধান করে এবং অভিধান po=960,so=960,qu=960,থেকে এন্ট্রি বাদ দিয়ে আপনি 13 টি অক্ষর সংরক্ষণ করতে পারেন ।
isaacg

5

পাইথন 2 - 345 358

s=str.startswith
h='half'
u,v=raw_input().split(' in ')
a,b=u.split(' ',1)
C=dict(fa=1,pe=4,twop=8,tu=8,thr=12,gr=16,si=24,ta=24,sh=48,b=48,fl=96,c=240,po=960,so=960,q=960,gu=1008)
C.update({h+'p':2,h+' gr':8,'two ':96,h+' c':120,h+' s':480,h+' gu':504})
for c in iter(C):
 if s(b,c):k=C[c]
 if s(v,c):f=C[c]
print u+' is %0.4f '%(eval(a)*k/f)+v

পাইপথনে একটি ফ্লোট হতে ইনপুট নম্বর প্রয়োজন ie 144.1

আমি মনে করি এটি অজগর 3 এ সংক্ষিপ্ত করা যেতে পারে ...

... নিশ্চিত হন @ এক্সনরকে ধন্যবাদ আরও নিশ্চিত করেছেন যে আরও ভাল অ্যালগরিদম থাকা অনেক বিষয়;)


আমি প্রতিস্থাপন করবে q=raw_input().split(' in ')দ্বারাq,b=raw_input().split(' in ')
njzk2

@ njzk2 বেশ ঠিক ... আমি এখন পরবর্তী লাইনের জন্যও এটি ব্যবহার করেছি :)
FryAmTheEggman

আমি মনে করি যে অর্ধ h+' gr':8h+' g':504
খাঁজর

@ এনজেজকি 2 এটি সত্য ... uগিনিতে যুক্ত হয়েছে ...
FryAmTheEggman

2

হাস্কেল - 315 বাইট

w x=f(u x)*v(u x)
f=maybe 1 id.l"ha tw tu th si"[0.5,2,2,3,6]
v x@(_:xs)|Just w<-l"bo cr gr gu so co fa fl pe po qu sh ta"[12,60,4,252,240,1,0.25,24,1,240,240,12,6]x=w|True=v xs
l k v x=take 2 x`lookup`zip(words k)v
u=unwords
i s|(n:x,_:t)<-span(/="in")$words s=u$n:x++["is",show$read n*w x/w t]++t
main=interact i

2

জাভাস্ক্রিপ্ট (ES5), 344

I=prompt()
n=I.match(/[\d.]+ /)[0]
A=I.slice(n.length).split(" in ")
function m(x){return{fi:1,he:2,p:4,pe:4,cr:4,tn:8,hg:8,tp:12,te:12,g:16,gs:16,sn:24,tr:24,si:48,b:48,fn:96,to:96,hc:120,c:240,cs:240,hs:480,hgtrue:504,ps:960,se:960,q:960,ga:1008}[x[0]+(x[5]||"")+(x[10]=="a"||"")]}
alert(n+A[0]+" is "+(n*m(A[0])/m(A[1])).toFixed(4)+" "+A[1])

আমি একটি হ্যাশ ফাংশন পদ্ধতির সাথে গিয়েছিলাম ... আমি মনে করি যে ইনপুট প্রক্রিয়াকরণটি কতটা জটিল হবে (তুলনামূলকভাবে) আমি অবমূল্যায়ন করেছি (রেজেক্স পদ্ধতির উপর দিয়ে, যে সংখ্যাটির বিষয়ে চিন্তা করবে না)।


1

@ FryAmTheEggMan এর উত্তরের উপর ভিত্তি করে পরীক্ষার একটি পৃথক পদ্ধতি str.startwith:

পাইথন 2: 317

h='half'
C=dict(fa=1,pe=4,twop=8,tu=8,thr=12,gr=16,si=24,ta=24,sh=48,b=48,fl=96,c=240,po=960,so=960,q=960,gu=1008)
C.update({h+'p':2,h+' gr':8,'two ':96,h+' c':120,h+' s':480,h+' gu':504})
u,v=raw_input().split(' in ')
a,b=u.split(' ',1)
s=lambda x:x and C.get(x, s(x[:-1]))
print u+' is %0.4f '%(eval(a)*s(b)/s(v))+v

আমি মনে করি আপনার printএবং বিন্যাসিত স্ট্রিংয়ে একটি পিছনের স্থান যুক্ত করা দরকার । আপনি s=lambda x:x and C.get(x,s(x[:-1]))or 0কোনও অক্ষর সংরক্ষণ করার জন্য ল্যাম্বদাও আবার লিখতে পারেন (স্পেসগুলি সহ)। এটি
বিটিডব্লিউ

ধন্যবাদ, আমি এই ত্রৈমাসিক স্বরলিপিটি দিয়ে কিছু সময়ের জন্য বিস্মৃত হয়েছি, যা আমি সর্বদা ভার্জোজ খুঁজে পাই, তবে and/orজিনিসটির দ্বারা পাইনি ।
njzk2

হ্যাঁ, আমি এটি এখানে শিখেছি :) আমিও মনে করি যে "অর্ধ সার্বভৌম" এর মতো ফাঁকা স্থানগুলির মুদ্রার জন্য আপনাকে u.split(' ')বলার দরকার u.split(' ',1)আছে।
FryAmTheEggman

সুতরাং যে কারণ , 1!
njzk2

2
তিন x and y or 0থেকে সাধারণভাবে সংক্ষিপ্ত করা যেতে পারে x and y, যেহেতু উভয় মূল্যায়ন 0বা equivalently Falseযখন xFalsey হয়।
xnor

1

জাভাস্ক্রিপ্ট ES6, 264 273

f=t=>{s=t.split(x=' in')
c=d=>{'t0sh|bo0^p|co0f0fp0fl|b b0gu0d|v0wn0gr0f g|t..?p0f s0f gu0f c0x|an'.split(0).map((e,i)=>{v=s[d].match(e)?[12,48,4,1,2,96,1008,960,240,16,8,480,504,120,24][i]:v})
return v}
return s.join(' is '+~~(1e4*t.split(' ')[0]*c(0)/c(1))/1e4)}

এটি প্রতিটি মুদ্রার মান বিভিন্ন বিভক্তদের বিরুদ্ধে পরীক্ষা করে, বিস্তৃত দিয়ে শুরু করে /t/; অন্য কোনও মিলের মুখোমুখি হলে মানটি ওভাররাইট করা হয়। রেজেক্স স্ট্রিংটি পুনরায় অর্ডার করে একটি দম্পতি বাইট ছাঁটাই করার কোনও উপায় থাকতে পারে। আপনি উপরের স্নিপেট ব্যবহার করে এটি পরীক্ষা করতে পারেন (এটি কেবলমাত্র ডায়ালগ বাক্স ব্যবহার করতে এবং ES6 তীর ফাংশনগুলি সরিয়ে ফর্ম্যাট করা হয়েছে যাতে প্রত্যেকে কোডটি সহজে পরীক্ষা করতে পারে)। পরামর্শের জন্য আলকোনজাকে ধন্যবাদ।


1
আপনি ছাঁটা পারেন 2 ব্যবহার করে অক্ষর 't0sh|bo0^p....'.split(0), 4 ব্যবহার করে আরও .mapপরিবর্তে .forEachএবং 3 কল করে আরো c(0)এবং c(1)এবং করছেনs[d].match
Alconja
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.