স্ট্রিংগুলি সমান কিনা তা নির্ধারণ করুন


29

আপনার কাজ সহজ । নির্ধারণ যদি এক স্ট্রিং অন্যান্য (ঠিকানা নেই, মান) সমতা অপারেটার ব্যবহার না করে (যেমন সমান ==, ===অথবা .equal()) অথবা বৈষম্য ( !=, !==) কিছু অন্যান্য ভাষার জন্য অনুরূপ। এর অর্থ যে কোনও জায়গায়! আপনি কোডের কোথাও এই অপারেটরগুলি ব্যবহার করতে পারবেন না। আপনি তবে, আপনি টগলগুলি ব্যবহার করতে পারেন !expযেমন আপনি সরাসরি তুলনা করছেন না exp != with something else

উপরন্তু, আপনি যেমন কোনও ফাংশন ব্যবহার করতে পারেন না strcmp , strcasecmp , ইত্যাদি

তুলনা অপারেটরদের জন্য ( >=, <=, >, <) তাহলে তাদের হয় অননুমোদিত । আমি বুঝতে পারি যে কয়েকটি উত্তর এর মধ্যে অন্তর্ভুক্ত রয়েছে তবে আমি আরও উত্তর দেখতে চাই যা সাম্যতা অপারেটরের সীমানা নয় don't


পিএইচপি ব্যবহার করে একটি উদাহরণ দেখানো হয়েছে:

<?php

$a = 'string';
$b = 'string';

$tmp = array_unique(array($a, $b));

return -count($tmp) + 2;

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


1
ফলাফলটি আউটপুট করা কী প্রয়োজন, বা একটি বিল ফেরত দিতে কেবল কোনও ফাংশন লিখতে হয়? যদি একটি সম্পূর্ণ প্রোগ্রাম লেখার প্রয়োজন হয়, যা জাভা এবং সি # এর মতো কার্যকর কার্য সম্পাদনযোগ্য (তুল্যভাবে) উল্লেখযোগ্য বয়লারপ্লেট সহ ভাষাগুলিতে বা তুলনামূলক উত্তর দিতে পারে (যেমন এই জন্তুটির প্রকৃতি, তবে এই চ্যালেঞ্জটির পথে কিছুটা কম) কংক্রিট গাইডলাইন, ব্যাখ্যা / পছন্দ অনেক ছেড়ে)। এবং আমরা স্ট্রিং নিতে কিভাবে? হার্ডকোডিং, এসটিডিআইএন থেকে পড়া, কমান্ড-লাইন আর্গুমেন্ট হিসাবে পাস?
টনি এলিস

এটি কি [কোড-গল্ফ] বা একটি [জনপ্রিয়তা-প্রতিযোগিতা]? এটি উভয় হতে পারে না।
গ্যারেথ

দুঃখিত, আমি উভয় মন্তব্য প্রতিফলিত করতে আমার প্রশ্নগুলি পরিবর্তন করেছি।
ডেভিড চেন

তাহলে কি অসমতার অনুমতি আছে?
ব্যবহারকারী 80551

যদি স্ট্রিংগুলি একাধিকবার (প্রতিটি) হার্ডকোড করা হয় তবে আমি কি তাদের দৈর্ঘ্য গণনা করতে পারি?
ব্যবহারকারী 80551

উত্তর:


34

পাইথন 49 45 18 22 15 14

(+ 3 যদি স্ট্রিং ভেরিয়েবল বিবেচনা করা হয়)

print{a:0,b:1}[a]

স্ট্রিংটি দুটি ঘটনায় শক্তভাবে কোড করা উচিত aএবং bকোট দ্বারা ঘেরা একটি ঘটনাই ।

aএবং bস্ট্রিংগুলিতে প্রাক-সূচনা করা উচিত।


পাইথন শেল, 9

(+ 3 যদি স্ট্রিং ভেরিয়েবল বিবেচনা করা হয়)

{a:0,b:1}[a]

শেল আউটপুট

>>> a = 'string'
>>> b = 'string'
>>> {a:0,b:1}[a]
1
>>> a = 'string'
>>> b = 'stringgg'
>>> {a:0,b:1}[a]
0
>>> {'string':0,'string':1}['string']
1
>>> {'stringggg':0,'string':1}['stringggg']
0
>>> 

ব্যাখ্যা

প্রথম এবং দ্বিতীয় স্ট্রিংয়ের কী দিয়ে একটি ডিক (হ্যাশ টেবিল) তৈরি করে। যদি দ্বিতীয় স্ট্রিং একই হয় তবে প্রথমটির মানটি দ্বিতীয়টির পরিবর্তিত হবে। অবশেষে, আমরা প্রথম কীটির মান মুদ্রণ করি।

সম্পাদনা: ওপিতে প্রার-ইনিশিয়েলড ভেরিয়েবলগুলি ব্যবহারের পাশাপাশি মিথ্যা / সত্যের পরিবর্তে 0/1 এর অনুমতি দিয়েছে।


@ মানটওয়ার্ক গল্ফস্ক্রিপ্ট এবং নীচে পার্ল 0/1 ব্যবহার করুন, আমি কি এটি ব্যবহার করতে পারি না?
ব্যবহারকারী 80551

@ মান্যাটওয়ার্ক সম্পন্ন হয়েছে
ব্যবহারকারী 80551

আপনার দ্বিতীয় সমাধানের জন্য আমি 13 এর পরিবর্তে 16 টি গণনা করছি।
অভিজিৎ

@ অভিজিৎ দ্য aএবং bএতে অন্তর্ভুক্ত করা উচিত নয়, স্ট্রিংগুলি সেখানে হার্ড-কোড করা উচিত, এ কারণেই আমি + 2 * লেন (স্ট্র 1) + লেন (
স্ট্র

চতুরতার জন্য +1 তবে এটি এখন আর সবচেয়ে কম নয়;)
অবলঞ্চা

20

পাইথন ( 17 11):

b in a in b

(খ এর মধ্যে একটি রয়েছে এবং এটিকে বি তে রয়েছে কিনা তা যদি কোড থেকে পরিষ্কার না হয় তবে তা পরীক্ষা করে দেখুন))

বিকল্প পাইথন: ( 8 7)

টম ভেরেলস্টের গো সমাধান থেকে প্রাপ্ত:

b in[a]

বোনাস: এটি যে কোনও প্রকারের জন্য কাজ করে।

সম্পাদনা করুন:

এক সেকেন্ড অপেক্ষা করুন, কেবল পড়ুন যে আপনি স্ট্রিংগুলিতে সরাসরি প্রোগ্রাম করতে পারেন এবং কোটগুলি গণনা করতে হবে না ... (বা কমপক্ষে, গল্ফস্ক্রিপ্ট কী করে)। তো ... গল্ফস্ক্রিপ্টের সাথে পাইথন সমান? আহারে!

বিকল্প বিকল্প পাইথন ( 5 4):

(ধন্যবাদ ক্লডিউ)

"string"in["string"]

মূল:

"string" in["string"]

বিকল্প বিকল্প বিকল্প বেন্ডি-রুলি পাইথন (2):

"string"is"string"

তুলনার কীওয়ার্ড সম্পর্কে কিছুই বলা হয়নি (এটি কোনও গুরুতর জমা নয়, আমার কাছে ঘটে যাওয়া কেবল এমন কিছু ...)


2
আপনি ব্যবহার করতে পারে b in a in b। এবং এটি প্রয়োজনীয় নয় ...
জর্জ

2
এখন এটি উইলেমের উত্তরের সদৃশ ।
manatwork

আপনি inএবং এর মধ্যে শ্বেত স্থানটি সরিয়ে এটি সাতটি অক্ষরে নামতে পারেন [a]। অর্থাৎ b in[a]কাজ করা উচিত।
ব্যবহারকারী 3000073

ওহ, এটি জানতেন না। ধন্যবাদ :)
5uʎs

চিত্তাকর্ষক! এটিও জানতেন না
উইলেম

14

জাভাস্ক্রিপ্ট, 11 10

স্ট্রিং a এবং b এ সংরক্ষণ করতে হবে।

!(a>b|a<b)

সম্পাদনা করুন: ধন্যবাদ ড্যানি নির্দেশ করার জন্য, এর |পরিবর্তে যথেষ্ট||


5
না, আমি অপারেটরগুলির চেয়ে বেশি এবং কম ব্যবহার করছি। প্রতিযোগিতায় এগুলি নিষিদ্ধ ছিল না।
আদম সাজাবো

2
+1 টি। এটি অন্যান্য অনেক ভাষায়ও অভিন্নভাবে কাজ করতে চলেছে।
আরকিটিপাল পল

3
আমি ভুল হতে পারি তবে আপনি কি এটিকে সরাতে পারবেন না |?
ড্যানি

3
অবশ্যই একটি নিয়ম পর্যবেক্ষণ - সমতা এবং অসমতা অপারেটর হিসাবে তুলনা ফাংশন নিষিদ্ধ , কিন্তু তুলনা অপারেটর উল্লেখ করা হয় নি।
ব্যবহারকারী 2357112

2
@ ফিলকলবর্ন হ্যাঁ, গতকাল নিয়ম পরিবর্তন হয়েছে তবে উত্তরটি ২ দিন পুরানো।
বাকুরিউ


8

পাইথন - 11 (স্ট্রিং ছাড়া)

>>> a = 'ss'
>>> b = 's'
>>> a in b in a
False

একই আত্মায়: a<=b<=aযা কেবলমাত্র 7 টি অক্ষর। যদিও আমি জানি না যে তুলনাটি <=একটি "বৈষম্য" হিসাবে বিবেচিত হবে। প্রশ্ন থেকে এটি প্রদর্শিত হয় যে কোনও তুলনা যা একটি সাম্যতা চেক নয় ঠিক আছে, যা অনুমতি দেয় <=
বাকুরিউ

হ্যাঁ, এটি একটি খুব সুন্দর বাকুরু, এবং আমি সম্মত হই, নিয়ম লঙ্ঘন করা হয় বা না হয় তা সম্পূর্ণ পরিষ্কার নয় not 'ইন' সব পরেও কীভাবে একটি সমান বিবৃতি থাকে।
উইলিম

6

গল্ফস্ক্রিপ্ট (5 টি অক্ষর)

'string1''string1'].&,(

পিএইচপি রেফারেন্স বাস্তবায়নের মোটামুটি সোজা বন্দর। 0স্ট্রিংগুলি একই থাকলে স্ট্যাকের উপর পাতা (= মিথ্যা), বা 1(= সত্য) যদি তারা আলাদা হয়।


আমার জন্য কাজ করে না: 1যদি স্ট্রিং একই হয় এবং 2যদি সেগুলি আলাদা হয়। 'string1''string1'].&,1&কাজ
777

@ লোক 7777, এটি ধরে নেওয়া হয় যে শুরুতে স্ট্যাকটি খালি। প্রশ্নটি বরং প্রোগ্রামের টুকরো সম্পর্কে অস্পষ্ট। আপনি সম্ভবত এটি পুরো প্রোগ্রাম হিসাবে পরীক্ষা করছেন এবং স্টিডিন থেকে স্ট্যাকের খালি স্ট্রিং দিয়ে শুরু করছেন।
পিটার টেলর

5

জাভাস্ক্রিপ্ট (45 বাইট):

জাভাস্ক্রিপ্টে এখানে আরও একটি সমাধান দেওয়া হয়েছে।

var a='string',b='string',c=!a.replace(b,'');

স্থানটি গুরুত্বপূর্ণ।

cহওয়া উচিত true


শুধুমাত্র !a.replace(b,'') গণনা করা হয়। সুতরাং চরিত্রের গণনা 16 টি হওয়া উচিত Act প্রকৃতপক্ষে, কিছু লোক এমনকি 14 টি গণনা করে, আপনি স্ট্রিংটি সরাসরি উল্লেখ করতে পারেন।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

5

সি ++, 63 58 56

const char* a = "string";
const char* b = "string";
int main(){while(*a**b*!(*a^*b))++a,++b;return!(*a^*b);}

2
আপনি কি এর autoবদলে পালাতে পারবেন const char*?
aldo

আমার মনে হয় হ্যাঁ, তবে যেহেতু নিয়মগুলি বলে যে স্ট্রিং ভেরিয়েবলগুলি চরিত্রের গণনার দিকে গণনা করা হয় না আমি সেগুলি গল্ফ করতে বিরক্ত করি না।
ম্যাটনিউপোর্ট

আপনি কি পরীক্ষার সময় ইনক্রিমেন্টগুলি ভাঁজ করতে এবং শরীরকে খালি রেখে দিতে পারেন? এবং আপনি যদি সি ++ এর পরিবর্তে সি এর জন্য যান তবে শুরুতে ইনট সরান।
প্রাচ্য

আমি অভিজিৎ এর সি উত্তরে উল্লেখ করেছি যে শেষের দিকে একটি স্ট্রিং অ্যাক্সেস করার একই বাগটি আঘাত না করেই পরীক্ষার বর্ধনে ভাঁজ করে চরিত্রের সংখ্যা হ্রাস করার কোনও উপায় আমি দেখছি না। আপনি কেবলমাত্র a এবং b বৃদ্ধি করতে চান যদি উভয় পরীক্ষা পাস হয় (একটি বা খ উভয়ই নাল টার্মিনেটরের দিকে নির্দেশ করে না এবং একটি খ এর সমান হয়)। সম্ভবত এটির উন্নতি করার একটি উপায় আছে তবে আমি এটি সন্ধান করতে পারিনি!
mattnewport

3

কোরটিলস: ইউনিক -ডি

একটি পাইপের স্ট্যান্ডার্ড ইনপুট হিসাবে কেবল আপনার দুটি স্ট্রিং প্রবেশ করুন এবং uniq -d | grep -q .কিছুই মুদ্রণ করবেন না তবে সাফল্য বা ত্রুটির ফেরতের মান থাকবে। আপনি যদি বুলিয়ান মুদ্রণ করতে চান তবে কেবল সাথে প্রতিস্থাপন করুনuniq -d | grep -c .

কত চরিত্র? আমি আপনাকে গণনা করতে দিন; uniq -d|grep -q .কোনও অতিরিক্ত স্পেস ছাড়াই এতে 17 টি অক্ষর নেই, তবে যেহেতু পুরো কাজটি ইউনিট দ্বারা সম্পাদিত হয়, তাই আমি বলতে পারি যে এই সমাধানটি ... uniqনিজস্ব ভাষায় 0-চরিত্রের একটি !

প্রকৃতপক্ষে, uniq -dদুটি স্ট্রিং অভিন্ন হলে একটি লাইন মুদ্রণ করবে এবং ভিন্ন ভিন্ন হলে কিছুই হবে না।


3

স্ট্রিং a এবং b এ সংরক্ষণ করতে হবে। হয় যদি কাজ হয় না null

সি #, 53

string.IsNullOrEmpty(a.Replace(b,"")+b.Replace(a,""))

সি #, 28

a.Contains(b)&&b.Contains(a)

3

পিএইচপি - 49 টি অক্ষর

!(strlen($a)^strlen($b)|strlen(trim($a^$b,"\0")))

এই কাজের মতো কিছু করা যায়নি: !strlen(str_replace($a,'',$b));দুটি স্ট্রিং সমান হলে এটি 1 টি ফিরে আসবে?
দামির ক্যাসিপোভিচ

@ ডি ক্যাসিপোভিচ আকর্ষণীয়, তবে আমি মনে করি এটি ব্যর্থ হয় $a == 'foo'এবং $b = 'foofoo':)
জ্যাক ১

সত্য, এরপরে কীভাবে এটি একটির প্রতিস্থাপন সীমাবদ্ধ করে !strlen(preg_replace("/{$a}/", '', $b, 1));45 টি অক্ষর রাখে?
দামির কসিপোভিচ

আমি মনে করি আপনি পরিবর্তে অ্যাঙ্কারগুলি ব্যবহার করতে পারতেন তবে আরও গুরুত্বপূর্ণ এটির জন্য পূর্বসূচী ()ও প্রয়োজন হবে :)
জ্যাক

3

এপিএল ( 8 9)

আপডেট: পুরানোটি বিভিন্ন দৈর্ঘ্যের স্ট্রিংয়ের জন্য কাজ করে না।

{∧/∊⌿↑⍺⍵}
  • ↑⍺⍵: শূন্যস্থান পূরণ করে প্রথম লাইনে এবং দ্বিতীয় লাইনে একটি ম্যাট্রিক্স তৈরি করুন ।
  • ∊⌿: প্রতিটি কলামের জন্য দেখুন উপরের সারিতে নীচের সারিটি রয়েছে কিনা (পুরানো সংস্করণ হিসাবে)।
  • ∧/: andসমস্ত মানের যৌক্তিক নিন ।

পুরোনো একটি:

{∧/⍺∊¨⍵}
  • ⍺∊¨⍵: উপাদানের প্রতিটি সংযুক্তির জন্য এবং দেখুন যদি থেকে উপাদান থেকে উপাদান রয়েছে । যেহেতু একটি স্ট্রিং এ সমস্ত একক অক্ষর হবে এবং একটি স্ট্রিং নিজেই ধারণ করে, এটি মূলত প্রতিটি জোড়া অক্ষরের তুলনা করে।
  • ∧/: যৌক্তিক এবং সমস্ত মান গ্রহণ করুন (যদি সমস্ত অক্ষর মেলে তবে স্ট্রিংগুলি সমান হয়)

3

পাইথন - 12

not({a}-{b})

এই সমাধান সেট ব্যবহার করে। সমমানের সেটগুলি বিয়োগের ফলে খালি সেট আসবে, যার ফলসটির বুলিয়ান মান রয়েছে। নেগেটিং করার ফলে a এবং b সমান স্ট্রিং হওয়ার জন্য একটি সত্য মান হবে।

>>> a="string1"
>>> b="string2"
>>> not({a}-{b})
False

>>> a="string"
>>> b="string"
>>> not({a}-{b})
True

সম্পাদনা করুন: পিটার টেলরকে অপ্রয়োজনীয় সাদা স্থান চিহ্নিত করার জন্য ধন্যবাদ Thanks


এটি কী আউটপুট দেয় a="s", b="ss"?
পিটার টেলর

@ পিটারটেলর: যেহেতু "s"!="ss", এটি আউটপুট হবে False। কেস সংবেদনশীলতাও সংরক্ষণ করা হয়। এটি এমনকি জন্য কাজ করে a="", b="s"। কোডটি স্ট্রিংগুলিকে সেটে রূপান্তর করে না, তবে স্ট্রিংগুলি সহ সেট তৈরি করে।
ভারিকাস

আহ, {}এক হিসাবে না set()। আপনি সাদা স্থানটি সরিয়ে 1 চর সংরক্ষণ করতে পারেন।
পিটার টেলর

@ পিটারটেলর: অপ্রয়োজনীয় সাদা স্থান চিহ্নিত করার জন্য ধন্যবাদ for {a}সমতূল্য set([a])
ভারিকাস

কীভাবে not {a}-{b}?
উইনস্টন ইওয়ার্ট

3

সি - 62

e(char*p,char*q){for(;*p&*q&&!(*p^*q);q++,p++);return!(*p^*q);}

পরীক্ষিত। যেমন কলe(str1, str2)

এটি ভাবতে আসুন, আপনি যদি এটি গণনা করেন না char*p,char*q, যা কেবলমাত্র উপযুক্ত বলে মনে হয়, এটি কেবল 49 বাইট :)


সাইটে স্বাগতম! কোড-গল্ফ চ্যালেঞ্জগুলির জন্য, আমরা আপনাকে আপনার কোড থেকে যতগুলি বাইট করতে পারেন ততটুকু ছাঁটাই করতে এবং আপনার উত্তর শিরোনামে বাইট গণনা পোস্ট করতে উত্সাহিত করি। পরীক্ষা করে দেখুন সি golfing জন্য টিপস কিছু ভাল ধারনা থ্রেড।
জোনাথন ভ্যান মাত্রে

আপনার সত্যই দরকার নেই npএবং nq। একটি লুপ করবে, কারণ আপনি যদি অন্যটির আগে একটি স্ট্রিংয়ের শেষে পৌঁছে যান তবে তাদের আলাদা মান হবে।
পিটার টেলর

ধন্যবাদ। আমি বুঝতে পারি আমি আমার সংক্ষিপ্ত সংস্করণে (উপরে) কাজ করছিলাম। আমি আরও সংক্ষিপ্ত করতে পারি কিনা তা দেখতে ফিরে যাচ্ছি।
এমমেট

*p&*qলুপটি খুব তাড়াতাড়ি থামাতে পারে (উদাঃ '0'&'A'==0)
উগোরেন

@ ইউগোরেন: যদি *p=='0'& *q=='A', আমরা চাই যে লুপগুলি তাড়াতাড়ি বন্ধ হয়ে যায়, কারণ আমরা জানি যে স্ট্রিংগুলি সমান নয়।
এমমেট

2

হাস্কেল - 9

elem a[b]

মনে রাখবেন যে এটি এখানে অনেক এন্ট্রিগুলির মতো, কেবল একটি প্রকাশ। এটি হাস্কেল প্রোগ্রাম নয়।


2

জাভা - 162 147 টি অক্ষর

প্রতিটি বাইটের পার্থক্য তুলনা করার ধারণাটি রয়েছে, একই বাইটের মধ্যে পার্থক্য থাকবে ০. প্রোগ্রামটি java.lang.ArrayIndexOutOfBoundsExceptionযখন বাইটগুলি পৃথক হয় (কোনও নেতিবাচক সূচকটি অ্যাক্সেস করার চেষ্টা করুন) বা স্ট্রিংগুলি পৃথক দৈর্ঘ্যের হয় তখন তা নিক্ষেপ করবে । এটি ব্যতিক্রমটি ধরে ফেলবে এবং 0 (স্ট্রিং সমান নয়), বা 1 অন্যথায় (স্ট্রিং সমান) ফেরত দেবে।

সঙ্কুচিত:

String a = "12345";
String b = "12345";
byte[]x=a.getBytes(),y=b.getBytes();int z,i=a.length()-b.length();try{for(byte d:x){z=d-y[i];z=x[-z*z];i++;}}catch(Exception e){return 0;}return 1;

সাধারন:

String a = "12345";
String b = "12345";
byte[] byteArrA = a.getBytes();
byte[] byteArrB = b.getBytes();

int byteDifference = 0;
int i = a.length() - b.length();

try {
    for (byte aByte : byteArrA) {
        byteDifference = aByte - byteArrB[i];
        byteDifference = byteArrA[-byteDifference*byteDifference];
        i++;
    }
} catch (Exception e){
    return 0;
}

return 1;

তুলনা অপারেটরগুলি লুপে বিদ্যমান।
ζ--

আপনাকে @ হেক্সাফ্র্যাকশন ধন্যবাদ, আমি সেগুলি অন্তর্ভুক্ত না করার জন্য উত্তর আপডেট করেছি।
হপার হান্টার

2

পিএইচপি

    $string = 'string';
    isset( ${'string'} );

এই স্ক্রিপ্টের কোনও উপযোগিতা নাও থাকতে পারে তবে কমপক্ষে এটি স্ট্রিংগুলির সাথে তুলনা করার একটি উপায় সরবরাহ করে।

পিএইচপি

অন্যটি এক:

    $string = 'something';
    $text   = 'something';
    return count( array( $string => 1 , $text => 1 ) ) % 2;

1
বাহ খুব সুন্দর। এবং এটি এর মতো করে করা কোনও স্ট্রিং (স্পেস এবং ইউনিকোড সহ) ব্যবহার করা সম্ভব করে তুলতে পারে।
ডেভিড চেন

2

প্রোলগ 7

e(A,A).

এটি প্রোলিকে 2 টি আর্গুমেন্টকে একীভূত করতে প্রোলোগ্রাফের মধ্যে প্যাটার্ন মেলানো বৈশিষ্ট্যটি ব্যবহার করে, যা কোনও আনবাউন্ড ভেরিয়েবল না থাকলে কার্যকরভাবে সমতার সমতার জন্য কার্যকরভাবে পরীক্ষা করে ।

নমুনা ব্যবহার:

?- e("abcd", "Abcd").
false.

?- e("abcd", "abcd").
true.

প্রযুক্তিগতভাবে বলতে গেলে, এই সমাধানটির আচরণটি ইউনিফিকেশন অপারেটরের =/2পরিবর্তে ==/2, যা শব্দটির সমতার জন্য পরীক্ষা করে। আনবাউন্ড ভেরিয়েবল জড়িত থাকার সময় পার্থক্যটি দেখায়। এই সমাধানে, যখন আনবাউন্ড ভেরিয়েবল সরবরাহ করা হয়, trueএকীকরণ সফল হলে প্রিডিকেট ফিরে আসবে । তুলনায়, ==/2একীকরণ ছাড়াই শর্তাবলীর তুলনা করবে।


2

পিএইচপি, 21

এই একটি ভেরিয়েবল ইন্ডিয়ারেশন ব্যবহার করে কাজ করছে।

$$a=$b;!!$$b;

বা, যদি আপনার এটি বুল করার প্রয়োজন না হয়

$$a=$b;$$b;

সম্পাদনা : আপনি যেখানে দুটি খালি স্ট্রিং তুলনা করার চেষ্টা করেছিলেন সেই ক্ষেত্রে আমি পরিচালনা করতে ভুলে গেছি, এখন কোডটি তাই is

$$a=$b;!($a.$b)||$$b;

যা 21 টি অক্ষর।


বৈধ শনাক্তকারী নয় এমন স্ট্রিং দেওয়ার সময় আমি ত্রুটিগুলি প্রদান করার প্রত্যাশা করেছি, তবে আমার আশ্চর্যের সাথে এটি হয় না।
পিটার টেলর

দুটি সমস্যা: 1. "0" এবং "" তুলনা করার সময় সত্য ফিরে আসে। ২. $ b একটি বিদ্যমান ভেরিয়েবলের নাম (বর্তমান প্রতীক টেবিলের) হলে সত্যটি ফিরে আসে (যেমন "গ্লোবালস" বা "_SERVER" কে বিশ্বব্যাপী স্কোপে বা কোনও সুযোগে "খ"), এমনকি যখন $ b সমান নয়।
প্লিজস্ট্যান্ড

2

সিপিথন: 6

a is b

>>> a = 'string'
>>> b = 'string'
>>> c = 'STRING'
>>> a is b
True
>>> a is c
False

এর ব্যবহার isস্পষ্টতই সন্দেহজনক, তবে যেহেতু কার্যটি বিশেষভাবে ডেকেছে যে আমরা রেফারেন্স সমতার চেয়ে মান সমতা নির্ধারণ করব এবং isকেবল বস্তুর পরিচয়ের সাথে তুলনা করব, তাই আমার মনে হয় এটি নিষিদ্ধ অপারেটরদের তালিকায় নাও আসতে পারে

অবশ্যই এটি এমনকি বৈধ কিনা তা নিয়েও কিছু প্রশ্ন রয়েছে; এটি আমার সমস্ত সিস্টেমে কাজ করে, তবে এটি বাস্তবায়ন-নির্দিষ্ট এবং সম্ভবত সবসময় কাজ করবে না যদি ইন্টারেক্টিভ ইন্টারপ্রেটারে স্ট্রিংগুলি হাত দ্বারা সংজ্ঞায়িত না করা হয়।


2

ম্যাথমেটিকা ​​/ ওল্ফ্রাম ভাষা, 15 বাইট

2 - Length[{a} ∪ {b}]

অত্যন্ত স্ব-বর্ণনামূলক, প্রতিটি স্ট্রিং সেট হিসাবে সেট করে, তারপরে দুটি সেটগুলির মিলনের দৈর্ঘ্য পরীক্ষা করে। যদি স্ট্রিং একই থাকে তবে 1 প্রদান করে, অন্যথায় 0 ফিরে আসে। যদি আমাকে "2" এবং "1" এর জন্য '1' ফেরত দেওয়ার অনুমতি দেওয়া হয় তবে দুটি বাইট বিয়োগ করুন।


2

সি 342 গল্ফড

#include <stdio.h>
#define N 100
#define P(x) printf("%s\n",x)
#define G(x) gets(x)
void e(int x){x?P("y"):P("n");}
int main(){
char s[N],t[N];char *p,*q;int r=0; int n=0,m=0;int i=1;p=s,q=t;
if((p=G(s))&&(q=G(t))){while (*p){n+=i*(int)*p;m+=i*(int)*q;i++;p++;q++;if(!(*q)){break;}}
if(!*p&!*q){if(!(m-n)){r=1;}}e(r);}
return 0;
}

দ্রষ্টব্য: ভিজুয়াল স্টুডিও অভিযোগ করে যদি আপনি তাদের নিরাপদ পদ্ধতিগুলি ব্যবহার করেন না যেমন get_s। মিংডাব্লু সহ কোডলকগুলি কোনও সতর্কতা ছাড়াই সংকলন করে।

গ 655 গল্ফ না

কোড প্রতিটি স্ট্রিংয়ের জন্য চরের ভার্সামফল তৈরি করে। পার্থক্যটি যদি শূন্য হয় তবে তারা 2 টি খালি স্ট্রিং সহ সমান:

    #include <stdio.h>
#define N 100
#define P(x) printf(x)
#define G(x) gets_s(x)

void e(int x){ x ? P("equal\n") : P("not equal\n"); }
int main()
{
    char s[N], t[N];//words
    char *p = 0, *q = 0;
    int r = 0; //result 0=false
    int n=0, m=0; //weighted sums
    int i = 1; //char pos start at 1
    if ((p=gets_s(s)) &&
        (q=gets_s(t)))
    {
        while (*p)
        {
            n += i*(int)*p;
            m += i*(int)*q;
            i++;
            p++;
            q++;
            if (!(*q)){
                break;
            }
        }

        if (!*p && !*q){ //both same length strings
            if (!(m - n)){ r = 1; } //weighted sums are equal           
        }//else r=0, false=>not equal

        e(r);
    }
    else{
        P("error\n");
    }
    getchar();
}

খুব ভাল কাজ, তবে আপনার সম্ভবত এটি গল্ফ করা উচিত।
হোস্ট 250

আমি আপনার জমাটি সংকলন করতে পারি না আমি "আর্কিটেকচারের জন্য অনির্ধারিত চিহ্নগুলি x86_64:" _gets_s "পেয়েছি, যা থেকে রেফারেন্স করা হয়েছে: _main in গল্ফ -310cf2.o ld: প্রতীক (গুলি) আর্কিটেকচারের জন্য পাওয়া যায়নি x86_64"
স্টিফেন মেলভিন

2

পাইথন

এটি দীর্ঘ এবং এটি সুন্দর নয়, তবে এটি আমার প্রথম প্রবেশ!

def is_equal(a,b):
    i=0
    a,b=list(a),list(b)
    if len(a)>len(b):
        c=a
        lst=b
    else:
        c=b
        lst=a
    try:
        while i<len(c):
            for j in c:
                if j not in lst[i]:
                    return False
                i+=1
    except IndexError:
        return False
    return True

2

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

আমি ধরে নিই যে কোনও তুলনামূলক অপারেটর ব্যবহার করা আপনার নিষিদ্ধ । সুতরাং <বা >অন্তর্ভুক্ত করা হয়।

বিটওয়াইজ এক্সওআর ব্যবহার করার ধারণাটি। বিভিন্ন ভাষায় এই অপারেটরের বিভিন্ন বাক্য গঠন রয়েছে - আমি পিএইচপি-র জন্য একটি উদাহরণ দেখাব। এটি সঙ্গে উপলব্ধ^ । দুর্ভাগ্যক্রমে, স্ট্রিংগুলির সাথে এর আচরণটি যেমনটি হতে পারে তেমন ভাল নয়, সুতরাং আপনার আগে স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করা দরকার। এটি কারণ পিএইচপি-তে, xor দীর্ঘ স্ট্রিংটি ছোট স্ট্রিংয়ের দৈর্ঘ্য পর্যন্ত নামিয়ে দেয়।

পরবর্তী জিনিসটি সঠিকভাবে স্ট্রিংগুলির সাথে কাজ করা, কারণ একক xorকোনও ফলাফল তৈরি করতে পারে না, পিএইচপি-র আরও ক্রিয়াকলাপের জন্য উপলব্ধ। এজন্যই unpack()ব্যবহৃত হত। সুতরাং, কোডটি হবে:

return !(strlen($a)^strlen($b)) & !array_filter(unpack('c*', $a^$b))

এটি বিকল্পের চেয়ে দীর্ঘ </ >তবে এটি সেগুলি ব্যবহার করবে না। এছাড়াও, গুরুত্বপূর্ণ জিনিসটি পিএইচপি ধরণের জাগলিং সম্পর্কে (তাই খালি অ্যারেতে ফেলে দেওয়া হবে false)। অথবা একটি অ্যারেতে শূন্য-অবিবাহিত সদস্য রয়েছে কিনা তা যাচাই করার সহজ উপায় রয়েছে ( সম্পাদনা করুন : আমি এটি টাইপ করার সময়, trim()অন্য উত্তরে একটি ভাল ক্যাচ আছে , তাই আমরা অ্যারে অপারেশন থেকে মুক্তি পেতে পারি)

তবে আমি বিশ্বাস করি এমন ভাষা আছে যেখানে আমরা ঠিক করতে পারি a ^ b- আক্ষরিক অর্থে ফলাফল পেয়ে। যদি এটি 0(সমস্ত ফলিত বাইট থেকে চিকিত্সা করা হয়) - তবে আমাদের স্ট্রিংগুলি সমান । এটা খুবই সহজ এবং চেয়ে আরও বেশি সহজ <বা >স্টাফ।


1

গ্রেপ 14 টি অক্ষর

অবশ্যই, আমি কেবল গ্রেপ কোড গণনা করি; দুটি স্ট্রিং ইনপুটটিতে টানা দুটি লাইনে থাকে (হয় পাইপ বা ফাইল বা একটি ইন্টারেক্টিভ সেশন)।

$ echo -e 'string\nstring' | grep -cPzo "(?s)^(\N*).\1$"
1
$ echo -e 'string\nstring1' | grep -cPzo "(?s)^(\N*).\1$"
0
$ echo -e 'string1\nstring' | grep -cPzo "(?s)^(\N*).\1$"
0

1

মতলব: 12 টি অক্ষর (স্ট্রিংগুলি ভেরিয়েবলের পরে রয়েছে)

~(x*x'-y*y')

অ্যাসাইনমেন্ট সহ কোডটি হ'ল:

x='string1'
y='string2'
~(x*x'-y*y')

1

খুব পাগল উপায়

কেবল মজাদার জন্য, তবে এটির ব্যর্থতার অনেকগুলি উপায় যদি কেউ এ সম্পর্কে চিন্তা করে। আরও বেশি, ভুলে যাবেন না যে স্ট্রিংটি শেল দ্বারা কার্যকর করা হবে।

$ echo -e 'string\nstring1' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true
$ echo -e 'string\nstring' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true
true
$ echo -e 'string1\nstring' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true

একটি ভাল কাউন্টার-উদাহরণটি "স্ট্রিং" কে প্রথম স্ট্রিং এবং "আরএম -আরএফ /" কে দ্বিতীয় স্ট্রিং হিসাবে তুলনা করছে; কেবল রুট হিসাবে যাচাই করুন এবং দেখুন: এটি "সত্য" বলবে যদিও উভয় স্ট্রিং অবশ্যই স্পষ্ট নয়।


1

জাভাস্ক্রিপ্ট [18 বাইট]

(_={})[a]=1,!!_[b]

অথবা

!!((_={})[a]=_)[b]

এটি trueযদি a == bএবং falseযদি ফিরে আসবে a =/= b। পিছনে যুক্তি হ'ল aসম্পত্তি হিসাবে একটি মান দিয়ে একটি বস্তু তৈরি করে এবং প্রত্যাবর্তন করা হয় 1বা undefinedযদি bসেই বস্তুর মধ্যে কোনও মানের কোনও সম্পত্তি উপস্থিত না থাকে বা থাকে।


বিধিগুলি বলছে আপনাকে সত্য বা মিথ্যা যা মূল্যায়ন করে এমন কোনও জিনিস ফেরত দেওয়ার অনুমতি দেওয়া হয়েছে, সুতরাং এটি !!প্রয়োজনীয় নয়
জেমস_পিক

@ জেমস_পিক হ্যাঁ, তবে অন্যথায় এটি ফিরে আসবে 1বা undefined(বা বস্তু / undefinedদ্বিতীয় ক্ষেত্রে)।
ভিজিওন

আমি বিধিগুলি ব্যাখ্যা করে বলেছি যে সত্য-মিথ্যা এবং ভুয়া- y মানগুলি সত্য এবং মিথ্যা স্থলে করতে পারে, তাই আমি মনে করি যে 1 বা অপরিজ্ঞাত যথেষ্ট ভাল ছিল।
জেমস_পিক

@ জেমস_পিক আমি কেবল নিরাপদ দিকে থাকতে চেয়েছিলাম :) যদি তাই হয় তবে 18-2 = 16 bytes
ভিজিওন

1

জাভাস্ক্রিপ্ট [১৫ বাইট]

![a].indexOf(b)

এটি trueযদি a == bএবং falseযদি ফিরে আসবে a =/= b। স্ক্রিপ্টটি bঅ্যারের মধ্যে মানটির সন্ধান করছে যা মানটির একক উপাদানকে ধরে রাখে a


1

সি - 86 83

main(int i,char**v){return*v[1]&!(*v[1]++^*v[2]++)?main(3,v):!(*--v[1]^*--v[2]);}

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


আপনার অনেক অপারেটরের আশেপাশে স্পেসের দরকার নেই। উদাহরণস্বরূপ, char** vহিসাবে লেখা যেতে পারে char**v। কিছু ব্যতিক্রম রয়েছে (যেমন 42 / *pointer) তবে বেশিরভাগ ক্ষেত্রে বিশেষ অক্ষরের কাছাকাছি স্থানগুলি নিরাপদে সরিয়ে ফেলা যায়।
কনরাড বোরোস্কি

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