এটি কি একটি নম্বর?


17

প্রস্তাবনা:

আমি পরীক্ষার কেসগুলি তৈরির প্রশিক্ষণ দিতে চেয়েছিলাম, তাই আমি তাদের সহজ কিছুতে চেষ্টা করব।

চ্যালেঞ্জ:

কোনও প্রদত্ত (স্ট্রিং) ইনপুট নিন (দৃশ্যমান ASCII সীমার মধ্যে) এবং যদি এটির একটি সংখ্যা এবং আউটপুট এমন কিছু হয় যা মূল্যায়নের জন্য ব্যবহৃত হতে পারে ded

নিয়মাবলী:

  • একটি সংখ্যাতে কেবল অক্ষর থাকবে -0123456789,.
  • উত্তরগুলি কেবলমাত্র -1000000000 এবং 1000000000 (একচেটিয়া) এর মধ্যে সংখ্যাগুলি সনাক্ত করতে হবে তবে তারা নির্বিচারে বড় সংখ্যাটি সনাক্ত করতে পারে।
  • আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন।
  • যদি একটি সংখ্যা থাকে তবে তা সনাক্ত করতে এবং বর্ণনায় আউটপুট নথিভুক্ত করার জন্য ব্যবহৃত হতে পারে এমন কোনও কিছু ফিরিয়ে দিন (উদাঃ My program outputs T if a number, F if not.)।
  • ইনপুটটি ASCII ব্যাপ্তির মধ্যে ফাঁকা বা খালি (কোনও নম্বর না হলে আউটপুট যা যা খালি তা ফিরিয়ে দিলে) হবে।
  • সংখ্যা দশমিক বিন্দু অন্তর্ভুক্ত করতে পারে (উদা। 3.14)। যদি তারা তা করে থাকে তবে তাদের অবশ্যই দশমিক পয়েন্টের আগে কমপক্ষে একটি অঙ্ক এবং তারপরে কমপক্ষে একটি অবশ্যই থাকা উচিত।
  • সংখ্যায় নেতৃস্থানীয় বা পিছনে জিরো থাকতে পারে (প্রাক্তন 000001.00000)।
  • কোনও সংখ্যার পূর্ণসংখ্যার অংশটি পাঠযোগ্যতার জন্য কমা (প্রাক্তন 1,000.23456) দিয়ে তিন অঙ্কের অংশে ভাগ করা যায় । এই ক্ষেত্রে তারা বাম ডান দিক থেকে প্রতি তিন ডিজিট বিভক্ত করা আবশ্যক (উদা। 1,234,567, 10,000.202, 123,234.00, 0,123.293)।
  • নেতিবাচক সংখ্যাগুলি একটি শীর্ষস্থানীয় -(প্রাক্তন -1.23) দ্বারা নির্দেশিত । +ইতিবাচক সংখ্যাকে নির্দেশ করার জন্য নেতৃত্বের অনুমতি নেই এবং ফলস্বরূপ আউটপুট তৈরি হওয়া উচিত।
  • ব্যতিক্রমগুলি বৈধ এবং বিবেচনাযোগ্য আউটপুট হিসাবে গণনা করা হয় না (যখন তারা স্ট্যান্ডার্ড আউট স্ট্রিমটিতে Exception on line N [...]স্ট্রিংটি রাখে তবে স্ট্যান্ডার্ড আউট স্ট্রিমে আউটপুট পাস করতে পারলে ( উদাহরণস্বরূপ একটি সংখ্যা / ননম্বরের আউটপুট হিসাবে রাখা যেতে পারে except

পরীক্ষার কেস:

( My program outputs T if a number, F if not.সংস্করণ অনুমান করে )

123 -> T [on integer]
-123 -> T [negative numbers need to be handled]
0 -> T [on zero]
123.456 -> T [on floating point]
123,456.789 -> T [on evenly divided by 3 digits with comas]
123456789 -> T [thousand separators are not required]
0000001.00000 -> T [on leading/trailing zeros]
00.00 -> T [on zero and leading/trailing zeros]
999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the maximum value]
-999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the minimum value]
 -> F [on empty]
lolz -> F [on non-number value]
n4melyh4xor -> F [on non-number with digits]
  1.2 -> F [on space-padded]
9.3 1.3 -> F [on anyhow separated multiple numbers]
1e5 -> F [no scientific notation]
50cl05e.buty3ts0f4r -> F [on input with letters obscuring the number]
1,2,3,4.5678 -> F [on badly readability-divided number]
1,234.5,678 -> F [on readability-divided floating point part]
.234 -> F [on no leading zero]
+1 -> F [no leading + sign]
1.234.3 -> F [only one decimal point]
12345,678 -> F [on separator stopping mid-way]

, কমপক্ষে অক্ষরগুলি বিজয়ী।


আমরা কি ধরে নিতে পারি ইনপুটটি সর্বদা ASCII থাকে?
ব্র্যাড গিলবার্ট

@ ব্র্যাডগিলবার্টবাগিলস, হ্যাঁ
n4melyh4xor

যদি -123ঠিক থাকে তবে +456-> ভাল কি খারাপ। নাকি +দল থেকে বাদ পড়েছে?
chux - মনিকা পুনরায় স্থাপন করুন

@ চিচস, পার্টি ট্রেনটি সেখানে পৌঁছানোর আগেই ছেড়ে গেছে। পরের বার ভাল ভাগ্য, +।
n4melyh4xor

2
লোকেরা মন্তব্যগুলিতে স্পষ্টতা চাইলে আপনার প্রশ্নটি সম্পাদনা করা উচিত। অনুমানটি জানার জন্য কখনই মন্তব্যগুলি পড়ার প্রয়োজন হবে না। আমি উত্তর এবং কিছু পরীক্ষার কেস অন্তর্ভুক্ত করতে সম্পাদনা করেছি।
পিটার টেলর

উত্তর:


10

রেটিনা , 28 29 31 40 34 বাইট

^-?\d{1,3}((,\d{3})*|\d*)(\.\d+)?$

সত্য 1যদি 0অন্যথায় ফলাফল আউটপুট । আমি যতদূর বুঝতে পেরেছি, এই ক্ষেত্রে রেটিনা ইনপুটটিতে রেজেক্সের মিলগুলির সংখ্যা আউটপুট করে।

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

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

সম্পাদনাগুলি

  • "দশমিক স্থানের পরে অঙ্কগুলি থাকা উচিত" নিয়ম মেনে চলার জন্য স্থির
  • "হ্যান্ডেল নেতিবাচক" বিধি মেনে চলার জন্য স্থির
  • Alচ্ছিক কমা বিভাজকগুলি মেনে চলার জন্য স্থির
  • @ মার্টিনএেন্ডারের দ্বারা উল্লিখিত হিসাবে হাজার বিভাজক সহ স্থির বাগ
  • শর্তযুক্ত লুকোচুরি সরিয়ে গল্ফ করা

RegExplanation

^-?\d{1,3}((,\d{3})*|\d*)(\.\d+)?$
^                                $  This marks the start and end of regex
 -?                                 Optional hyphen for negative number
   \d{1,3}                          Matches between 1 and 3 digits
          (             )           Capturing group
           (,\d{3})*                 Matches at least zero of comma and three numbers (in the case of separators)
                    |                OR
                     \d*             Matches at least zero digits (in the case of no separators)
                        (\.\d+)?    Matches an optional . and at least one digit (for decimal numbers)

@ মার্টিনএন্ডার ফিক্সড! এছাড়াও, আপনি কীভাবে রেটিনার ফ্ল্যাগগুলি (ফ্ল্যাগের জন্য mএবং এর জন্য বলুন g) নির্দিষ্ট করবেন ?
কৃতিক্সিত লিথোস

`রেজেক্সের সামনে একটি রাখুন এবং তারপরে সংশোধকরা এর সামনে চলে যান, যেমন m`^.$g.NET- তে বিদ্যমান নেই, ম্যাচগুলি ডিফল্টরূপে বৈশ্বিক।
মার্টিন এন্ডার

3

জাভাস্ক্রিপ্ট, 46 49 বাইট

এটি আমার রেটিনা উত্তরের সরাসরি বন্দর। আমি জেএস ব্যবহার করার একমাত্র কারণটি হ'ল নীচে স্নাক স্নিপেট ব্যবহার করে রেজেেক্স পরীক্ষা করার একটি সহজ উপায় আছে

f=s=>/^-?\d{1,3}((,\d{3})*|\d*)(\.\d+)?$/.test(s)

f=s=>/^-?\d{1,3}((,\d{3})*|\d*)(\.\d+)?$/.test(s)
<input oninput=p.innerText=f(value)><p id=p></p>


যদি এটি কিছু নিয়মের জন্য না হয় (যেমন কমা নিয়ম), কেউ কেবল isNaN(+prompt())16 অক্ষরের জন্য করতে পারে । এ জাতীয় জীবন, আমি মনে করি
ম্যাথিউস অ্যাভেলার

2

পার্ল 6 , 42 বাইট

{?/^\-?[\d**1..3[\,\d**3]+|\d+][\.\d+]?$/}

চেষ্টা করে দেখুন

সম্প্রসারিত:

{  # bare block lambda with implicit parameter 「$_」

  ? # turn the following into a Bool result

  /  # match implicitly against 「$_」

    ^                 # beginning of string

    \- ?              # optional leading 「-」

    [

      \d ** 1..3      # 1 to 3 digits
      [
        \,            # comma
        \d ** 3       # three digits
      ]+              # repeat at least once

    |                 # or

      \d+             # at least one digit

    ]

    [ \. \d+ ]?       # 「.」 followed by at least one digit optionally

    $  # end of string

  /
}

1

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

<?=preg_match("#^-?(\d+|\d{1,3}(,\d{3})*)(\.\d+)?$",$argv[1]);

বিল্টিন কমা পরিচালনা করতে পারে না এবং এটি বৈজ্ঞানিক স্বরলিপি গ্রহণ করে; সুতরাং আমি regex পথে হাঁটা ছিল। <?=is_numeric($argv[1]);24 বাইট হত।


0

বাশ / ইউনিক্স সরঞ্জাম, 64 বাইট

egrep -c '^-?([0-9]+|[0-9]{1,3}(,[0-9]{3})+)(\.[0-9]+)?$'<<<"$1"

এটি ফাইল হিসাবে সংরক্ষণ করুন এবং কমান্ডের প্রথম আর্গুমেন্ট হিসাবে পরীক্ষা করার জন্য স্ট্রিংটি পাস করুন।

আউটপুটটি অ-সংখ্যার জন্য 0, একটি সংখ্যার জন্য 1।

আপনি যদি স্টিডিনের কাছ থেকে ইনপুট গ্রহণ করতে ইচ্ছুক হন এবং যদি আপনি গ্যারান্টি দিতে পারেন যে ইনপুটটি কেবলমাত্র একটি লাইন নিয়েছে, তবে আপনি <<< "$ 1" শেষে সরিয়ে ফেলতে পারবেন, ফলস্বরূপ 57 বাইট

কোড নিজেই হিসাবে, -c বিকল্পটি egrep এর সাথে মিলে যাওয়া লাইনের সংখ্যা গণনা করে (যা হয় 0 বা 1 হবে)।


0

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

:zCiCM"૧򡊪񛨮򶟉񠫊򆻛񓰚祥񯯏󪬡򢝉񁘍񲲂쪤"^T6

ক্রিটিক্সী লিথোসের রেজেসকে সংকুচিত করে ।

এটি অনলাইনে চেষ্টা করুন। বেসিক বহুভাষিক প্লেনের বাইরে ইউনিকোড অক্ষর ব্যবহার করেন, যা টিআইও দৃশ্যত পরিচালনা করতে পারে না? যদিও এই ছোট অ্যাপটি স্ট্রিংয়ের জন্য ভুল আকারের প্রতিবেদন করে। এই অক্ষর / বাইট কাউন্টারটি এটি সঠিকভাবে পায়।


0

C89, 195 বাইট

b,d,c,i;f(char*s){b=*s;for(d=c=i=0;i++,*(s++),d+=*s=='.',c+=*s==',',b=c?i&(i%4!=3)&*s==','?0:b:b;)if(*s==45&!i);else if((*s==32)|(*s==46)|*s==43|!isdigit(*s)&*s!=46&*s!=44)||!(d-1))b=0;return b;}

Ungolfed:

bool is_base10_number (const char* const str) {

  if(!str[0])return false;

  size_t
    dpts = 0,
    cmas = 0;

  for (size_t i = 0; i < strlen(str); i++) {

    if ((str[i] == '-') && (!i)){
      continue;
    }

    if (
      (str[i] == ' ')
      || (str[0] == '.')
      || (str[0] == '+')
      ||
      (
        (!isdigit(str[i]))
        && (str[i] != '.')
        && (str[i] != ',')
      )
    ) {
      return false;
    }

    dpts += str[i] == '.';
    cmas += str[i] == ',';

    if (cmas) {
      if (i & ((i % 4) != 3) & str[i] == ',') {
        return false;
      }
    }

  }

  if (dpts > 1) { return false; }

  return true;
}


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