Good morning! It’s 5:32 and I haven’t slept yet, not because that I can’t sleep, but there is an interesting problem that I like to work on (though it’s not important at all!).

1. Write ABS function which takes an integer N as input and return the absolute value of N. Your function should be one-liner (one statement) and may contain only +, -, *, /, (, ), numbers, and variable (ie. N). You’re not allowed to call any other functions (including built-in functions).

2. Write MAX function which takes two integers A and B as input and return the largest value between A and B. Your function should also be one-liner and may contain only +, -, *, /, (, ), numbers, and variables (ie. A and B). You’re allowed only to call one function: ABS.

It took me a while to figure out how to write such ABS function. I googled several sites and found only ABS function that exploit negative numbers’ representation in computer, which means it needs bitwise operator such as << and >> (breaking the rule!), and there’s also compiler problem (16-bit or 32-bit).

Here is my solution for ABS:

int abs(int n) { return n * ((2 * ((n*n+n)/(n*n+1))) - 1); }

The key idea is to multiply n by 1 if n > 0, and multiply n by -1 if n ≤ 0. Then the problem is, how to map any n > 0 into 1 while any n by -1 if n ≤ 0 will be mapped into -1 by the same operation?

n^{2} + n :: always give a non-negative result for any integer n.

n^{2} + 1 :: always give a positive result for any integer n (it’s important to have a non-zero function as denominator).

(n^{2} + n) / (n^{2} + 1) :: always give 1 if n > 0, because (p^{2} + p) ≥ (p^{2} + 1) and (p^{2} + p) < 2 * (p^{2} + 1) for any positive integer p (n = p).

(n^{2} + n) / (n^{2} + 1) :: always give 0 if n ≤ 0, because (p^{2} – p) < (p^{2} + 1) and 0 ≤ (p^{2} – p) for any non-negative integer p (n = -p).

From (n^{2} + n) / (n^{2} + 1), we will receive either 1 (if n > 0) or 0 if (if n ≤ 0). Mapping {1, 0} into {1, -1} is an easy task :-D.

For the second question (MAX), there is a simple solution which use ABS function:

int max(int a, int b) { return (a + b + abs(a - b)) / 2; }

I’d like to know if there is any easier way to do ABS or MAX, but I can’t think straight right now… okay, good night!!

EDIT: grammar (flanflygirl)

Woow…excellent article!!

tidak sia2 ilmu algorithmny π

good luck my teacher!! n always be better man…

wah grammar nya diedit si fio

…………………………………………….. swt

suuuuuuuuuuuuuu…..

miss u……huhuhuhuhuhu kmana aja engkau…

@flanflygirl: super wultra tremendous?

@OnO: i’m here π

pas bener lo reply nya tgl 23…hehehe ^^ dah ga d binus lagi ya?

klo model gini boleh?

inline int abs(const int n)

{

return (n b) ? a : b;

}

sori submit lagi, postingan sebelumnya formatnya kacau.

inline int abs(const int n)

{

return (n b) ? a : b;

}

apa nih? ga bisa dicompile. itu syntaxnya dah bener? (bisa ga declare a dan b gitu)