Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.84 KB | None | 0 0
  1. import java.util.Iterator;
  2. import java.util.LinkedList;
  3.  
  4. class Problema {
  5.  
  6.     private final double dificultate;
  7.  
  8.     public Problema() {
  9.         this.dificultate = Math.random();
  10.     }
  11.  
  12.     public double getDificultate() {
  13.         return dificultate;
  14.     }
  15.  
  16.     @Override
  17.     public boolean equals(Object o) {
  18.         if (this == o) return true;
  19.         if (o == null || getClass() != o.getClass()) return false;
  20.  
  21.         Problema problema = (Problema) o;
  22.  
  23.         return Double.compare(problema.getDificultate(), getDificultate()) == 0;
  24.     }
  25.  
  26.     @Override
  27.     public int hashCode() {
  28.         long temp = Double.doubleToLongBits(getDificultate());
  29.         return (int) (temp ^ (temp >>> 32));
  30.     }
  31. }
  32.  
  33. abstract class Concurent {
  34.  
  35.     private int numarProblemeRezolvate;
  36.     private int timpTotalDeRezolvare;
  37.     private final double nivelPregatire;
  38.  
  39.     public Concurent() {
  40.         this.nivelPregatire = Math.random();
  41.     }
  42.  
  43.     protected double getNivelPregatire() {
  44.         return nivelPregatire;
  45.     }
  46.  
  47.     public int getNumarProblemeRezolvate() {
  48.         return numarProblemeRezolvate;
  49.     }
  50.  
  51.     protected void setNumarProblemeRezolvate(int numarProblemeRezolvate) {
  52.         this.numarProblemeRezolvate = numarProblemeRezolvate;
  53.     }
  54.  
  55.     protected int getTimpTotalDeRezolvare() {
  56.         return timpTotalDeRezolvare;
  57.     }
  58.  
  59.     protected void setTimpTotalDeRezolvare(int timpTotalDeRezolvare) {
  60.         this.timpTotalDeRezolvare = timpTotalDeRezolvare;
  61.     }
  62.  
  63.     public abstract void rezolvaProblema(Problema problema);
  64.  
  65. }
  66.  
  67. class ConcurentIncepator extends Concurent {
  68.  
  69.     @Override
  70.     public void rezolvaProblema(Problema problema) {
  71.  
  72.         if (problema.getDificultate() <= super.getNivelPregatire()) {
  73.             setNumarProblemeRezolvate(getNumarProblemeRezolvate() + 1);
  74.             int increment;
  75.             if (problema.getDificultate() > 0.5) {
  76.                 increment = (int) (1 - getNivelPregatire()) * 2000;
  77.             } else {
  78.                 increment = (int) (1 - getNivelPregatire()) * 1000;
  79.             }
  80.  
  81.             setTimpTotalDeRezolvare(getTimpTotalDeRezolvare() + increment);
  82.         }
  83.     }
  84. }
  85.  
  86. class ConcurentExperimentat extends Concurent {
  87.  
  88.     private LinkedList<Concurs> concursuriParticipate;
  89.  
  90.     @Override
  91.     public void rezolvaProblema(Problema problema) {
  92.  
  93.         boolean found=false;
  94.         Iterator it=concursuriParticipate.iterator();
  95.         while (it.hasNext()&&!found) {
  96.             Concurs c = (Concurs) it.next();
  97.             int len = c.getProbleme().length;
  98.             Problema[] probleme = c.getProbleme();
  99.             for (int i = 0; i < len && !found; ++i) {
  100.                 if (problema.equals(probleme[i])) {
  101.                     setNumarProblemeRezolvate(getNumarProblemeRezolvate() + 1);
  102.                     found = true;
  103.                 }
  104.             }
  105.         }
  106.             if(!found) {
  107.                 if (problema.getDificultate() <= super.getNivelPregatire()) {
  108.                     setNumarProblemeRezolvate(getNumarProblemeRezolvate() + 1);
  109.                     int increment;
  110.                     if (problema.getDificultate() > 0.5) {
  111.                         increment = (int) (1 - getNivelPregatire()) * 2000;
  112.                     } else {
  113.                         increment = (int) (1 - getNivelPregatire()) * 1000;
  114.                     }
  115.  
  116.                     setTimpTotalDeRezolvare(getTimpTotalDeRezolvare() + increment);
  117.                 }
  118.             }
  119.  
  120.  
  121.     }
  122. }
  123.  
  124. abstract class Concurs {
  125.  
  126.     private Problema[] probleme;
  127.     private Concurent[] concurenti;
  128.     private int numarulCurentDeConcurenti;
  129.     private int numarulMaximDeConcurentiMomentan = 10;
  130.  
  131.     public Concurs(Problema[] probleme) {
  132.         this.probleme=probleme;
  133.     }
  134.  
  135.     public Problema[] getProbleme() {
  136.         return probleme;
  137.     }
  138.  
  139.     protected void setConcurenti(Concurent[] concurenti) {
  140.         this.concurenti = concurenti;
  141.     }
  142.  
  143.     protected void setNumarulCurentDeConcurenti(int numarulCurentDeConcurenti) {
  144.         this.numarulCurentDeConcurenti = numarulCurentDeConcurenti;
  145.     }
  146.  
  147.     protected void setNumarulMaximDeConcurentiMomentan(int numarulMaximDeConcurentiMomentan) {
  148.         this.numarulMaximDeConcurentiMomentan = numarulMaximDeConcurentiMomentan;
  149.     }
  150.  
  151.     public void addConcurent(Concurent concurent) {
  152.         if (numarulCurentDeConcurenti == numarulMaximDeConcurentiMomentan) {
  153.             maresteCapacitateaDeConcurenti();
  154.         }
  155.  
  156.         concurenti[numarulCurentDeConcurenti] = concurent;
  157.         numarulCurentDeConcurenti++;
  158.     }
  159.  
  160.     private void maresteCapacitateaDeConcurenti() {
  161.         numarulMaximDeConcurentiMomentan = numarulMaximDeConcurentiMomentan * 2;
  162.         Concurent[] tmp = new Concurent[numarulMaximDeConcurentiMomentan];
  163.         for (int i = 0; i < numarulMaximDeConcurentiMomentan; ++i) {
  164.             tmp[i] = concurenti[i];
  165.         }
  166.         concurenti = tmp;
  167.     }
  168.  
  169.  
  170.     public Concurent getCastigator() {
  171.  
  172.         int maxProblemeRez = -1;
  173.         int celMaiMicTimp = -1;
  174.         int locatie = 0;
  175.  
  176.         for (int i = 0; i < numarulCurentDeConcurenti; ++i) {
  177.             if (concurenti[i].getNumarProblemeRezolvate() > maxProblemeRez) {
  178.                 maxProblemeRez = concurenti[i].getNumarProblemeRezolvate();
  179.                 celMaiMicTimp = concurenti[i].getTimpTotalDeRezolvare();
  180.                 locatie = i;
  181.             }
  182.  
  183.             if (concurenti[i].getNumarProblemeRezolvate() == maxProblemeRez) {
  184.                 if (concurenti[i].getTimpTotalDeRezolvare() < celMaiMicTimp) {
  185.                     celMaiMicTimp = concurenti[i].getTimpTotalDeRezolvare();
  186.                     locatie = i;
  187.                 }
  188.             }
  189.         }
  190.  
  191.         return concurenti[locatie];
  192.     }
  193.  
  194.  
  195.     public void start(){
  196.         int numarProbleme=probleme.length;
  197.         for(int i=0;i<numarulCurentDeConcurenti;i++){
  198.             for(int j=0;j<numarProbleme;j++){
  199.                 concurenti[i].rezolvaProblema(probleme[j]);
  200.             }
  201.         }
  202.     }
  203.  
  204. }
  205.  
  206. class ConcursSimplu extends Concurs{
  207.  
  208.     public ConcursSimplu(Problema[] probleme, Concurent[] concurenti) {
  209.         super(probleme);
  210.         setConcurenti(concurenti);
  211.         int len=concurenti.length;
  212.         setNumarulCurentDeConcurenti(len);
  213.         setNumarulMaximDeConcurentiMomentan(len);
  214.     }
  215. }
  216.  
  217. class ConcursRegional extends Concurs{
  218.  
  219.     private LinkedList<Concurs> concursuri;
  220.  
  221.     public ConcursRegional(Problema[] probleme, LinkedList<Concurs> concursuri) {
  222.         super(probleme);
  223.         this.concursuri = concursuri;
  224.     }
  225.  
  226.     @Override
  227.     public void start() {
  228.         Iterator it=concursuri.iterator();
  229.  
  230.         while(it.hasNext()){
  231.             Concurs c =(Concurs)it.next();
  232.             c.start();
  233.             addConcurent(c.getCastigator());
  234.         }
  235.  
  236.         super.start();
  237.     }
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement