(x == x + 2)는 언제입니까? [닫은]


90

도전 과제 : x표현식 (x == x+2)이 참으로 평가 되는 방식으로 정의하십시오 .

질문에 C 태그를 달았지만 다른 언어의 답변은 창의적이거나 흥미로운 언어 측면을 강조하는 한 환영합니다.

C 솔루션을 수락하려고하는데 다른 언어로 투표 할 수 있습니다.

  1. 올바른-표준 호환 구현에서 작동합니다. 예외-기본 유형의 구현을 가정하는 경우, 일반적인 구현 인 경우 (예 : int32 비트 2의 보수 라고 가정 ) 괜찮습니다.
  2. 단순-기본 언어 기능을 사용해야합니다.
  3. 흥미 롭습니다. 주관적입니다. 흥미로운 점에 대한 몇 가지 예가 있지만 힌트를 드리고 싶지 않습니다. 업데이트 : 전처리기를 피하는 것이 흥미 롭습니다.
  4. 빠름-첫 번째 정답이 수락됩니다.

60 답변을 얻은 후에 (나는 그런 예견을 예상하지 못했습니다), 요약하면 좋을 것입니다.

60 개의 답변은 7 개의 그룹으로 나뉘며 그 중 3 개는 C로 구현되고 나머지는 다른 언어로 구현 될 수 있습니다.

  1. C 전 처리기 #define x 2|0제안되었지만 다른 많은 가능성이 있습니다.
  2. 부동 소수점. 많은 수, 무한대 또는 NaN이 모두 작동합니다.
  3. 포인터 산술. 거대한 구조체에 대한 포인터는 2를 추가하여 줄 바꿈합니다.

    나머지는 C와 함께 작동하지 않습니다.

  4. 연산자 오버로딩- +추가하지 않거나 A ==가 항상 true를 반환합니다.
  5. 만들기 x함수 호출 (일부 언어가없이 허용 x()구문). 그러면 매번 다른 것을 반환 할 수 있습니다.
  6. 1 비트 데이터 유형 그런 다음 x == x+2 (mod 2).
  7. 변경 2-일부 언어로 할당 0할 수 있습니다.

29
4. Quick? 당신은 "누군가를 알고이 질문을 먼저 읽을만큼 운이 좋은가?"를 의미합니까?
Luc

6
@ugoren 커뮤니티가 투표하도록하고 (좋아하는 사람들에게 투표) 7 일 정도 후에 최고 답변을 선택하십시오.
Luc

3
가능성 2 : NaN 작동 하지 않습니다 . NaN + 2는 다시 NaN이지만 NaN == NaN은 false입니다.
Martin B

2
스칼라 솔루션 (여기서 x는 '2'를 포함하는 세트이며 add to Set표준 라이브러리는 + +자체 정의를하지 않고 + )을이 7 가지 범주 IMHO에 맞지 않습니다.
사용자가 알 수 없음

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
Ahh 좋은 오래된 나누기 0으로. 인정하고 싶은 것보다 더 오래 걸렸습니다. haha
Grant

Argh, 나는 이것에도 불구하고 Windows에서 컴파일되지 않으므로 삭제했습니다. :( +1이지만
Tudor

x = 1e999가 다른 방법입니다.
shiona

4
@shiona float x=1e20는 충분할 것입니다
l0n3sh4rk

125

포트란 IV :

2=0

이 후 프로그램의 모든 상수 2는 0입니다. 날 믿어, 난 이걸 해냈어 (25 년 전)


23
Fortran을 절대 만지지 않는 더 많은 이유.
C0deH4cker

3
적어도 경고가 발생합니까?
Michael Stern

15
@MichaelStern 경고 : 2의 가치를 바꾸고 있습니다!
Cruncher

100

이것은 작동하는 것 같습니다 :

#define x 2|0

기본적으로 식은로 확장됩니다 (2|0 == 2|(0+2)). 매크로를 정의 할 때 괄호를 사용해야하는 좋은 예입니다.


3
확실히 작동하며, 이것이 가장 우아한 전 처리기 기반 솔루션이라고 생각합니다. 그러나 나는 전임자가없이하는 것이 더 흥미 롭다고 생각합니다.
ugoren

그것을 그냥 날 또는한다인가 2|(0+2)1?
phunehehe

1
@phunehehe : |비트 OR은 ; ||논리 OR입니다.
PleaseStand

20
이것은 어떻게 든 작은 바비 테이블을 생각 나게합니다.
vsz

1
@rakeshNS : 연산자 우선 순위 를 표시하기 위해 괄호 세트를 추가했습니다 . 그래서 제가 "기본적으로"라고 말했습니다.
PleaseStand April

79

Brainfuck

x

Brainfuck에서는 실제로 아무것도 평가 하지 않으므로 테이프 만 조작하면됩니다. 하지만 이제 식을 추가하면

x
(x == x+2)

이 프로그램은

+

(모든 것이기 때문에 <>+-[],.주석입니다). 현재 위치의 가치를 높이는 것 외에는 아무것도 없습니다. 테이프는 모두 0으로 초기화되므로 커서 위치에서 1로 끝납니다. 이는 "true"를 의미합니다. 이제 조건부 섹션을로 시작하면 []입력 / 루프됩니다.


12
+1 규칙을 가장 창의적으로 구부려 야합니다.
ninjalj 2018

3
왜 필요한 x가요?
James

3
@James x여기서 x정의하는 것은 다음과 같이 정의됩니다 x.
user80551

1
@James 대답은need+
Cruncher를

56

에프#

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

13
난이게 좋아. 대신 저글링 번호, 단순히 ==의 의미를 재정의
evilcandybag

4
잠깐만 요, F #의 등식 연산자는 간단하지 =않습니까? ==기본적으로 정의되어 있지 않습니다.
Jwosty

50

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

참고 : 경우 작동하지 않을 수 있습니다 FLT_EVAL_METHOD != 0(아래 주석 참조).


24
실제 애플리케이션의 경우 +1 너무 많은 사람들이 부동 소수점 수학을 이해하지 못합니다.
Tim S.

1
@ mbomb007 : 나는 그들이 다르다고 생각합니다-당신이 연결하는 대답은에 의존 INF + 2 == INF하지만, 내 대답은 2가 하나의 ULP보다 작을 정도로 충분히 큰 단일 정밀도 부동 소수점을 사용합니다.
Paul R

2
@ mbomb007 : 나는 그들이 매우 다르다고 생각합니다- ∞ + 2 = ∞누구나 이해할 수 있고 컴퓨터에 특정한 것에 의존하지 않는 반면, 구체적인 숫자에 2를 더하고 효과가없는 것은 조금 더 놀랍고 제한된 정밀도에 한정됩니다 컴퓨터와 더 흥미로운 IMHO
GoatInTheMachine

1
FLT_EVAL_METHOD == 1수학이 다음과 같이 수행 되면 쉽게 실패 할 수 있습니다 double. 심지어 초과해야 더 큰 FP 값 추천 long double같은 정밀도1.0e37f
chux

1
@ chux : 확인 주셔서 감사합니다-내 코드의 많은 부분이 크로스 플랫폼이기 때문에 앞으로 조심해야 할 것이 있습니다.
Paul R

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
이 게시물에 대해 '좋은 답변'배지를 받았습니다. EVIL 물건에 대한 배지를 얻는가? 집에서이 작업을 수행하지 마십시오 !
fjdumont

사악하지만 너무 아름다워요.
Kevin

32

스칼라 : { val x = Set(2); (x == x + 2) }


Haskell :Bool eans 에서 ℤ / 2ℤ 정의 :

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

그럼 x :: Bool우리는 가질 것이다 x == x + 2.

업데이트 : 의견에 대한 아이디어 덕분에 인스턴스를 적절하게 업데이트했습니다.


3
당신은 단순화 할 수 있습니다 :fromInteger = odd
Rotsor

1
또한 내가 믿는 (+)대로 정의 할 수 있습니다 (/=).
MatrixFrog

2
더 짧은 해결책은의 인스턴스를 만드는 것입니다 ().
Thomas Eding 2016 년

31

파이썬

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

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

좋은. 연산자 오버로딩을 지원하는 모든 언어는 유사한 솔루션을 사용할 수 있지만 C는 그중 하나가 아닙니다.
ugoren

또한 오버로드 __cmp__와 같이 작동합니다 class X(int):__cmp__=lambda*x:0(또는 __eq__약간 더 길지만class X(int):__eq__=lambda*x:True
dr jimbob 님이

int ..에서 확장하지 않으면 몇 문자가 짧아집니다.class X:__add__=lambda s,o:s
Doboy

곱셈이 무엇인지 물어봐도 될까요?
seequ

2
@TheRare 실제로 곱셈이 아닙니다. __add__일반적으로 여러 인수 ( lambda x,y:)가 주어 지기 때문에 *를 사용하여 모든 인수를 튜플 ( lambda *y:)에 묶어 일부 문자를 저장 합니다. 자세한 내용은 문서 를 참조하십시오.
grc

31

GNU C 는 멤버가없고 크기가 0 인 구조를 지원합니다.

struct {} *x = 0;

2
아주 좋아요! 랩 어라운드로 이어지는 매우 큰 데이터로 포인터 산술에 대해 생각했지만 그 반대는 생각하지 않았습니다.
ugoren

26

PHP :

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

또는:

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

산출:

부울 (참)


1
나는 실제로이 간단한 간단한 PHP 답변을 찾으려고 노력했지만 당신은 나를 이겼습니다.
PleaseStand

25

C에서 공백은 중요하지 않다는 일반적인 오해입니다. 누군가 GNU C에서 이것을 생각해 냈다고 상상할 수 없습니다.

#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
@ugoren 감사합니다! 이 모든 것을 한 줄에 표시하려면 LINE 대신 COUNTER을 사용하십시오 . 그래도 GCC 4.3 이상이 필요합니다.
H2CO3

1
_CAT예약 식별자입니다. 밑줄로 시작 아무것도하고, 대문자는 C로 예약되어 있습니다
콘라드 보로프스키에게

정확히 맞은 @xfix, UB를 제거하도록 업데이트되었습니다.
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. 아니, 아직도 믿지마
MSalters

@MSalters : 어떤 컴파일러를 사용하십니까? trigraphs를 사용하지 않도록 설정했을 수 있습니다.
vsz

VS2010. trigraphs가 기본적으로 비활성화되어있을 수 있습니다. 그 또는 라인 연결이 작동하지 않습니다??\
MSalters

MSalters : trigraph ??\ 는 단일로 변환 \ 되므로 ??\ . 그러나 일부 최신 컴파일러는 활성화되어 있어도 기본적으로 3 가지 그래프와 줄 연결에 경고를 표시합니다.
vsz

18

매스 매 티카 :

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

이 솔루션은 Mathematica의 Up Values ​​개념을 사용하기 때문에 참신하다고 생각합니다 .

편집하다:

Mathematica 에서 Up Values의 의미를 설명하기 위해 답변을 확장하고 있습니다.

첫 번째 줄은 기본적으로 기호에 대한 추가를 재정의합니다 x. +기호 와 관련된 전역 함수에 이러한 정의를 직접 저장할 수는 있지만 재정의가 Mathematica의 내장 알고리즘을 통해 예기치 않게 전파 될 수 있기 때문에 이러한 재정의는 위험 할 수 있습니다 .

대신 태그를 사용하여 x/:정의를 기호와 연관 시켰습니다 x. 이제 Mathematica 가 기호를 볼 때마다 기호 가 다른 기호의 널 (null) 시퀀스를 의미하는 형식의 패턴으로 x추가 연산자에 의해 조작되는지 여부를 확인합니다 .+x + 2 + ______

이 재정의는 매우 구체적이며 Mathematica의 광범위한 패턴 매칭 기능을 활용 합니다. 예를 들어, 표현 x+y+2을 반환 x+y하지만, 표현의 x+3반환 x+3; 전자의 경우 패턴을 일치시킬 수 있지만 후자의 경우 추가 단순화없이 패턴을 일치시킬 수 없기 때문입니다.


1
그것이 무엇을하는지 설명해야한다고 생각합니다. 대부분의 사람들은 Mathematica (또는 Up Values)를 모른다.
ugoren

1
@ugoren에게 감사합니다. Mathematica Stack Exchange 웹 사이트에서 대부분의 시간을 보내므로 내 예가 의미있는 이유를 설명하는 것을 잊었습니다. 나는 개념을 간결하게 설명하는 편집을했다.
Carl Morris

17

자바 스크립트 :

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

피들 테스트


2
당신은 사용할 수 있습니다 Infinity, 또는 -Infinity, 이로 인해 당신의 바로 가기를 사용할 수 있습니다 x = 1/0.
zzzzBov

6
@zzzzBov : 확실히 더 나은 코드 골프입니다. 나는 선택 (99999999999999999 == 99999999999999999+2)나는 그것이보다 좀 더 흥미로운 생각하기 때문에 (Infinity == Infinity+2)영업 이익이 :) "는 주관적이다"라고으로하지만,
Briguy37

이것은 내가 (프로그래밍 수수께끼 외에) 좋은 이유에 대해이 같은 검사를보고있는 유일한 실제 사건 : A (부동 기반) 교수-기능에 의해 아래로 계산 너무 큰 것에 대해 입력을 확인했다 -1및 재귀 . 언어 자체는 파이썬 이었지만 실제로는 중요하지 않습니다.
Alfe

5
@NicoBurns not ture :(
ajax333221

2
콘솔에서 해당 코드를 실행하면 @NicoBurns가 생성됩니다 false. JS에 대한 정보를 얻는 곳이 잘못되어 신뢰할 수 없습니다.
zzzzBov

17

계획

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

좋은. Scheme (x == x + 2)은 C와 비슷하지만 완전히 다른 것을 의미합니다.
ugoren

1
이제해라 (= x 2).
Joe Z.

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

@ugoren 이것은이 프로그램에 의해 이것을 수행하도록 정의됩니다. x는 여기서 단순히 함수의 이름입니다. ==
Cruncher

16

명백한 답변 :

이것이 종료되면 :

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

1
+1 meta.codegolf.stackexchange.com/a/1070/8766 그러나 이것은 실제로 독창적입니다.
user80551

1
while(!(x == x+2)) {}좀 더 정신적 이라고 생각합니다
Cruncher

이 답변은 해당 메타 게시물보다 2 년 앞서 있습니다. 오늘날 진부한 것으로 간주되는 모든 것은 언젠가는 소설이었습니다.
daniero

16

여기에 이용하지 않는 자바 스크립트를위한 솔루션 Infinity-Infinity부동 소수점 또한 가장자리 경우가. Internet Explorer 8 이하 또는 옵트 인 ES5 엄격 모드에서는 작동하지 않습니다. 나는 with성명서와 getters 특히 "고급"기능을 호출하지 않을 것 입니다.

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

추가 편집 : 위의 트릭은 JavaScript에서 골프를 치기위한 팁 에서 Andy E 와이 페이지의 jncraton 에 의해 언급 된 것처럼 withand 을 사용하지 않고도 가능 합니다.get

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

좋은 개념- x변수 읽기처럼 보이지만 함수 호출이 가능합니다. 왼쪽에서 오른쪽으로 평가 순서를 가정하지만 C와 달리 JS로 지정되었으므로 괜찮습니다.
ugoren

14

다음은 표준을 준수하는 C 가 아니지만 거의 모든 64 비트 플랫폼에서 작동해야합니다.

int (*x)[0x2000000000000000];

원칙적으로는 좋지만 잘못 구현 된 것 같습니다. x2 ^ 61 단계로 증가하므로 x + 8같을 것 x입니다.
ugoren

@ugoren, 그것은 4 바이트 리눅스에서 나를 위해 작동합니다 int.

당신 말이 맞아요 배열이 int아닌 배열이라는 사실을 놓쳤습니다 char.
ugoren

10

세이지:

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

True를 반환

일반적으로 GF (2 ** n)의 경우 모든 x에 대해 x = x + 2 인 것이 항상 사실입니다.

이것은 버그가 아니며 오버플로 또는 무한대의 문제입니다. 실제로 정확합니다.


1
동일한 트릭이 PARI / GP와 작동
Hagen von Eitzen

10

공통 리스프

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

x실제 가치가 될 필요가 없을 때 매우 쉽습니다 .


8

APL (Dyalog)

X←1e15
X=X+2

APL은 무한대도 없으며, 수레가 1.000.000.000.000.000와 의 차이를 알기에 충분히 정확하지 않다는 것 1.000.000.000.000.002입니다. 이것은 내가 아는 한 APL에서 이것을 수행하는 유일한 방법입니다.


부동 소수점 정밀도를 이용하는 첫 번째 답변이기 때문에 나는 이것을 정말로 좋아합니다.
AndrewKS

1
@AndrewKS : 실제로 Paul R은 조금 더 일찍입니다.
MSalters

8

펄 6

전에이 솔루션을 보지 못한 것에 놀랐습니다. 어쨌든, 솔루션입니다 - 어떤 경우 x입니다 02한 번에? my \x이 예제에서는 sigilless 변수를 선언합니다.이 질문은 xPerl 스타일이 아니라 묻습니다 $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

Python 2.X ((캐시 된) 정수 재정의 사용)

모든 파이썬 답변에 +연산자 를 재정의하는 클래스가 정의되어 있습니다. 파이썬의 유연성에 대한 더 낮은 수준의 데모로 대답하겠습니다. (이것은 python2 전용 스 니펫입니다)

파이썬에서 정수는 C에 다음과 같이 다소 저장됩니다.

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

즉, 가진 구조체이다 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

패키지 변수에 부작용이있는 서브 루틴 사용 :

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

산출: true!


1
sub x{}"작동".. (적어도 내 5.10.1에서), 그러나 나는 이유를 알 수 없습니다.
mykhal

2
때문에 sub x{}숫자 제로인 둘 미확정 또는 빈 목록 중 하나를 반환합니다. 그리고 x + 2는 x (+2)로 해석됩니다. perl -MO=Deparse공개print "true\n" if x() == x(2);
Perleone

@mykhal과 @Perleone는 대단합니다!
memowe

7

파이썬

부동 소수점 정밀도를 이용하면 매우 간단합니다.

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

특정 시스템을 줄이려면 추가 가져 오기가 필요합니다

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

이것은 다른 언어에서도 작동합니다. 부동 소수점이 기계 내부에 표시되는 방식 때문에 100000000000000000.0과 100000000000000002.0의 표현이 기계에 대해 정확히 동일하기 때문에 작동합니다. 자세한 내용 은 http://en.wikipedia.org/wiki/IEEE_floating_point 를 참조하십시오.

따라서 이것은 기본적으로 모든 언어에서 작동하여 부동 소수점에 정수를 추가하고 결과를 부동 소수점으로 만들 수 있습니다.


6

연산자 오버로딩에 기반한 C ++ 솔루션입니다. 은에서에서로 암시 적 변환에 의존 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대신 사용할 수 있습니다 ?:.
Jon Purdy

5

코드 도전이라는 것을 알고 있지만 골프를 쳤습니다. 죄송합니다.

루비-13 자-무한 솔루션

x=1e17;x==x+2

true를 반환

루비-41 자-Op 과부하 솔루션

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

질문을 조금만 사용해도 괜찮다면 새로운 Java를 추가하겠습니다. 트릭은 새로운 것이 아니지만 Java에서 가능하다는 것이 흥미 롭습니다.

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

이 VBScript 솔루션은 JavaScript 솔루션과 유사하게 작동합니다. 전처리기를 사용하지 않았지만 솔루션은 사소한 것 같습니다.

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

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

나는 당신을 볼 때까지 루비로 동일한 솔루션을 게시하려고했습니다. 두 언어 모두 괄호를 생략 할 수 있기 때문에 가능합니다.
waldrumpus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.