আউটপুটিং অর্ডিনাল সংখ্যা (1 ম, 2 য়, 3 য়)


43

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

নমুনা:

1st  
2nd  
3rd  
4th  
...  
11th  
12th  
13th  
...  
20th  
21st
22nd
23rd
24th

এবং তাই, প্রত্যয়টি প্রতি 10 টি 100 অবধি প্রাথমিক 1-10 সাব-প্যাটার্ন পুনরাবৃত্তি করে, যেখানে প্যাটার্নটি শেষ পর্যন্ত শুরু হয়।

উপরের চিত্রের মতো ইনপুটটি সংখ্যা এবং আউটপুটকে অর্ডিনাল স্ট্রিং হিসাবে দেখাবে।

এর জন্য ক্ষুদ্রতম অ্যালগরিদম কী?


হাই, নিকসি, এবং কোডগলফ.এসই তে স্বাগতম! কেবল স্পষ্ট করে বলতে গেলে, আপনি কি বোঝাতে চাইছেন যে আমাদের 11ইনপুট, এবং আউটপুট যেমন একটি সংখ্যা পড়া উচিত 11th? ইনপুটটিতে প্রতিটি সংখ্যা পৃথক লাইনে থাকে এবং আউটপুট নম্বরগুলিও পৃথক লাইনে থাকা উচিত? এবং আমাদের কি একাধিক লাইন ইনপুট পরিচালনা করতে হবে?
ইলমারি করোনেন

1
আপনি কি ক্ষুদ্রতম অ্যালগরিদম বা ক্ষুদ্রতম কোডের সন্ধান করছেন?
টোটো

@ ইলমারি আমি 11ইনপুট এবং 11thআউটপুট হিসাবে সন্ধান করছি । এটি একাধিক লাইন প্রসেস করছে কিনা তাতে আমার আপত্তি নেই তবে আমার মনে যা ছিল তা কেবল একটি একক সংখ্যক প্রক্রিয়াজাতকরণ।
নিকোল

@ এম 42 আপনি জানেন, আমি সত্যই নিশ্চিত নই। আমার কোনও কঠোর প্রয়োজন নেই - তবে আমি সম্ভবত সবচেয়ে ছোট অ্যালগরিদম ভাবছিলাম।
নিকোল

উত্তর:


30

পার্ল, 37 + 1 টি অক্ষর

s/1?\d\b/$&.((0,st,nd,rd)[$&]||th)/eg

এটি একটি রেজিএক্সপেক্ট বিকল্প যা $_ইতিমধ্যে কোনও চিঠি অনুসরণ না করে এমন কোনও সংখ্যার জন্য যথাযথ অর্ডিনাল প্রত্যয় যুক্ত করে । ফাইল ইনপুটটিতে এটি প্রয়োগ করতে, pকমান্ড লাইন সুইচটি ব্যবহার করুন :

perl -pe 's/1?\d\b/$&.((0,st,nd,rd)[$&]||th)/eg'

এটি একটি সম্পূর্ণ পার্ল প্রোগ্রাম যা স্টিডিন থেকে ইনপুট পড়ে এবং প্রসেসড আউটপুটটি স্টাডাউটে লেখে। আসল কোডটি 37 অক্ষর দীর্ঘ, তবে pস্যুইচটি একটি অতিরিক্ত চরিত্র হিসাবে গণ্য

নমুনা ইনপুট:

This is the 1 line of the sample input...
...and this is the 2.
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
101 102 103 104 105 106 107 108 109 110

আউটপুট:

This is the 1st line of the sample input...
...and this is the 2nd.
1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th
11th 12th 13th 14th 15th 16th 17th 18th 19th 20th
21st 22nd 23rd 24th 25th 26th 27th 28th 29th 30th
101st 102nd 103rd 104th 105th 106th 107th 108th 109th 110th

ইতিমধ্যে অক্ষর দ্বারা অনুসরণ করা নম্বরগুলি উপেক্ষা করা হবে, সুতরাং ফিল্টারটির মাধ্যমে পুনরায় আউটপুট খাওয়ানো এটি পরিবর্তন হবে না। সংখ্যাগুলির মধ্যে স্পেস, কমা এবং পিরিয়ডগুলি বিশেষভাবে চিকিত্সা করা হয় না, তাই তারা অন্য যতিচিহ্নের মতো পৃথক সংখ্যা হিসাবে ধরে নেওয়া হয়। সুতরাং, যেমন 3.14159হয় 3rd.14159th

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

  • প্রথমত, এটি একটি গ্লোবাল রেজিপ্লেক্স প্রতিস্থাপন ( s///g)। যে রেজিপেক্সটি মিলছে তা হ'ল 1?\d\bযেখানে \dকোনও অঙ্কের সাথে মিলে যায় এবং \bএটি শূন্য-প্রস্থের একটি বর্ণমালা যা বর্ণানুক্রমিক এবং অ-অক্ষরীয় অক্ষরের মধ্যে সীমা মেলে। সুতরাং, 1?\d\bকোনও সংখ্যার শেষ সংখ্যাটির সাথে মিল রয়েছে, এর সাথে যদি পূর্ববর্তী অঙ্কটি ঘটে থাকে 1

  • পরিবর্তনের ক্ষেত্রে, যা /eস্যুইচের কারণে পার্ল কোড হিসাবে মূল্যায়ন করা হয় , আমরা তালিকার সাথে একটি পূর্ণসংখ্যা সূচক হিসাবে নিজেকে ম্যাচিং স্ট্রিং সেগমেন্ট ( $&) এবং অ্যাপেন্ড ( .) এ যোগ করি ; যদি এই প্রত্যয়টি শূন্য বা অপরিজ্ঞাত হয় (অর্থাত্ শূন্য বা তিনটির চেয়ে বেশি হয়), অপারেটর এটির পরিবর্তে ।$&(0,st,nd,rd)$&||th


সম্পাদনা: যদি ইনপুটটি একটি একক পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ থাকে তবে এই 35 টি চরিত্রের সমাধানটি যথেষ্ট হবে:

s/1?\d$/$&.((0,st,nd,rd)[$&]||th)/e

1
gপ্রতিস্থাপনটি বাদ দিতে সক্ষম হওয়া উচিত যদি আপনি উল্লেখ করেন যে প্রতিটি সংখ্যা অবশ্যই তার নিজস্ব লাইনে থাকতে হবে। এছাড়াও, এটি আপনাকে শব্দের সীমাটি হতে পরিবর্তন করতে দেয় $। তবে সামগ্রিকভাবে, +1, জঘন্য চতুর সমাধান।
মিঃ লালমা

@ গিগাওয়াট: প্রকৃতপক্ষে, ইনপুট ফর্ম্যাট সম্পর্কে নিকের আমার প্রশ্নের উত্তর দেওয়ার আগে আমি কোডটি লিখেছিলাম, তাই আমি এটিকে যথাসম্ভব জেনেরিক করেছিলাম।
ইলমারি করোনেন

38

পাইথন 2, 49 বাইট

lambda n:`n`+'tsnrhtdd'[n%5*(n%100^15>4>n%10)::4]

একটি বেনামে ফাংশন। একটি সম্পূর্ণ প্রোগ্রাম 55 বাইট গণনা করা হবে।

'tsnrhtdd'[i::4]0 থেকে 3 এর th st nd rdমানগুলির জন্য প্রত্যয়গুলি এনকোড করে দেয় এটি iদেওয়া, আমাদের কেবলমাত্র প্রয়োজনীয় nপ্রত্যয়টির সূচকে মানগুলি মানচিত্রের একটি উপায় i। একটি সহজ সরল অভিব্যক্তি যা কাজ করে (n%10)*(n%10<4 and 10<n%100<14)। আমরা প্রথম বন্ধনীগুলির প্রথম সেটটি ফেলে রেখে এবং এটি বিশেষ প্রত্যয় সহ মানগুলির জন্য n%5একই ফলাফল প্রদান করে পর্যবেক্ষণ করে সহজেই এটি সংক্ষিপ্ত করতে পারি । কিছুটা পরীক্ষা এবং ত্রুটির সাথে একজনের সংক্ষিপ্তসারও ঘটতে পারে , যা আরও বাইটস সংরক্ষণ করার জন্য অন্য শর্তাধীন শৃঙ্খলাবদ্ধ হতে পারে।n%10n10<n%100<14n%100^15>4


3
: এই কিছু কালো জাদু এখানে ডান গ
বিড়াল


আমি পাই না। এখানে কি ঘটছে তা কি কেউ ব্যাখ্যা করতে পারেন?
পাভেল

@ পাভেল আমি একটি উত্তর দিয়ে আমার উত্তর আপডেট করেছি।
xsot

অসাধারণ! দুর্দান্তভাবে ভাবার উপায় ...
বেনিসন স্যাম

10

পাইথন, 68 টি অক্ষর

i=input()
k=i%10
print"%d%s"%(i,"tsnrhtdd"[(i/10%10!=1)*(k<4)*k::4])

4
এটি সত্যিই দেরি হয়ে গেছে তবে আপনি 7 বাইট করে তা বন্ধ করে নিতে পারেন `i`+"tsnrhtdd"। অন্যথায়, এটি হ'ল সঠিক সমাধান just
DLosc

10

গণিত 39 39 বাইট

দ্রষ্টব্য: গণিতের সাম্প্রতিক সংস্করণগুলিতে , যেখানে অপরিজ্ঞাত রয়েছে তার nthঅংশটি জিজ্ঞাসা করে একটি ত্রুটি বার্তা উত্পন্ন করে, তবে যাইহোক সঠিক উত্তর প্রদান করে। আমি ত্রুটি বার্তাটি মুদ্রণ থেকে আটকাতে যুক্ত করেছি ।ppQuiet

Quiet@StringSplit[SpokenString[p[[#]]]][[2]]&

ব্যবহার

Quiet@StringSplit[SpokenString[p[[#]]]][[2]] &[31]

31

Quiet@StringSplit[SpokenString[p[[#]]]][[2]] &/@Range[21]

{"প্রথম", "দ্বিতীয়", "তৃতীয়", "চতুর্থ", "5 ম", "ষষ্ঠ", "সপ্তম", "8 তম", "9 ম", "দশম", "11 তম", "দ্বাদশ", " 13 তম "," 14 তম "," 15 তম "," 16 তম "," 17 "," 18 তম "," 19 তম "," 20 তম "," 21 ""


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

SpokenStringএটি যে কোনও বৈধ ম্যাথমেটিকার মত প্রকাশের কথা বলেছিল তাই বলে দেয়। স্পোকেনস্ট্রিংয়ের ডকুমেন্টেশন থেকে নীচে দুটি উদাহরণ দেওয়া হয়েছে ,

SpokenString[Sqrt[x/(y + z)]]

"পরিমাণ y এর চেয়ে বেশি পরিমাণে x এর বর্গমূল" *)

SpokenString[Graphics3D[Sphere[{{0, 0, 0}, {1, 1, 1}}]], "DetailedGraphics" -> True]

"0, 0, 0 এবং 1, 1, 1 কেন্দ্রে ইউনিট গোলকের সমন্বয়ে একটি ত্রি-মাত্রিক গ্রাফিক"


এখন, উদাহরণ হিসাবে হাতের কাছে,

Quiet@SpokenString[p[[#]]] &[31]

"পি এর 31 তম উপাদান"

শব্দগুলির একটি তালিকা হিসাবে উপরের স্ট্রিংটি উপস্থাপন করুন:

StringSplit[%]

the "the", "31st", "উপাদান", "এর", "পি"}

এবং দ্বিতীয় উপাদান গ্রহণ ...

%[[2]]

31


আমি বিভ্রান্ত; pসংজ্ঞায়িত কোথায় ? সম্পাদনা: কিছু মনে করবেন না, আমি দেখছি আপনি কীভাবে এটি ব্যবহার করছেন; দুর্ভাগ্যক্রমে এটি আমার সিস্টেমে কাজ করে না। : - /
মিঃ উইজার্ড

এটি v.9.0.1 এ কাজ করে। (আমি মনে করি মনে হচ্ছে আপনি 7.0 ব্যবহার করছেন)) হ্যাঁ, পি সংজ্ঞায়িত করার দরকার নেই।
ডেভিডসি

আমি এখন বুঝতে পারি। যাইহোক, v7 এ আমি SpokenString @ p[[117]]আউটপুট থেকে পাই " part 117 of p"
মিঃ উইজার্ড

তাই SpokenStringসময়ে সময়ে সংশোধিত হয়। আমি এই কোডটি ( কোডগল্ফ.স্ট্যাকেক্সেঞ্জার.কমেসেশনস / ৮৮৮৯/২ ) বি। On. তেও কাজ করে না, আমি অবাক হব না B বিটিডাব্লু , এটি স্থায়ী সমাধান হিসাবে বোঝানো হয়নি।
ডেভিডসি

হাহ, আমি এর আগে উত্তরটি দেখিনি।
মিঃ উইজার্ড

7

রুবি, 60

এটি পার্ল এন্ট্রির মতো ভাল নয়, তবে আমি বুঝতে পেরেছিলাম যে আমি আমার রুবি দক্ষতা নিয়ে কাজ করব।

def o(n)n.to_s+%w{th st nd rd}[n/10%10==1||n%10>3?0:n%10]end

ফাংশনটি একটি পূর্ণসংখ্যার আর্গুমেন্ট গ্রহণ করে nএবং স্ট্রিংটিকে অরজিনাল ফর্ম হিসাবে দেয় returns

নিম্নলিখিত যুক্তি অনুসারে কাজ করে:
দশকের অঙ্কটি যদি 1 হয় বা অঙ্কগুলি 3 এর বেশি হয় তবে 'ত' প্রত্যয়টি ব্যবহার করুন; অন্যথায় সূচি হিসাবে চূড়ান্ত অঙ্কটি ব্যবহার করে অ্যারের থেকে ['th', 'st', 'nd', 'rd'] থেকে প্রত্যয়টি সন্ধান করুন।


o(113)হয় "113rd", হওয়া উচিত "113th"। দশ দশকের অঙ্কের চেকটি দুটি সংখ্যার বেশি সংখ্যার সংখ্যার জন্য অ্যাকাউন্ট করে না।
হামার

ঠিক আছে, %10ক্ষতিপূরণ দেওয়ার জন্য অন্যের মধ্যে বসালেন । 3 টি অক্ষর যুক্ত করা হয়েছে। (আমার মনে %10হচ্ছে যথেষ্ট উপস্থিত হয়েছে যেখানে এটি কোনওভাবে ছোট করা উচিত তবে আমি কোনও সমাধানের কথা ভাবতে পারি না)
মিঃ লালমা

যতটা সম্ভব সংক্ষিপ্ত
আকারের ভয়াবহ অজানা

একটি পরিবর্তনশীল সেট 10?
wizzwizz4

আমি ভেরিয়েবল সেট n%10করা ভাল বলে মনে করি ।
ক্যালকুলেটরলাইন

6

জাভাস্ক্রিপ্ট (ES6) 50 44 বাইট (প্রতিদ্বন্দ্বী)

a=>a+=[,"st","nd","rd"][a.match`1?.$`]||"th"

নোট

  • স্ট্রিং হিসাবে imput লাগে
  • 6 বাইট অপসারণ করা হয়েছে, ধন্যবাদ @ ব্যবহারকারী 81655

1
a+-> a+=, বন্ধনীগুলি সরান, \d-> ., সরান [0], এবং যদি আপনি স্ট্রিং হিসাবে নম্বরটি নেন: a.match`1?.$`পরিবর্তে /1?.$/.exec(a)
ব্যবহারকারী81655

আপনার সম্ভবত একটি নোটিশ যুক্ত করা উচিত এই উত্তরটি প্রতিদ্বন্দ্বী, কারণ চ্যালেঞ্জ পোস্ট হওয়ার সময় ES6 উপস্থিত ছিল না।
ব্যবহারকারী 2428118

5

জাভাস্ক্রীপ্ট, 68 71

function o(n){return n+([,'st','nd','rd'][~~(n/10%10)-1?n%10:0]||'th')}

ইটসকসমোর সাথে যৌথ প্রচেষ্টা।

সম্পাদনা: 100 টি সংখ্যা সহ সঠিকভাবে কাজ করা হয়নি


আপনি এটিকে 62 এর সাথে function o(n)n+([,'st','nd','rd'][~~(n/10%10)-1?n%10:0]||'th')নামিয়ে আনতে পারেন : এবং যদি আপনি চর্বিযুক্ত তীর চিহ্ন ব্যবহার করতে খুশি হন তবে আপনি এটিকে আরও 54 এ নামিয়ে আনতে পারেন:o=n=>n+([,'st','nd','rd'][~~(n/10%10)-1?n%10:0]||'th')
ওয়ালিওয়েস্ট

@ ওয়েলিওয়েস্ট কোনও কারণে, আমি সত্যিই পছন্দ করি যে আমার সমাধানটি আধুনিক ব্রাউজারগুলিতে কাজ করে। আপনার নিজের উত্তর পোস্ট করতে নির্দ্বিধায়; আমার মনে হয় এর যথেষ্ট আলাদা different
এ্যাববিস

না, ঠিক আছে! কেবল কয়েকটি বিকল্প সরবরাহ!
ওলিওয়েস্ট

3

গল্ফস্ক্রিপ্ট, 34 টি অক্ষর

~.10/10%1=!1$10%*.4<*'thstndrd'2/=

3

হাস্কেল, 95 টি অক্ষর

h=foldr g"th".show
g '1'"th"="1st"
g '2'"th"="2nd"
g '3'"th"="3rd"
g '1'[x,_,_]='1':x:"th"
g a s=a:s

পরীক্ষামূলক:

*Main> map h [1..40]
["1st","2nd","3rd","4th","5th","6th","7th","8th","9th","10th","11th","12th","13t
h","14th","15th","16th","17th","18th","19th","20th","21st","22nd","23rd","24th",
"25th","26th","27th","28th","29th","30th","31st","32nd","33rd","34th","35th","36
th","37th","38th","39th","40th"]

-XNoMonomorphismRestriction দিয়ে লোড করা আবশ্যক।


3

জাভাস্ক্রিপ্ট, characters৪ টি অক্ষর (ES3) বা 47 টি অক্ষর (ES6)

ES3 (characters৪ টি অক্ষর):

function(n){return n+=[,'st','nd','rd'][n%100>>3^1&&n%10]||'th'}

ES6 (47 টি অক্ষর):

n=>n+=[,'st','nd','rd'][n%100>>3^1&&n%10]||'th'

ব্যাখ্যা

অঙ্কগুলি সহ যে n % 100 >> 3 ^ 1কোনও ইতিবাচক nসমাপ্তির জন্য এক্সপ্রেশন 0 তে মূল্যায়ন করে 08- 15। সুতরাং, কোন n mod 100শেষ হওয়া 11, 12অথবা 13, এরে লুকআপ আয় undefined, এর একটি প্রত্যয় নেতৃস্থানীয় th

কোনো ইতিবাচক জন্য nছাড়া অন্য সংখ্যা শেষ হওয়া 08- 15প্রকাশের n % 100 >> 3 ^ 1একটি ধনাত্মক পূর্ণসংখ্যা মূল্যায়ণ প্রকাশের invoking n % 10, এরে লুকআপ জন্য ফিরে st, ndঅথবা rdজন্য nসঙ্গে যা প্রান্ত 1, 2অথবা 3। অন্যথায় th,।


সাথে একটি বাইট সংরক্ষণ করুন n+=[,'st','nd','rd'][n%100>>3^1&&n%10]||'th'
শেগি

@ শেগি, ধন্যবাদ, প্রস্তাবিত হিসাবে আপডেট হয়েছে।
টমাস ল্যাংকাআস


@ গেস্ট 271314, এই কোডটি ব্যবহার হচ্ছে তা দেখে মজাদার। মনে রাখবেন এটি কেবল ধনাত্মক সংখ্যার জন্যই কাজ করে, অন্য বিকল্পটি হ'ল এই পোস্টটিn+=[,"st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10]||"th" থেকে অভিযোজিত ।
টমাস ল্যাংকায়াস

3

এপিএল (ডায়ালগ ইউনিকোড) , 38 36 বাইট

বাইট গণনা বজায় রাখার সময় বাগ ঠিক করার জন্য এনএনজিকে ধন্যবাদ Thanks

বেনামে ট্যাসিট উপসর্গ কার্য। প্রয়োজন ⎕IO( আমি ndex হে rigin) এর সেট 0, যা অনেক সিস্টেমে পূর্বনির্ধারিত। এমনকি 0 জন্য কাজ করে!

⍕,{2'thstndrd'↓⍨2×⊃⍵⌽∊1 0 8\⊂10↑⍳4}

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

{... } নামবিহীন ল্যাম্বদা; যুক্তি:

⍳4 প্রথম চার d n ডিভাইস;[0,1,2,3]

10↑ সেখান থেকে প্রথম দশটি উপাদান নিন, শূন্যের সাথে প্যাডিং করুন: [0,1,2,3,0,0,0,0,0,0]

 একক উপাদান হিসাবে আচরণ বন্ধ করুন; [[0,1,2,3,0,0,0,0,0,0]]

1 0 8\ একটি অনুলিপি, একটি প্রোটোটাইপিকাল অনুলিপি (সমস্ত শূন্য), আট অনুলিপি প্রসারিত করুন;
  [[0,1,2,3,0,0,0,0,0,0],
   [0,0,0,0,0,0,0,0,0,0],
   [0,1,2,3,0,0,0,0,0,0],
   [0,1,2,3,0,0,0,0,0,0],
   ⋮ (আরও 5)
   [0,1,2,3,0,0,0,0,0,0]]

ε nlist (চেপ্টা);
  [0,1,2,3,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,
   0,1,2,3,0,0,0,0,0,0,
   0,1,2,3,0,0,0,0,0,0,
   ⋮ (আরও 50)
   0,1,2,3,0,0,0,0,0,0]

⍵⌽ আর্গুমেন্ট দ্বারা নির্দেশিত হিসাবে বহু পদক্ষেপে বক্রাকারে ঘোরান

 প্রথম সংখ্যাটি বেছে নিন (অর্থাত্ আর্গুমেন্ট-মোড -100' তম সংখ্যা)

 যে গুন দুটি (দেয় 0, 2, 4, অথবা 6)

'thstndrd'↓⍨এই স্ট্রিং থেকে যে অনেক অক্ষর ড্রপ

2↑ বাকি অক্ষরের প্রথম দুটি নিন take

⍕, যে স্ট্রিংযুক্ত যুক্তি যুক্তিযুক্ত



⍕,{2↑'thstndrd'↓⍨2×⊃⍵⌽∊1 0 8\⊂10↑⍳4}
এনজিএন

দুঃখিত, আমি উল্লেখ করতে ভুলে গেছি ⎕io←0। আমি আপনাকে এটি অনুমান করতে দেখতে পাচ্ছি, তবে কয়েকটি 1,2,3,4,0,0 আছে ... যা 0,1,2,3,0,0 হওয়া উচিত ...
এনজিএন

@ জিএন ফিক্সড এবং 0 এর জন্যও কাজ করে!
অ্যাডম

2

পাওয়ারশেল, 92

process{"$_$(switch -r($_){"(?<!1)1$"{'st'}"(?<!1)2$"{'nd'}"(?<!1)3$"{'rd'}default{'th'}})"}

ইনপুট প্রতি লাইন এক নম্বর দিয়ে কাজ করে। পাইপলাইনের মাধ্যমে ইনপুট দেওয়া হয়। এটি কেবলমাত্র একটি সংখ্যার জন্য কাজ করা আকার হ্রাস করে না।


2

জে - 44 চর

জেতে কিছুই নেই? এটা একটা ক্ষোভ!

(":,th`st`nd`rd{::~10 10(]*[(~:*])4>])/@#:])

বর্ণিত (নোট যে 1জুলে বুলিয়ান সত্য এবং 0মিথ্যা):

  • 10 10(...)/@#:]- প্রথমে আমরা আর্গুমেন্টটি গ্রহণ করি ( ]এবং দশকে এবং সংখ্যাগুলি ( ) খুঁজে পাই 10 10 #:। তারপরে, আমরা (...)দুজনের মধ্যে সন্নিবেশ করব ।
  • (]*[(~:*])4>])- এই সূক্ষ্ম এক্সপ্রেশনে, তবে অন্তঃস্থলটি নয়, একের ]অঙ্ক এবং [দশকের অঙ্ককে নির্দেশ করবে ।
  • [(~:*])4>]- ~:জে "নোট-ইকুয়াল" এর জন্য, সুতরাং এটি ফলাফল গ্রহণ করে 4>](অর্থাত্ একটি অঙ্ক 4 এর চেয়ে কম কিনা) এবং এর ফলাফল দ্বারা এটিকে বহুগুণ করে tens ~: (4>])। কেন কেউ এই কাজ করবে? নিম্নোক্ত বিবেচনা কর:
    • যদি আমরা 10, 11, 12, 13 পরীক্ষা করে দেখি তবে tensতা 1(আমরা কিশোর বয়সে আছি) এবং ones4 এরও কম, সুতরাং tens ~: (4>])মিথ্যা এবং ফলাফল 0*1= 0
    • যদি আমরা {X0, X1, X2, X3 of এর মধ্যে অন্য কোনও হয় তবে স্পষ্টভাবে tens ~: (4>])সত্য এবং আমরা বেরিয়ে যাব 1*1= 1
    • যদি onesচারটির বেশি হয় তবে তা 4>]ছিল 0এবং পরীক্ষার সাথে আর কী ঘটে যায় তা বিবেচ্য নয়, আমরা 0নির্বিশেষে বেরিয়ে যাব ।
    • সুতরাং সংক্ষেপে বলা যায়, [(~:*])4>]আমরা 1যদি {X0, X1, X2, X3 in এ আছি তবে কিশোর-কিশোরীদের মধ্যে নেই এবং 0অন্যথায়।
  • ]*- অবশেষে আমরা ফলাফলটি অঙ্ক দ্বারা গুণ করি। সুতরাং এই পণ্যটি হবে 0যদি সংখ্যাটি 'th'প্রত্যয়টি প্রাপ্য হয় , অন্যথায় এর মান।
  • th`st`nd`rd{::~- আমরা প্রত্যয়গুলির তালিকা সূচীকরণের জন্য উপরের থেকে সংশোধিতগুলি-অঙ্কটি ব্যবহার করি। 0পায় 'th', 1পায় 'st', ইত্যাদি।
  • ":,- অবশেষে, আসল নম্বরটি ধরুন, এটিকে একটি স্ট্রিং ( ":) এ রূপান্তর করুন এবং তারপরে এটি প্রত্যয়টিতে প্রেনড করুন।

ব্যবহার সুস্পষ্ট, যদিও ক্রিয়াটি কেবল একটি অর্ডিনাল নিতে পারে, তালিকা নয়।

   (":,th`st`nd`rd{::~10 10(]*[(~:*])4>])/@#:]) 112         NB. single use
112th
   (":,th`st`nd`rd{::~10 10(]*[(~:*])4>])/@#:]) 1 2 3 4 5   NB. doing it wrong
|length error
|       (":,th`st`nd`rd{::~10 10(]*[(~:*])4>])/@#:])1 2 3 4 5
   NB. i.5 10   makes a 5x10 grid of increasing integers
   NB. &.>      to operate on each integer separately, and box the result after
   (":,th`st`nd`rd{::~10 10(]*[(~:*])4>])/@#:])&.> i.5 10   NB. all better
+----+----+----+----+----+----+----+----+----+----+
|0th |1st |2nd |3rd |4th |5th |6th |7th |8th |9th |
+----+----+----+----+----+----+----+----+----+----+
|10th|11th|12th|13th|14th|15th|16th|17th|18th|19th|
+----+----+----+----+----+----+----+----+----+----+
|20th|21st|22nd|23rd|24th|25th|26th|27th|28th|29th|
+----+----+----+----+----+----+----+----+----+----+
|30th|31st|32nd|33rd|34th|35th|36th|37th|38th|39th|
+----+----+----+----+----+----+----+----+----+----+
|40th|41st|42nd|43rd|44th|45th|46th|47th|48th|49th|
+----+----+----+----+----+----+----+----+----+----+

2

সি #, 62 বাইট

n=>n+(n/10%10==1||(n%=10)<1||n>3?"th":n<2?"st":n<3?"nd":"rd");

সম্পূর্ণ প্রোগ্রাম এবং যাচাইকরণ:

using System;

namespace OutputOrdinalNumbers
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,string>f= n=>n+(n/10%10==1||(n%=10)<1||n>3?"th":n<2?"st":n<3?"nd":"rd");

            for (int i=1; i<=124; i++)
                Console.WriteLine(f(i));
        }
    }
}

আপনি পরিবর্তন করে দুই বাইট দ্বারা এটি গলফ পারেন ||করতে |
কেভিন ক্রুইজসেন

2

গণিত 29 + 5 = 34 বাইট

SpokenStringDump`SpeakOrdinal

+5 বাইট কারণ Speakএই বিল্ট- ইনটি ব্যবহারের আগে অবশ্যই ফাংশনটি কল করা উচিত।

ব্যবহার

SpokenStringDump`SpeakOrdinal[1]

"1st "

SpokenStringDump`SpeakOrdinal[4707]

"4,707th "


1

পিএইচপি, 151

আমি জানি যে এই প্রোগ্রামটি অন্যদের সাথে তুলনামূলক নয়। সলিউশন দেওয়ার মতোই অনুভব করেছি।

<?$s=explode(' ',trim(fgets(STDIN)));foreach($s as$n){echo$n;echo(int)(($n%100)/10)==1?'th':($n%10==1?'st':($n%10==2?'nd':($n%10==3?'rd':'th')))."\n";}

আপনি কিছু অক্ষর ব্যবহার করে সংরক্ষণ করতে পারেনforeach($s as $n){echo$n;
কার্তিক

1

স্কালা 86

def x(n:Int)=n+{if(n%100/10==1)"th"else(("thstndrd"+"th"*6).sliding(2,2).toSeq(n%10))}

স্কেলা 102:

def x(n:Int)=if((n%100)/10==1)n+"th"else if(n%10<4)n+("thstndrd".take(n+1)%5*2.drop(n%5*2))else n+"th"

102 পাশাপাশি:

def x(n:Int)=if((n%100)/10==1)n+"th"else if(n%10<4)n+("thstndrd".sliding(2,2).toSeq(n%10))else n+"th"

ungolfed:

def x (n: Int) =
  n + { if (((n % 100) / 10) == 1) "th" 
        else (("thstndrd"  + ("th"  * 6)).sliding (2, 2).toSeq (n % 10))
      }

1

OCaml

আমি ওসিএএমএল-তে বেশ নতুন, তবে এটি আমার কাছে সবচেয়ে কম।

let n x =
   let v = x mod 100 and string_v = string_of_int x in
   let z = v mod 10 in
   if v=11 || v=12 || v=13 then string_v^"th" 
   else if v = 1 || z = 1 then string_v^"st" else if v = 2 || z = 2 then string_v^"nd" else if v = 3 || z = 3 then string_v^"rd" else string_v^"th";;

আমি একটি ফাংশন এন তৈরি করেছি যা একটি পরামিতি হিসাবে একটি সংখ্যা নেয় এবং কাজটি করে। এটি দীর্ঘ তবে ভেবেছিল এটির কার্যকরী উদাহরণ থাকা ভাল।


ইনপুট: 11 আউটপুট দেয়: 11

হ্যাঁ, আপনি ঠিক বলেছেন .. আমি সংশোধন করেছি। ধন্যবাদ
জোসেফ এলসিড

আমি আপনার কোডটিতে ফর্ম্যাটিংটি সবেমাত্র প্রস্তুত করেছি। কোড ব্লক হিসাবে স্বীকৃতি পেতে প্রতিটি লাইনের চারটি স্পেসের আগে করা দরকার।
গ্যারেথ

আপনার প্রথমটি যদি চেকটি কম হয় if v>10 && v<14? আমি অকামালের সাথে পরিচিত নই, তবে string_vভেরিয়েবলটি এত দীর্ঘ হওয়া দরকার কি?
গাফি

এটির প্রয়োজনীয় নয়, আমি ডাব্লু বা এক্স বেছে নিতে পারতাম। সার্থক কিছু চেয়েছিলেন। তবে আপনি ঠিক বলেছেন, কোডটি কিছুটা ছোট করা হত।
জোসেফ এলসিড

1

কে - 44 চর

এটি ঘটে যায় যে এটি জে হিসাবে ঠিক দীর্ঘ, এবং প্রায় একইভাবে কাজ করে।

{x,$`th`st`nd`rd@{y*(y<4)*~1=x}.-2#0,.:'x$:}

ব্যাখ্যা:

  • x$:- প্রথমে, আমরা অপারেন্ডকে xএকটি স্ট্রিংয়ে রূপান্তর করি এবং তারপরে এটিকে পুনরায় নির্ধারণ করি x। আমাদের পরে আবার এর স্ট্রিং রেপ প্রয়োজন হবে, সুতরাং এটি করা এখন অক্ষর সংরক্ষণ করে।
  • .:'- .:প্রতিটি ( ') ডিজিটকে একটি সংখ্যায় ফিরে রূপান্তর করুন।
  • -2#0, - সংখ্যাগুলির তালিকার সামনের দিকে একটি সংখ্যা যুক্ত করুন (একক-সংখ্যাগুলির ক্ষেত্রে), এবং তারপরে শেষ দুটি নিন।
  • {y*(y<4)*~1=x}.- দুটি অঙ্কটি আর্গুমেন্ট হিসাবে xএবং yএই অভ্যন্তরীণ ফাংশনে ব্যবহার করুন, যা 4 এর চেয়ে কম হয় এবং 1 এর সমান না yহলে ফিরে আসে otherwiseyx
  • `th`st`nd`rd@ - এই ফলাফল দ্বারা প্রত্যয়গুলির তালিকা সূচক করুন।
  • x,$ - প্রত্যয়টিকে স্ট্রিংতে প্রতীকটি রূপান্তর করুন এবং এটিকে মূল সংখ্যায় যুক্ত করুন।

ব্যবহার:

  {x,$`th`st`nd`rd@{y*(y<4)*~1=x}.-2#0,.:'x$:} 3021
"3021st"
  {x,$`th`st`nd`rd@{y*(y<4)*~1=x}.-2#0,.:'x$:}' 1 2 3 4 11 12 13 14  /for each in list
("1st"
 "2nd"
 "3rd"
 "4th"
 "11th"
 "12th"
 "13th"
 "14th")

1

সি - 95 83 টি অক্ষর

main(n,k){scanf("%d",&n);k=(n+9)%10;printf("%d%s\n",n,k<3?"st\0nd\0rd"+3*k:"th");}

Degolfed:

main(n,k)
{
    scanf("%d",&n);
    k=(n+9)%10; // xx1->0, xx2->1, xx3->2
    printf("%d%s\n",n,k<3?"st\0nd\0rd"+3*k:"th");
}

আমরা k=(n-1)%109 যোগ করার পরিবর্তে করতে পারি , তবে এন = 0 এর জন্য আমরা একটি ভুল আচরণ পেতে পারি, কারণ সিতে (-1)%109 -কে নয় -1-এ মূল্যায়ন করে।


1

জাভাস্ক্রিপ্ট, 75

function s(i){return i+'thstndrd'.substr(~~(i/10%10)-1&&i%10<4?i%10*2:0,2)}

1

পিএইচপি, 98 বাইট

function c($n){$c=$n%100;$s=['','st','nd','rd'];echo$c>9&&$c<14||!$s[$c%10]?$n.'th':$n.$s[$c%10];}

11-13 বিট আমাকে এখানে হত্যা করছে। যে কোনও পূর্ণসংখ্যার জন্য কাজ করে $n >= 0

যে কোনও পূর্ণসংখ্যার জন্য $n:

পিএইচপি, 103 বাইট

function c($n){$c=abs($n%100);$s=['','st','nd','rd'];echo$c>9&&$c<14||!$s[$c%10]?$n.'th':$n.$s[$c%10];}

1

পাইথন, 88 84 বাইট

lambda x:x+((('th','st','nd','rd')+('th',)*6)[int(x[-1])]if('0'+x)[-2]!='1'else'th')

Ungolfed:

def y(x):
    return x + (('th', 'st', 'nd', 'rd') + ('th', ) * 6)[int(x[-1])] if ('0' + x)[-2] != '1' else 'th')

lambda xপ্যারামিটার সহ একটি বেনামী ফাংশন সংজ্ঞায়িত করে x((('th','st','nd','rd')+('th',)*6)[int(x[-1])]10 এর চেয়ে কম সংখ্যার জন্য শেষের একটি দ্বিখণ্ডকে সংজ্ঞায়িত করে, 0-thউপাদানটির জন্য 0এবং আরও অনেক কিছু। if ('0'+x)[-2] != '1'চেক আছে যদি 11, 12, অথবা একটি 13ফিক্স, এবং তারপর যোগ else 'th'যোগ thপরিবর্তে st, rdবা nd


এটি দুর্দান্ত উত্তর, তবে এটিকে বুঝতে এবং বুঝতে এটি আমার কিছুটা সময় নিয়েছে। যদি আপনি আপনার কোডের গল্ফ সংস্করণের নীচে কোড ব্যাখ্যা এবং ভাঙ্গন যোগ করতে পারেন তবে এটি লোকদের আপনার কোড থেকে শিখতে এবং আপনার উত্তরের গুণমান উন্নত করতে সহায়তা করবে।
wizzwizz4

ঠিক আছে আমি করব. আমি কি একটি অন-গল্ফ উত্তর যুক্ত করা উচিত?
NoOneIsHere

এটির ভিন্ন উত্তর হওয়া উচিত নয় ... আপনি যা করেছেন তা ঠিক আছে, ভাল হয়েছে। আপনি যদি আরও কিছু চ্যালেঞ্জ করতে চান তবে আমি কিছু প্রস্তাব দিতে পারি।
wizzwizz4

ঠিক আছে. আপনি চেষ্টা করতে পারেন ... আপনার চেয়ার সামঞ্জস্য করুন , বা আপনার বন্ধুরা কোথায় বসে থাকবে । বা আপনি আমার চ্যালেঞ্জগুলির কিছু চেষ্টা করতে পারেন , যেমন দ্য নাইট'স নেক্সট ট্যুর । এগুলি যদি আপনার পছন্দ মতো চ্যালেঞ্জ নয় তবে কেবল বলুন।
wizzwizz4

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 51 বাইট

উত্তরটি উন্নত করার জন্য @ কেভিন ক্রুজসেনকে ক্রেডিট করুন

n=>n+=[,'st','nd','rd'][~~(n/10%10)-1?n%10:0]||'th'

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


ব্যাখ্যা:

n =>                      // input
    n+=[,'st','nd','rd']     // the array of suffices add everything to n
        [~~(n/10%10)-1?n%10:0] // the full magic 
    || 'th'               // works for everything except 1 , 2 , 3 just like what you want


1

আর , 79 76 বাইট

যেহেতু এখনও কোনও আর সমাধান নেই ... এখানে কোন কৌশল নেই, বেসিক ভেক্টর ইনডেক্সিং, জিউসেপিকে ধন্যবাদ জানিয়ে 3 টি চর ছড়িয়ে পড়ে। পূর্বে চেষ্টা করা সূচক: [1+(x%%10)-(x%%100==11)]এবং [1+(x%%10)*(x%%100!=11)]

function(x)paste0(x,c("th","st","nd","rd",rep("th",6))[1+x%%10*!x%%100==11])

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

সহ substr, 79 বাইট:

function(x,y=1+2*min(x%%10-(x%%100==11),4))paste0(x,substr("thstndrdth",y,y+1))

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


1
1+x%%10*!x%%100==11সূচকের জন্য?
জিউসেপ

@ জিউসেপ্পে আমার প্রথম বন্ধনী বন্ধ করতে হবে :)। !পরিবর্তে অভিব্যক্তির সামনে চতুর ব্যবহার !=
জেসি

1
হ্যাঁ, অপারেটরদের অদ্ভুত নজরে রয়েছে; ^আসলেই উচ্চ, তারপরে %%টাইপ অপারেটরগুলি */এবং তারপরে +-এবং আমি মনে করি ==এবং এর পরে আসি &|!বেশ কম নজরে রয়েছে তাই আপনি এটিকে অপারেশনের মধ্যে বিভাজক হিসাবে ব্যবহার করতে পারেন।
জিউসেপ 18

0

পাইথন ২.7, ১৩7 অক্ষর

def b(n):
 for e,o in[[i,'th']for i in['11','12','13']+list('4567890')]+[['2','nd'],['1','st'],['3','rd']]:
  if n.endswith(e):return n+o

n একটি স্ট্রিং হওয়া উচিত

আমি জানি আমি ইতিমধ্যে এখানে প্রতিযোগিতায় পরাজিত, কিন্তু আমি ভেবেছিলাম যে যাই হোক আমার ধারণাটি সরবরাহ করব

এটি কেবল মূল, সংখ্যার (স্ট্রিং হিসাবে) সমাপ্তি eএবং অরডিনাল সহ মান সংযোজনগুলির একটি তালিকা উত্পন্ন করে o। এটি প্রথমে 'ম' এর সাথে মেলানোর চেষ্টা করে (অতএব আমি কেন একটি অভিধান ব্যবহার করিনি), যাতে এটি ঘটনাক্রমে 'সেন্ট' ফেরত না আসে, উদাহরণস্বরূপ, যখন এটি 'তম' হওয়া উচিত। এটি কোনও ধনাত্মক পূর্ণসংখ্যার জন্য কাজ করবে


n[-1]==e5 টি চরের চেয়ে কম সংক্ষিপ্তn.endswith(e)
ht

0

সি: 95 টি অক্ষর

একটি হাস্যকর দীর্ঘ সমাধান:

n;main(){scanf("%d",&n);printf("%d%s",n,n/10%10-1&&(n=n%10)<4&&n?n>2?"rd":n<2?"st":"nd":"th");}

এটি আরও ম্যাঙ্গাল করা প্রয়োজন।


কোনও ব্যবহারকারী এই উক্তিটি পতাকাঙ্কিত করেছেন "ভুল: একেবারে লুপ হয় না, অর্থাত্ এটি কেবল একটি নির্দিষ্ট সংখ্যার জন্য কাজ করে, তার নীচে _ সমস্ত_ সংখ্যা নয় ide দেখুন আদর্শ আইওপিও / পিও 6 ইউডব্লিউভি।" মডারেটররা সঠিকতার বিচার না করায় পতাকাঙ্কিত করার কারণ নয়, তবে এটি একটি সমস্যা হতে পারে।
dmckee

প্রশ্নকারীর এই মন্তব্যের ভিত্তিতে: "@ ইলমারি আমি ইনপুট হিসাবে 11 এবং আউটপুট হিসাবে 11 তম খুঁজছি it এটি একাধিক লাইন প্রসেস করে তবে আমার আপত্তি নেই তবে আমার মনে যা ছিল তা কেবল একটি একক সংখ্যা প্রক্রিয়াজাত করে। - নিক সি জান 20 '12 এ 21:00 "এটি যা করা উচিত তা করছে। অর্থাত্ এটি কেবল একটি সংখ্যার প্রক্রিয়া করা উচিত।
Fors

এই পতাকাটির জন্য দুঃখিত; আমি প্রয়োজনীয়তাটি ভুলভাবে লিখেছি, এবং সরাসরি মন্তব্য করার জন্য পর্যাপ্ত কোনও রেপ নেই। আবার দুঃখিত. :)
নেস

0

জাভাস্ক্রিপ্ট, 75

function o(s){return s+((0|s/10%10)==1?"th":[,"st","nd","rd"][s%10]||"th")}

0

ওরাকল এসকিউএল 11.2, 101 বাইট

SELECT:1||DECODE(ROUND(MOD(:1,100),-1),10,'th',DECODE(MOD(:1,10),1,'st',2,'nd',3,'rd','th'))FROM DUAL

0

জাভাস্ক্রিপ্ট ES6, 52 অক্ষর

n=>n+(!/1.$/.test(--n)&&'snr'[n%=10]+'tdd'[n]||'th')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.