Ne zaman (x == x + 2)? [kapalı]


90

Mesele: xİfadenin (x == x+2)doğru olarak değerlendirileceği şekilde tanımlayın .

Soruyu C ile etiketledim, ancak yaratıcı oldukları veya dilin ilginç bir yönünü vurguladıkları sürece diğer dillerde cevaplar açıktır.

Bir C çözümünü kabul etmek niyetindeyim, ancak diğer diller oyumu alabilir.

  1. Doğru - standart uyumlu uygulamalar üzerinde çalışır. İstisna - eğer temel bir uygulama varsayalım, eğer ortak bir uygulama ise (örneğin int, 32bit 2'nin tamamlayıcısı olduğu varsayılır ) tamamdır.
  2. Basit - küçük olmalı, temel dil özelliklerini kullanın.
  3. İlginç - öznel, itiraf ediyorum. İlginç bulduğum şeyler için bazı örneklerim var, ancak ipucu vermek istemiyorum. Güncelleme : Önişlemciden kaçınmak ilginçtir.
  4. Çabuk - İlk iyi cevap kabul edilecektir.

60 cevap aldıktan sonra (böyle bir beklenti beklemiyordum), onları özetlemek iyi olabilir.

60 cevap 7 gruba ayrılmıştır, bunlardan 3'ü diğer dillerdeki C dilinde uygulanabilir:

  1. C önişlemcisi. #define x 2|0önerildi, ancak daha birçok olasılık var.
  2. Kayan nokta. Büyük sayılar, sonsuzluk veya NaN hepsi işe yarar .
  3. İşaretçi aritmetiği. Büyük bir yapıya bir işaretçi etrafına sarılmaya 2 ekleyerek neden olur.

    Gerisi C ile çalışmıyor:

  4. Operatör aşırı yüklenmesi - +Eklemeyen veya ==her zaman doğru olan bir A.
  5. xİşlev çağrısı yapma (bazı diller x()sözdizimi olmadan izin verir ). O zaman her seferinde başka bir şey döndürebilir.
  6. Bir bit veri türü. Öyleyse x == x+2 (mod 2).
  7. Değiştirme 2- bazı diller size atamanıza izin verir 0.

29
Neden 4. Quick? "Kim bir tanıyor ve ilk önce bu soruyu okuyacak kadar şanslı" mı demek istiyorsun?
Luc,

6
@ugoren Topluluğun oy vermesine izin verin (ve sevdikleriniz için kendinize oy verin), sonra 7 gün veya daha sonra en üstteki cevabı seçin :)
Luc

3
Olasılık 2 ile ilgili olarak: NaN çalışmıyor . NaN + 2 tekrar NaN'dir, ancak NaN == NaN yanlıştır.
Martin B,

2
X'in '2' içeren bir Küme olduğu Scala çözümü ve + add to Set, standart kütüphane ile +kendini yeniden tanımlamanıza gerek kalmadan ifade eder , bu 7 kategoriye, IMHO'ya uymaz.
kullanıcı bilinmeyen

2
Neden bu soru ve tüm cevaplar Topluluk Wiki's?
mbomb007

Yanıtlar:


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

Çıkışlar 1.

Bağlantı: http://ideone.com/dL6A5


7
float x=1./0biraz daha kısa ve belki daha zarif. Ama yine de, bu kesinlikle ilk iyi cevap.
ugoren

1
Ahh iyi yaşlı sıfıra bölmek. Kabul etmek istediğimden çok daha uzun sürdü. haha
Grant

Argh, Ben de buna rağmen, ama Windows'ta derleme değil, ben de düşürdüm. :( +1 olsa da
Tudor

x = 1e999 bunu yapmanın başka bir yoludur.
shiona

4
@shiona float x=1e20yeterli olur
l0n3sh4rk

125

Fortran IV:

2=0

Bundan sonra programdaki her sabit 2 sıfırdır. İnan bana, bunu yaptım (tamam, 25 yıl önce)


23
Fortran'a asla dokunmamam için daha fazla neden.
C0deH4cker

3
En azından bir uyarı veriyor mu?
Michael Stern,

15
@MichaelStern UYARI: 2 DEĞERİNİ DEĞİŞTİRİRSİNİZ!
Cruncher

100

Bu iş gibi görünüyor:

#define x 2|0

Temel olarak, ifade için genişletildi (2|0 == 2|(0+2)). Makroları tanımlarken parantez kullanmak neden güzel bir örnektir.


3
Kesinlikle işe yarıyor ve bence en zarif ön işlemci tabanlı çözüm. Ama bence ön işlemcisiz yapmanın daha ilginç olduğunu düşünüyorum.
ugoren

Sadece bana veya gerektiği mı 2|(0+2)olacak 1?
phunehehe 9:12

1
@phunehehe: |olup bitsel VEYA ; ||mantıklı VEYA.
Lütfen 09

20
Bu bir şekilde bana küçük Bobby Tables'ı hatırlatıyor.
vsz

1
@rakeshNS: Operatör önceliğini göstermek için fazladan parantez grubunu ekledim . Bu yüzden “Temel olarak” dedim.
Lütfen

79

brainfuck

x

Bu elbette biraz “doğru” olarak değerlendirir, çünkü Brainfuck'ta hiçbir şey aslında hiçbir şeyi değerlendirmez - yalnızca bir kaseti manipüle edersiniz. Fakat şimdi ifadenizi eklerseniz

x
(x == x+2)

program eşdeğerdir

+

(çünkü her şey ama <>+-[],.bir yorumdur). Bu da hiçbir şey yapmıyor, şimdi bulunduğumuz değeri arttırıyor. Teyp tüm sıfırlarla başlatıldı, bu nedenle imleç konumunda 1 işaretini alıyoruz, bu da "true" anlamına geliyor: şuan koşullu bir bölümle başladığımızda [], / döngüsüne girecekti.


12
+1 Kuralların en yaratıcı şekilde bükülmesi gerekir.
ninjalj

3
Neden ihtiyacın var x?
James,

3
@James soru tanımlamak için diyor xyani burada xolarak tanımlanır x.
user80551 11.03.2016

1
@James cevabı needdışında hiçbir şey yok+
Cruncher

56

F #

let (==) _ _ = true
let x = 0
x == (x + 2) //true

13
Bunu beğendim. Bunun yerine hokkabazlık sayıların, sadece == anlamını yeniden tanımlamak
evilcandybag

4
Bekle, F # 'daki eşitlik operatörü değil =mi? ==varsayılan olarak tanımlanmadı bile.
Jwosty

50

C

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

Not: eğer işe yaramayabilir FLT_EVAL_METHOD != 0(aşağıdaki yorumlara bakınız).


24
Gerçek dünya uygulamaları için +1. Çok fazla insan kayan nokta matematiğini anlamıyor.
Tim S.

1
@ mbomb007: Farklı olduklarını düşünüyorum - dayandığınız bağlantıya cevap INF + 2 == INFverirken cevabım, 2'nin bir ULP'den az olduğu kadar büyük olan tek bir hassas şamandıra kullanır.
Paul R

2
@ mbomb007: Ayrıca çok farklı olduklarını düşünüyorum - ∞ + 2 = ∞herkesin anlayabileceği ve bilgisayara özgü herhangi bir şeye bağlı olmadığını, ancak somut bir sayıya 2 eklemek ve etkisiz olması sınırlı hassasiyete göre biraz daha şaşırtıcı ve spesifik bilgisayarların ve daha ilginç IMHO
GoatInTheMachine

1
FLT_EVAL_METHOD == 1Matematik yapıldığında bu kolayca başarısız olabilir double. long doubleGibi bile hassas aşmak için daha büyük bir FP değeri tavsiye1.0e37f
chux

1
@chux: onay için teşekkürler - bu kesinlikle kodumun çoğunun platformlar arası olması nedeniyle gelecekte dikkat etmeniz gereken bir şey.
Paul R,

36

C #

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

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

Bir shortie değil, ama biraz zarif.

http://ideone.com/x56Ul


4
Tehlike, sadece bu yazı için bir 'Güzel Cevap' rozeti var. Cidden, EVIL olayı için rozet mi alıyorsun ?! Bunu evde yapma !
fjdumont

Kötü, ama çok güzel ...
Kevin

32

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


Haskell: Yemeklerde ℤ / 2ℤ tanımlayın Bool:

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

o x :: Boolzaman sahip olacağımız her şey için x == x + 2.

Güncelleme: Yorumdaki fikirler için teşekkürler, örneği buna göre güncelledim.


3
Basitleştirebilirsiniz:fromInteger = odd
Rotsor

1
Ayrıca inandığım (+)gibi tanımlanabilir (/=).
MatrixFrog

2
Daha kısa bir çözüm bir örnek yapmak olacaktır ().
Thomas Eding

31

piton

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

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

Güzel. Operatör aşırı yüklemesini destekleyen tüm diller benzer çözümler kullanabilir, ancak C bunlardan biri değil.
ugoren

Ayrıca aşırı yüklenme ile çalışır __cmp__olarak class X(int):__cmp__=lambda*x:0(veya __eq__biraz daha uzun olsaclass X(int):__eq__=lambda*x:True
dr jimbob

class X:__add__=lambda s,o:s
Int'den uzatmazsanız

Bu çarpmanın ne yaptığını sorabilir miyim?
seequ

2
@TheRare aslında çarpma değil. Çünkü __add__normalde birden fazla argüman (verilir lambda x,y:), bir başlığın içine bütün argümanları paketi için * kullanarak bazı karakterleri kaydetmek ( lambda *y:). Daha fazla bilgi için belgelere bakın .
grc

31

GNU C üye ve 0 beden olmayan yapıları destekler:

struct {} *x = 0;

2
Çok hoş! Etrafı çevreleyen çok büyük verilerle işaretçi aritmetik hakkında düşündüm, ama tam tersini düşünmedim.
ugoren

26

PHP:

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

Veya:

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

Çıktı:

bool (true)


1
Aslında bu basit PHP yanıtını bulmaya çalışıyordum, ama beni yendin.
Lütfen

25

C'deki boşlukların önemli olmadığı yaygın bir yanılgıdır. GNU C’de birisinin bu olamadığını hayal edemiyorum:

#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;
}

Yazdırır 1.


Güzel, teknik olarak geçerli olmasa da ( x == x+2hala yanlış). Ama fikri bir kez ortaya çıkardığında bence #define x -2*__LINE__daha zarif.
ugoren

3
@ugoren teşekkürler! Bütün bunların bir satırda olmasını istiyorsanız , LINE yerine COUNTER kullanın - GCC 4.3+ gerekir.
H2CO3

1
_CATayrılmış tanımlayıcıdır. Alt çizgi ile başlayan ve büyük harf C ile başlayan her şey C
Sakrad Borowski

@xfix tam olarak doğru, UB'yi kaldırmak için güncellendi.
H2CO3

20

C

Makro kullanmadan ve sonsuzluğa zarar vermeden daha ilginçtir.

/////////////////////////////////////
// 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);

İnanmıyorsan dene!


1
0. Hayır, hala inanma.
MSalters

@ MSalters: Hangi derleyiciyi kullanıyorsunuz? Trigraph’ları devre dışı bırakmış olabilirsiniz.
vsz

VS2010. Trigraphs varsayılan olarak devre dışı bırakılmış olabilir. Ya bu ya da satır birleştirmeyle çalışmaz??\
MSalters 10:12

MSalters: Trigraph teke ??\ dönüştürülecek \ , yani yok ??\ . Bazı modern derleyiciler, varsayılan olarak, etkinleştirilse bile hem trigraph'lara hem de satır birleştirmelere uyarı verir.
vsz 10:12

18

Mathematica:

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

Bence bu çözüm yeni çünkü Mathematica'nın Yukarı Değerler kavramını kullanıyor .

DÜZENLE:

Mathematica'da Yukarı Değerlerin ne anlama geldiğini açıklamak için cevabımı genişletiyorum .

İlk satır esasen sembolün ilavesini yeniden tanımlar x. Bu tür bir tanımı doğrudan +sembolle ilişkilendirilen global fonksiyonda saklayabilirim , ancak böyle bir yeniden tanımlamanın yapılması tehlikeli olabilir çünkü yeniden tanımlamanın Mathematica'nın yerleşik algoritmaları aracılığıyla tahmin edilemez şekilde yayılması mümkündür .

Bunun yerine, etiketi kullanarak x/:tanımı sembolle ilişkilendirdim x. Şimdi ne zaman Mathematica sembolü görür x, bu ek operatör tarafından ameliyat olup olmadığını görmek için denetler +şeklinde bir desen x + 2 + ___sembolü ___diğer sembollerin olası boş dizisi anlamına gelir.

Bu yeniden tanımlama çok spesifiktir ve Mathematica'nın kapsamlı desen eşleştirme yeteneklerini kullanır . Örneğin, ifade x+y+2döndürür x+y, ancak ifade x+3döndürür x+3; çünkü önceki durumda, kalıp eşleştirilebiliyordu, fakat ikinci durumda, kalıp basitleştirilmeden eşleştirilemedi.


1
Bence ne yaptığını açıklamalısın. Çoğu insan Mathematica'yı (ya da Değerlerin ne olduğunu) bilmiyor.
ugoren

1
Teşekkürler @ugoren, zamanımın çoğunu Mathematica Stack Exchange web sitesinde geçiriyorum, bu yüzden örneğimi neyin anlamlı kıldığını açıklamayı unuttum. Kavramı olabildiğince açık bir şekilde anlatan bir düzenleme yaptım.
Carl Morris

17

JavaScript:

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

Fiddle'ı Test Et


2
Kullanabilir Infinityya da -Infinitybu nedenle kısayolunu kullanabilirsiniz x = 1/0.
zzzzBov

6
@zzzzBov: Bu kesinlikle daha iyi bir kod golfü. Seçtiğim (99999999999999999 == 99999999999999999+2)Ben biraz daha ilginç olduğunu düşünüyorum çünkü (Infinity == Infinity+2)OP :) "o sübjektif olduğunu", dediği gibi olsa
Briguy37

İyi bir nedenden ötürü böyle bir çek gördüğüm tek gerçek durum bu (programlama bilmecelerinin yanı sıra): Bir (şamandıra temelli) fakülte işlevi, girişini saymak -1ve tekrarlamak için çok büyük olduğu için kontrol ediyordu. . Dil Python'du, ama bu durumda gerçekten önemli değil.
Alfe

5
@ NicoBurns ture değil :(
ajax333221

2
@NicoBurns, konsolda bu kodu çalıştırarak üretir false; JS'de bu bilgiyi nereden alıyorsanız yanlıştır ve güvenilmemelidir.
zzzzBov

17

düzen

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

Güzel. Şema'nın (x == x + 2)tıpkı C'ler gibi görünmesi, ancak tamamen farklı bir şey olduğu anlamına gelir.
ugoren

1
Şimdi bunun için yap (= x 2).
Joe Z.

(define (x a b c d) #t):)
Cruncher

@ugoren this, bu program tarafından bunu yapmak için tanımlanmıştır. x, burada basitçe bir fonksiyonun adıdır. Ve böylece ==
Cruncher


16

Burada, kayan nokta eklemeye ilişkin kenar Infinityve -Infinitykasa durumlarından faydalanmayan bir JavaScript çözümü sunulmaktadır . Bu, Internet Explorer 8 ve altında ya da ES5 katı modundayken çalışmaz. Ben demem withdeyimi ve alıcılar özellikle "gelişmiş" özellikleri.

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

: Eklemek Düzenlendi yukarıdaki hile kullanmadan da mümkündür withve gettarafından belirtildiği gibi, Andy E yılında JavaScript golf için İpuçları ve ayrıca tarafından jncraton bu sayfada:

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

Güzel bir kavram - xbir değişken çağrısı gibi görünse de, bir işlev çağrısı yapmak . Soldan sağa değerlendirme sırasını kabul ediyorum, ancak JS'de (C'nin aksine) belirtildiğinden beri sorun yok.
ugoren

14

Aşağıdakiler, C standartlarına uygun değildir , ancak hemen hemen tüm 64 bit platformlarda çalışmalıdır:

int (*x)[0x2000000000000000];

Prensip olarak harika, fakat yanlış uygulanmış gibi görünüyor. x2 ^ 61'lik adımlarla artırılır, x + 8eşit olur x.
ugoren

@ugoren, benim için çalışıyor, 4 bayt ile Linux'ta int.
Han

Kesinlikle haklısın. Bir dizi olduğu gerçeğini özledim int, değil char.
ugoren

10

Adaçayı:

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

True döndürür

Genel olarak GF için (2 ** n) her zaman x için x = x + 2 olur.

Bu bir hata veya taşma veya sonsuzluk ile ilgili bir sorun değil, aslında doğru


1
Aynı numara PARI / GP ile çalışır
Hagen von Eitzen

10

Ortak Lisp

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

xGerçek bir değer olmak zorunda olmadığında oldukça kolaydır .


8

APL (Dyalog)

X←1e15
X=X+2

APL sonsuzluğa bile sahip değildir, sadece şamandıralar 1.000.000.000.000.000ve arasındaki farkı söyleyecek kadar kesin değildir 1.000.000.000.000.002. Bu, bildiğim kadarıyla APL'de bunu yapmanın tek yolu.


Bunu gerçekten seviyorum çünkü yüzer hassasiyetten faydalanan ilk cevap bu.
AndrewKS,

1
@AndrewKS: Aslında Paul R biraz daha önceydi.
MSalters

8

Perl 6

Bu çözümü daha önce görmeme şaşırdım. Neyse, çözüm - ne olur xolduğunu 0ve 2birden! my \xBu örnekte duyarsızlık değişkeni bildiriliyor - bu soru xPerl tarzı hakkında değil $x. ?? !!Üçlü operatörüdür.

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

Fakat...

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

xAynı anda çoklu değerlerdir. xaynı anda 0ve eşittir 2. x + 2aynı anda 2ve eşittir 4. Yani, mantıksal olarak eşittirler.


8

Python 2.X ((önbelleğe alınmış) tamsayıların yeniden tanımlanmasının kullanılması)

Tüm python cevaplarının +işleci yeniden tanımlayan sınıfları tanımladığını fark ettim . Python'un esnekliğinin daha düşük seviyeli bir gösterimi ile cevaplayacağım. (Bu bir python2'ye özgü snippet'tir)

Python'da tamsayılar C veya C'de bu şekilde az ya da çok depolanır:

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

Yani, bir ile bir yapıdır size_t, void *ve longbu sırayla nesnenin.
Kullandığımız ve bu nedenle bir tamsayı önbelleğe sonra, Python en kullanabilirsiniz ctypesböylece sadece demek ki tamsayı yeniden tanımlamak için modül x == x+2, ancak2 == 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

Baskılar

True
True

7

Perl

Bir paket değişkeninde yan etkileri olan bir alt yordam kullanmak:

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

Çıktı: true!


1
sub x{}"çalışır" da .. (en azından benim 5.10.1'imde), fakat nedenini anlayamıyorum ..
mykhal

2
Çünkü sub x{}her ikisi de sayısal sıfır olan undef veya boş bir liste döndürür. Ve x + 2, x (+2) olarak ayrıştırılır. perl -MO=Deparseortaya çıkarırprint "true\n" if x() == x(2);
Perleone

Bu harika, @ mykhal ve @ Perleone!
memowe

7

piton

kayan nokta hassasiyetinden yararlanmak bunu çok basit hale getirir.

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

Daha az sisteme özgü hale getirmek için ekstra bir ithalat gerektirir

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

Bu başka dillerde de çalışmalı. Bu, 100000000000000000000.0 ve 100000000000000002.0'ın yeniden yenilenmesinin, makine içerisinde kayan noktaların temsil edilmesinden dolayı tamamen aynı olması nedeniyle çalışır. bkz http://en.wikipedia.org/wiki/IEEE_floating_point fazla bilgi için.

Bu, temel olarak, yüzenlere tam sayılar eklemenizi sağlayan ve bunun bir sonuç olduğunu gösteren herhangi bir dilde çalışacaktır.


6

İşte operatör aşırı yüklemesine dayanan C ++ çözümü. Bir enumile bir arasında örtülü dönüştürmeye dayanır 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;
}

Sen kullanabilirsiniz std::boolalphayerine ?:.
Jon Purdy

5

Kod zorluğunun olduğunu biliyorum ... ama ben golf oynamıştım. Üzgünüm.

Ruby - 13 karakter - Infinity çözümü

x=1e17;x==x+2

doğru döndürür

Ruby - 41 karakter - Op Aşırı Yükleme çözümleri

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

veya

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

5

Bu soruyu biraz kullanmam uygunsa, biraz daha Java ekleyeceğim. İşin püf noktası elbette yeni değil, ama bunun Java'da mümkün olması ilginç.

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));
}

Ve sonuçlar:

(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

Bu VBScript çözümü, JavaScript çözümüme benzer şekilde çalışıyor. Önişlemci kullanmadım, ancak çözüm önemsiz görünüyor.

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

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

Ben de sizinkini görene kadar aynı çözümü yakutta gönderecektim - bu mümkün çünkü her iki dil de parantezlerin atlanmasına izin veriyordu.
waldrumpus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.