[Noti-aed] TPL 3

Facundo Furlan facundofurlan7 en gmail.com
Jue Nov 10 21:13:31 -03 2022


------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://venus.santafe-conicet.gov.ar/pipermail/noti-aed/attachments/20221110/1d32d920/attachment.html>
------------ próxima parte ------------
#define USECHRONO
#undef HAVE_MPI

#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
using namespace aed;
using namespace std;


//---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
// COMPLETAR DNI y NOMBRE AQUI:
// Nombre: Furlan Facundo Ivan
int DNI=44000398;

bool esPrimo(int numero) {
  if (numero == 0 || numero == 1 || numero == 4){
    return false;
  }
  for (int x = 2; x < numero / 2; x++) {
    if (numero % x == 0) return false;
  }
  return true;
}
  
void setUnion(set<int> &A,set<int> &B, set<int> &C){
  for(auto x : A){
    C.insert(x);
  }
  for(auto x : B){
    C.insert(x);
  }
}

void set_prime(vector<set<int>> &VS, set<int> &S)
{
  
  for(auto x : VS){
    int contadorPrimos = 0;
    for(auto y : x){
      if(esPrimo(y)){
        contadorPrimos++;
      }
    }
    if(contadorPrimos >= 1){
      set<int> Saux = S;
      setUnion(x,Saux, S);
    }
  }
}


//---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
int main() {
  Eval ev;
  int vrbs=0;
  ev.eval<1>(set_prime,vrbs);
  return 0;
}
------------ próxima parte ------------
#define USECHRONO
#undef HAVE_MPI

#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
using namespace aed;
using namespace std;


//---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
// COMPLETAR DNI y NOMBRE AQUI:
// Nombre: Furlan Facundo Ivan
int DNI=44000398;

void show_set(set<int> S)
{
  cout << "{";
  for (auto i:S)
  {		
    cout << i ;
    cout << ", ";
  }
  cout << "}, ";
}

void  show_set_list(list<set<int>> &LK)
{
  cout << "[";
  for (auto i:LK)
    show_set(i);
  cout << "]" << endl;
}

void subk(set<int> &S, int k, set<int> C, set<int>::iterator itS, list<set<int>> &LK) 
{
  if (itS == S.end()) return;
  if (k == 0) { LK.insert(LK.begin(),C); return;}
  
  set<int> D = C;	
  
  C.insert(C.end(), *itS);						
  itS++;							
  
  if (C.size() == k)
    LK.insert(LK.end(),C);	
  
  subk(S,k,C,itS,LK);		
  
  subk(S,k,D,itS,LK);							
  
}


list<set<int>> subk(set<int> &S, int k) 
{	
  set<int> C;
  C.clear();
  
  list<set<int>> LK;		
  set<int>::iterator itS = S.begin();		
  subk(S,k,C,itS,LK);
  return LK;	
}

list<set<int>> Obtener_todos_subsets(set<int> &S){
  int tamanio = S.size();
  list<set<int>> Resultado;
  set<int> vacio;
  Resultado.insert(Resultado.begin(),vacio);
  
  for(int i=1;i<tamanio;i++) { 
    list<set<int>> aux = subk(S,i);
    for(auto x : aux){
      bool repetido = false;
      for(auto y:Resultado){
        if(y == x){
          repetido = true;
        }
      }
      if(!repetido and !x.empty()){
        Resultado.push_back(x);
      }
    }
  }
  return Resultado;
}
int getmax(set<int> A){
  int max = -999999;
  for(auto x : A){
    if (x > max){
      max = x;
    }
  }
  return max;
}
bool relacion(set<int> A, set<int> B){
  if(!A.empty() and B.empty()){
    return true;
  }
  if(A.empty() and !B.empty()){
    return false;
  }
  if(A.empty() and B.empty()){
    return false;
  }
  if(getmax(A) > getmax(B)){
    return true;
  }
  if(getmax(A) < getmax(B)){
    return false;
  }
  if(getmax(A) == getmax(B)){
    A.erase(getmax(A));
    B.erase(getmax(B));
    if(relacion(A,B)){
      return true;
    }
  }
  return false;
  
}

float promset(set<int> A){
  if(!A.empty()){
    float suma = 0;
    for(auto x : A){
      suma = suma + x;
    }
    float promAll = suma/A.size();
    return promAll;
  } else {
    return 0;
  }
}
  
void get_largest_subset(set<int> &S, set<int> &C)
{
  //COMPLETAR!
  list<set<int>> TodosSubsets = Obtener_todos_subsets(S);
  float promAll=promset(S);
  cout << promAll << endl;
  set<int> promMasCercano;
  float mejordif = 99999;
  for(auto x : TodosSubsets){
    float promAux = promset(x);
    float difxd = promAll-promAux;
    if(difxd < 0){
      difxd = (difxd * (-1));
    }
    float dif = difxd;
    if (dif == mejordif){
      if(relacion(x,promMasCercano)){
        promMasCercano = x;
      }
    }
    if (dif<mejordif){
      mejordif = dif;
      promMasCercano = x;
    }
    cout << mejordif << endl;
  }
  C = promMasCercano;
  
  
  
}


//---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
int main() {
  Eval ev;
  int vrbs=0;
  ev.eval<1>(get_largest_subset,vrbs);
  
  return 0;
}
------------ próxima parte ------------
#define USECHRONO
#undef HAVE_MPI

#include "eval.hpp"
#include <cassert>
#include <climits>
#include <cstdlib>
#include <stack>
using namespace aed;
using namespace std;

bool even(int x) { return x%2==0; }
bool odd(int x) { return x%2; }
bool ge7(int x) { return x>=7; }
bool le3(int x) { return x<=3; }
bool div4(int x) { return x%4==0; }
bool isprime(int x) { return is_prime(abs(x)); }
bool isnotprime(int x) { return !is_prime(abs(x)); }

//---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
// COMPLETAR DNI y NOMBRE AQUI:
// Nombre: Furlan Facundo Ivan
int DNI=44000398;

void fillbalance(btree<int> &B, list<int> &L, btree<int>::iterator it){
  if(L.size() == 0){
    return;
  }
  if(L.size() == 1){
    it = B.insert(it, (*(L.begin())));
    return;
  }
  if(L.size()>1){
    int n = L.size()/2;
    list<int> ListaIzquierda;
    list<int>::iterator itaux = L.begin();
    for(int i=0;i<n;i++) { 
      ListaIzquierda.push_back(*itaux);
      itaux++;
    }
    it = B.insert(it,(*itaux));
    itaux++;
    list<int> ListaDerecha;
    while(itaux != L.end()){
      ListaDerecha.push_back(*itaux);
      itaux++;
    }
    fillbalance(B,ListaIzquierda,it.left());
    fillbalance(B,ListaDerecha,it.right());
  }
}

void fillbalance(btree<int> &B,list<int> &L) {
  // COMPLETAR AQUI...
  if(L.size() == 0){
    return;
  }
  if(L.size() == 1){
    B.insert(B.begin(), (*(L.begin())));
    return;
  }
  if(L.size()>1){
    int n = L.size()/2;
    list<int> ListaIzquierda;
    list<int>::iterator itaux = L.begin();
    for(int i=0;i<n;i++) { 
      ListaIzquierda.push_back(*itaux);
      itaux++;
    }
    B.insert(B.begin(),(*itaux));
    itaux++;
    list<int> ListaDerecha;
    while(itaux != L.end()){
      ListaDerecha.push_back(*itaux);
      itaux++;
    }
    btree<int>::iterator itpos = B.begin();
    fillbalance(B,ListaIzquierda,itpos.left());
    fillbalance(B,ListaDerecha,itpos.right());
  }
}

//---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*>
int main() {
  Eval ev;
  int vrbs=0;
  ev.eval<1>(fillbalance,vrbs);
  
  return 0;
}


Más información sobre la lista de distribución Noti-AED