Cod sursă (job #294448)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu IP ascuns
Problemă Bizar (clasele 9-10) Compilator c | 0.79 kb
Rundă Arhiva de probleme Status evaluat
Dată 19 mar. 2017 23:32:13 Scor 100
#include <ctype.h>
#include <stdio.h>

#define MAX_LEN 100000

int st[MAX_LEN / 2], ss;
int peek;
FILE *f;

int consume() {
  int result = peek;
  do {
    peek = fgetc(f);
  } while (isspace(peek));
  return result;
}

int E();

void L() {
  st[ss++] = E();
  while (peek == ',') {
    consume();
    st[ss++] = E();
  }
}

int E() {
  int r = 0;
  while (isdigit(peek)) {
    r = r * 10 + (peek - '0');
    consume();
  }

  int ssSave = ss;
  while (peek == '(') {
    consume();
    L();
    consume();
    r = st[ssSave + (r - 1) % (ss - ssSave)];
    ss = ssSave;
  }

  return r;
}

int main(void) {
  f = fopen("bizar.in", "r");
  consume();
  int result = E();
  fclose(f);

  f = fopen("bizar.out", "w");
  fprintf(f, "%d\n", result);
  fclose(f);
}