Ich arbeite an einem Warteschlangensystem für eine Klinik. Die Person an der Rezeption hat zwei Optionen, um Patienten zur Warteschlange hinzuzufügen.Finde den nächsten freien Platz in einem Zeitfeld
- Patienten mit festen Terminen
- Walk-in Patienten
So zum Beispiel gibt es vier Patienten, die bereits in der Warteschlange, mein vorhandenen Termine Array sieht aus wie
existing_appointments = ["09:30", "10:00", "12:15", "13:45"];
Und Durchschnitt Check-up-Zeit für einen Patienten beträgt 15 Minuten.
avg_wait_per_patient = 15;
Sobald ein Patient zu Fuß ist, finde ich das beste verfügbare Zeitfenster für ihn.
Sagen Sie jetzt die Zeit 09.00
istcurrent_time = "09:00";
Die unten Funktion find_free_slot()
funktioniert nicht, weil es 9.15 kehrt statt 09.00 Uhr, da es auf diesem Slot kein Termin ist.
Was ich erreichen möchte, ist, wenn es niemanden in der Nähe von current_time + avg_wait_per_patient
gibt, sollte die Person current_time
Schlitz gegeben werden. Wenn dieser Slot nicht verfügbar ist, sollte er das Array durchlaufen, es sei denn, es wird ein freies gefunden. Und wenn es scheitert, sollte die Person zu der Zeit auf last_index_of_array + avg_wait
hinzugefügt werden.
function toMinutes(t) {
return 60 * Number(t.split(":")[0]) + Number(t.split(":")[1]);
}
function reverse_toMinutes(t) {
return ("0" + Math.floor(t/60)).slice(-2) + ":" + ("0" + t % 60).slice(-2);
}
function find_free_slot(ct,appointments,avg_wait) {
ct = toMinutes(ct);
free_slot = '';
if(appointments.length==0) {
free_slot = ct;
} else {
for(i=0; i<appointments.length; i++) {
appointment = toMinutes(appointments[i]);
if(free_slot <= appointment - avg_wait) {
i == 0 ?
free_slot = ct + avg_wait :
free_slot = toMinutes(appointments[i - 1]) + avg_wait;
break;
}
}
}
return reverse_toMinutes(free_slot);
}
ich verschiedene Werte für CURRENT_TIME und existing_appointments Eingabe versucht haben. Zum Beispiel habe ich die aktuelle Zeit auf 9:50 'current_time =" 09:50 ";' geändert, die resultierende Ausgabe war 10:05. Zusätzlich habe ich den ersten Wert in existing_appointments auf 9:10 geändert, die resultierende Ausgabe war 9:15. – Inkdot