এটি কি বৈধ পরিবর্তনশীল নাম?


23

উদ্দেশ্য

একটি প্রোগ্রাম বা ফাংশন লিখুন যা ভেরিয়েবলের নামটি বৈধ এবং আউটপুট 1 বা Trueবৈধ কিনা তা 0.5 পরীক্ষা করে যদি এটি বৈধ হয় তবে এটি একটি আন্ডারস্কোর (_) এবং 0 দিয়ে শুরু হয় বা Falseএটি বৈধ নয়।

বিধি

  • একটি আন্ডারস্কোর বা বর্ণ (এজেড, এজেড, _) দিয়ে শুরু হয় এবং বাকী অক্ষরগুলি হয় আন্ডারস্কোর, অক্ষর বা সংখ্যাগুলির সাথে শুরু হলে বেশিরভাগ ভাষায় একটি পরিবর্তনশীল নাম বৈধ। (আজ, এজেড, ০-৯, _)
  • আউটপুট 1 বা Trueভেরিয়েবলের নামটি বৈধ এবং 0 বা Falseবৈধ না হলে।
  • তবে আন্ডারস্কোর দিয়ে ভেরিয়েবল শুরু করা ভাল অনুশীলন নয়, সুতরাং যদি এটি আন্ডারস্কোর দিয়ে শুরু হয় এবং নামটি বৈধ হয় তবে 0.5 ফিরে আসুন।

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

ইনপুট

abcdefghijklmnop

আউটপুট

1

ইনপুট

_test_

আউটপুট

0.5 (আন্ডারস্কোর দিয়ে শুরু হয়)

ইনপুট

123abc

আউটপুট

0 (একটি সংখ্যা দিয়ে শুরু)

ইনপুট

A_b1C_23

আউটপুট

1

ইনপুট

_!

আউটপুট

0 (0.5 না কারণ এটি বৈধ নয়)

ইনপুট

magical pony1

আউটপুট

0 (কোন স্পেস)

স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

এটি , তাই সংক্ষিপ্ততম কোড জিততে পারে।

বোনাস: -10% যদি আপনার প্রোগ্রাম / ফাংশন 0ফাঁকা স্ট্রিংয়ের আউটপুট দেয় ( "")।


1
আমরা কি সত্যবাদী / মিথ্যা / কিছু আউটপুট দিতে পারি?
ক্যালকুলেটরফলাইন 15

5
শুধু লক্ষণীয়, পাইথনে, স্কোরের নীচে প্রায়শই ব্যবহৃত হয়। ক্লাসগুলির একটি ডিআইআর ফাংশন প্রয়োজন, ক্লাসগুলির সহায়ক ফাংশনগুলি কখনও কখনও আন্ডারস্কোর দিয়ে শুরু করা হয়।
আর

1
@ ইস্টারলিআইর্ক মিনি-ডাউনডাউন থেকে সাবধান; আপনি বোঝানো __init__; এছাড়াও, না, ক্লাস না প্রয়োজন একটি __init__কিন্তু সাধারণত এক আছে
বিড়াল

6
আমরা কি ধরে নিতে পারি যে ইনপুটটি খালি থাকবে না? (বর্তমানের বেশিরভাগ উত্তর খালি ইনপুট জন্য ব্যর্থ বলে মনে হচ্ছে))
ডেনিস

1
সেই বোনাসটি কি উপরে বা নিচে? যদি আপ হয় তবে উত্তরগুলির বর্তমান সেটটির জন্য এটি সত্যই মূল্যবান নয়
নীল

উত্তর:


13

জাভাস্ক্রিপ্ট (ES6), 37 - 10% = 33.3 বাইট

@ Edc65 ধন্যবাদ 4 বাইট সংরক্ষণ করা

@ ম্যাটনের ধন্যবাদ 5.6 বাইট সংরক্ষণ করা হয়েছে

s=>!/^\d|\W|^$/.test(s)/-~(s[0]=='_')

3
আপনি কি নিশ্চিত যে এটি পারল নয়?
seequ

8

05 এ বি 1 ই , 25 24 20 19 বাইট

কোড:

¬D'_Qsa·+¹žj-""Q*2/

ব্যাখ্যা:

¬                     # Push input and also push the first character.
 D                    # Duplicate the first character.
  '_Q                 # Check if it is equal to an underscore character.
     sa               # Swap and check the duplicate if it's an alphabetic character.
       ·              # Double the value.
        +             # Add both values up
         ¹            # Take the first input.
          žj-         # žj is short for [a-zA-Z0-9_]. This will be substracted from the
                        initial string. 
             ""Q      # Check if the string is empty.
                *     # Multiply this with the first value.
                 2/   # Halve it, resulting into 0.0, 0.5, or 1.0.

সংক্ষেপে, sসিউডোকোডে স্ট্রিংয়ের সূত্রটি হ'ল:

((s[0] == '_' + s.isalpha() × 2) × (s.remove([a-zA-Z0-9_]) == "")) / 2

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

ব্যবহার সিপি-1252 এনকোডিং।


6

পিএইচপি (50 - 10% = 45)

-2 :) এর জন্য শিজমকে ধন্যবাদ

preg_match('/^[a-z_]\w*$/i',$s)?$s[0]=='_'?.5:1:0;

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

preg_match('/^[a-z_]\w*$/i', $s) # Matches every a-zA-Z0-9_ string that doesnt start with a number
?   $s[0] == '_'                   # Then, if it starts with an _
    ?   .5                         # give 0.5 points
    :   1                          # If it doesn't, give 1
:   0;                             # If it didn't match the regex, give 0

কিছু লক্ষ্য করার বিষয় হ'ল পিএইচপি-তে, /uসংশোধক ছাড়াই \wকেবলমাত্র ASCII অক্ষর নির্বাচন করে। অন্য কয়েকটি ভাষায় / রেজেক্স স্বাদে, এই প্যাটার্নটি কার্যকর হবে না।

সম্পাদনা : আমি অনেক লোককে তাদের উত্তরগুলিতে \ w এবং \ d ব্যবহার করতে দেখি, যখন তারা এমন একটি ভাষা ব্যবহার করে যার মধ্যে নন-এসসিআইআই অক্ষর এবং অঙ্কগুলিও অন্তর্ভুক্ত থাকে। এটি ধাঁধা নয়। তারা ভুল. (এখনও ডাউনওয়েট / মন্তব্য করতে পারবেন না, এটি এভাবে বলার জন্য দুঃখিত)


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্ট্যাক এক্সচেঞ্জে আপনাকে স্বাগতম। এটি একটি দুর্দান্ত উত্তর; প্রায়শই কোড-গল্ফ চ্যালেঞ্জগুলি ভাষাগুলির মধ্যেও পাশাপাশি থাকে are এই সমাধানের জন্য আপনাকে একটি +1 দিচ্ছি! সাবাশ.
wizzwizz4

1
আপনি দুটি অক্ষর দিয়ে শেভ করতে পারেন [a-z].../i
শিজম

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

1
আপনার সম্পাদনা সম্পর্কে: আপনি কি আরও সুনির্দিষ্ট হতে পারেন - কোন ভাষায়? জাভাস্ক্রিপ্ট \dঠিক হিসাবে একই [0-9]\wহুবহু হ'ল [A-Za-z0-9_] ডেভেলপার.মোজিলা.আর.ইন.ইউইউএস
ডকস / ওয়েব

ভাষা ব্যবহার করা কোড পৃষ্ঠাটি অপ্রাসঙ্গিক; যতক্ষণ না রেজেক্স যথাযথভাবে ASCII পরিচালনা করে, এটি বৈধ। বর্তমানের সমস্ত রেজেক্স-ভিত্তিক উত্তরগুলি আমার জ্ঞানের সাথে কাজ করে। আপনি নিজের ভাষায় কোনও পরিবর্তনশীল নামের সাথে মিলের চেষ্টা করছেন না; পরিবর্তে, আপনি চ্যালেঞ্জের নিয়মের ভিত্তিতে একটি পরিবর্তনশীল নামের সাথে মেলে যাবার চেষ্টা করছেন।
মেগো

5

রেটিনা, 30 - 10% = 27 28 - 10% = 25.2 29 - 10% = 26.1 বাইট

উভয় সংস্করণ বোনাসের জন্য যোগ্য, কারণ তারা খালি ইনপুটটি সঠিকভাবে পরিচালনা করে (আউটপুট 0)

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

@ মার্টিনব্যাটনার দ্বারা তৈরি নতুন 28 29-বাইট সংস্করণ। ধন্যবাদ!

^: _
$ _¶_
Mme` ^ (?! \ ঘ) \ W + + $
2
0.5

ব্যাখ্যা

প্রথমে আমরা পরীক্ষা করে নিই যে ইনপুটটি আন্ডারস্কোর দিয়ে শুরু হয় কিনা। যদি এটি হয় তবে ইনপুটটি একটি নতুন লাইনের সাথে সদৃশ হবে। উদাহরণস্বরূপ: _test_-> _test_\n_test_, \nনতুন লাইনটি কোথায় । তারপর আমরা কিছু, যে একটি নম্বর দিয়ে শুরু হয় না মেলানোর চেষ্টা কিন্তু "শব্দ" অক্ষর (যে কোন সংখ্যার দ্বারা অনুসরণ করা হয় a-z, A-Z, সংখ্যা, এবং আন্ডারস্কোর) প্রতিটি লাইনে । মনে রাখবেন যে যদি ইনপুটটি আন্ডারস্কোর দিয়ে শুরু হয় এবং দুটি লাইনে প্রতিস্থাপন করা হয় তবে এটি উভয় লাইনের সাথে মিলবে। তারপরে আমরা আমাদের 2 টি ম্যাচ আছে কিনা তা পরীক্ষা করে দেখি এবং সেগুলি প্রতিস্থাপন করব 0.5। খালি বা অবৈধ লাইন সর্বদা 0 টি ম্যাচ উপস্থাপন করবে এবং বৈধ ভেরিয়েবলের নামগুলি সর্বদা 1 ম্যাচ দেয়।


আমার নিজের 30 31-বাইট সংস্করণ

Ae` ^ \ ঘ | \ ওয়াট
^: _। *
0.5
^ \ ডি *
1
^ $
0

ব্যাখ্যা

প্রথম সব, আমরা চেক যদি বা কোনো সংখ্যা দিয়ে ইনপুট শুরু একটি অ-শব্দ অক্ষর (ছাড়া আর কিছু রয়েছে a-z, A-Z, সংখ্যা এবং আন্ডারস্কোর)। যদি এটি করে তবে তা বাতিল হয়ে যায়, কারণ এটি অবৈধ। তারপরে আমরা পরীক্ষা করে দেখি এটি একটি আন্ডারস্কোর দিয়ে শুরু হয় কিনা। যদি এটি হয় তবে এটি প্রতিস্থাপন করা হবে 0.5। তারপর আমরা চেক যদি এটি একটি অ অঙ্ক অক্ষর দিয়ে শুরু হয় (এই বিন্দু প্রথম অক্ষর পারেন এ 0, a-zকিংবা A-Zদেয়। শুধুমাত্র a-zএবং A-Z, অ-সংখ্যা হয় স্পষ্টত)। যদি এটি হয় তবে এটি একটি দ্বারা প্রতিস্থাপিত হবে 1। তারপরে আমরা খালি স্ট্রিংয়ের জন্য যাচাই করে এটিকে প্রতিস্থাপন করব 0

এটি অনলাইন চেষ্টা করুন!
এটি অনলাইন চেষ্টা করুন! পুরনো সংস্করণ


Waitwaitwait। এ ^\D.*পর্যায়ে এটি একটি 0 দিয়ে শুরু করতে পারি? এটা বিরক্তিকর.
ক্যালকুলেটরফলাইন

@ ক্যাটস আরেফ্লুফি এটি এটির সাহায্যে শুরু করে _এবং এর সাথে প্রতিস্থাপন করা যেতে পারে 0.5। তারপরে এটি শুরু হয় 0.
ডাভকো

এটি ইনপুট জন্য ভুলভাবে একটি 1 দেয় Ψ
অ্যাডমবর্কবার্ক

টিমমিড আমি বুঝতে পারি না কেন এটি এমন করে। দ্রুত চেক ইঙ্গিত দেয় যে \wঅ-এসসিআইআই অক্ষরগুলির সাথে মেলে যা এটি করা উচিত নয় (আমি এটি দেওয়ার চেষ্টা করেছি ƜƝƞƟƠএবং ᎳᎴᎵᎶᎷᎸᎹইনপুট হিসাবে)। আমি পরে এটি দেখতে হবে। সম্ভাব্য সমাধান প্রতিস্থাপন মনে \wসঙ্গে [a-zA-Z\d_]
দাভকো

3

এমএটিএল , 27 বাইট

1)95=2/8M3Y2m+G7M95h4Y2hmA*

এটি ভাষার বর্তমান সংস্করণে (15.0.0) কাজ করে।

ইনপুটটি একক উদ্ধৃতি সহ একটি স্ট্রিং।

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

ব্যাখ্যা

1)      % take input implicitly. Get its first element
95=     % true if it equals 95 (underscore)
2/      % divide by 2: gives 0.5 if underscore, 0 if not
8M      % push first element of input again
3Y2     % predefined literal: string with all letters
m       % true if it's a letter
+       % add. Gives 1 if letter, 0.5 if underscore
G       % push input again
7M      % push string with all letters again
95h     % concatenate underscore
4Y2h    % predefined literal: string with all digits. Concatenate
mA      % true if all input chars belong to that concatenated string
*       % multiply. Display implicitly

3

পাইকে , 21 বাইট

(নন-কেপটিং, যুক্ত স্ট্রিং বিয়োগ, বিভিন্ন স্ট্রিং ধ্রুবক)

Qh~u{Q~J\_+-|!Qh\_qh/

ব্যাখ্যা:

Qh~u{                 - Check first char isn't a digit
     Q~J\_+-          - Is the input alphanumeric + "_"
            |!        - Combine
              Qh\_q   - Is the first char an "_"
                   h/ - Combine

3

পাইথন 3, 36 বাইট

lambda s:s.isidentifier()/-~(s[:1]=='_')

কোডটি 40 বাইট দীর্ঘ এবং -10% বোনাসের জন্য যোগ্যতা অর্জন করে ।

নোট করুন যে এটি কেবলমাত্র কোড পৃষ্ঠাগুলির জন্যই সঠিকভাবে কাজ করবে যার অ-ASCII অক্ষর / সংখ্যা নেই digit



2

গঘ , 29 বাইট

÷"[^\W\d]\w*"g¦"_.*"g+÷2=0.5¿

ব্যবহার করে চালান:

$ ./gogh no '÷"[^\W\d]\w*"g¦"_.*"g+÷2=0.5¿' "_test"

ব্যাখ্যা

                   “ Implicit input                               ”
÷                  “ Duplicate the TOS                            ”
"[^\W\d]\w*"g      “ Fully match the STOS against the TOS (regex) ”
¦                  “ Swap the STOS and TOS                        ”
"_.*"g             “ Fully match the STOS against the TOS (regex) ”
+                  “ Add the TOS to the STOS                      ”
÷                  “ Duplicate the TOS                            ”
2=                 “ Determine if the TOS is equal to 2           ”
0.5¿               “ Leave the correct output on the stack        ”
                   “ Implicit output                              ”

2

পার্ল, 21 বাইট

$_=!/\W|^\d//2**/^_/

স্কোরটিতে স্যুইচের জন্য +1 বাইট অন্তর্ভুক্ত রয়েছে -pআইডিয়নে চেষ্টা করে দেখুন ।


আপনি কি করতে পারেন, -$_||$_=...খালি উত্তর জন্য অ্যাকাউন্ট করতে বলুন ? (ব্যবহার করার -কারণে +পার্লে নোপ রয়েছে)
ভেন

না, এটি একটি রানটাইম ত্রুটি। এটি যদি কাজ করে তবে এটি আমার স্কোরকে আরও খারাপ করে দেবে।
ডেনিস

আমি কেবলমাত্র সর্বনিম্ন পরীক্ষা করেছি, তাই আমি আপনাকে বিশ্বাস করব। ভাল যে 21 বাইটের 10% বেশি নয় ..
ভেন

2

পাইথ, 19 বাইট

c!:z"\W|^\d"0h!xz\_

পাইথ কম্পাইলার দিয়ে এটি ব্যবহার করে দেখুন ।

নোট করুন যে এটি কেবলমাত্র কোড পৃষ্ঠাগুলির জন্যই সঠিকভাবে কাজ করবে যার অ-ASCII অক্ষর / সংখ্যা নেই digit

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

c!:z"\W|^\d"0h!xz\_  (implicit) Save the input in z.

  :z        0        Test if z matches the following regex:
    "\W|^\d"           A non-word character or a digit at the beginning.
                     This returns True iff z is an invalid name.
 !                   Apply logical NOT to yield True iff z is a valid name.
               xz\_  Find the first index of the underscore in z.
                     This yields 0 iff z begins with an underscore.
             h!      Apply logical NOT and increment.
                     This yields 2 if z begins with an underscore, 1 otherwise.
c                    Divide the two results.

2

ফ্যাক্টর , 84 * 0.9 = 76.5

USE: regexp
[ R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ]

শ্রোতার উপর চালিত (repl), একটি উদ্ধৃতি (বেনামে ফাংশন) সংজ্ঞায়িত করে যা একটি স্ট্রিং নেয় এবং {0 | ১/২ | 1}।

এটিকে 97 টি বর্ণ হিসাবে একটি শব্দ হিসাবে সংজ্ঞা দেওয়া হচ্ছে:

USE: regexp
: v ( s -- n ) R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ;

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

R/ [_a-zA-Z]\w*/ R/ _.*/দুটি নিয়মিত ভাব প্রকাশ করে। bi-curry@আংশিকভাবে [ matches? 1 0 ? ]প্রতিটি রেজেজেটে উদ্ধৃতি প্রয়োগ করে, স্ট্যাকের উপর দুটি ত্রিভুক্ত উদ্ধৃতি রেখে। biআর্গুমেন্ট স্ট্রিংয়ে প্রতিটি উদ্ধৃতি প্রয়োগ করে।

এগুলির প্রত্যেকটি (ত্রিযুক্ত উদ্ধৃতি) মিলছে কিনা তার উপর নির্ভর করে হয় একটি 1 বা 0 ছেড়ে যায়। প্রথমটি সুসংগঠিত নামের সাথে, দ্বিতীয়গুলির নাম আন্ডারস্কোর দিয়ে শুরু হয়।

0 = 1 2 ? / সর্বশেষ মানটি যদি 0 হয় তবে এটি 1 এর সাথে প্রতিস্থাপন করা হয়, বা 1 হলে এটি 2 দিয়ে 1 দ্বারা প্রতিস্থাপিত হয় Then ।

এই লুং! সঙ্কুচিত হওয়ার জন্য কোনও পয়েন্টারকে আরও প্রশংসা করা হয়েছে ...

এবং আমি regexps ঘৃণা!

গীত।

{ 0 } [ "" v ] unit-test
{ 0 } [ "" v ] unit-test
{ 0 } [ "1" v ] unit-test
{ 0 } [ "1var" v ] unit-test
{ 0 } [ "var$" v ] unit-test
{ 0 } [ "foo var" v ] unit-test
{ 1 } [ "v" v ] unit-test
{ 1 } [ "var" v ] unit-test
{ 1 } [ "var_i_able" v ] unit-test
{ 1 } [ "v4r14bl3" v ] unit-test
{ 1/2 } [ "_" v ] unit-test
{ 1/2 } [ "_v" v ] unit-test
{ 1/2 } [ "_var" v ] unit-test
{ 1/2 } [ "_var_i_able" v ] unit-test
{ 1/2 } [ "_v4r14bl3" v ] unit-test

সমস্ত পরীক্ষা পাস;)


শুধু ভাবছি, সাদা স্থান কি সত্যিই প্রয়োজনীয়? আমি ভাষাটি জানি না বা দোভাষী নেই বলে আমি নিশ্চিত করে বলতে পারি না।
মামা ফান রোল

@ মামাফুনরোল হ্যাঁ, সেরা গল্ফিং ভাষা নয়! চতুর্থ traditionতিহ্যে কেবলমাত্র ডিলিমিটার হ'ল সাদা স্থানের অক্ষর।
ফেডারেশন এস।

আচ্ছা বুঝলাম. এখানে, একটি upvote আছে।
মামা ফান রোল

হ্যাঁ, টাই! এখন আমার মন্তব্যের সাথে সর্বনাশ ভেঙে সর্বত্র!
ফেডারেশন এস।

2

ডায়ালগ এপিএল , 19 বাইট - 10% = 17.1

{(0≤⎕NC⍵)÷1+'_'=⊃⍵}

{... ... }বেনামী ফাংশন যেখানে ডান যুক্তি দ্বারা প্রতিনিধিত্ব করা হয়
⊃⍵প্রথম অক্ষর (স্থান খালি যদি দেয়)
'_'=1 যদি 'বারটির সমান, 0 অন্যথায়
1+2 মূল্যায়ণ যদি প্রাথমিক বারটির, 1 অন্যথায়
⎕NC⍵ বর্গ নাম ; -১ অবৈধ নাম হলে 0, অপরিজ্ঞাত থাকলে (তবে বৈধ নাম), 2-9 সংজ্ঞায়িত হলে (এবং এভাবে বৈধ)


1

গণিত, 93 বাইট

If[#~StringMatchQ~RegularExpression@"[A-Za-z_][0-9A-Za-z_]*",If[#~StringTake~1=="_",.5,1],0]&

আমি ভাল নিশ্চিত এই নই করতে আরও golfed হবে না।


1

পার্ল, 34 + 1 = 35 বাইট

$_=/^([^\W\d])\w*$//(($1 eq"_")+1)

-pপতাকা ব্যবহার করে ।

ব্যাখ্যা

$_=/^([^\W\d])\w*$//(($1 eq"_")+1)
   /^([^\W\d])\w*$/                 matches any string that starts with an underscore or a letter of the alphabet followed by 0 or more alphanumeric + underscore characters. The first character is stored in a capture group
                   /                divide result by
                    (($1 eq"_")+1)  (capture == "_") + 1. This is 1 if the first character was not an underscore and 2 if it was.
$_=                                 assign to $_ and implicitly print

[_a-zA-Z]-> [^\W\d]যদি পার্ল জাভাস্ক্রিপ্টের মতো একই কাজ করে তবে আমি মনে করি \w*
আপনাকেও

@ ডাউনগোট এর সাথে কাজ করার জন্য ভাল মনে হচ্ছে \w+
একটি স্প্যাগেটো

এর জন্য মিথ্যা মেলেa
ডাউনগোট

@ ডাউনগোট আহ, ঠিক আছে। আমি দেখি.
একটি স্প্যাগেটো


0

জাভাস্ক্রিপ্ট ES7, 37 বাইট

x=>!x.match(/\W|^\d/)/2**/^_/.test(x)

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

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

x=>                                   // Fat arrow function
   !x.match(/\W|^\d/)                 // Gives false if contains non word or starting 
                                      //   with a digit. Booleans in numeric context will 
                                      //   be 0 or 1
                      2**             // 2 to the power of...
                         /^_/.test(x) // gives true if starting with '_'. 
                                      //   true -> 1 -> 2**1 -> 2
                                      //   false -> 0 -> 2**0 -> 1
                     /                // Devide the lValue boolean with the numeric rValue:
                                      // lValue = 0 or 1
                                      // rValue = 2 or 1

@ ডেনিসের পার্ল উত্তর পোর্ট


0

রুবি, 44 বাইট

->(s){s=~/^(_|\d)?\w*$/?$1?$1==?_?0.5:0:1:0}

ছুরিকাঘাতের ল্যাম্বডাসের জন্য প্যারামিটারগুলির আশেপাশে আপনার পেরেনসের দরকার
নেই

এছাড়াও যদি আপনি অতিরিক্ত অতিরিক্ত তিনটি ড্রপ করার কোনও উপায় বের করতে পারেন তবে আপনি সম্ভবত কিছু বাইট সংরক্ষণ করতে পারেন। সম্ভবত /^([a-z_]).../iপরিবর্তে/^(_|\d)?.../
চার্লস

@ নোটহাট চার্লস ডি'ওহ ... আপনি ঠিক বলেছেন আমি যখন চান্স করব তখন এটিকে আরও কাছাকাছি দেখাব
ফ্ল্যাম্বিনো

0

রুবি, 57 - 10% = 51.3 বাইট

->(s){case s
when'',/^\d/,/\W/
0
when/^_/
0.5
else
1
end}

একটি সুন্দর নির্বোধ পদ্ধতির


51.3 বাইট, মনে আছে। :)
Xesau

@ শেসাউ হুপস এখনই ঠিক করা হয়েছে :)
ফ্ল্যাম্বিনো

আপনি যদি টের্নারি চেইন ব্যবহার করেন তবে আপনি প্রচুর পরিমাণে বাইট সংরক্ষণ করেন:->(s){s=~/^$|^\d|\W/?0:s=~/^_/?0.5:1}
মান কালি

@ কেভিনলউ সত্য - আমি ইতিমধ্যে সেই শিরাতে আরও একটি রুবি উত্তর যুক্ত করেছি (যদিও এটি দুর্দান্তও নয়)
ফ্ল্যাম্বিনো

0

লুয়া, 82 - 10% = 73.8

v=function(s)return(s:match("^[_%a]+[_%w]*$")and 1or 0)*(s:match("_")and.5or 1)end

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

print(v("a") == 1) -- true
print(v("1") == 0) -- true
print(v("_") == 0.5) -- true
print(v("") == 0) -- true
print(v("1a") == 0) -- true
print(v("a1") == 1) -- true
print(v("_1") == 0.5) -- true
print(v("_a") == 0.5) -- true
print(v("1_") == 0) -- true
print(v("a_") == 0.5) -- true

আমি মনে করি আপনি কমপক্ষে 10 বাইট খেতে STDIN ব্যবহার করতে পারেন।
লিকি নুন

0

লুয়া, 68 * .9 = 61.2 বাইট

s=arg[1]print(s:find("^[%a_][%w_]*$")and(s:find("^_")and.5or 1)or 0)

কমান্ড লাইনে যুক্তি দেয় T

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