[JAVA] Suchen Sie in der Liste einen Abschnitt, der die Bedingungen (mehr als die angegebene Anzahl von Malen) kontinuierlich erfüllt (überprüfen Sie die freie Zeit des Konferenzraums).

Inhaltsverzeichnis ⇒ 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;

/**
Bedingungen aus der Liste(Mehr als angegeben)Finden Sie einen durchgehenden und zufriedenstellenden Abschnitt(Überprüfen Sie die Freizeit des Besprechungsraums)
・ Die Bedingungen werden von ArValidator festgelegt.
・ Sie finden es auch hinter der Liste..

Beispiele für eine solche Verarbeitung sind die folgenden..
・ Fragen Sie nach einer Zeit, in der der Besprechungsraum zwei Stunden oder länger geöffnet ist.
・ Fordern Sie einen Zeitraum an, in dem 100 oder mehr Verkaufstage drei oder mehr aufeinanderfolgende Tage sind.
・ Finden Sie den Zeitraum, in dem das Testergebnis 80 Punkte oder mehr betrug und dreimal oder öfter fortgesetzt wurde..
・ Finden Sie den Zeitraum, in dem Nampa drei oder mehr Mal hintereinander erfolgreich war(Lol).

・ In diesem Beispiel wird die Reservierung eines Konferenzraums als Beispiel genommen..
・ Ein Tagungsraum kann stündlich zwischen 9:00 und 17:00 Uhr reserviert werden.Hinweis, kann bis 18:00 Uhr verwendet werden.

 */
public class Q01_14 {
  public static void main(String[] args) {
    List<MeetingRoom> list = new ArrayList<MeetingRoom>();
    //Erstellen Sie einen Rahmen von 0:00 bis 23:00 Uhr
    for (int i=0; i<23; i++) {
      list.add(new MeetingRoom(i,((i>=9)&&(i<=17))?ArUseStatus.AVAILABLE:ArUseStatus.ILLEGAL));
    }
    //Es ist ein wenig mit Reservierungen bis zum Tag zuvor gefüllt.
    list.get(12).setStatus(ArUseStatus.IN_USE);
    list.get(13).setStatus(ArUseStatus.IN_USE);
    list.get(14).setStatus(ArUseStatus.IN_USE);
    //Überprüfen Sie die Situation
    L.p(list.toString());

    //Definieren Sie einen ArValidator, der kostenlos überprüft werden soll
    ArValidator<MeetingRoom> validator = new ArValidator<MeetingRoom>() {
      @Override
      public boolean check(MeetingRoom value) {
        return value.getStatus() == ArUseStatus.AVAILABLE;
      }
    };

    List<Integer> availableList;
    //Ich bin um 10 Uhr ein Besucher und möchte daher eine Reservierung für 2 Stunden vornehmen. ⇒ Ist es kostenlos?
    availableList = ArList.sameValueSequence(list, validator,2,10);
    //Überprüfen Sie das Ergebnis ⇒ Von 10:00, 15:00 und 16:00 Uhr sollten zwei Stunden frei sein..
    L.p(availableList.toString());
    //Buchen Sie für 2 Stunden ab 10 Uhr
    list.get(10).setStatus(ArUseStatus.IN_USE);
    list.get(11).setStatus(ArUseStatus.IN_USE);
    L.p(list.toString());

    //Geplant für eine frühzeitige Abreise um 16:00 Uhr. ⇒ Ich möchte 1 Stunde vorher ein Meeting haben. ⇒ 1 Stunde am Ende von 16:00 Uhr buchen. ⇒ Sind Sie frei?
    availableList = ArList.sameValueSequenceReverse(list, validator,1,16);
    L.p(availableList.toString()); //⇒ 15:00 und 9:00 sollten frei sein...
    //Buchen Sie für 1 Stunde ab 15:00 Uhr
    list.get(15).setStatus(ArUseStatus.IN_USE);

    //Überprüfen Sie die Situation
    L.p(list.toString());
  }
  //
  /**Konferenzraum(eine Stunde)Klasse*/
  static class MeetingRoom {
    /**Konstrukteur*/
    public MeetingRoom(int time,ArUseStatus status) {
      this.time = time;
      this.status = status;
    }
    /** (Start)Tageszeiten*/
    private int time;
    /**Status*/
    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();
    }
  }
}


Das Ergebnis ist wie folgt.

result.txt



[, , , , , , , , , 09:Kann verwendet werden, 10:Kann verwendet werden, 11:Kann verwendet werden, 12:In Benutzung, 13:In Benutzung, 14:In Benutzung, 15:Kann verwendet werden, 16:Kann verwendet werden, 17:Kann verwendet werden, , , , , ]
[10, 15, 16]
[, , , , , , , , , 09:Kann verwendet werden, 10:In Benutzung, 11:In Benutzung, 12:In Benutzung, 13:In Benutzung, 14:In Benutzung, 15:Kann verwendet werden, 16:Kann verwendet werden, 17:Kann verwendet werden, , , , , ]
[15, 9]
[, , , , , , , , , 09:Kann verwendet werden, 10:In Benutzung, 11:In Benutzung, 12:In Benutzung, 13:In Benutzung, 14:In Benutzung, 15:In Benutzung, 16:Kann verwendet werden, 17:Kann verwendet werden, , , , , ]


Recommended Posts

Suchen Sie in der Liste einen Abschnitt, der die Bedingungen (mehr als die angegebene Anzahl von Malen) kontinuierlich erfüllt (überprüfen Sie die freie Zeit des Konferenzraums).
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
Aggregieren Sie die Anzahl der Personen alle 10 Jahre aus Liste <Person>
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder