#include <iostream>
#include "VList.h"

using namespace std;

template <class Object> void eliminaPos (int pos, VList<Object> & lista) {
  VListItr<Object> itr = lista.first();
  for (int i = 0; i < pos; i++) 
    itr.advance();
  lista.remove(itr.retrieve());
}

int npalavras(string frase) { 
  if (frase.length()==0) return 0; 
  int n=1; 
  int pos = frase.find(" "); 
  while (pos != string::npos) { 
    frase = frase.substr(pos+1); 
    pos = frase.find(" "); 
    n++; 
  } 
  return n; 
}

class Crianca { 
  string nome; 
  int idade; 
 public: 
  Crianca(): nome(""), idade(0) {} 
  Crianca(string nm, int id): nome(nm), idade(id) {} 
  bool operator == (const Crianca &c2) const { return (nome==c2.nome); } 
  bool operator != (const Crianca &c2) const { return (nome!=c2.nome); } 
  int getIdade() const { return idade; } 
  string getNome() const { return nome; } 
  void escreve() { cout << nome << " : " << idade << endl; } 
};

Crianca perdeJogo (string frase, VList<Crianca> lista) {
  while (lista.howMany() > 1)
    eliminaPos((lista.howMany()-1) % npalavras(frase), lista);
  return lista.first().retrieve();
}

VList<Crianca> inverte (const VList<Crianca> lista) {
  VList<Crianca> lstInv;
  VListItr<Crianca> itr = lista.first();
  while (!itr.isPastEnd()) {
    lstInv.insert(itr.retrieve(), 0);
    itr.advance();
  }
  return lstInv;
}

VList<Crianca> divide (int id, VList<Crianca> & lista) {
  VList<Crianca> remLst;
  VListItr<Crianca> itr = lista.first();
  while (!itr.isPastEnd()) {
    if (itr.retrieve().getIdade() > id) {
      remLst.insert(itr.retrieve(), 0);      // inserir na nova lista
      lista.remove(itr.retrieve());          // remover da original
    } else {
      itr.advance();
    }
  }
  return remLst;
}

template <class Object>
VList<Object> baralha (const VList<Object> &lista) {
  VList<Crianca> lstBar;
  for (VListItr<Crianca> itr = lista.first(); !itr.isPastEnd(); itr.advance()) {
    lstBar.insert(itr.retrieve(), (rand()%lista.howMany())+1);
  }
  return lstBar;
}

int main () {
  return 0;
}

