Skip to content

Commit

Permalink
Merge pull request #9 from KhawYewOnn/week4
Browse files Browse the repository at this point in the history
Week4
  • Loading branch information
KhawYewOnn committed Jul 18, 2020
2 parents bb997f5 + 1d5167b commit 625771c
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 3 deletions.
Expand Up @@ -22,6 +22,6 @@ public class Greeter {
* Returns a greeting for the given name.
*/
public String greet(String name) {
return "Hello " + name;
return "Hello " + name.trim();
}
}
Expand Up @@ -30,4 +30,11 @@ public void testGreeting() {

Assert.assertEquals("Hello Ada", greeting);
}

@Test
public void testGreetingTrimsWhiteSpace() {
Greeter greeter = new Greeter();
String greeting = greeter.greet(" Ada ");
Assert.assertEquals("Hello Ada", greeting);
}
}
Expand Up @@ -15,9 +15,118 @@
package com.google.sps;

import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.HashSet;

public final class FindMeetingQuery {
/**
Check if any of the string that appear in stringSet appear in otherSet
*/
public boolean hasMatch(HashSet<String> stringSet, HashSet<String> otherSet) {
Iterator<String> it = stringSet.iterator();
while(it.hasNext()){
if (otherSet.contains(it.next())) {
return true;
}
}
return false;
}

public ArrayList<TimeRange> filterTimes(Collection<Event> events, HashSet<String> attendees) {
ArrayList<TimeRange> times = new ArrayList<TimeRange>();
for (Event event: events) {
HashSet<String> currAttendees = new HashSet<String>();
currAttendees.addAll(event.getAttendees());
if (hasMatch(currAttendees, attendees)) {
if(event.getWhen().duration() == 0) {
continue;
}
times.add(event.getWhen());
}
}
return times;
}

public ArrayList<TimeRange> mergeTimes(ArrayList<TimeRange> times) {
Collections.sort(times, TimeRange.ORDER_BY_START);
ArrayList<TimeRange> merged = new ArrayList<>();
if (times.size() == 0) {
return merged;
}
TimeRange previousTime = times.get(0);
for (int i = 1; i < times.size(); i++) {
TimeRange currTime = times.get(i);
if (previousTime.overlaps(currTime)){
if (previousTime.contains(currTime)) {
continue;
}
previousTime = TimeRange.fromStartEnd(previousTime.start(),
currTime.end(), false);
} else {
merged.add(previousTime);
previousTime = currTime;
}
}
if (merged.size() == 0 || !merged.get(merged.size() - 1).overlaps(previousTime)) {
merged.add(previousTime);
}
return merged;
}

public ArrayList<TimeRange> getExcludedTimes(ArrayList<TimeRange> times) {
Collections.sort(times, TimeRange.ORDER_BY_START);
ArrayList<TimeRange> excludedTimes = new ArrayList<>();
if (times.size() == 0) {
excludedTimes.add(TimeRange.WHOLE_DAY);
return excludedTimes;
}
TimeRange firstTime = times.get(0);
if (firstTime.start() != TimeRange.START_OF_DAY) {
excludedTimes.add(TimeRange.fromStartEnd(TimeRange.START_OF_DAY,
firstTime.start(), false));
}
for (int i = 0; i < times.size() - 1; i++) {
int startTime = times.get(i).end();
int endTime = times.get(i + 1).start();
if (endTime - startTime <= 1) {
// no gap in between to time slot
continue;
}
TimeRange currTime = TimeRange.fromStartEnd(
startTime, endTime, false);
excludedTimes.add(currTime);
}
TimeRange lastTime = times.get(times.size() - 1);
if (lastTime.end() < TimeRange.END_OF_DAY) {
TimeRange lastExcludedTime = TimeRange.fromStartEnd(
lastTime.end(), TimeRange.END_OF_DAY, true);
excludedTimes.add(lastExcludedTime);
}
return excludedTimes;
}

public ArrayList<TimeRange> filterDuration(ArrayList<TimeRange> times, long duration) {
ArrayList<TimeRange> filtered = new ArrayList<>();
if (duration > 24 * 60) {
return filtered;
}
for (TimeRange time: times) {
if (time.duration() >= duration) {
filtered.add(time);
}
}
return filtered;
}

public Collection<TimeRange> query(Collection<Event> events, MeetingRequest request) {
throw new UnsupportedOperationException("TODO: Implement this method.");
HashSet<String> attendees = new HashSet<String>();
attendees.addAll(request.getAttendees());
ArrayList<TimeRange> filteredTimes = filterTimes(events, attendees);
ArrayList<TimeRange> mergedTimes = mergeTimes(filteredTimes);
ArrayList<TimeRange> freeTimes = getExcludedTimes(mergedTimes);
ArrayList<TimeRange> filteredDuration = filterDuration(freeTimes, request.getDuration());
return filteredDuration;
}
}
}

0 comments on commit 625771c

Please sign in to comment.