2015 AP CSA Free Response Questions | All Solutions & Scoring
2015 AP CSA Free Response Questions
Classic Exam (Pre-2019 Format): Pre-2019 classic format. FRQ 3 and FRQ 4 tested interface implementation, which is no longer on the current curriculum. FRQ 1 and FRQ 2 are directly applicable. Use FRQ 3 and FRQ 4 for general ArrayList and algorithmic practice only.
Complete Java solutions, scoring rubrics, common mistakes, and exam tips for every 2015 AP CSA FRQ. All question text verified from the official College Board PDF.
The 2015 AP CSA FRQs
The 2015 exam used the classic multi-type FRQ format from before the 2019 standardization. These questions are excellent for building deep Java fundamentals even though some specific topics (such as interfaces with extends, GridWorld) no longer appear on the current exam.
DiverseArray
Write three static methods: arraySum() sums a 1D array, rowSums() returns an array of row sums for a 2D array using arraySum(), and isDiverse() checks that all row sums are unique.
HiddenWord
Write a HiddenWord class for a word-guessing game. getHint() compares a guess to the hidden word and returns a hint string: '+' for correct position, '*' for letter present elsewhere, '?' for letter absent.
SparseArray
Implement the SparseArray class using an ArrayList of SparseArrayEntry objects to represent a 2D array with mostly zero entries. Implement getValueAt() and removeColumn().
NumberGroup
Design a NumberGroup interface with contains(), implement it in Range (contiguous integers) and MultipleGroups (a list of NumberGroups), with MultipleGroups.contains() checking if any group contains the value.
Quick Reference: All Four 2015 FRQs
| FRQ | Problem | Type | Difficulty | Key Skill |
|---|---|---|---|---|
| FRQ 1 | DiverseArray | 2D Array | Medium | Method composition: arraySum called inside rowSums, rowSums called inside isDiverse |
| FRQ 2 | HiddenWord | Class | Medium | Three-case char comparison: exact position, present elsewhere, absent |
| FRQ 3 | SparseArray | Interface | Hard | Backward traversal for removal, updating column indices after deletion |
| FRQ 4 | NumberGroup | Interface | Hard | Composite pattern: MultipleGroups.contains() delegates to each sub-group |
How Hard Were the 2015 AP CSA FRQs?
Overall: moderate-to-hard. The 2015 exam had an accessible first half and a demanding second half. FRQ 1 (DiverseArray) rewarded students who correctly composed arraySum() inside rowSums() — the explicit instruction to use the helper methods was a free-point opportunity that students who reinvented the logic missed.
FRQ 2 (HiddenWord) was a clean class problem with a three-case character comparison. FRQ 3 (SparseArray) was a precision test: removeColumn() required backward traversal and updating column indices of surviving entries. FRQ 4 (NumberGroup) required designing an interface and implementing both a simple class and a composite class.
FRQ 1: DiverseArray — Medium
Three cascading static methods. arraySum() summed a 1D array. rowSums() called arraySum() for each row. isDiverse() used rowSums() and checked for duplicate sums. The rubric explicitly required calling the helper methods; reimplementing their logic instead lost points.
FRQ 2: HiddenWord — Medium
getHint() built a hint string character by character. Three cases per position: '+' (exact match), '*' (letter in hidden word but wrong position), '?' (letter not in hidden word). The challenge was correctly handling the '*' case using String.indexOf() or a loop.
FRQ 3: SparseArray — Hard
getValueAt() searched the entry list; removeColumn() removed entries in the target column AND decremented column indices of entries to the right. Backward traversal was essential. Index adjustment after removal was the key rubric point most students missed.
FRQ 4: NumberGroup — Hard
Interface with contains(). Range implemented it with min/max bounds. MultipleGroups held a list of NumberGroup objects and delegated contains() to each. The composite pattern — iterating a list of interfaces and calling the same method on each — was new for many students.
Classic vs. Current Exam Format
Beginning with the 2019 exam, College Board standardized the AP CSA FRQ format to four consistent question types in the same order every year (Methods, Class Writing, ArrayList, 2D Array). The 2015 exam pre-dates this standardization, meaning question types varied more widely. Key differences from the current exam:
What Still Applies Today
All core Java skills are directly transferable: loops, conditionals, arrays, ArrayList, String methods, class design, 2D array traversal. The algorithmic patterns from 2015 appear on every modern exam.
What No Longer Appears
Interfaces with implements/extends, inheritance hierarchies, super() calls, and (in 2014) the GridWorld case study have all been removed from the AP CSA curriculum. Skip those parts when studying from this year.
How to Use This Page
For best results: attempt each FRQ yourself first (set a 22-minute timer), then check the solution page. Focus on the algorithmic core — loop patterns, array traversal, class structure — and skip any parts involving inheritance or interfaces, as these are no longer tested on current exams.
- Click any FRQ card above to open the full solution page (some solutions are still being built — check the official PDF linked above for full question text).
- Use the FRQs by Topic page to find more practice on any specific concept.
- See all years at the FRQ Archive.
Frequently Asked Questions About the 2015 AP CSA FRQs
What are the 2015 AP CSA FRQs?
FRQ 1 DiverseArray (2D Array static methods), FRQ 2 HiddenWord (Class design), FRQ 3 SparseArray (ArrayList/Interface), FRQ 4 NumberGroup (Interface design). Each worth 9 points for 36 total, 50% of the exam score.
Which 2015 FRQs are still relevant for current exam prep?
FRQ 1 (DiverseArray) and FRQ 2 (HiddenWord) are directly applicable to today's exam. FRQ 3 SparseArray and FRQ 4 NumberGroup both involve interface implementation and class hierarchies, which are no longer tested. However, the underlying ArrayList manipulation and composite pattern logic in both are still valuable practice.
What is the most common mistake on 2015 FRQ 3 SparseArray?
In removeColumn(), students iterated forward while removing entries and adjusting column indices, causing index drift. The correct approach iterates backward through the ArrayList, removing entries in the target column and decrementing the column value of entries with higher column indices.
How was the 2015 exam overall in terms of difficulty?
The 2015 exam was moderately hard. FRQ 1 and FRQ 2 were accessible and rewarded methodical thinking. FRQ 3 and FRQ 4 were more conceptually demanding, especially removeColumn() in FRQ 3 and the composite interface design in FRQ 4.
Get in Touch
Whether you're a student, parent, or teacher — I'd love to hear from you.
Just want free AP CS resources?
Enter your email below and check the subscribe box — no message needed. Students get daily practice questions and study tips. Teachers get curriculum resources and teaching strategies.
Message Sent!
Thanks for reaching out. I'll get back to you within 24 hours.
Prefer email? Reach me directly at [email protected]