SB CSE 675
Fall 2000
Program Transformation and Program Analysis
Annie Liu
Solution 7
Handout S7
Nov. 8, 2000

Problem 1.

a. sequence from greedy: 100000111101, number of color changes: 4

b. better sequence: 001110000111, number of color changes: 3

Problem 2.

a.

list* cons(int a, list* b) {
  list* cell = (list *)malloc(sizeof(list));
  cell->car = a;
  cell->cdr = b;
  return cell;
}

int least(list* x) {
  list* xdot = x;
  list* s = NULL;
  int r;
  while (1) {
    if (xdot->cdr == NULL) {
      r = xdot->car;
      break;
    } else {
      s = cons(xdot,s);
      xdot = xdot->cdr;
    }
  }
  while (xdot != x) {
    xdot = s->car;
    s = s->cdr;
    r = (xdot->car < r) ? xdot->car : r;
  }
  return r;
}

b.

int least(list* x) {
  list* xdot = x;
  list* s = NULL;
  int r;
  while (1) {
    if (xdot->cdr == NULL) {
      r = xdot->car;
      break;
    } else {
      list* tmp = xdot->cdr;
      xdot->cdr = s;
      s = xdot;
      xdot = tmp;
    }
  }
  while (xdot != x) {
    list* tmp = s->cdr;
    s->cdr = xdot;
    xdot = s;
    s = tmp;
    r = (xdot->car < r) ? xdot->car : r;
  }
  return r;
}