এক্স এবং ওয়াইয়ের মধ্যে কমপক্ষে 2 পার্থক্য সহ 3 টিরও বেশি এক্স X


11

আমি কিছু সি ++ ডাউন করার চেষ্টা করছি। এই অবস্থা আরও খাটো করা কি সম্ভব?

X > 3 & X - Y > 1

(অবশ্যই হোয়াইটস্পেস অপসারণ ছাড়াও))

সুতরাং, Xঅন্তত 4তবে X >= Y + 2

Xএবং Y[0,5] ব্যবধানে পূর্ণসংখ্যা হয়।

আমি কিছু বিটওয়্যার সূত্র সন্ধান করার চেষ্টা করেছি কিন্তু ব্যর্থ হয়েছি।


1
@JoeZ। কোডগল্ফের জন্য? কেন? যতক্ষণ এটি কাজ করছে ...
ক্রিস্টি

4
@ ক্রিস্টি হ্যাঁ তারা, তবে (এখনও অবধি) গল্ফিংয়ের পরামর্শ সম্পর্কে জিজ্ঞাসা করা প্রশ্নগুলি খুব বিরল তবে পরামর্শের জন্য জিজ্ঞাসা করা বেশিরভাগ প্রশ্নগুলি কেবল সাধারণ প্রোগ্রামিং প্রশ্ন - যা অফ-টপিক। অতএব, আমি বুঝতে পারি যে কেন লোকেরা প্রথম প্রতিক্রিয়া হতে পারে, "ওহ এটি অন্য প্রশ্ন যা আসলে এসও এর অন্তর্ভুক্ত" এটি এমনকি গল্ফিং পরামর্শ সম্পর্কে হতে পারে তা ভেবেও না। ভবিষ্যতে আমি এগুলি আরও দেখতে চাই এবং সম্ভবত তাদের জন্য কোনও দিন বা তার জন্য একটি ট্যাগ থাকবে এবং এটি অবিলম্বে পরিষ্কার হয়ে যাবে যে আপনি কীভাবে এই সাইটটি ব্যবহার করবেন তা জানেন। ;)
মার্টিন এন্ডার

4
যদি সেগুলি অন্তর্ভুক্ত 0..5 এর মধ্যে পূর্ণসংখ্যা হয়, আপনি একই জিনিসটি সাথে করতে পারেন x*x-y*y>9। এটি একই পরিমাণের অক্ষর, তবে আপনি সেই পদ্ধতির একটি শর্টকাট / বিকল্প খুঁজে পেতে সক্ষম হতে পারেন। এটি দেখার আরও একটি উপায়।
জিওবিটস

5
পাইথন ব্যবহার করুন:3<x>y+1
এভল করুন

2
পাইথনের অপারেটর অগ্রাধিকারের সাথে আমি প্রচুর সমাধান পেয়েছি, যেমন y+3<2^x, তবে সি এর অপারেটরের অগ্রাধিকারটি আলাদা। আমি 7-চরের সমাধানের জন্য বাজি
ধরছি,

উত্তর:


11

9 টি অক্ষরের নীচে প্রতিটি দরকারী সংমিশ্রণে জোর করার পরে, আমি এর চেয়ে ছোট কোনও সমাধান খুঁজে পাইনি x>3&x-y>1

মজাদার জন্য এখানে কিছু মজার 9 টি চরিত্রের সমাধান ব্রুট ফোরার পাওয়া গেছে:

-x<~y>4>x
~y+x>2>>y
x*x-y*y>9
~y>x/~3*x
-3>>y>y-x
~y+x<<y>2

পাইথনে ব্রুট ফোর্সিং করা হয়েছিল, টপ-ডাউন সিনট্যাক্স ট্রি তৈরি করা হয়েছিল যেখানে কোনও সন্তানের সি এর নিয়ম অনুসারে তার পিতামাতার চেয়ে কম অগ্রাধিকার প্রাপ্ত অপারেটর থাকতে পারে না। সম্ভাবনাগুলি হ্রাস করার জন্য আমি কেবল একক অঙ্কের আক্ষরিক অনুমতি দিয়েছি এবং কোনও বাইনারি অপারেটরের দুটি ধ্রুবক শিশু নাও থাকতে পারে। আমি সম্ভবত এমন কোনও সমাধানের কথা ভাবতে পারি না যার দুটি অঙ্কের আক্ষরিক, বা বাইনারি অপারেটর ব্যবহার করে ধ্রুবক তৈরি করে one তারপরে প্রতিটি অভিব্যক্তি [0, 5] এর জন্য মূল্যায়ন করা হয় এবং এটির সাথে মেলে তা মুদ্রিত হয়ে যায়।


আমি সত্যিই পছন্দ x*x-y*y>9। সম্ভবত আপনারও বহু অঙ্কের ধ্রুবকটি চেষ্টা করা উচিত? (এছাড়াও, প্রথম বন্ধনী)
জন ডিভোরাক

@ জনডভোরাক আমাকেও এটি "x এবং y এর মধ্যে দূরত্ব" এর যুক্তিটি ভালভাবে প্রকাশ করে। আমি মনে করি আপনি যদি এটি একটি চার্টে প্লট করেন তবে এটি আরও স্পষ্ট হয়ে উঠবে।
se

@ জনডভোরাক আমি মনে করি না প্রথম বন্ধনী কখনও ছোট সমাধান হতে পারে। একটি ছোট সমাধান সর্বাধিক 8 টি অক্ষর হতে পারে xy, যার মধ্যে 2 টি অবশ্যই হবে এবং 2 টি অবশ্যই প্রথম বন্ধনী হতে হবে, যুক্তিতে কেবল 4 টি অক্ষর রেখে। আমি 2 ডিজিটাল ধ্রুবক সহ ব্রুট ফোরার চালানোর চেষ্টা করব, তবে আমি সত্যিই মনে করি না যে এটি কোনও ফলাফল দেবে।
orlp

এক্স, ওয়াই, একটি ধ্রুবক, প্রথম বন্ধনী এবং দুটি অপারেটর কীভাবে?
জন ডিভোরাক

@ জনডভোরাক নিজেকে ছিটকে যান, (a#b)$cএটি ফর্ম্যাট। বাইরে abcদুই হওয়া আবশ্যক xএবং y, 3 সম্ভব অবস্থানে রেখে [0-9xy], এবং শুধুমাত্র একটি উল্টানো xy। কেবল আকর্ষণীয় অপারেটরগুলি +-*/&|^<>তাই 9 সম্ভাবনা poss সুতরাং মোট সম্ভাবনা 3 * 12 * 2 * 9 * 9 <5832 এর চেয়ে কম is
orlp

0

এর (প্রতিক্রিয়াশীল) গল্ফগুলির প্রতিক্রিয়া orlp:

সঠিকতা আগে আসতে হবে

  • এর বেশিরভাগই কিছু পূর্ণসংখ্যার ধরণের জন্য ভেঙে যায়। এটিতে ওপি থেকে প্রাপ্ত সংস্করণ অন্তর্ভুক্ত রয়েছে
  • উত্সাহের ব্যাপার হল তারা কি কাজ int16_t- তাই সেখানে ধৃষ্টতা হয়। সম্ভবত বিট শিফটগুলির জন্য 32 বিট ইনটগুলির জন্য +16 লাগবে (এটি আজকাল বেশিরভাগ জায়গায়)। এটি তাদের একটি চরিত্রকে আরও বড় করে তোলে ...

এটি লেখার একমাত্র "সঠিক" উপায়, আইএমও হ'ল (x>3) && (x > y+1), যা x>3&x>y+1(9 টি অক্ষর) অবরুদ্ধ হতে পারে ।

(আপনি সত্যিই (বৃহত্তর) বিবেচনা স্বাক্ষরবিহীন ধরনের সম্ভাবনা নেওয়া প্রয়োজন বিশেষ করে স্বাক্ষরবিহীন-অন্তরীপ "সংক্রামক" হয় সি ++ এক্সপ্রেশন হবে। আমি "ফিক্সিং" যে উপযুক্ত সঙ্গে অনুমান করা static_cast<>... গুলি ধরণ উদ্দেশ্য সর্বনাশ হবে)

হালনাগাদ

নিম্নলিখিত পরীক্ষাগুলির সাহায্যে আমি বুঝতে পেরেছি যে কোন এক্সপ্রেশনটি আসলে নির্ভরযোগ্যভাবে কাজ করে:

Live On Coliru

#define REPORT(caption, expr) do {\
    do_report(caption, [](T x, T y) -> bool { return (expr); }, #expr); } while (false)

template <typename T> struct driver {
    static void run() {
        std::cout << "\n" << __PRETTY_FUNCTION__ << "\n";

        // the only two correct implementations:
        REPORT("MASTER"  , (x>3) && (x>y+1));
        REPORT("GOLF"    , x>3&x>y+1);
        REPORT("lookup"  , "000000000000000000000000111000111100"[x*6+y]-'0');

        // failing sometimes:
        REPORT("question", (x>3)&(x-y>1));
        REPORT("orlp0"   , x>3&x-y>1);
        REPORT("orlp2"   , ~y+x>2>>y);
        REPORT("orlp3"   , x*x-y*y>9);
        REPORT("orlp4"   , ~y>x/~3*x);
        REPORT("orlp5"   , -3>>y>y-x);
        REPORT("orlp6"   , ~y+x<<y>2);

        // failing always
        REPORT("orlp1"   , -x<~y>4>x);
    }
private:
    static void do_report(std::string const& caption, bool (*f)(T,T), char const* expression) {
        std::string r;
        for (T x = 0; x < 6; ++x) for (T y = 0; y < 6; ++y) r += f(x, y)?'1':'0';
        bool const correct = "000000000000000000000000111000111100" == r;
        std::cout << (correct?"OK\t":"ERR\t") << r << "\t" << caption << "\t" << expression << "\n";
    }
};

int main() {
    driver<int8_t>::run();
    driver<int16_t>::run();
    driver<int32_t>::run();
    driver<int64_t>::run();

    driver<uint8_t>::run();
    driver<uint16_t>::run();
    driver<uint32_t>::run();
    driver<uint64_t>::run();
}

কলিরুতে আউটপুট, রেফারেন্সের জন্য এখানে:

static void driver<T>::run() [with T = signed char]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = short int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = long int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = unsigned char]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = short unsigned int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
OK  000000000000000000000000111000111100    question    (x>3)&(x-y>1)
OK  000000000000000000000000111000111100    orlp0   x>3&x-y>1
OK  000000000000000000000000111000111100    orlp2   ~y+x>2>>y
OK  000000000000000000000000111000111100    orlp3   x*x-y*y>9
OK  000000000000000000000000111000111100    orlp4   ~y>x/~3*x
OK  000000000000000000000000111000111100    orlp5   -3>>y>y-x
OK  000000000000000000000000111000111100    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = unsigned int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
ERR 000000000000000000000000111001111100    question    (x>3)&(x-y>1)
ERR 000000000000000000000000111001111100    orlp0   x>3&x-y>1
ERR 111111011111001111000111111011111101    orlp2   ~y+x>2>>y
ERR 011111001111000111000011111001111100    orlp3   x*x-y*y>9
ERR 111111111111111111111111111111111111    orlp4   ~y>x/~3*x
ERR 111111011111001111000111111011111101    orlp5   -3>>y>y-x
ERR 111111011111001111000111111011111101    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

static void driver<T>::run() [with T = long unsigned int]
OK  000000000000000000000000111000111100    MASTER  (x>3) && (x>y+1)
OK  000000000000000000000000111000111100    GOLF    x>3&x>y+1
OK  000000000000000000000000111000111100    lookup  "000000000000000000000000111000111100"[x*6+y]-'0'
ERR 000000000000000000000000111001111100    question    (x>3)&(x-y>1)
ERR 000000000000000000000000111001111100    orlp0   x>3&x-y>1
ERR 111111011111001111000111111011111101    orlp2   ~y+x>2>>y
ERR 011111001111000111000011111001111100    orlp3   x*x-y*y>9
ERR 111111111111111111111111111111111111    orlp4   ~y>x/~3*x
ERR 111111011111001111000111111011111101    orlp5   -3>>y>y-x
ERR 111111011111001111000111111011111101    orlp6   ~y+x<<y>2
ERR 000000000000000000000000000000000000    orlp1   -x<~y>4>x

সারসংক্ষেপ

যেহেতু উত্স কোড উপাদানগুলি পুনরাবৃত্তি করার "ব্যয়" সম্পর্কে, আপনি একটি সারণী ব্যবহার করতে পারেন। আপনি অনুসন্ধান সারণীটি "আড়াল" করতে পারেন, তাই এটি হয়

 LUT[x][y]

অথবা

 LUT[x*6+y]

অবশ্যই আপনি পেডেন্টিক এবং অবসেস হতে পারেন এবং LUT নামকরণ করতে পারেন

 L[x][y]

সুতরাং আমার "সংস্করণ" হ'ল ... 7 টি অক্ষর । (বা যদি কোনও ফাংশন এবং L(x,y)আরও ছোট হয় তবে তৈরি করুন)।

বা, আরও গুরুত্বপূর্ণ: সঠিক, পরীক্ষামূলক এবং রক্ষণাবেক্ষণযোগ্য।


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