অসমতার একটি শৃঙ্খলা মূল্যায়ন করুন


17

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

3<=4!=9>3==3

এটি সত্য কারণ এর প্রতিটি উপাদান সত্য:

(3<=4) and (4!=9) and (9>3) and (3==3)

ইনপুট:

একটি স্ট্রিং যা এক বা একাধিক অসমতার শৃঙ্খলা উপস্থাপন করে। অনুমোদিত তুলনা অপারেটর হয়

==   equals
!=   does not equal
>    is greater than
>=   is greater than or equal to
<    is less than
<=   is less than or equal to

অনুমোদিত নম্বরগুলি একক-সংখ্যাগুলির 0মধ্য দিয়ে 9। কোনও স্পেস, প্রথম বন্ধনী বা অন্যান্য চিহ্ন থাকবে না।

আউটপুট:

একটি সামঞ্জস্যপূর্ণ সত্যবাদী বা ফলসী মান হিসাবে অসমতার সঠিকতা । ধারাবাহিক অর্থ প্রতিটি ট্রুথির আউটপুট একই এবং প্রতিটি ফলসী আউটপুট একই।

সীমাবদ্ধতা:

এই চ্যালেঞ্জের উদ্দেশ্যটি আপনার পক্ষে কোড লিখতে যা অসম্পূর্ণতাগুলিকে প্রক্রিয়া করে না, বরং তাদেরকে কোড হিসাবে মূল্যায়ন করে, এমনকি শৃঙ্খলে একক অসমতার জন্য। এর মতো, পাইথনের মতো পদ্ধতি evalএবং execকোডটি মূল্যায়ন বা সম্পাদন করতে নিষিদ্ধ। সুতরাং ফাংশনগুলি যা কোনও পদ্ধতি বা অপারেটরটির নাম স্ট্রিং হিসাবে দেওয়া হয় look বা আপনার জন্য মূল্যায়ন করার জন্য প্রক্রিয়া বা প্রোগ্রামগুলি চালু করার অনুমতি দেওয়া হয় না।

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

3<=4!=9>3==3
True

3<=4!=4
False

5>5
False

8==8<9>0!=2>=1
True

আমরা কি ইউনিকোড অসমতার লক্ষণগুলির সাথে <= এবং> = এর পরিবর্তে ≤ এবং ≥ এর মতো ইনপুট গ্রহণ করতে পারি?
এফইউজেডএক্সএল

@FUZxxl আপনি পারবেন না
xnor

উত্তর:


7

রুবি, 71 + 1 = 72

কমান্ড-লাইন পতাকা সহ -n, চালান

p (0..99).none?{|i|~/#{a=i%10}(#{%w/!=|. <?=* >?=*/[a<=>b=i/10]})#{b}/}

সমস্ত ব্যর্থ হওয়া নিয়মিত এক্সপ্রেশন তৈরি করে এবং ইনপুট স্ট্রিংগুলির কোনওটির সাথে মেলে কিনা তা পরীক্ষা করে। trueআর কিছু না করলে আউটপুট false। এসটিডিনের মাধ্যমে ইনপুট নেয়, নতুন লাইনের দ্বারা পৃথক।

ট্রিকস:

  • আমরা 0 থেকে 99 পর্যন্ত লুপ করে এবং 10 এবং 1 এর অঙ্কগুলি বের করে সমস্ত সম্ভাব্য সংখ্যার সংখ্যার সংখ্যা পাই।
  • একমাত্র আসল তুলনা আমরা করি a<=>bযা সমান বা তার চেয়েও কমের জন্য -1,0 বা 1 প্রদান করে। এই তিনটি স্ট্রিং অ্যারের বিভিন্ন উপাদানগুলিতে টুকরো টুকরো করে মিলছে না এমন তুলনাগুলির জন্য নিয়মিত অভিব্যক্তি খুঁজে বের করে।

কী চতুর কৌশল!
xnor

6

পার্ল, 82

$_=<>;($'<=>$&)-61+ord$1&&($2&&$&==$')^('$'lt$1)&&die"\n"while/\d(.)(=?)/g;print 1

প্রিন্ট 1 সত্য হলে এবং একটি ফাঁকা লাইন যখন মিথ্যা হয়, যেহেতু খালি স্ট্রিং পার্লের প্রধান মিথ্যা মান।

যখন লুপটি রেজেসের সাথে মিলে যায় তার স্ট্রিংয়ের ওপরে যায় \d(.)(=?)। তারপর ভেরিয়েবল $1এবং $2অপারেটর অক্ষর মিলা, এবং বিশেষ ভেরিয়েবল $&এবং $'একটি সংখ্যাসূচক প্রেক্ষাপটে দুই operands যেমন আচরণ করবে। অপারেটরগুলির সাথে তুলনা করা হয় <=>এবং ফলাফল অপারেটরের প্রথম চরিত্রের সাথে মেলে। তারপরে সাম্যতা এবং বৈষম্য বিশেষভাবে মোকাবেলা করা হয়।


4

সিজেম, 60 বাইট

এই কোডটি কিছুটা কুৎসিত এবং সম্ভাব্যরূপে সম্পূর্ণরূপে অপ্টিমাইজড নয় বলে মনে হচ্ছে তবে এটি আমার পক্ষে এখন পর্যন্ত সেরা।

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

q_A,sSer_S%@@-(])1\@z{~:X\:^i['=")<"P"(>"P'<'^'>PPP]=~e&X}/;

ব্যাখ্যা

q               "Read the input";
_A,sSer         "Copy the input and replace each digit with a space";
_S%             "Split around spaces to obtain the operation list";
@@-             "Remove operations from the input to obtain the operand list";
(])1\@z         "Remove the first operand from the list to be the initial left
                 operand, initialize the result to 1 (true), and pair up the
                 operations and remaining operands";
{               "For each operation-operand pair:";
  ~:X             "Let the operand be the right operand of this operation";
  \:^i            "Hash the operation (bitwise XOR of all characters)";
  [               "Begin cases:";
    '=              " 0: Equals";
    ")<"            " 1: Less than or equal to";
    P               " 2: (Invalid)";
    "(>"            " 3: Greater than or equal to";
    P               " 4: (Invalid)";
    '<              " 5: Less than";
    '^              " 6: Bitwise XOR (stand-in for not equal to)";
    '>              " 7: Greater than";
    P               " 8: (Invalid)";
    P               " 9: (Invalid)";
    P               "10: (Invalid)";
  ]=~             "Execute the case selected by the operation hash modulo 11";
  e&              "Compute the logical AND of the result and the value produced
                   by this operation to be the new result";
  X               "Let the right operand be the new left operand";
}/              "End for each";
;               "Clean up and implicitly print result";

4

জাভাস্ক্রিপ্ট (ES6) 110 116

সোজা: স্ক্রিন স্ট্রিং, সি বর্তমান সংখ্যা, l শেষ সংখ্যা, ও অপারেটর।

F=x=>(l='',[for(c of x)10-c?(v=!l||v&&(o<'<'?l!=c:(o[1]&&c==l)||(o<'='?l<c:o<'>'?c==l:l>c)),l=c,o=''):o+=c],v)

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;['3<=4!=9>3==3','3<=4!=4','5>5','8==8<9>0!=2>=1']
.forEach(s=>console.log(s,F(s)))

3 <= 4! = 9> 3 == 3 সত্য
3 <= 4! = 4 মিথ্যা
5> 5 মিথ্যা
8 == 8 <9> 0! = 2> = 1 সত্য


3

হাস্কেল, 156 বাইট

r a=read[a]::Int
l"!"=(/=)
l"="=(==)
l">"=(>=)
l"<"=(<=)
k">"=(>)
k"<"=(<)
[]#_=1<2
(a:'=':b:c)#i=l[a]i(r b)&&c#r b
(a:b:c)#i=k[a]i(r b)&&c#r b
f(h:t)=t#r h

ব্যবহারের উদাহরণ:

f "3<=4!=9>3==3"        -> True
f "3<=4!=4"             -> False
f "5>5"                 -> False
f "8==8<9>0!=2>=1"      -> True

অবরুদ্ধ সংস্করণ:

digitToInt d = read [d] :: Int

lookup2 "!" = (/=)
lookup2 "=" = (==)
lookup2 ">" = (>=)
lookup2 "<" = (<=)

lookup1 ">" = (>)
lookup1 "<" = (<)

eval []              _ = True
eval (op:'=':d:rest) i = lookup2 [op] i (digitToInt d) && eval rest (digitToInt d)
eval (op:d:rest)     i = lookup1 [op] i (digitToInt d) && eval rest (digitToInt d)

evalChain (hd:rest) = eval rest (digitToInt hd)

evalদুটি আর্গুমেন্ট গ্রহণ করে: পার্স করতে স্ট্রিং (তুলনা অপারেটরের সাথে সর্বদা শুরু) এবং এমন একটি সংখ্যা iযা তুলনার জন্য বাম আর্গুমেন্ট (এবং এটি পূর্ববর্তী রাউন্ডে ডান আর্গুমেন্ট ছিল)। অপারেটর lookup2যদি এটি একটি দুটি অক্ষর অপারেটর দ্বারা ফিরে আসে (কেবলমাত্র 1 ম চরটি পরীক্ষা করুন, কারণ 2 র্থ সর্বদা থাকে =) এবং lookup1যদি এটি কেবল একটি একক অক্ষর হয়। evalনিজেকে পুনরাবৃত্তভাবে কল করে এবং সমস্ত রিটার্ন মানগুলি লজিকাল এবং এর সাথে একত্রিত করে &&


3

সাধারণ লিপ - 300 185 169 165

(lambda(s)(loop for(a o b)on(mapcar'read-from-string(cdr(ppcre:split"([0-9]+)"s :with-registers-p t)))by #'cddr always(if o(funcall(case o(=='=)(!='/=)(t o))a b)t)))

উদাহরণ

(mapcar (lambda(s) ...)
       '("2<=3<=6>2<10!=3"
         "3<=4!=9>3==3" 
         "3<=4!=4" 
         "5>5"
         "8==8<9>0!=2>=1"))
=> (T T NIL NIL T)

ব্যাখ্যা

(lambda (s)
  (loop for (a o b) on (mapcar
                        'read-from-string
                        (cdr
                         (cl-ppcre:split "([0-9]+)" s
                                         :with-registers-p t))) by #'cddr
        always (if o
                   (funcall (case o
                                  (== '=)
                                  (!= '/=)
                                  (t o))
                            a b)
                   t)))
  • ppcre:splitঅঙ্কগুলিতে বিভক্ত; উদাহরণ স্বরূপ:

    (ppcre:split "([0-9]+)" "2<=3<=6>2<10!=3" :with-registers-p t)
    => ("" "2" "<=" "3" "<=" "6" ">" "2" "<" "10" "!=" "3")
    

    প্রথম খালি স্ট্রিংটি লক্ষ্য করুন, যা ব্যবহার করে বাতিল করা হয়েছে cdr

  • read-from-stringএই তালিকায় ম্যাপিং readপ্রতিটি স্ট্রিংয়ের জন্য ফাংশনটি কল করে , যা প্রতীক এবং সংখ্যাগুলি দেয়।

  • loop for (a op b) on '(3 < 5 > 2) by #'cddrএকটি ধাপে তালিকা উপর iterates 2 এবং এইভাবে বেঁধে a, opএবং bযেমন অনুসরণ করে, প্রত্যেক ক্রমানুযায়ী পাস জন্য।

    a  op  b
    ----------
    3  <    5
    5  >    2
    2  nil  nil
    
  • alwaysপরবর্তী অভিব্যক্তিটি সর্বদা সত্য কিনা তা যাচাই করে: হয় অপারেটর nil(উপরে দেখুন) অথবা তুলনার ফলাফলটি (নীচে দেখুন)।

  • caseনির্বাচন একটি সাধারণ-পাতার মর্মর তুলনা ফাংশন, প্রতীক পূর্বের পঠিত অনুযায়ী; যেহেতু কিছু অপারেটর লিস্প এবং প্রদত্ত ভাষায় অভিন্ন, আমরা কেবলমাত্র oডিফল্ট ক্ষেত্রে ফিরে আসতে পারি ।


1

পাইথন 2, 95 102

t=1
n=o=3
for c in map(ord,raw_input()):
 o+=c
 if 47<c<58:t&=627>>(o-c+3*cmp(n,c))%13;n=c;o=0
print t

লুপটি স্ট্রিংয়ের মধ্য দিয়ে একবারে একটি অক্ষর থেকে সরল পাস pass t&=...অংশ যেখানে জাদু ঘটবে হয়। মূলত, আমি এর মান সঙ্গে একসঙ্গে অপারেটর হ্যাশ cmp(lhs,rhs)(-1, 0, অথবা 1 যদি তার উপর নির্ভর করে lhsকম, সমান, বা তার চেয়ে অনেক বেশী rhs)। ফলাফলটি একটি সন্ধানের টেবিলের একটি কী যা সেই অপারেটরের প্রদত্ত সংখ্যাগুলি সঠিকভাবে তুলনা করে কিনা তার উপর নির্ভর করে 0 বা 1 দেয়। আপনি কি সারণী জিজ্ঞাসা? এটি সংখ্যা 627 =0001001110011 বাইনারি । বিটওয়াইজ অপারেটররা বাকী কাজটি করেন।

প্রদত্ত চারটি পরীক্ষার ক্ষেত্রে এটি কাজ করে; আপনি যদি অন্য মামলার ত্রুটি খুঁজে পান তবে আমাকে জানান। আমি এটি খুব কঠোরভাবে পরীক্ষা করিনি।


আপনাকে aইনপুট হিসাবে নেওয়া দরকার ।
xnor

@ এক্সনর ওফস সংশোধন।
DLosc

1

জাভাস্ক্রিপ্ট 101 বাইট

এখানে পোস্ট করা জেএস সমাধান থেকে আলাদা পদ্ধতির

F=(s,i=0,l=o="")=>[...s].every(c=>c>=0?[l^c,l==c,,l<c,l>c,l<=c,,l>=c]["!==<><=>=".search(o,l=c,o="")]:o+=c,l=o="")

console.log(F("3<=4!=9>3==3")==true)
console.log(F("3<=4!=4")==false)
console.log(F("5>5")==false)
console.log(F("8==8<9>0!=2>=1")==true)


0

জাভা 8, 283 বাইট

s->{String[]a=s.split("\\d"),b=s.split("\\D+");int i=0,r=1,x,y;for(;i<a.length-1;)if((x=new Byte(b[i]))!=(y=new Byte(b[++i]))&(a[i].equals("=="))|(a[i].equals("!=")&x==y)|(a[i].equals(">")&x<=y)|(a[i].equals(">=")&x<y)|(a[i].equals("<")&x>=y)|(a[i].equals("<=")&x>y))r--;return r>0;}

ব্যাখ্যা:

এখানে চেষ্টা করুন।

s->{                            // Method with String parameter and boolean return-type
  String[]a=s.split("\\d"),     //  All the inequalities
          b=s.split("\\D+");    //  All the digits
  int i=0,                      //  Index-integer (starting at 0)
      r=1,                      //  Flag integer for the result, starting at 1
      x,y;                      //  Temp integer `x` and `y`
  for(;i<a.length-1;)           //  Loop from 0 to the length - 1
  if((x=new Byte(b[i]))!=(y=new Byte(b[++i]))&(a[i].equals("=="))
                                //   If "==" and `x` and `y` as int are not equal:
     |(a[i].equals("!=")&x==y)  //   Or "!=" and `x` and `y` are equal
     |(a[i].equals(">")&x<=y)   //   Or ">" and `x` is smaller or equal to `y`
     |(a[i].equals(">=")&x<y)   //   Or ">=" and `x` is smaller than `y`
     |(a[i].equals("<")&x>=y)   //   Or "<" and `x` is larger or equal to `y`
     |(a[i].equals("<=")&x>y))  //   Or "<=" and `x` is larger than `y`
    r--;                        //    Decrease `r` by 1
                                //  End of loop (implicit / single-line body)
  return r>0;                   //  Return if `r` is still 1
}                               // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.