সাধারণ স্ট্রিং চেক


17

বর্ণনা:

ইনপুট হিসাবে একটি স্ট্রিং দেওয়া, এটি ইংরেজিতে একটি বৈধ অর্ডিনাল নম্বর কিনা তা পরীক্ষা করুন। যদি এটি বৈধ ফেরত সত্যবাদী মান হয় অন্যথায় মিথ্যা মানটি ফেরত দিন। (প্রস্তাবিত @ আর্নল্ড। ধন্যবাদ। এছাড়াও @ জোকিং দ্বারাও)

যে ব্যবহারকারীরা অর্ডিনাল নম্বর সম্পর্কে জানতে চান তাদের এখানে যান:

https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html (এর দ্বারা পরামর্শ: কিউওআর)

সম্ভাব্য ইনপুট:

21st ---> true
12nd ---> false
1nd ---> false
....

এটি একটি কোড গল্ফ চ্যালেঞ্জ তাই প্রতিটি ভাষার সংক্ষিপ্ততম কোডটি বিজয়ী হবে।

উদাহরণ:

console.log('12th' , true) // This evaluates to true
console.log('1st' , true) // also evaluates to true
console.log('21nd' , false) // returns false
console.log('11st' , false) // returns false
console.log('111199231923819238198231923213123909808th' , true) // true

যেহেতু প্রচুর লোকেরা প্রশ্নটি জিজ্ঞাসা করেছিল যে ইনপুটটি কেবলমাত্র বৈধ স্ট্রিংগুলি হবে কি না:

সমস্ত ইনপুট সর্বদা বৈধ থাকবে। অর্থাত তারা স্ট্রিং আকারে এবং চারটি প্রত্যয়ের একটির সাথে একটি অঙ্ক (বা সংখ্যা সংখ্যা) নিয়ে গঠিত হবে:

st, nd, rd,th


আপনি কি অর্ডিনাল সংখ্যার বিধি পরিষ্কার করতে পারবেন? বা কমপক্ষে আপনি যে বিধিগুলি অনুসরণ করছেন তার একটি লিঙ্ক রেখে দিন।
Qwr

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

@ জোনাথন অ্যালান সাধারণ সংখ্যাগুলি থেকে শুরু হয় 1st, নেতিবাচক অর্ডিনালগুলির অস্তিত্ব নেই - english.stackexchange.com/questions/309713/…
অলিভার নি

@ জোনাথন অ্যালান ওপি বলেছেন "ইনপুটটি বৈধ অর্ডিনাল প্যাটার্ন হতে চলেছে।" যার অর্থ নেতিবাচক নয়
অলিভার নি

2
আপনি বলেছেন ইনপুটগুলি সর্বদা বৈধ থাকবে তবে আমি মনে করি একটি আরও ভাল শব্দটি গঠন করা হবে । দ্বাদশ এবং দ্বাদশ উভয়ই সুগঠিত তবে কেবলমাত্র পূর্ব বৈধ
ডেভিড কনরাড

উত্তর:


3

বাশ + জিএনইউ ইউটিলিটিগুলি , 54

রেজেক্স ম্যাচিংয়ে যাওয়ার সহজ সরল উপায় বলে মনে হচ্ছে। আমি নিশ্চিত যে এই অভিব্যক্তিটি আরও সংক্ষিপ্ত করা যেতে পারে:

egrep '((^|[^1])(1st|2nd|3rd)|(1.|(^|[^1])[^1-3])th)$'

এসটিডিএন থেকে ইনপুট। শেল রিটার্ন কোড হিসাবে আউটপুট - 0 সত্য এবং 1 টি মিথ্যা।

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


কি ? এটি সঠিক উত্তর আউটপুট দিচ্ছে না।
মুহাম্মদ সালমান

@ মুহাম্মাদসালমান এটি কারণ এটি একটি পরীক্ষার স্যুট। 1stএবং এর জন্য প্রস্থান কোডগুলি একবার দেখুন 1th
ডেনিস

egrepসংযোজন এবং প্রাথমিকতা পরীক্ষায় সক্ষম (একরূপে), সুতরাং আমি মনে করি আপনি এটিকে একটি উত্তর উত্তর তৈরি করতে পারেন।
ডেনিস

আমি দুঃখিত, তবে আমার ব্যাশ যেমন সফল হয় তেমন কোনও জিনিস সম্পর্কে আমার কোনও ধারণা নেই suc আমি বিরক্ত হয়েছি তাই ইনপুট এবং আউটপুটটির মধ্যে পার্থক্য পরীক্ষা করতে একটি পৃথক পরীক্ষক ব্যবহার করেছি। আমি আপনার পয়েন্ট দেখুন. সুতরাং আমার এখন একটি প্রশ্ন আছে @ ডেনিস: বাশের কি বুলিয়ান রয়েছে?
মুহাম্মদ সালমান

egrepপ্রতিটি ইনপুটটির জন্য পৃথকভাবে মৃত্যুদন্ড কার্যকর করা হলে পরীক্ষার কেসগুলি আরও স্পষ্ট হবে: প্রতিটিটির জন্য প্রস্থানের কোডটি মিলবে: এটি অনলাইনে চেষ্টা করুন!
manatwork

3

এটি অনুমানের অধীনে রয়েছে যে ইনপুটটি বৈধ অর্ডিনাল প্যাটার্ন। যদি এটি না হয় তবে পরিবর্তনগুলি করা দরকার

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

s=>("tsnr"[~~((n=(o=s.match(/(\d{1,2})(\D)/))[1])/10%10)-1?n%10:0]||'t')==o[2]

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

ব্যাখ্যা

s=>
   ("tsnr"                                // all the options for ordinal - 4-9 will be dealt afterwards    
      [~~(                                //floor the result of the next expression
        (n=(                              //save the number (actually just the two right digits of it into n
          o=s.match(/(\d{1,2})(\D)/))[1]) //store the number(two digits) and the postfix into o (array)
        /10%10)-1                         //if the right most(the tenths digit) is not 1 (because one is always 'th')
          ?n%10:0]                        //return n%10 (where we said 0-3 is tsnr and afterwards is th
            ||'t')                        // if the result is undefined than the request number was between 4 and 9 therefor 'th' is required
    ==o[2]                                // match it to the actual postfix  

_____________________________________________________________________

@ হারমান লেন্সটাইন এর বন্দর

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

s=>/1.th|(^|[^1])(1st|2nd|3rd|[^1-3]th)/.test(s)

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


যদি অনুমানের রেগ সমাধানটিও হতে পারে***.
l4m2

যদি ধরে না নেওয়া হয় এটি / \ d * (st | nd | rd | th) / ইনপুট, 1staরেজি পরীক্ষা পাস করুন; যদি ধরে নেওয়া হয়, /1.th|(^|[^1])(1s|2n|3r|[^1-3]t)/কাজ করুন
l4m2

3

পাইথন ,  56  53 বাইট

-3 ধন্যবাদ (পেনাল্টিমেট চরিত্রের সাম্যের পরিবর্তে অনন্য বর্ণের অন্তর্ভুক্তি ব্যবহার করুন)

lambda v:'hsnrhhhhhh'[(v[-4:-3]!='1')*int(v[-3])]in v

একটি নামহীন ফাংশন।

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

কিভাবে?

যেহেতু সমস্ত ইনপুট (এখানে v) ফর্ম হতে নিশ্চিত করা হয় \d*[st|nd|rd|th]আমরা শুধু পরীক্ষা করতে পারেন একটি অক্ষর বিদ্যমান কিনা মধ্যে vযা আমরা সেখানে যদি এটা সঠিক ছিল বলে আশা করা ( s, n,r , অথবা hযথাক্রমে) - যে <getExpectedLetter>in v

শেষ অঙ্কটি সাধারণত এটি নির্ধারণ করে:

v[-3]: 0 1 2 3 4 5 6 7 8 9
v[-2]: h s n r h h h h h h

... পেনাল্টিমেট ডিজিটটি বাদে যখন সমস্তটির 1সমাপ্তি ঘটে thএবং তাই আমাদের প্রত্যাশিত চরিত্রটি অবশ্যই হওয়া উচিত h; এটি মূল্যায়নের জন্য আমরা একটি স্লাইস নিতে পারি (নং -4 তম অক্ষরযুক্ত ইনপুটগুলির জন্য সূচক ত্রুটি এড়াতে ) v[-4:-3]। যেহেতু 0মানচিত্রে hইতিমধ্যে আমরা কাঙ্ক্ষিত মধ্যে ইন্ডেক্স করার পূর্বে গুণ ব্যবহার প্রভাব অর্জন করতে পারেন 'hsnrhhhhhh'


স্ট্যান্ড, এনডি, আরডি এবং এর সকলের একটি অনন্য বর্ণ রয়েছে যাতে আপনি পরীক্ষা করতে পারেন এটি স্ট্রিংয়ে 53 বাইটে
Asone Tuhid

@ অ্যাসোনটিহিড চমৎকার গল্ফ - ধন্যবাদ!
জোনাথন অ্যালান

@ অ্যাসোনটুহিদ - আমার জেলি উত্তরটিতে তিনটি সাশ্রয় করেছে, তাই দ্বিগুণ ধন্যবাদ!
জোনাথন অ্যালান

3

জাভা 8, 54 51 বাইট

s->s.matches(".*1.th|(.*[^1])?(1s|2n|3r|[^1-3]t).")

ব্যাখ্যা:

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

s->  // Method with String parameter and boolean return-type
  s.matches(".*1.th|(.*[^1])?(1s|2n|3r|[^1-3]t).")
     //  Validates if the input matches this entire regex

জাভার স্ট্রিং # টি মিলগুলি অন্তর্নিহিতভাবে যুক্ত করে^...$

রেজেক্স ব্যাখ্যা:

^.*1.th|(.*[^1])?(1s|2n|3r|[^1-3]t).$
^                                          Start of the regex
 .*1.                                       If the number ends in 11-19:
     th                                      it must have a trailing th
       |                                    If not:
        (.*    )?                            Optionally it has leading digits,
           [^1]                              excluding a 1 at the end
                 (1s|2n|3r         .      followed by either 1st, 2nd, 3rd,
                          |[^1-3]t).      0th, 4th, 5th, ..., 8th, or 9th
                                    $   End of the regex

2

পাইথ, 49 60 বাইট এসবিসিএস

Js<2zK%J100I||qK11qK12qK13q>2z"th".?qz+J@c."dt8¸*£tÎðÎs"2J

পরীক্ষা স্যুট

এসই কোডটিতে কিছু অপ্রিন্টেবল খেয়েছে (এবং নীচের ব্যাখ্যায়) তবে তারা লিঙ্কটিতে উপস্থিত রয়েছে।

ব্যাখ্যা:
Js<2zK%J100I||qK11qK12qK13q>2z"th".?qz+J@c."dt8¸*£tÎðÎs"2J # Code
Js<2z                                                         # J= the integer in the input
     K%J100                                                   # K=J%100
           I||qJ11qJ12qJ13                                    # IF K is 11, 12, or 13:
                          q>2z"th"                            #  Print whether the end of the input is "th"
                                  .?                          # Otherwise:
                                    qz                        #  Print whether the input is equal to
                                      +J                      #   J concatenated with
                                        @                   J #    The object at the Jth modular index of
                                          ."dt8¸*£tÎðÎs"   #     The string "thstndrdthththththth"
                                         c                 2  #      Chopped into strings of length 2 as a list
পাইথন 3 অনুবাদ:
z=input();J=int(z[:-2]);K=J%100
if K==11or K==12or K==13:print(z[-2:]=="th")
else:print(z==str(J)+["thstndrdthththththth"[2*i:2*i+2] for i in range(10)][J%10])

2

পাইথন 2, 92 82 74 68 বাইট

-8 চ্যাস ব্রাউনকে
ধন্যবাদ -6 কেভিন ক্রুইজসেনকে ধন্যবাদ

lambda s:(a+'t'*10+a*8)[int(s[-4:-2]):][:1]==s[-2:-1]
a='tsnr'+'t'*6

এর শেষের জন্য ths, sts, nds এবং rds এর একটি বড় স্ট্রিং তৈরি 00করে 99। তারপরে এটি মিলছে কিনা তা পরীক্ষা করে দেখুন।


2

রেটিনা , 35 31 বাইট

-আসোন তুহিদকে -4 বাইট ধন্যবাদ

বাগ খুঁজে পাওয়ার জন্য @ লিওকে ধন্যবাদ

1.th|(^|[^1])(1s|2n|3r|[04-9]t)

1সত্য এবং 0মিথ্যা জন্য আউটপুট । এই অনুমান ইনপুট একটি বৈধ প্রত্যয় সঙ্গে পূরণবাচক ফর্ম্যাটে আছে (প্রান্ত সঙ্গে st, nd, rdবাth )।

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




1

জেলি ,  25  22 বাইট

-3 বাইট আমার পাইথন এন্ট্রি সম্পর্কে করা মন্তব্যে করা একটি পর্যবেক্ষণকে ধন্যবাদ।

ḣ-2VDṫ-’Ạ×ɗ/«4ị“snrh”e

একটি monadic লিঙ্ক।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

ḣ-2VDṫ-’Ạ×ɗ/«4ị“snrh”e - Link: list of characters   e.g. "213rd" or "502nd" or "7th"
ḣ-2                    - head to index -2                "213"      "502"      "7"
   V                   - evaluate                         213        502        7
    D                  - cast to decimal list            [2,1,3]    [5,0,2]    [7]
     ṫ-                - tail from index -1                [1,3]      [0,2]    [7]
           /           - reduce with:                                          (no reduction since already length 1)
          ɗ            -   last 3 links as a dyad:                           
       ’               -     decrement (the left)           0         -1        x
        Ạ              -     all? (0 if 0, 1 otherwise)     0          1        x
         ×             -     multiply (by the right)        0          2        x
            «4         - minimum of that and 4              0          2        4
              ị“snrh”  - index into "snrh"                 'h'        'n'      'h'
                     e - exists in? (the input list)        0          1        1


0

05 এ বি 1 ই , 24 বাইট

0ìþR2£`≠*.•’‘vê₅ù•sèsáнQ

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

ব্যাখ্যা

0ì                         # prepend 0 to input
  þ                        # remove letters
   R                       # reverse
    2£                     # take the first 2 digits
      `≠                   # check if the 2nd digit is false
        *                  # and multiply with the 1st digit
         .•’‘vê₅ù•         # push the string "tsnrtttttt"
                  sè       # index into this string with the number calculated
                    sáн    # get the first letter of the input
                       Q   # compare for equality

0

রুবি , 42 39 বাইট

ল্যামডা:

->s{s*2=~/1..h|[^1](1s|2n|3r|[4-90]t)/}

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

ব্যবহারকারীর ইনপুট:

p gets*2=~/1..h|[^1](1s|2n|3r|[4-90]t)/

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

মিলগুলি:

  • 1(anything)(anything)h - 12th
  • (not 1)1s- ( 1st)
  • (not 1)2n- ( 2nd)
  • (not 1)3r- ( 3rd)

কারণ [^1]( not 1) কোনও স্ট্রিংয়ের শুরুর সাথে মেলে না, শেষের আগে কোনও অক্ষর আছে কিনা তা নিশ্চিত করতে ইনপুটটি নকল করা হয়েছে।


রুবি -n , 35 বাইট

p~/1..h|([^1]|^)(1s|2n|3r|[4-90]t)/

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

উপরের মত একই ধারণা কিন্তু স্ট্রিংটির সদৃশ করার পরিবর্তে এটি স্ট্রিং ( ^) এর শুরুর সাথেও মেলে ।


0

এক্সেল, 63 বাইট

=A1&MID("thstndrdth",MIN(9,2*RIGHT(A1)*(MOD(A1-11,100)>2)+1),2)

(MOD(A1-11,100)>2)এর সাথে শেষ FALSEহলে ফিরে আসে -A11113

2*RIGHT(A1)*(MOD(A1-11,100)>2)+1আয় 1যদি এটা আছে 11- 13এবং 3, 5,7 , ইত্যাদি। অন্যভাবে

MIN(9,~)উপরে কোনো আয় পরিবর্তন 9মধ্যে 9টানth স্ট্রিং থেকে

MID("thstndrdth",MIN(~),2)আউট প্রথম টানাপড়েনে thইনপুট জন্য শেষ হওয়া 11- 13, stজন্য 1, ndজন্য 2, rdজন্য 3, এবং শেষth কিছু উচ্চতর জন্য।

=A1&MID(~) মূল সংখ্যাটি অর্ডিনালে সংশোধন করে।


আমি এর লেখক না হওয়ায় উইকি হিসাবে পোস্ট করা am ( উত্স )


0

ওল্ফ্রাম ভাষা (গণিত) , 122 বাইট

এখানে থাকা অন্যান্য উত্তরগুলির চেয়ে পৃথক, এটি আসলে মিথ্যা হয়ে যাবে যখন ইনপুটটি "বৈধ অর্ডিনাল প্যাটার্ন" নয়, সুতরাং এটি "3a23rd", "বানর" বা "╚§ +!" এর মতো ইনপুটটিতে সঠিকভাবে মিথ্যা ফিরিয়ে দেবে। সুতরাং আমি মনে করি এটি সম্পূর্ণ ইনপুট স্ট্রিংয়ের জন্য কাজ করে।

StringMatchQ[((d=DigitCharacter)...~~"1"~(e=Except)~d~~(e["1"|"2"|"3",d]~~"th")|("1st"|"2nd"|"3rd"))|(d...~~"1"~~d~~"th")]

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


0

ওল্ফ্রাম ভাষা (গণিত) , 65 59 বাইট

SpokenString@p[[#]]~StringTake~{5,-14}&@@ToExpression@#==#&

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

অবশ্যই গাণিতিকাকে অর্ডিনাল সংখ্যায় রূপান্তর করার জন্য একটি অন্তর্নির্মিত (যদিও অননুমোদিত) রয়েছে। উত্স

(-৫-বাইট সংস্করণের জন্য: এটি অনুসারে মনে হয় যে v9 এবং এর আগে কল করার দরকার নেই Speak করার তাই আরও কিছু বাইট সংরক্ষণ করা সম্ভব)

একটি অন্তর্নির্মিত সংস্করণের জন্য কেলিলাউডারের উত্তরও দেখুন


0

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

বিরক্তিকর: আরও একবার সংক্ষিপ্ত সমাধান regexp

<?=preg_match("/([^1]|^)(1st|2nd|3rd|\dth)$|1\dth$/",$argn);

মিথ্যা জন্য সত্য খালি আউটপুট 1

পাইপ হিসাবে চালনা করুন-nF বা এটি অনলাইনে চেষ্টা করুন । (টিআইও সুবিধার্থে ফাংশন হিসাবে আবৃত)


0

x86 মেশিন কোড, 65 বাইট

00000000: 31c0 4180 3930 7cfa 8079 0161 7ef4 8079  1.A.90|..y.a~..y
00000010: ff31 7418 31db 8a19 83eb 308a 9300 0000  .1t.1.....0.....
00000020: 0031 db43 3851 010f 44c3 eb0a 31db 4380  .1.C8Q..D...1.C.
00000030: 7901 740f 44c3 c374 736e 7274 7474 7474  y.t.D..tsnrttttt
00000040: 74                                       t

এসেম্বলি:

section .text
	global func
func:					;the function uses fastcall conventions
					;ecx=first arg to function (ptr to input string)
	xor eax, eax			;reset eax to 0
	read_str:
		inc ecx			;increment ptr to string

		cmp byte [ecx], '0'
		jl read_str		;if the char isn't a digit, get next digit
		cmp byte [ecx+1], 'a'
		jle read_str		;if the char after the digit isn't a letter, get next digit
		cmp byte [ecx-1], '1'
		je tens 		;10-19 have different rules, so jump to 'tens'
		xor ebx, ebx		;reset ebx to 0
		mov bl, byte [ecx]  	;get current digit and store in bl (low byte of ebx)
		sub ebx, 0x30		;convert ascii digit to number
		mov dl, [lookup_table+ebx] ;get correct ordinal from lookup table
		xor ebx, ebx		;reset ebx to 0
		inc ebx			;set ebx to 1
		cmp byte [ecx+1], dl	;is the ordinal correct according to the lookup table?
		cmove eax, ebx		;if the ordinal is valid, set eax (return reg) to 1 (in ebx)
		jmp end			;jump to the end of the function and return

		tens:
		xor ebx, ebx		;reset ebx to 0
		inc ebx			;set ebx to 1
		cmp byte [ecx+1], 't'	;does it end in th?
		cmove eax, ebx		;if the ordinal is valid, set eax (return reg) to 1 (in ebx)

	end:
	ret				;return the value in eax
section .data
	lookup_table db 'tsnrtttttt'

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


-1

পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত অভিব্যক্তি, 29 বাইট

1.th|(?<!1)(1s|2n|3r)|[4-90]t

আমরা thকোনও "কিশোর" নম্বর পরে বা ১.৩.৩ বাদে অন্য কোনও সংখ্যার পরে গ্রহণ করি। 1..3 জন্য, আমরা গ্রহণ করতে একটি নেতিবাচক lookbehind ব্যবহার st, ndঅথবাrd শুধুমাত্র যখন পূর্বে না 1

পরীক্ষা প্রোগ্রাম

#!/usr/bin/bash

ok=(✓ ❌)

for i
do grep -Pq '1.th|(?<!1)(1s|2n|3r)|[4-90]t' <<<"$i"; echo $i ${ok[$?]}
done 

ফলাফল

1st ✓
1th ❌
2nd ✓
2th ❌
3rd ✓
3th ❌
4st ❌
4th ✓
11th ✓
11st ❌
12nd ❌
12th ✓
13th ✓
13rd ❌
112nd ❌
112th ✓
21nd ❌
32nd ✓
33rd ✓
21th ❌
21st ✓
11st ❌
111199231923819238198231923213123909808th ✓
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.