Discussion about math, puzzles, games and fun.   Useful symbols: ÷ × ½ √ ∞ ≠ ≤ ≥ ≈ ⇒ ± ∈ Δ θ ∴ ∑ ∫ • π ƒ -¹ ² ³ °

You are not logged in.

|
Options

Kargoneth
2008-03-28 17:03:36

y = x XOR y
x = x XOR y
y = x XOR y

mikau
2008-02-28 08:19:26

#### TheDude wrote:

I'd be wary of using that one line solution, since it can be interpretted two different ways by the compiler.  If it evaluates right to left then it will set x = y first, then subtract that from x + y, which is now y + y, and you'll end up with y = y and x = y.  Of course, I realize that you aren't suggesting actually using such code, but I thought that should be pointed out.

I suppose it might be interpreted different ways by different compilers, but my understanding of parenthesis is that inner most parens are always evaluated first, thats why i have doubled parens around x + y. So I'm PRETTY sure this would work on any correct compiler.

TheDude
2008-02-28 00:09:07

I'd be wary of using that one line solution, since it can be interpretted two different ways by the compiler.  If it evaluates right to left then it will set x = y first, then subtract that from x + y, which is now y + y, and you'll end up with y = y and x = y.  Of course, I realize that you aren't suggesting actually using such code, but I thought that should be pointed out.

mikau
2008-02-27 10:15:08

the purpose of this puzzle is by no means to save memory or time, its just a puzzle for fun.

However, what I like about TheDude's method is you could use it in assembly to swap the values in two registers without having to use an extra one. Pretty cool!

Does anyone else have any fun code wielding challenges? post them here!

luca-deltodesco
2008-02-27 09:42:10

does this actually use less memory though?

if you use the normal method of copying it into a temporary variable, you use 3 int size's memory.

if you use your solution you still have to use at minimum, 3 int size's memory

its still interesting to see things like this though is it possible to not use any extra memory? perhaps with a restriction on the values of the integers.

mikau
2008-02-27 09:06:52

hehehe!

Well here's

for how to do it in one line.

Ricky
2008-02-27 06:25:14

I was going to do inline assembly, bu then I remembered how much work it would be to look up register names and the like.

mikau
2008-02-27 04:43:55

that was quick!  good job, thedude!

Now, can you do it in one line of code?

TheDude
2008-02-27 04:42:06

int x = a;
int y = b;

x = x + y;
y = x - y;
x = x - y;

mikau
2008-02-27 04:35:45

here's something i thought of today at school

suppose you have two integer values a and b stored in two int variables x and y

int x = a;
int y = b;

normally, if we want to swap the values in these two variables, we need to instantiate a temporary variable to save one of the values during the swap

int temp = x;
x = y;
y = temp;

BUT can YOU think of a way, in Java or C++, to swap the two int values without creating an additional variable?

You may use as many lines of code as you wish but you may not use loops or if statements or the like. You may not call any predefined functions of course. You may use boolean, arrithmetic or logical operators if you wish.

I have tested my solution in both C++ and java to make sure they worked.