ref: http://www.kmonos.net/wlog/96.html#_2319090427
C 言語ならすでに書けますよね。100 年後の C コンパイラならきっと最適化してくれる。
void toss(int x, int y) { } int head(int *p) { *p = 1; return 0; } int tail(int *p) { *p = 0; return 0; } int cointoss(void) { int n; toss(head(&n), tail(&n)); return n; } int where_is_the_max_element(int *arr, int len) { int i, max_i = 0; for (i = 1; i < len; ++i) if (arr[max_i] < arr[i] || (arr[max_i] == arr[i] && cointoss())) max_i = i; return max_i; }
ただ、これで本当に cointoss() が 0 か 1 を返すと保証されるかどうかはよくわからないし確かめてない。sequence point がどうのこうの?