4 এর 3 টি সত্য কিনা তা পরীক্ষা করার জন্য লজিক


163

True4 টির মধ্যে 3 বুলিয়ান মান যদি সত্য হয় তবেই আমি ফিরে আসতে চাই ।

আমি যে নিকটে এসেছি তা হ'ল (x ^ y) ^ (a ^ b):

আমার কি করা উচিৎ?


10
হুম, গাণিতিক সূত্রটি নিয়েই আমি ভাবতে পারি use ভাল প্রশ্ন! :)
আমি

10
আপনার ধারণা খারাপ নয়, তবে আপনাকে অবশ্যই অস্বীকারগুলি গ্রহণ করতে হবে: not a ^ not b ^ not c ^ not dযখন অবহেলা মানগুলির মধ্যে একটি সত্য হয় তখনই এটি সত্য। এর অর্থ, মূল মানগুলি থেকে একেবারে একটি মিথ্যা ছিল।
ইনগো

23
এই বিবরণ পিছনে আপনার আসল সমস্যা কি ?
ওল্ফ

5
@ যেখানে একটি মাত্র মিথ্যা এবং যেখানে 3 টি মিথ্যা, সেখানে সত্য return ফিরে আসবেন না b না বি ^ না সি ^ নয় return
নেমস্পেস

9
সুস্পষ্ট অ-গণনা সমাধান হ'ল (!a&&b&&c&&d) || (a&&!b&&c&&d) || (a&&b&&!c&&d) || (a&&b&&c&&!d)
জেসন সি

উত্তর:


248

আমি কোডটি এমনভাবে লেখার পরামর্শ দিচ্ছি যা আপনার অর্থ বোঝায়। আপনি যদি 3 টি মান সত্য হতে চান তবে এটি 3 টির মানটি কোথাও উপস্থিত হওয়া আমার কাছে স্বাভাবিক।

উদাহরণস্বরূপ, এতে C++:

if ((int)a + (int)b + (int)c + (int)d == 3)
    ...

এই ভাল সংজ্ঞায়িত করা হয় C++: standard (§4.7/4)নির্দেশ করে যে রূপান্তর boolকরার intপ্রত্যাশিত মান 0 বা 1 দেয়।

জাভা এবং সি # তে, আপনি নিম্নলিখিত নির্মাণগুলি ব্যবহার করতে পারেন:

if ((a?1:0) + (b?1:0) + (c?1:0) + (d?1:0) == 3)
    ...

23
এটি একটি ভাল উত্তর। এটি দেখতে X / Y জিনিসের কেসের মতো লাগে। "তিনি ওয়াই ব্যবহার করে এক্স করতে চান, তবে ওয়াই কীভাবে করবেন তা জানেন না। এক্স জিজ্ঞাসার পরিবর্তে তিনি ওয়াইকে জিজ্ঞাসা করেন।" যদি না সে লজিক সার্কিট বা এর মতো কিছু ডিজাইন করে না থাকে (এবং তারপরে সে ভুল সাইটে থাকবে), এটি করার সর্বোত্তম উপায়টি এমনভাবে যা পাঠযোগ্য
নথিংস ইম্পসিবল

2
@ নোটিংিংস ইম্পসিবল প্রশ্নটি সম্পর্কে XY তেমন কিছুই নেই। এটি প্রোগ্রামিংয়ে যুক্তিসঙ্গত সাধারণ সমস্যা সমাধান সম্পর্কে একটি স্পষ্ট এবং সোজা-সামনের প্রশ্ন। ওয়াই অপ্রাসঙ্গিক।
19 Рахматуллин

ধন্যবাদ! এটি আমি যা করতে চাইছিলাম তা আসলেই ছিল, তবে আমার ধারণাটি এতটাই বেআইনী ছিল যে আমি বুলিয়ান যুক্তির পক্ষে পৌঁছেছি।
সাইমন কুয়াং

3
if (!!a + !!b + !!c + !!d == 3)লিখতে সহজ, যদিও আমি জানি না যে
সংকলকরা এটি

2
মনে রাখবেন যে সি ++ এ বুল থেকে ইনট পর্যন্ত কাস্ট করা প্রয়োজনীয় নয়।
প্লাজমাএইচ

90

# 1: একটি ব্রাঞ্চিং ব্যবহার করছেন?: 3 বা 4 অপারেশন

A ^ B ? C & D : ( C ^ D ) & A

# 2 অ ব্রাঞ্চিং, 7 টি অপারেশন

(A ^ B ^ C ^ D) & ((A & B) | (C & D))

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


18
+1 - অন্য উত্তরগুলি বেশিরভাগ প্রোগ্রামিং ভাষার জন্য ভাল, আপনার # 2 খাঁটি বুলিয়ান যুক্তির সেরা উত্তর।
ব্রিলিয়ানড


68

এটি যদি পাইথন হত তবে আমি লিখতাম

if [a, b, c, d].count(True) == 3:

অথবা

if [a, b, c, d].count(False) == 1:

অথবা

if [a, b, c, d].count(False) == True:
# In Python True == 1 and False == 0

অথবা

print [a, b, c, d].count(0) == 1

অথবা

print [a, b, c, d].count(1) == 3

অথবা

if a + b + c + d == 3:

অথবা

if sum([a, b, c, d]) == 3:

এই সমস্ত কাজ, যেহেতু বুলিয়ানরা পাইথনের পূর্ণসংখ্যার সাবক্লাস।

if len(filter(bool, [a, b, c, d])) == 3:

বা, এই ঝরঝরে কৌতুক দ্বারা অনুপ্রাণিত ,

data = iter([a, b, c, d])
if not all(data) and all(data):

17
+1 এটি পাইথনে সঠিকভাবে অনুবাদ করে সমস্যার সমাধান করে।
ওল্ফ

এটি কিছুটা বিপজ্জনক কারণ লোকেরা পাইথনের বুলিয়ান প্রসঙ্গে কোনও শূন্য-শূন্য পূর্ণসংখ্যার ফিরে আসতে পারে। পুরাতন সি কৌতুক খুব পাইথন কাজ করে: a=5;not not a == 1। আসল বুলিয়ান টাইপ না থাকার অসুবিধা।
ভু

@ খুব আমাদেরও আছে bool:)
thefourtheye

@ থেফোর্তেহে হ্যাঁ হ্যাঁ সত্য, ডাবল নেগ্রেশন ট্রিক / হ্যাকের চেয়ে অনেক সুন্দর।
ভু

1
বা ... বা .... বা .... সেখানে একটি হওয়া উচিত - এবং কেবলমাত্র এটি করার একমাত্র উপায় ob : - / :-)
আরজেড

53

দীর্ঘ তবে খুব সাধারণ, (বিচ্ছিন্ন) সাধারণ ফর্ম:

 (~a & b & c & d) | (a & ~b & c & d) | (a & b & ~c & d) | (a & b & c & ~d)

এটি সরল করা যেতে পারে তবে এর জন্য আরও চিন্তাভাবনা প্রয়োজন: পি


2
@ বেন যা কেবল আপনাকে এর বিভিন্ন সাধারণ রূপ দেয় যা এটি ইতিমধ্যে (ডিএনএফ) এ রয়েছে।
Riking

8
কীভাবে (a & b & (c ^ d)) | ((a ^ b) & c & d)?
ব্যবহারকারী 253751

2
হ্যাঁ, @ মিমিবিস, ওল্ফ্রাম আলফার মতে এর ডিএনএফ সূত্রটি আমি লিখেছি যাতে এটি একই বুলিয়ান ফাংশন।
গ্যাস্টেন বেনগোলেয়া

2
+1 কারণ আমি মনে করি যে কোডটি পড়ে কেউ বুঝতে পারে যে অন্য উত্তরগুলির চেয়ে দ্রুত কী চেষ্টা করা হচ্ছে।
বলুক পাপুকুগলু

34

নিশ্চিত যে এটি সহজ, তবে সম্ভবত।

((x xor y) and (a and b)) or ((x and y) and (a xor b))


1
অভিশাপ! তাদের একাধিক ভোটের বিকল্পটি দেওয়া উচিত ছিল! বিশেষ করে আপনার উত্তরটি সঠিক প্রমাণ করতে ওল্ফ্রাম আলফা ব্যবহার করা খুব ভাল জিনিস!
দুরাই আমুথান। এইচ

22

আপনি যদি এই যুক্তিটি কোনও প্রোগ্রামিং ভাষায় ব্যবহার করতে চান তবে আমার পরামর্শ

bool test(bool a, bool b, bool c, bool d){
    int n1 = a ? 1 : 0;
    int n2 = b ? 1 : 0;
    int n3 = c ? 1 : 0;
    int n4 = d ? 1 : 0;

    return n1 + n2 + n3 + n4 == 3;
}

অথবা আপনি চাইলে এই সমস্তগুলি একটি একক লাইনে রাখতে পারেন:

return (a ? 1 : 0) + (b ? 1 : 0) + (C ? 1 : 0) + (d ? 1 : 0) == 3;

এছাড়াও আপনি এই সমস্যাটিকে সাধারণীকরণ করতে পারেন n of m :

bool test(bool *values, int n, int m){
    int sum = 0;
    for(int i = 0; i < m; i += 1){
        sum += values[i] ? 1 : 0;
    }
    return sum == n;
}

12
আমাকে এটি মারধর। পঠনযোগ্যতা চতুরতা, প্রতিবার ট্রাম্প। +1 টি
মাইক দ্য লাইয়ার

20

এই উত্তরটি উপস্থাপনের সিস্টেমে নির্ভর করে, তবে যদি 0 কেবলমাত্র মানটিকে মিথ্যা হিসাবে ব্যাখ্যা করা হয় এবং not(false)সর্বদা একই সংখ্যাসূচক মান প্রদান করে not(a) + not(b) + not(c) + not(d) = not(0)তবে কৌশলটি করা উচিত।


18

মনে রাখবেন যে, যদি যুক্তিযুক্ত সমস্যাগুলির পরিবর্তে প্রোগ্রামিং প্রশ্নগুলির জন্য উত্তরটি অবশ্যই একটি প্রোগ্রামিং ভাষার পছন্দ উপর নির্ভর করে। কিছু ভাষা এমন বৈশিষ্ট্যগুলি সমর্থন করে যা অন্যদের কাছে অস্বাভাবিক to

উদাহরণস্বরূপ, সি ++ এ আপনি নিজের অবস্থার সাথে এটি পরীক্ষা করতে পারেন:

(a + b + c + d) == 3

বুলেয়ান থেকে পূর্ণসংখ্যার ধরণে স্বয়ংক্রিয় (নিম্ন-স্তরের) রূপান্তরকে সমর্থন করে এমন ভাষাগুলিতে চেক করার এই দ্রুততম উপায় হওয়া উচিত। তবে আবার, সেই সমস্যার কোনও সাধারণ উত্তর নেই।


2
এই উত্তরটি আমি পোস্ট করতে যাচ্ছিলাম। যদিও যুক্ত করা প্রোগ্রামিং ভাষার উপর নির্ভর করে একটি জিনিস যোগ করতে হবে, আপনি চান উত্তরটি হবে -3। ভিবিতে, সত্য = -1।
টম কলিন্স


11
((a xor b) xor (c xor d)) and ((a or b) and (c or d))

মুষ্টির অভিব্যক্তি 4 trueএর মধ্যে 1 বা 3 এর সন্ধান করে The দ্বিতীয়টি 4 এর মধ্যে 0 বা 1 (এবং কখনও কখনও 2) কে মুছে trueফেলে।


11

জাভা 8, মিথ্যা মানগুলি ফিল্টার করুন এবং অবশিষ্ট সত্য মানগুলি গণনা করুন:

public static long count(Boolean... values) {
    return Arrays.stream(values).filter(t -> t).count();
}

তারপরে আপনি এটি নীচে ব্যবহার করতে পারেন:

if (3 == count(a, b, c, d)) {
    System.out.println("There... are... THREE... lights!");
}

সহজেই পরীক্ষা করার জন্য সাধারণীকরণ nএর mআইটেম সত্য হচ্ছে।


11

কমপক্ষে nসকলের Booleanমধ্যে সত্য সত্য কিনা তা পরীক্ষা করতে (n টি মোট সংখ্যার চেয়ে কম বা সমান হতে হবে Boolean)

if (((a ? 1:0) + (b ? 1:0 ) + (c ? 1:0) + (d ? 1:0 )) >= n) {
    // do the rest
}

সম্পাদনা : @ ক্রাঙ্কারের মন্তব্যের পরে

boolean4 এর মধ্যে 3 টি পরীক্ষা করতে

if (((a ? 1:0) + (b ? 1:0 ) + (c ? 1:0) + (d ? 1:0 )) == 3) {
    // do the rest
}

আরেকটা :

((c & d) & (a ^ b)) | ((a & b) & (c ^ d))( বিশদ )


ওপি ঠিক এন চায়, কমপক্ষে এন নয়। তবে এই সমাধান থেকে এটি একটি সহজ পরিবর্তন
ক্রাঙ্কার

2
@ ওল্ফ যে প্রশ্নটি স্ট্যাকউন্ডারফ্লো ডটকমের অন্তর্গত: পি
একটি বাগ নয়

10

আপনি লিনকিউ দিয়ে সি # তে এটি সমাধান করার একটি উপায় এখানে:

bool threeTrue = new[] { a, b, x, y }.Count(x => x) == 3;

10

এটি প্রতিসম বুলিয়ান ফাংশন S₃(4)। একটি প্রতিসম বুলিয়ান ফাংশন একটি বুলিয়ান ফাংশন যা কেবলমাত্র ইনপুট সেটগুলির পরিমাণের উপর নির্ভর করে, তবে সেগুলি কোন ইনপুটগুলির উপর নির্ভর করে না। আর্ট অফ কম্পিউটার প্রোগ্রামিংয়ের ভলিউম 4-এ নথ 7.1.2 বিভাগে এই ধরণের ফাংশনগুলির উল্লেখ করেছেন।

S₃(4) নিম্নলিখিত হিসাবে 7 অপারেশন সঙ্গে গণনা করা যেতে পারে:

(x && y && (a || b)) ^ ((x || y) && a && b)

নথ দেখায় যে এটি সর্বোত্তম, এর অর্থ আপনি সাধারণ অপারেটরগুলি ব্যবহার করে 7 টিরও কম অপারেশনে এটি করতে পারবেন না: &&, || , ^, <,এবং>

তবে আপনি যদি এটি এমন কোনও ভাষায় ব্যবহার করতে চান যা 1সত্য এবং 0মিথ্যা ব্যবহার করে তবে আপনি সহজেই সংযোজনটি ব্যবহার করতে পারেন:

x + y + a + b == 3

যা আপনার উদ্দেশ্যটি পরিষ্কার করে দেয়।


9
(a && b && (c xor d)) || (c && d && (a xor b))

খাঁটি যুক্তিযুক্ত দৃষ্টিকোণ থেকে এটিই আমি সামনে এসেছি।

কবুতরের ছিদ্র নীতি অনুসারে, ঠিক 3 যদি সত্য হয় তবে ক এবং খ সত্য হয়, বা সি এবং ডি সত্য। তারপরে এটি কেবল অন্য 2 এর সাথে একের সাথে কেসগুলির প্রতিটি বিষয় সম্পর্কে আলোচনা করে।

ওল্ফ্রাম সত্যের টেবিল


এটি নেমস্পেসের দ্বিতীয় সমাধানের সমতুল্য।
ব্রিলিয়ানড

@ ব্রিলিয়ান্ড আমার কাছে আলাদা মনে হয়েছে। তার xors সমস্ত 3 বা 1 এর সাথে একসাথে মিলিত হয়, তারপরে 2 টি স্বতন্ত্র গ্রুপ থেকে কমপক্ষে একজনকে প্রয়োজনীয়তার সাথে 1 এর সাথে বাদ দেয়। (সংক্ষিপ্তসার 1 বা 3 এবং কমপক্ষে 2)। খনি দুটি পৃথক গোষ্ঠী থেকে এবং তারপরে ঠিক অন্য গ্রুপের থেকে উভয়ই প্রয়োজন।
ক্রুঙ্কার

আপনি যদি এই অর্থে সমতুল্য বোঝাতে চান mine <=> hisতবে আমি আশা করি না এটি কী হিসাবে বলবেন আশা করা যায়।
ক্রুঙ্কার

আমার অনুমান আমি এই উত্তরটি ঠিক ঠিক ঠিক ঠিক ঠিক ঠিক ঠিক ঠিক ঠিক একইভাবে করেছিলেন ঠিক যেভাবে নেমস্পেসের (পূর্ববর্তী) উত্তরটি কভার করেন নি এমন নতুন কিছু যুক্ত না করে Name ঠিক আছে, আমি যাই হোক না কেন upvote করব।
ব্রিলিয়ান্ড

8

আপনি যদি কর্নখ মানচিত্রের মতো লজিক ভিজ্যুয়ালাইজেশন সরঞ্জাম ব্যবহার করেন তবে আপনি দেখতে পাবেন যে এটি এমন একটি সমস্যা যেখানে আপনি যদি (...) লাইনে এটি লিখতে চান তবে আপনি একটি পূর্ণ প্রস্ফুটিত যুক্তি শব্দটি এড়াতে পারবেন না। লোপিনা এটি ইতিমধ্যে দেখিয়েছে, এটি সহজ লেখা সম্ভব নয়। আপনি কিছুটা ফ্যাক্টর করতে পারেন, তবে এটি আপনার জন্য এবং মেশিনের জন্য পড়া শক্ত থাকবে hard

গণনা সমাধানগুলি খারাপ নয় এবং তারা আপনাকে প্রকৃতপক্ষে কী তা প্রদর্শন করে। আপনি কীভাবে দক্ষতার সাথে গণনা করবেন তা নির্ভর করে আপনার প্রোগ্রামিং ভাষার উপর। পাইথন ওজার লিনকিউ সহ অ্যারের সমাধানগুলি দেখতে খুব ভাল তবে সাবধান থাকুন, এটি হ'ল কম। ওল্ফের (a + b + x + y) == 3 দুর্দান্ত এবং দ্রুত কাজ করবে তবে কেবল আপনার ভাষা "সত্য" এর সাথে 1 এর সমান হয় যদি "সত্য" -1 দ্বারা প্রতিনিধিত্ব করা হয় তবে আপনাকে -3 এর জন্য পরীক্ষা করতে হবে: )

যদি আপনার ভাষা সত্যিকারের বুলিয়ান ব্যবহার করে তবে আপনি এটিকে স্পষ্টভাবে প্রোগ্রাম করার চেষ্টা করতে পারেন (আমি ব্যবহার করি! = এক্সওআর পরীক্ষা হিসাবে):

if (a)
{
    if (b)
        return (x != y);    // a,b=true, so either x or y must be true
    else
        return (x && y);     // a=true, b=false, so x AND y must be true
}
else
{
    if (b)
        return (x && y);    // a=false, b=true, so x and y must be true
    else
        return false;       // a,b false, can't get 3 of 4
}

"x! = y" কেবল তখনই কাজ করে যদি x, y একটি বুলিয়ান ধরণের হয়। যদি তারা অন্য কোনও ধরণের হয় যেখানে 0 টি মিথ্যা এবং অন্য সব কিছু সত্য হয় তবে এটি ব্যর্থ হতে পারে। তারপরে একটি বুলিয়ান এক্সওআর, বা ((বুল) এক্স! = (বুল) ই) ব্যবহার করুন, বা "যদি (এক্স) রিটার্ন (y == মিথ্যা) অন্যটি (y == সত্য) লিখুন;", যা কিছুটা আরও কম্পিউটারের জন্য কাজ।

যদি আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজ টের্নারি সরবরাহ করে?: অপারেটর, আপনি এটি সংক্ষিপ্ত করতে পারেন

if (a)
    return b ? (x != y) : (x && y);
else
    return b ? (x && y) : false;

যা কিছুটা পঠনযোগ্যতা রাখে বা আক্রমণাত্মকভাবে এটিকে কাটাতে পারে

return a ? (b ? (x != y) : (x && y)) : (b ? (x && y) : false);

এই কোডটি ঠিক তিনটি লজিক পরীক্ষা করে (একটি রাষ্ট্রের, বি রাষ্ট্রের, এক্স এবং y এর তুলনা) এবং এখানে অন্যান্য উত্তরগুলির তুলনায় দ্রুত হওয়া উচিত। তবে আপনাকে এটি মন্তব্য করতে হবে, বা আপনি 3 মাস পরে বুঝতে পারবেন না :)


8

এখানে অনেক ভাল উত্তর আছে; এখানে একটি বিকল্প সূত্র যা অন্য কেউ পোস্ট করেনি:

 a ? (b ? (c ^ d) : (c && d)) : (b && c && d)

আপনার উত্তরের জন্য আপনাকে ধন্যবাদ, তবে কীভাবে এটি কার্যকর হয় আপনি দয়া করে কিছু মন্তব্য যুক্ত করতে পারেন? ধন্যবাদ।
Deanna

(দুঃখিত আপনার উপর বাছাই, আমি এটা একটি পর্যালোচনা নিরীক্ষা যেমন দেওয়া হয়েছিল অন্তত আমি পাশ .. :)।)
Deanna

7

প্রথম উত্তরের মতো, তবে খাঁটি জাভা:

int t(boolean b) {
    return (b) ? 1 : 0;
}

if (t(x) + t(y) + t(a) + t(b) == 3) return true;
return false;

আমি তাদের পূর্ণসংখ্যার হিসাবে গণনা করতে পছন্দ করি কারণ এটি আরও পাঠযোগ্য কোডের জন্য তৈরি করে।


7

ইন পাইথন , উপাদানের একটি iterable কত দেখতে সত্য, ব্যবহার sum(এটা বেশ সহজবোধ্য):

সেটআপ

import itertools

arrays = list(itertools.product(*[[True, False]]*4))

আসল পরীক্ষা

for array in arrays:
    print(array, sum(array)==3)

আউটপুট

(True, True, True, True) False
(True, True, True, False) True
(True, True, False, True) True
(True, True, False, False) False
(True, False, True, True) True
(True, False, True, False) False
(True, False, False, True) False
(True, False, False, False) False
(False, True, True, True) True
(False, True, True, False) False
(False, True, False, True) False
(False, True, False, False) False
(False, False, True, True) False
(False, False, True, False) False
(False, False, False, True) False
(False, False, False, False) False

5

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

আপনার ক্ষেত্রে, ফলাফল

y = (x̄3 ^ x2 ^ x1 ^ x0) ∨ (x3 ^ x̄2 ^ x1 ^ x0) ∨ (x3 ^ x2 ^ x̄1 ^ x0) ∨ (x3 ^ x2 ^ x1 ^ x̄0)

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


1
ওভারহেড দণ্ডটির অর্থ কী? আমি তালিকা থেকে এটি সরানো লক্ষ্য করছি।
নেমস্পেস

3
@ নামস্পেস এটি আইএমওর একটি যা অনেকগুলি স্বরলিপি "না" প্রকাশ করার জন্য ব্যবহার করে।

5

আমি 4 এবং বুলিয়ান এর মধ্যে 3 টির মান যদি সত্য হয় তবেই সত্যটি ফিরে আসতে চাই।

4, বুলিয়ান মান, a, b, x, y দেওয়া এই টাস্কটি নিম্নলিখিত সি স্টেটমেন্টে অনুবাদ করে:

return (a+b+x+y) == 3;

1
ভাল ফাঁদ। এটি trueসমান 1 হিসাবে ধরে নেওয়া হয়। সমস্ত ভাষা / ক্ষেত্রে এটি সত্য নয় (কোনও পাং উদ্দেশ্যে নয়)। ব্লগস.এমএসডিএন
বি /

@ জেনসজি আপনি ঠিক বলেছেন: আমি এই অনুমানটিকে স্পষ্ট করে তুলেছি। থেক্স :)
নেকড়ে

4
((a^b)^(x^y))&((a|b)&(x|y))

আপনি কি চান মূলত আমি আপনার কোড নিয়েছি এবং 3 টি সত্য এবং 3 টি মিথ্যা কিনা তা যাচাই করে যুক্ত করেছি।


4

পুনরাবৃত্তি জড়িত একটি উত্তর ছাড়া একটি প্রোগ্রামিং প্রশ্ন? ধারণাতীত!

যথেষ্ট "4 টি ট্রুর মধ্যে ঠিক 3" উত্তর রয়েছে, তবে "নিখুঁতভাবে এম ট্রু অফ এম ট্রু" এর জন্য এখানে একটি জেনারালাইজড (জাভা) সংস্করণ রয়েছে (অন্যথায় পুনরাবৃত্তি আসলেই এর পক্ষে মূল্যহীন নয়) কেবলমাত্র আপনি করতে পারেন:

public static boolean containsTrues(boolean[] someBooleans,
    int anIndex, int truesExpected, int truesFoundSoFar) {
  if (anIndex >= someBooleans.length) {
    return truesExpected == truesFoundSoFar; // reached end
  }
  int falsesExpected = someBooleans.length - truesExpected;
  boolean currentBoolean = someBooleans[anIndex];
  int truesFound = truesFoundSoFar + (currentBoolean ? 1 : 0);
  if (truesFound > truesExpected) {
    return false;
  }
  if (anIndex - truesFound > falsesExpected) {
    return false; // too many falses
  }
  return containsTrues(someBooleans, anIndex + 1, truesExpected,
      truesFound);
}

এ জাতীয় কিছু বলা যেতে পারে:

 boolean[] booleans = { true, false, true, true, false, true, true, false };
 containsTrues(booleans, 0, 5, 0);

যা প্রত্যাবর্তন করা উচিত true(কারণ 8 টির মধ্যে 5 টি মান প্রত্যাশা অনুযায়ী সত্য ছিল)। "ট্রুস" এবং "ফলস" শব্দটি নিয়ে বেশ খুশি নয়, তবে এই মুহূর্তে আরও ভাল নামটি ভাবতে পারে না .... নোট করুন যে যখন খুব বেশি true বা খুব বেশি falseমান পাওয়া যায় তখন পুনরাবৃত্তি থামে ।


@ ফলিকসাপারেলি: "সত্য" এখানে প্রয়োগ হয়েছে তা নিশ্চিত নন ... আপনি কেবলমাত্র একজনের সাথেই খুশি হবেন বলে মনে হবে true। এরকম কিছু হতে পারে containsNumberOfTrueValues()। একটি সরাইয়া হিসাবে: স্মলটক এর নামকরণ আরো অনেক কিছু এই জন্য উপযুক্ত, যদিও হবে: doesArray: someBooleans startingAt: anIndex containNumberOfTrueValues: anExpectedNumber foundSofar: aNumberFoundSoFar। সম্ভবত কিছু জাভা দেবের রুচির জন্য খুব দীর্ঘ, তবে স্মার্ট টালাররা যথাযথ নামকরণে কখনও ভয় পান না;
আমোস এম কার্পেন্টার

এটি বেশিরভাগই হাস্যকর ছিল। এবং এর containsTruthঅর্থ "সত্যের কিছু অপ্রকাশিত পরিমাণ রয়েছে", আক্ষরিক অর্থে, তাই আমি বিশ্বাস করি এটি বেশ ঠিক আছে।
ফলিক্স সাপরেলি

3

যেহেতু পঠনযোগ্যতা একটি বড় উদ্বেগ, আপনি একটি বর্ণনামূলক ফাংশন কল ব্যবহার করতে পারেন (প্রস্তাবিত প্রয়োগগুলির কোনও মোড়ানো)। যদি এই গণনাটি একাধিক জায়গায় করা দরকার হয় তবে একটি ফাংশন কল হ'ল পুনঃব্যবস্থা অর্জনের সর্বোত্তম উপায় এবং আপনি কী করছেন ঠিক তা পরিষ্কার করে দেয়।

bool exactly_three_true_from(bool cond1, bool cond2, bool cond3, bool cond4)
{
    //...
}

3

পিএইচপি-তে, এটিকে আরও গতিশীল করে তোলা (কেবলমাত্র যদি আপনি শর্তের সংখ্যা পরিবর্তন করেন ইত্যাদি):

$min = 6;
$total = 10;

// create our boolean array values
$arr = array_map(function($a){return mt_rand(0,1)>0;},range(1,$total));

// the 'check'
$arrbools = array_map(function($a){return (int)$a;},$arr);
$conditionMet = array_sum($arrbools)>=$min;

echo $conditionMet ? "Passed" : "Failed";

2
(((a AND b) OR (x AND y)) AND ((a XOR b) OR (x XOR y)))

যদিও আমি এটি দেখিয়ে দিতে পারি যে এটি একটি ভাল সমাধান, স্যাম হোসেভারের উত্তরটি পরে লেখা এবং বুঝতে উভয়ই সহজ। আমার বইতে এটি আরও ভাল করে তোলে।


1

এখানে কিছু সি # কোড আমি কেবল লিখেছি কারণ আপনি আমাকে অনুপ্রাণিত করেছেন:

এটি কোনও পরিমাণ আর্গুমেন্ট নেয় এবং সেগুলির মধ্যে n সত্য হয় কিনা তা আপনাকে জানায়।

    static bool boolTester(int n, params bool[] values)
    {
        int sum = 0;           

        for (int i = 0; i < values.Length; i++)
        {
            if (values[i] == true)
            {
                sum += 1;
            }                
        }
        if( sum == n)
        {
            return true;
        }            
        return false;                
    }

এবং আপনি এটি যেমন কল:

        bool a = true;
        bool b = true;
        bool c = true;
        bool d = false;            

        bool test = false;
        test = boolTester(3, a, b, c, d);

সুতরাং আপনি এখন আপনার হিসাবে 7/9 বা 15/100 পরীক্ষা করতে পারেন।

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