[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