কখন (x == x + 2) হয়? [বন্ধ]


90

চ্যালেঞ্জ: xঅভিব্যক্তিটি এমনভাবে সংজ্ঞায়িত করুন(x == x+2) সত্য হয়ে যায়।

আমি প্রশ্নটি সি দিয়ে ট্যাগ করেছি, তবে যতক্ষণ না তারা সৃজনশীল বা ভাষার একটি আকর্ষণীয় দিকটি হাইলাইট করে অন্য ভাষাগুলির উত্তরগুলি স্বাগত।

আমি একটি সি সমাধান গ্রহণ করার ইচ্ছা করি, তবে অন্যান্য ভাষাগুলি আমার ভোট পেতে পারে।

  1. সঠিক - স্ট্যান্ডার্ড-কমপ্লায়েন্ট বাস্তবায়নে কাজ করে। ব্যতিক্রম - এটি যদি একটি সাধারণ বাস্তবায়ন হয় (যেমন ধরে নেওয়া যায় তবে) মৌলিক ধরণের একটি বাস্তবায়ন ধরে নেওয়াint 32 বিট 2 এর পরিপূরক) ঠিক আছে।
  2. সাধারণ - ছোট হওয়া উচিত, মৌলিক ভাষার বৈশিষ্ট্যগুলি ব্যবহার করুন।
  3. আকর্ষণীয় - এটি বিষয়গত, আমি স্বীকার করি। আমি কী আকর্ষণীয় বিবেচনা করি তার জন্য আমার কয়েকটি উদাহরণ রয়েছে তবে আমি ইঙ্গিত দিতে চাই না। আপডেট : প্রিপ্রোসেসর এড়ানো আকর্ষণীয়।
  4. দ্রুত - প্রথম ভাল উত্তর গৃহীত হবে।

Answers০ টি উত্তর পাওয়ার পরে (আমি কখনই এ জাতীয় প্রত্যাশা আশা করি না), তাদের সংক্ষিপ্ত বিবরণ দেওয়া ভাল।

60 টি উত্তর 7 টি গ্রুপে বিভক্ত, যার মধ্যে 3 টি সিতে প্রয়োগ করা যেতে পারে, বাকী অন্যান্য ভাষায়:

  1. সি প্রিপ্রসেসর। #define x 2|0পরামর্শ দেওয়া হয়েছিল, তবে আরও অনেক সম্ভাবনা রয়েছে।
  2. ভাসমান পয়েন্ট বড় সংখ্যা, অনন্ত বা NAN সব কাজ করে।
  3. পয়েন্টার গাণিতিক একটি বিশাল কাঠামোর একটি পয়েন্টার চারপাশে মোড়ানো 2 যোগ করে।

    বাকিরা সি নিয়ে কাজ করে না:

  4. অপারেটর ওভারলোডিং - এটি +যা যুক্ত করে না বা একটি== যা সর্বদা সত্য ফিরে আসে।
  5. মেকিং xএকটি ফাংশন কল (কিছু কিছু ভাষায় ছাড়া এটি অনুমোদন x()সিনট্যাক্স)। তারপরে এটি প্রতিবার অন্য কিছু ফিরে আসতে পারে।
  6. একটি বিট ডেটা টাইপ। তারপরে x == x+2 (mod 2)
  7. পরিবর্তন করা হচ্ছে 2- কিছু ভাষা 0আপনাকে এটি নির্ধারণ করতে দেয়।

29
কেন 4. Quick? আপনি বলতে চাইছেন "যে কে একটি জানে এবং প্রথমে এই প্রশ্নটি পড়ার মতো ভাগ্যবান"?
লুক

6
@ugoren সম্প্রদায় ভোট যাক (এবং আপনার মত বেশী জন্য নিজেকে ভোট), তারপর 7 দিন বা তাই পরে :) শীর্ষ উত্তরটি নির্বাচন
লুক

3
সম্ভাবনা সম্পর্কে 2: NaN কাজ করে না । NaN + 2 আবার NaN, তবে NaN == NaN মিথ্যা।
মার্টিন বি

2
স্কেল সমাধান, যেখানে x '2' সমন্বিত একটি সেট এবং + নিজের add to Setলাইফ সংজ্ঞা না দিয়ে স্ট্যান্ডার্ড লাইব্রেরি দ্বারা বোঝায় +, এই 7 টি বিভাগে ফিট করে না, আইএমএইচও।
ব্যবহারকারী অজানা

2
কেন এই প্রশ্ন এবং সমস্ত উত্তর সম্প্রদায় উইকি?
mbomb007

উত্তর:


71
main()
{
double x=1.0/0.0;
printf("%d",x==x+2);
}

আউটপুটস ঘ।

লিঙ্ক: http://ideone.com/dL6A5


7
float x=1./0এটি কিছুটা খাটো এবং সম্ভবত আরও মার্জিত। তবে যাইহোক, এটি অবশ্যই প্রথম ভাল উত্তর।
ugoren

1
আহ শূন্য দ্বারা পুরানো বিভাজন। আমি স্বীকার করতে চাই তার চেয়ে বেশি সময় লাগল। হাহা
অনুদান

আরগ, আমি যদিও এটিরও, তবে উইন্ডোজটি সংকলন করে না তাই আমি এটি ফেলে দিয়েছি। :( +1 যদিও
টিউডর

x = 1e999 এটি করার আরেকটি উপায়।
shiona

4
@ শিওনা float x=1e20যথেষ্ট হবে
l0n3sh4rk

125

ফোর্টরান চতুর্থ:

2=0

এর পরে প্রোগ্রামটিতে প্রতিটি ধ্রুবক 2 শূন্য হয়। বিশ্বাস করুন, আমি এটি করেছি (ঠিক আছে, 25 বছর আগে)


23
আমার আর কখনও কারণ ফোর্টরান স্পর্শ না।
C0deH4cker

3
এটি কি অন্তত একটি সতর্কতা নিক্ষেপ করে?
মাইকেল স্টারন

15
@ মিশেলস্টার্ন সতর্কতা: আপনি 2 এর মান পরিবর্তন করছেন!
ক্রুঙ্কার

100

এটি কাজ করে বলে মনে হচ্ছে:

#define x 2|0

মূলত, এক্সপ্রেশনটি প্রসারিত হয় (2|0 == 2|(0+2))। ম্যাক্রো সংজ্ঞায়িত করার সময় কেন কাউকে বন্ধনী ব্যবহার করা উচিত এটির একটি উত্তম উদাহরণ।


3
অবশ্যই কাজ করে এবং আমি মনে করি এটি সর্বাধিক মার্জিত প্রাকপ্রসেসর ভিত্তিক সমাধান। তবে আমি মনে করি প্রিপ্রোসেসর ছাড়াই এটি করা আরও আকর্ষণীয়।
ugoren

এটা কি শুধু আমার নাকি হওয়া 2|(0+2)উচিত 1?
ফুনেহে

1
@ ফুনেহে: |কিছুটা দিকের বা ; ||যৌক্তিক হয়।
স্ট্যান্ড

20
এটি কোনওভাবে আমাকে ছোট্ট ববি টেবিলগুলির কথা মনে করিয়ে দেয়।
vsz

1
@ রাকেশএনএস: অপারেটরের নজির দেখানোর জন্য আমি অতিরিক্ত বন্ধনীগুলির অতিরিক্ত সেট যুক্ত করেছি । এ কারণেই আমি বলেছিলাম "মূলত"।
প্লিজস্ট্যান্ড

79

Brainfuck

x

এটি অবশ্যই "সত্য থেকে মূল্যায়ন করতে" কিছুটা প্রসারিত করে, কারণ ব্রেইনফাকে আসলে কিছুতেই কোনও মূল্যায়ন হয় না - আপনি কেবল একটি টেপ ম্যানিপুলেট করেন। তবে আপনি যদি এখন নিজের মত প্রকাশ করেন app

x
(x == x+2)

প্রোগ্রাম সমান

+

(কারণ সবকিছু কিন্তু <>+-[],.একটি মন্তব্য)। যা এখন আমরা যেখানে থাকি সেখানে মান বাড়ানো ছাড়া কিছুই করে না। টেপটি সমস্ত জিরো দিয়ে শুরু করা হয়েছিল, সুতরাং আমরা কার্সার অবস্থানে একটি 1 দিয়ে শেষ করি, যার অর্থ "সত্য": যদি আমরা এখন একটি শর্তাধীন বিভাগ শুরু []করি তবে এটি / লুপটি প্রবেশ করবে।


12
+1 অবশ্যই নিয়মের সর্বাধিক সৃজনশীল নমন হওয়া উচিত।
নিনজালজ

3
তোমার দরকার কেন x?
জেমস 22

3
@ জেমস প্রশ্নটি xএখানে xসংজ্ঞা হিসাবে সংজ্ঞায়িত করতে বলেছে x
ব্যবহারকারী 80551

1
@James উত্তর না needছাড়া কিছু+
Cruncher


50

সি

int main() { float x = 1e10; printf("%d\n", x == x + 2); }

দ্রষ্টব্য: FLT_EVAL_METHOD != 0(নীচে মন্তব্য দেখুন) কাজ করতে পারে না ।


24
রিয়েল-ওয়ার্ল্ড অ্যাপ্লিকেশনগুলির জন্য +1। অনেক লোক ভাসমান পয়েন্ট গণিত বুঝতে পারে না।
টিম এস

1
@ এমবম্ব ২০০7: আমি মনে করি সেগুলি আলাদা - যে উত্তরটি আপনি নির্ভর করতে যুক্ত করেছেন INF + 2 == INF, সেখানে আমার উত্তরটিতে একটি একক নির্ভুলতা ভাসমান ব্যবহার করা হয়েছে যা যথেষ্ট পরিমাণে যথেষ্ট যে ২ টি একটি ইউএলপির চেয়ে কম।
পল আর

2
@ এমবিম্ব ২০০7: আমি এগুলিও খুব আলাদা বলে মনে করি - ∞ + 2 = ∞এটি এমন কিছু যা বুঝতে পারে এবং কম্পিউটার নির্দিষ্ট কোনও কিছুর উপর নির্ভর করে না, যখন একটি কংক্রিট সংখ্যায় ২ যোগ করা হয় এবং এর কোনও প্রভাব না পড়ে কিছুটা অবাক করা এবং সীমাবদ্ধ নির্ভুলতার সাথে নির্দিষ্ট কম্পিউটার এবং আরও আকর্ষণীয় আইএমএইচও
GoatInTheMachine

1
FLT_EVAL_METHOD == 1গণিত যেমন করা হয় তখন এটি সহজেই ব্যর্থ হতে পারে double। এমনকি আরও long doubleনির্ভুলতার চেয়ে বেশি বড় 1.0e37f
এফপির

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

36

সি শার্প

class T {
  static int _x;
  static int X { get { return _x -= 2; } }

  static void Main() { Console.WriteLine(X == X + 2); }
}

একটি সংক্ষিপ্ত নয়, কিছুটা মার্জিত।

http://ideone.com/x56Ul


4
এটি খনন করুন, এই পোস্টটির জন্য সবেমাত্র একটি 'সুন্দর উত্তর' ব্যাজ পেয়েছে। গুরুতরভাবে, ইভিল স্টাফের জন্য ব্যাজ পাচ্ছেন ?! বাড়িতে এই কাজ করবেন না !
fjdumont

এটা খারাপ, কিন্তু এটি খুব সুন্দর ...
কেভিন

32

scala: { val x = Set(2); (x == x + 2) }


হাস্কেল: ইন্সে ℤ / 2ℤ সংজ্ঞায়িত করুন Bool:

instance Num Bool where
    (+) = (/=)
    (-) = (+)
    (*) = (&&)
    negate = id
    abs    = id
    signum = id
    fromInteger = odd

তারপরে যে কোনওটি আমাদের জন্য x :: Boolথাকবে x == x + 2

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


3
আপনি সরল করতে পারেন:fromInteger = odd
রোটসর

1
এছাড়াও (+)সংজ্ঞায়িত করা যায় যেমন (/=)আমি বিশ্বাস করি।
ম্যাট্রিক্সফ্রোগ

2
সংক্ষিপ্ত সমাধান এর উদাহরণ তৈরি করা হবে ()
থমাস এডিং

31

পাইথন

class X(int):__add__=lambda*y:0
x=X()

# Then (x == x+2) == True

খুশী হলাম। অপারেটর ওভারলোডিংকে সমর্থন করে এমন সমস্ত ভাষা একই ধরণের সমাধান ব্যবহার করতে পারে তবে সি এর মধ্যে একটিও নয়।
ugoren

এছাড়াও ওভারলোডিং __cmp__হিসাবে কাজ করে class X(int):__cmp__=lambda*x:0(বা __eq__কিছুটা দীর্ঘ হলেওclass X(int):__eq__=lambda*x:True
ডাঃ জিম্বোব

আপনি যদি পূর্বে থেকে প্রসারিত না হন তবে একটি দম্পতি class X:__add__=lambda s,o:s
স্বল্পতর

আমি কি জিজ্ঞাসা করতে পারি যে গুণটি কী করে?
seequ

2
@ রেয়ার এটি আসলে গুণ নয়। কারণ __add__সাধারণত একাধিক আর্গুমেন্ট ( lambda x,y:) দেওয়া হয়, আমি সমস্ত আর্গুমেন্টকে একটি টিপল ( lambda *y:) এ প্যাক করতে * ব্যবহার করে কিছু অক্ষর সংরক্ষণ করি । দেখুনআরও তথ্যের জন্য ডক্স
grc

31

জিএনইউ সি কোনও সদস্য এবং আকার 0 নয় এমন কাঠামো সমর্থন করে:

struct {} *x = 0;

2
খুব সুন্দর! আমি পয়েন্টার পাটিগণিত সম্পর্কে ভেবেছিলাম খুব বড় ডেটার সাথে র‌্যাপ্রোপাউন্ডের দিকে নিয়ে যায়, তবে এর বিপরীত কথা ভাবি না।
ugoren

26

পিএইচপি:

$x = true;
var_dump($x == $x+2);

বা:

var_dump(!($x==$x+2));

আউটপুট:

bool, (সত্য)


1
আমি আসলে এই মৃত-সহজ পিএইচপি উত্তরটি নিয়ে আসার চেষ্টা করছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন।
স্ট্যান্ড

25

এটি একটি সাধারণ ভ্রান্ত ধারণা যে সিতে, সাদা স্পেস কোনও বিষয় নয়। আমি কল্পনাও করতে পারি না যে জিএনইউ সি-তে কেউ এটিকে নিয়ে আসে নি:

#include <stdio.h>
#define CAT_IMPL(c, d) (c ## d)
#define CAT(c, d) CAT_IMPL(c, d)
#define x CAT(a, __LINE__)

int main()
{
    int a9 = 2, a10 = 0;
    printf("%d\n", x ==
        x + 2);
    return 0;
}

প্রিন্ট 1


দুর্দান্ত, যদিও সম্ভবত প্রযুক্তিগতভাবে বৈধ নয় ( x == x+2এখনও মিথ্যা)। তবে একবার আপনি ধারণাটি সামনে আনলে, আমি মনে করি #define x -2*__LINE__এটি আরও মার্জিত।
ugoren

3
@ ইউগোরেন ধন্যবাদ! আপনি এই সব, এক লাইনে হতে ব্যবহার করতে চান তাহলে COUNTER টি পরিবর্তে লাইন - জিসিসি 4.3+ যদিও প্রয়োজন।
H2CO3

1
_CATসংরক্ষক সনাক্তকারী। আন্ডারস্কোর দিয়ে শুরু হওয়া এবং বড় হাতের অক্ষর দিয়ে শুরু হওয়া যে কোনও কিছুই সি তে সংরক্ষিত আছে
কনরাড বোরোস্কি

@ এক্সফিক্স যে ঠিক ঠিক, ইউবি অপসারণ করতে আপডেট।
H2CO3

20

সি

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

/////////////////////////////////////
// At the beginning                 /
// We assume truth!                 /

int truth = 1;
int x = 42;

/////////////////////////////////////
// Can the truth really be changed??/
truth = (x == x + 2);

/////////////////////////////////////
// The truth cannot be changed!     /
printf("%d",truth);

আপনি বিশ্বাস না হলে এটি চেষ্টা করুন!


1
0। না, এখনও বিশ্বাস করবেন না।
এমসাল্টারস

@ এসএমএলটার্স: আপনি কোন সংকলক ব্যবহার করেন? আপনি ট্রিগারফ অক্ষম থাকতে পারে।
বনাম 21

VS2010। বেশ সম্ভব যে ট্রাইগ্রাফগুলি ডিফল্টরূপে অক্ষম থাকে। হয় বা লাইন ??\
উপসংহার

এমএসএল্টারস: ট্রিগ্রাফটি ??\ একটি একক রূপান্তর করতে হবে \ , তাই নেই ??\ । কিছু আধুনিক সংকলক অবশ্য সক্ষম থাকলেও ডিফল্টরূপে ট্রিগ্রাফ এবং লাইন কনটেনটেশনগুলিতে সতর্কতা দেয়।
vsz

18

ম্যাথামেটিকাল:

x /: x + 2 := x
x == x + 2

আমি মনে করি এই সমাধানটি উপন্যাস কারণ এটি ম্যাথমেটিকাকে ব্যবহার করে আপ ভ্যালুগুলির ধারণাটি ।

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

ম্যাথমেটিকায় আপ ভ্যালু বলতে কী বোঝায় তা বোঝাতে আমি আমার উত্তরটি প্রসারিত করছি

প্রথম লাইনটি প্রতীকটির জন্য মূলত সংযোজনটিকে নতুনভাবে সংজ্ঞায়িত করে x। আমি সরাসরি বিশ্বব্যাপী ফাংশনে এমন সংজ্ঞা সংরক্ষণ করতে পারি যা +প্রতীকের সাথে সম্পর্কিত , তবে এই জাতীয় পুনর্নির্ধারণটি বিপজ্জনক হবে কারণ গণিতের বিল্ট-ইন অ্যালগরিদমগুলির মাধ্যমে পুনর্নির্ধারণটি অনির্দিষ্টভাবে প্রচার করতে পারে ।

পরিবর্তে, ট্যাগ ব্যবহার করে x/:, আমি সংজ্ঞা সংকেতটির সাথে যুক্ত করেছি x। এখন যখনই ম্যাথামেটিকা প্রতীকটি দেখেন x, এটি এটি +যে ফর্মের x + 2 + ___প্রতীক ___হিসাবে অন্য চিহ্নগুলির একটি সম্ভাব্য নাল ক্রম হিসাবে বোঝানো হয় সেখানে এমন কোনও অপারেটর দ্বারা এটি পরিচালনা করা হচ্ছে কিনা তা পরীক্ষা করে দেখুন ।

এই পুনঃনির্ধারণটি অত্যন্ত সুনির্দিষ্ট এবং গণিতের বিস্তৃত প্যাটার্ন মেলানোর ক্ষমতা ব্যবহার করে। উদাহরণস্বরূপ, অভিব্যক্তি x+y+2ফিরে আসে x+y, তবে অভিব্যক্তি x+3ফিরে আসে x+3; কারণ পূর্ববর্তী ক্ষেত্রে, প্যাটার্নটি মেলানো যেতে পারে, তবে পরবর্তী ক্ষেত্রে, অতিরিক্ত সরলীকরণ ছাড়া প্যাটার্নটি মেলা যায় না।


1
আমি মনে করি এটি আপনাকে কী করে তা ব্যাখ্যা করা উচিত। বেশিরভাগ লোক ম্যাথমেটিকাকে জানেন না (বা কী মানগুলি হয়)।
ugoren

1
আপনাকে ধন্যবাদ ইউগোরেন, আমি আমার বেশিরভাগ সময় ম্যাথমেটিকা ​​স্ট্যাক এক্সচেঞ্জ ওয়েবসাইটে ব্যয় করি, তাই আমার উদাহরণটি কী অর্থবহ করে তুলেছে তা ব্যাখ্যা করতে আমি ভুলে গিয়েছি। আমি এমন একটি সম্পাদনা করেছি যা ধারণাটিকে সংক্ষিপ্তভাবে ব্যাখ্যা করতে পেরেছিলাম could
কার্ল মরিস

17

javascript:

var x = 99999999999999999;
alert(x == x+2);​

টেস্ট ফিডল


2
আপনি ব্যবহার করতে পারেন Infinity, বা -Infinity, এবং এর কারণে আপনি শর্টকাটটি ব্যবহার করতে পারেন x = 1/0
zzzzBov

6
@zzzzBov: এটি অবশ্যই একটি ভাল কোড গল্ফ। আমি বেছে নিয়েছি (99999999999999999 == 99999999999999999+2)কারণ আমি মনে করি এটি তুলনায় কিছুটা বেশি আকর্ষণীয় (Infinity == Infinity+2), যদিও ওপি যেমন বলেছে, "এটি সাবজেক্টিভ" :) :)
ব্রিগেয় 3737

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

5
@ নিকো বার্নস টিউর নয় :(
আজাজা 333221

2
@ নিকো বার্নস, কনসোলে সেই কোডটি চালানো উত্পাদন করে false; আপনি যেখানেই এই তথ্যটি জেএসে পেয়েছেন তা ভুল এবং বিশ্বাস করা উচিত নয়।
zzzzBov

17

পরিকল্পনা

(define == =)
(define (x a b c d) #t)
(x == x + 2)
;=> #t

খুশী হলাম। স্কিমের (x == x + 2)চেহারাটি কেবল সি এর মতো, তবে এর অর্থ একটি সম্পূর্ণ আলাদা জিনিস।
ugoren

1
এখন এটি জন্য (= x 2)
জো জেড।

(define (x a b c d) #t):)
ক্রંચার

@ugoren এটি এই প্রোগ্রাম দ্বারা এটি সংজ্ঞায়িত করা হয়। এক্স কেবল এখানে একটি ফাংশনের নাম। এবং তাই হয় ==
ক্রুঙ্কার

16

সুস্পষ্ট উত্তর:

যখন এটি সমাপ্ত হয়:

while (x != x+2) { }
printf("Now");

1
+1 meta.codegolf.stackexchange.com/a/1070/8766 তবে এটি আসলে বুদ্ধিমান।
ব্যবহারকারী 80551

1
আমার মনে হয় while(!(x == x+2)) {}আরও আত্মায় থাকবেন
ক্রুঙ্কার

এই উত্তরটি পূর্বাভাস দেয় যে দুই বছরের মেটা পোস্ট। আজকে ক্লিচ হিসাবে বিবেচিত সমস্ত কিছু কোনও এক সময় উপন্যাস ছিল।
ডানিরো

16

জাভাস্ক্রিপ্টের জন্য এখানে একটি সমাধান রয়েছে যা ভাসমান-পয়েন্ট সংযোজনের ক্ষেত্রে Infinityএবং -Infinityপ্রান্তের কেসগুলি ব্যবহার করে না । এটি ইন্টারনেট এক্সপ্লোরার 8 এবং এর নীচে বা ইএস 5 কড়া মোডে অপ্ট-ইন করে না। আমি withবিবৃতিটি কল করব না এবং গ্রাহকরা বিশেষত "উন্নত" বৈশিষ্ট্যগুলি রাখবেন।

with ({ $: 0, get x() {return 2 * this.$--;} }) {
    console.log(x == x+2);
}

: যোগ করার জন্য সম্পাদিত উপরে কৌতুক ব্যবহার না করেই সম্ভব হয় withএবং getযেমন দ্বারা উল্লিখিত অ্যান্ডি ই মধ্যে জাভাস্ক্রিপ্ট মধ্যে golfing জন্য টিপস এবং দ্বারা jncraton এই পৃষ্ঠাতে:

var x = { $: 0, valueOf: function(){return 2 * x.$++;} };
console.log(x == x+2);

একটি দুর্দান্ত ধারণা - xএকটি ফাংশন কল করা, যদিও এটি দেখতে ভেরিয়েবলের মতো লাগে। আমি বাম থেকে ডান মূল্যায়নের ক্রমটি ধরে নিয়েছি, তবে এটি জেএসে নির্দিষ্ট হওয়া (সি থেকে পৃথক) হওয়ার পরে এটি ঠিক আছে।
ugoren

14

নিম্নলিখিতটি মানদণ্ডের সি নয় , তবে যে কোনও 64-বিট প্ল্যাটফর্মের জন্য কাজ করা উচিত:

int (*x)[0x2000000000000000];

নীতিগতভাবে দুর্দান্ত, তবে মনে হয় এটি কার্যকর হয়েছে। x2 ^ 61 পদক্ষেপে বর্ধিত x + 8হবে, সমান হবে x
ugoren

@ ইউগোরেন, এটি 4-বাইট সহ লিনাক্সে আমার পক্ষে কাজ করে int
হান

আপনি একদম ঠিক বলছেন. আমি আসলে এটি মিস করেছি যে এটি intনয় char
ugoren

10

সাগে:

x=Mod(0,2)
x==x+2

সত্য ফিরে

সাধারণভাবে জিএফ (2 ** এন) এর ক্ষেত্রে এটি সর্বদা সত্য যে কোনও x এর জন্য x = x + 2

এটি কোনও বাগ বা অতিরিক্ত প্রবাহ বা অসীম সমস্যা নয়, এটি আসলে সঠিক


1
একই কৌশল প্যারি / জিপি নিয়ে কাজ করে
হ্যাগেন ভন ইটজেন

10

কমন লিস্প

* (defmacro x (&rest r) t)
X
* (x == x+2)
T

xপ্রকৃত মান হতে হবে না যখন এটি বেশ সহজ ।


8

এপিএল (ডায়ালগ)

X←1e15
X=X+2

এপিএলে এমনকি অসীমতাও নেই, এটি ঠিক যে ভাসমানগুলি 1.000.000.000.000.000এবং এর মধ্যে পার্থক্য বলতে যথেষ্ট সুনির্দিষ্ট নয় 1.000.000.000.000.002। এটি, যতদূর আমি জানি, এপিএলে এটি করার একমাত্র উপায়।


আমি সত্যিই এটি পছন্দ করি কারণ এটি ভাসমান নির্ভুলতা কাজে লাগানোর প্রথম উত্তর।
অ্যান্ড্রু কেএস

1
@ অ্যান্ড্রুকেস: আসলে পল আর কিছুটা আগে ছিলেন।
এমসাল্টারস

8

পার্ল 6

আমি এই সমাধানটি আগে না দেখে অবাক হয়েছি। যাইহোক, সমাধান হল - যদি xহয় 0এবং 2একবারে? my \xএই উদাহরণে sigilless ভেরিয়েবল ঘোষণা - এই প্রশ্নটি সম্পর্কে জিজ্ঞাসা x, পার্ল শৈলী নয় $x?? !!তিন অপারেটর হয়।

$ perl6 -e 'my \x = 0|2; say x == x + 2 ?? "YES" !! "NO"'
YES

কিন্তু ...

$ perl6 -e 'my \x = 0|2; say x == x + 3 ?? "YES" !! "NO"'
NO

xএকসাথে একাধিক মান। xসমান 0এবং 2একবারে x + 2সমান 2এবং 4একবারে সুতরাং, যৌক্তিকভাবে তারা সমান।


8

পাইথন ২. এক্স ((ক্যাশেড) পূর্ণসংখ্যার পুনঃনির্ধারণ ব্যবহার করে)

আমি লক্ষ্য করেছি যে অজগর উত্তরগুলির সমস্তগুলি ক্লাসগুলি সংজ্ঞায়িত করেছে যাগুলি নতুন সংজ্ঞা দেয় + অপারেটরটিকে । আমি অজগরটির নমনীয়তার আরও নিম্ন-স্তরের বিক্ষোভ দিয়ে উত্তর দেব। (এটি একটি অজগর 2-নির্দিষ্ট স্নিপেট)

পাইথনে, পূর্ণসংখ্যা কমপক্ষে এইভাবে কমপক্ষে সংরক্ষণ করা হয়:

typedef struct {            // NOTE: Macros have been expanded
    Py_ssize_t ob_refcnt;
    PyTypeObject *ob_type;
    long ob_ival;
} PyIntObject;

অর্থাৎ একটি সঙ্গে একটি struct হয় size_t, void *এবং longবস্তু, যাতে।
একবার আমরা একটি পূর্ণসংখ্যা ব্যবহার করি, এবং সেইজন্য আমরা ctypesপূর্ণসংখ্যাটিকে পুনরায় সংজ্ঞায়িত করার জন্য পাইথনের মডিউলটি ব্যবহার করতে পারি x == x+2, কেবল এটিই নয় , তবে2 == 0

import ctypes
two = 2 # This will help us access the address of "2" so that we may change the value

# Recall that the object value is the third variable in the struct. Therefore,
# to change the value, we must offset the address we use by the "sizeof" a 
# size_t and a void pointer
offset = ctypes.sizeof(ctypes.c_size_t) + ctypes.sizeof(ctypes.c_voidp)

# Now we access the ob_ival by creating a C-int from the address of 
# our "two" variable, offset by our offset value.
# Note that id(variable) returns the address of the variable.
ob_ival = ctypes.c_int.from_address(id(two)+offset)

#Now we change the value at that address by changing the value of our int.
ob_ival.value = 0

# Now for the output
x = 1
print x == x+2
print 2 == 0

ছাপে

True
True

7

পার্ল

একটি প্যাকেজ পরিবর্তনশীল উপর পার্শ্ব প্রতিক্রিয়া সহ একটি subroutine ব্যবহার:

sub x () { $v -= 2 }
print "true!\n" if x == x + 2;

আউটপুট: true!


1
sub x{}"কাজ করে "ও (কমপক্ষে আমার 5.10.1 এ), তবে আমি বুঝতে পারছি না কেন
মাইখাল

2
কারণ sub x{}অপরিশোধিত বা খালি তালিকার প্রত্যাশা, উভয়ই একটি সংখ্যাগত শূন্য। এবং x + 2 কে x (+2) হিসাবে পার্স করা হয়েছে। perl -MO=Deparseপ্রকাশিতprint "true\n" if x() == x(2);
পেরিলিওন

এটি দুর্দান্ত, @ মাইখাল এবং @ পেরিলিওন!
স্মরণে

7

পাইথন

ভাসমান পয়েন্ট যথার্থতা শোষণ এটিকে খুব সহজ করে তোলে।

>>> x = 100000000000000000.0
>>> (x == x+2)
True

এটিকে কম সিস্টেম নির্দিষ্ট করার জন্য অতিরিক্ত আমদানি প্রয়োজন

>>> import sys
>>> x = float(sys.maxint + 1)
>>> (x == x+2)
True

এটি অন্যান্য ভাষায়ও কাজ করা উচিত। এটি কাজ করে কারণ 1000000000000000000000000.0 এবং 10000000000000000002.0 এর পুনঃপ্রবিবেচনা মেশিনের জন্য ঠিক একই, কারণ মেশিনের অভ্যন্তরে ভাসমান পয়েন্টগুলি প্রতিনিধিত্ব করা হয়। দেখতে http://en.wikipedia.org/wiki/IEEE_floating_point আরও তথ্যের জন্য।

সুতরাং এটি মূলত যে কোনও ভাষায় কাজ করবে যা আপনাকে ভাসায় পূর্ণসংখ্যার যোগ করতে দেয় এবং এর ফলস হতে পারে।


6

অপারেটর ওভারলোডিংয়ের উপর ভিত্তি করে সি ++ এর জন্য এখানে একটি সমাধান। এটি একটি থেকে অন্তর্নিহিত রূপান্তর উপর নির্ভর enumএকটি থেকে int

#include <iostream>

enum X {};
bool operator==(X x, int y)
{
    return true;
}

int main()
{
    X x;
    std::cout << std::boolalpha << (x == x+2) << std::endl;
    return 0;
}

আপনি std::boolalphaপরিবর্তে ব্যবহার করতে পারেন ?:
জন পুর্ডি

5

আমি জানি এটি একটি কোড চ্যালেঞ্জ ... তবে আমি এটি গল্ফ করেছিলাম। দুঃখিত।

রুবি - 13 টি অক্ষর - অনন্ত সমাধান

x=1e17;x==x+2

সত্য ফিরে

রুবি - ৪১ টি অক্ষর - ওপেন ওভারলোডিং সমাধান

class Fixnum;def + y;0 end end;x=0;x==x+2

অথবা

class A;def self.+ y;A end end;x=A;x==x+2

5

যদি প্রশ্নটি কিছুটা কাজে লাগানো ঠিক হয় তবে আমি কিছু নতুন জাভা যুক্ত করব। কৌশলটি অবশ্যই নতুন নয়, তবে সম্ভবত এটি আকর্ষণীয় যে জাভাতে এটি সম্ভব।

static void pleaseDoNotDoThis() throws Exception {
    Field field = Boolean.class.getField("FALSE");
    field.setAccessible(true);
    Field modifiersField = Field.class.getDeclaredField("modifiers");
    modifiersField.setAccessible(true);
    modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
    field.set(null, true);
}

public static void main(String args[]) throws Exception {
    pleaseDoNotDoThis();
    doit(1);
    doit("NO");
    doit(null);
    doit(Math.PI);
}

static void doit(long x) {
    System.out.format("(x == x + 2) = (%d == %d) = %s\n", x, x+2, (x == x + 2));
}

static void doit(String x) {
    System.out.format("(x == x + 2) = (%s == %s) = %s\n", x, x+2, (x == x + 2));
}

static void doit(double x) {
    System.out.format("(x == x + 2) = (%f == %f) = %s\n", x, x+2, (x == x + 2));
}

এবং ফলাফল:

(x == x + 2) = (1 == 3) = true
(x == x + 2) = (NO == NO2) = true
(x == x + 2) = (null == null2) = true
(x == x + 2) = (3,141593 == 5,141593) = true
(x == x + 2) = (Infinity == Infinity) = true

4

এই ভিবিএস স্ক্রিপ্ট সমাধানটি আমার জাভাস্ক্রিপ্ট সমাধানের মতোই কাজ করে। আমি প্রিপ্রোসেসর ব্যবহার করি নি তবুও সমাধানটি তুচ্ছ মনে হচ্ছে।

y = 0
Function x
x = y
y = -2
End Function

If x = x + 2 Then
    WScript.Echo "True"
Else
    WScript.Echo "False"
End If

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