Re: "どちらでもいい"

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 がどうのこうの?