[JAVA] Trouvez une section qui satisfait continuellement les conditions (plus que le nombre de fois spécifié) dans la liste (vérifiez le temps libre de la salle de conférence)

Table des matières ⇒ Java Algorithm Library-Artery-Sample

Q01_14.java



package jp.avaj.lib.algo;

import java.util.ArrayList;
import java.util.List;

import jp.avaj.lib.def.ArUseStatus;
import jp.avaj.lib.test.L;

/**
Conditions de la liste(Plus que le nombre de fois spécifié)Trouvez une section continue et satisfaisante(Vérifiez le temps libre de la salle de réunion)
・ Les conditions sont spécifiées par ArValidator.
・ Vous pouvez également le trouver derrière la liste..

-Des exemples d'un tel traitement sont les suivants..
・ Demandez l'heure à laquelle la salle de réunion est ouverte pendant deux heures ou plus.
・ Exigez une période pendant laquelle 100 jours ou plus de ventes correspondent à trois jours consécutifs ou plus.
・ Trouvez la période pendant laquelle le résultat du test était de 80 points ou plus et a continué 3 fois ou plus..
・ Trouvez la période pendant laquelle Nampa a réussi trois fois de suite ou plus(Lol).

・ Dans cet exemple, la réservation d'une salle de conférence est prise comme exemple..
・ Une salle de réunion peut être réservée sur une base horaire entre 9h00 et 17h00.Remarque, peut être utilisé jusqu'à 18h00.

 */
public class Q01_14 {
  public static void main(String[] args) {
    List<MeetingRoom> list = new ArrayList<MeetingRoom>();
    //Créer un cadre de 0h00 à 23h00
    for (int i=0; i<23; i++) {
      list.add(new MeetingRoom(i,((i>=9)&&(i<=17))?ArUseStatus.AVAILABLE:ArUseStatus.ILLEGAL));
    }
    //C'est un peu rempli de réservations jusqu'à la veille.
    list.get(12).setStatus(ArUseStatus.IN_USE);
    list.get(13).setStatus(ArUseStatus.IN_USE);
    list.get(14).setStatus(ArUseStatus.IN_USE);
    //Vérifiez la situation
    L.p(list.toString());

    //Définissez un ArValidator à vérifier gratuitement
    ArValidator<MeetingRoom> validator = new ArValidator<MeetingRoom>() {
      @Override
      public boolean check(MeetingRoom value) {
        return value.getStatus() == ArUseStatus.AVAILABLE;
      }
    };

    List<Integer> availableList;
    //Je suis visiteur à 10 heures, je souhaite donc faire une réservation de 2 heures ⇒ Êtes-vous libre?
    availableList = ArList.sameValueSequence(list, validator,2,10);
    //Vérifiez le résultat ⇒ Il devrait être deux heures libres de 10h00, 15h00 et 16h00..
    L.p(availableList.toString());
    //Réservez 2 heures à partir de 10 heures
    list.get(10).setStatus(ArUseStatus.IN_USE);
    list.get(11).setStatus(ArUseStatus.IN_USE);
    L.p(list.toString());

    //Prévu de partir tôt à 16h00 ⇒ Je veux avoir une réunion pendant 1 heure avant cela ⇒ Réservez pendant 1 heure à la fin de 16h00 ⇒ Êtes-vous libre?
    availableList = ArList.sameValueSequenceReverse(list, validator,1,16);
    L.p(availableList.toString()); //⇒ 15h00 et 9h00 devraient être gratuits...
    //Réservez 1 heure à partir de 15h00
    list.get(15).setStatus(ArUseStatus.IN_USE);

    //Vérifiez la situation
    L.p(list.toString());
  }
  //
  /**salle de conférence(une heure)classe*/
  static class MeetingRoom {
    /**constructeur*/
    public MeetingRoom(int time,ArUseStatus status) {
      this.time = time;
      this.status = status;
    }
    /** (début)Heures du jour*/
    private int time;
    /**statut*/
    private ArUseStatus status;
    public int getTime() {
      return time;
    }
    public void setTime(int time) {
      this.time = time;
    }
    public ArUseStatus getStatus() {
      return status;
    }
    public void setStatus(ArUseStatus status) {
      this.status = status;
    }
    @Override
    public String toString() {
      String str = String.format("%02d:",time);
      return (status == ArUseStatus.ILLEGAL) ? "" : str+status.toString();
    }
  }
}


Le résultat est le suivant.

result.txt



[, , , , , , , , , 09:Peut être utilisé, 10:Peut être utilisé, 11:Peut être utilisé, 12:Utilisé, 13:Utilisé, 14:Utilisé, 15:Peut être utilisé, 16:Peut être utilisé, 17:Peut être utilisé, , , , , ]
[10, 15, 16]
[, , , , , , , , , 09:Peut être utilisé, 10:Utilisé, 11:Utilisé, 12:Utilisé, 13:Utilisé, 14:Utilisé, 15:Peut être utilisé, 16:Peut être utilisé, 17:Peut être utilisé, , , , , ]
[15, 9]
[, , , , , , , , , 09:Peut être utilisé, 10:Utilisé, 11:Utilisé, 12:Utilisé, 13:Utilisé, 14:Utilisé, 15:Utilisé, 16:Peut être utilisé, 17:Peut être utilisé, , , , , ]


Recommended Posts

Trouvez une section qui satisfait continuellement les conditions (plus que le nombre de fois spécifié) dans la liste (vérifiez le temps libre de la salle de conférence)
Un programme qui compte le nombre de mots dans une liste
Agréger le nombre de personnes tous les 10 ans à partir de la liste <Personne>
[Java] Supprimer le nombre spécifié de caractères à la fin de StringBuilder