Like many AP Computer Science teachers I was watching the College Board website yesterday for the release of the free response questions from this year. Since I know that today I’ll have students asking about the questions I come up with my own solutions so we can talk.

These are the solutions that I came up with yesterday evening. I haven’t actually run anything, so I’m not sure that they’re 9/9 solutions. But they should be pretty close. Sometime over the next few days I’ll also put together write ups with explanations of the solutions.

## APCalendar

```
// Part A
public static int numberOfLeapYears(int year1, int year2) {
int cnt = 0;
for (int y=year1; y<=year2; y++) {
if (isLeapYear(y))
cnt++;
}
return cnt;
}
// Part B
public static int dayOfWeek(int month, int day, int year) {
int firstDay = firstDayOfYear(year);
int doy = dayOfYear(month, day, year);
return (firstDay + dayOfYear - 1) % 7;
}
```

## StepTracker

```
public class StepTracker {
private int days;
private int activeDays;
private int totalSteps;
private int minActive;
public StepTracker(int m) {
minActive = m;
days = 0;
activeDays = 0;
totalSteps = 0;
}
public void addDailySteps(int steps) {
days++;
totalSteps += steps;
if (steps >= minActive) {
activeDays++;
}
}
public int activeDays() {
return activeDays;
}
public double averageSteps() {
if (days == 0) {
return 0.0;
}
return (double)totalSteps / days;
}
}
```

## Delimiter

```
// Part A
public ArrayList<String> getDelimitersList(String[] tokens) {
ArrayList<String> out = new ArrayList<>();
for (String t: tokens) {
if (t.equals(openDel) || t.equals(closeDel))
out.add(t);
}
return out;
}
// Part B
public boolean isBalanced(ArrayList<String> delimiters) {
int open = 0;
int close = 0;
for (String d: delimiters) {
if (d.equals(openDel))
open++;
else if (d.equals(closeDel))
close++;
if (close > open)
return false;
}
return open == close;
}
```

## Lightboard

```
// Part A
public LightBoard(int numRows, int numCols) {
lights = new boolean[numRows][numCols];
for (int r=0; r<numRows; r++)
for (int c=0; c<numCols; c++)
lights[r][c] = Math.random() < 0.4;
}
// Part B
public boolean evaluateLight(int row, int col) {
int onInCol = 0;
for (int r=0; r<lights.length; r++)
if (lights[r][col])
onInCol++;
if (lights[row][col] && onInCol % 2 == 0)
return false;
else if (!lights[row][col] && onInCol % 3 == 0)
return true;
return lights[row][col];
}
```