Skip to the content.
Home Accounts Setup Verify Play Hacks

Gaheera Babbar AP Exam Checkpoint

2021 MC Reflection, MC Study Blog

Python

2021 MC Reflection

Score: 52/70

Strong Topics

1.1: Collaboration – 100%

1.2: Program Function and Purpose – 100%

2.1: Binary Numbers – 86%

2.2: Data Compression – 100%

3.1: Variables and Assignments – 100%

3.4: Strings – 100%

3.5: Boolean Expressions – 75%

3.7: Nested Conditionals – 100%

3.9: Developing Algorithms – 100%

3.11: Binary Search – 100%

3.16: Simulations – 100%

3.18: Undecidable Problems – 100%

4.1: The Internet – 75%

4.3: Parallel and Distributed Computing – 100%

5.1: Beneficial and Harmful Effects – 100%

5.2: Digital Divide – 100%

5.3: Computing Bias – 100%

5.4: Crowdsourcing – 100%

5.5: Legal and Ethical Concerns – 100%

5.6: Safe Computing – 89%

Weak Topics and Corrections

2.3: Extracting Information from Data – 50%

  • 56: The desired information can be determined by using the student IDs in spreadsheet II to identify the students who play a sport. Once the students who play a sport are identified, the grade point averages of students who play sports in spreadsheet I can be compared to the grade point averages of all other students in spreadsheet I.
  • 69: The location and date that a photo is taken is considered metadata about the image. This information can be used to determine whether two pictures were taken at the same location on different dates.

2.4: Using Programs with Data – 50%

  • 46: Because the relative order of the rows is not changed when the filters are applied, the order in which the actions are performed does not matter. The filtering can occur either before or after the spreadsheet is sorted by rating.

3.6: Conditionals – 33%

  • 12: For each iteration of the loop, this code segment rotates the robot left if there is an open square to its left. Then, whether or not the robot rotates left, the code segment attempts to move the robot forward one square. In the first three iterations of the loop, the robot moves forward three squares from its initial location.

3.15: Random Values – 50%

  • 34: An incorrect trial count occurs because there are two calls to RANDOM for each iteration of the loop instead of one. By replacing line 9 with an ELSE statement, the code segment will increment xCount approximately 25% of the time and will increment yCount otherwise.

3.17: Algorithmic Efficiency – 0%

  • 33: Algorithm II runs in time proportional to , which is considered reasonable time because is a polynomial. This is considered a heuristic approach because it finds an approximate solution in reasonable time when the technique that finds an exact solution (algorithm I) does not run in reasonable time.

Strengths Summary

I feel confident in my understanding of foundational computing principles and conceptual topics. My 100% scores in Collaboration, Program Function and Purpose, Variables and Assignments, Strings, and Simulations show that I’m comfortable with both the basics and abstract computing ideas. I also did well on Binary Search, Nested Conditionals, and Legal & Ethical Concerns, reflecting strong problem-solving and comprehension of broader societal impacts of computing.

Weak Topics and Reflection

Pattern Observations

  1. Data Analysis-Related Questions (2.3, 2.4):
    • These often involve reasoning across multiple spreadsheets or interpreting how filters, sorts, or metadata affect data meaning.
    • I tend to struggle with visualizing relationships between data sets and sequencing operations logically when interpreting spreadsheet tasks.
  2. Complex Control Structures (3.6, 3.15):
    • Conditionals mixed with movement or randomized behavior tripped me up, likely because I’m trying to rush through the logic without mentally simulating the code.
    • In 3.15, I overlooked how multiple calls to RANDOM per iteration distort probabilities—a subtle but important logic flaw.
  3. Algorithm Analysis (3.17):
    • I had trouble identifying what makes an algorithm efficient or heuristic. I may be unsure about how to compare polynomial vs. exponential runtimes and what makes an algorithm “reasonable.”

Why I Might Be Missing These Topics

  • I tend to do better with direct code interpretation than with multi-step reasoning across multiple data points or abstract scenarios.
  • I may be underestimating how careful I need to be when visualizing step-by-step outcomes—especially in questions involving robot movement, randomized outcomes, or spreadsheet operations.
  • Some concepts like heuristic approaches or runtime analysis might feel unfamiliar because they’re less coding-based and more about theoretical understanding.

Study Plan for Improvement

Revise Concepts with Practice

  • Use practice platforms like College Board AP Classroom or CS Awesome to revisit Units 2.3, 2.4, 3.6, 3.15, and 3.17.
  • Re-watch videos explaining:
    • Metadata and filtering in spreadsheets
    • Conditional logic with robot simulations
    • Algorithm efficiency and heuristic solutions

Do Step-by-Step Simulations

  • For movement or loop logic problems, draw it out or trace the code line by line.
  • When in doubt, simulate the process manually before answering—this helps with randomized logic or data filters.

Strengthen Algorithmic Thinking

  • Create a personal cheat sheet comparing common runtime complexities (O(n), O(n²), O(log n), etc.).
  • Practice identifying when an algorithm uses brute force vs. a heuristic by reviewing past FRQs and MCQs on algorithm performance.

Explain It Out Loud

  • Teach or explain tricky questions to a friend, tutor, or even out loud to yourself.
  • Being able to articulate why an answer is correct or incorrect helps solidify understanding.

Personalized Project Reference

Overview

In my Profile Setup Project, users enter their top 5 favorite artists, which is processed and stored as a list. This satisfies AP CSP Create Task requirements by:

  1. Creating a list from user input
  2. Processing the list before storing and using it
  3. Creating a Function
  4. Calling to the Function

Guideline 1: The Program Uses a List

Requirement: The program must create a list to manage multiple elements.

How My Code Meets This:

  • The user inputs a comma-separated list of their Top 5 Favorite Artists into an input field.
  • This string is then converted into a list in JavaScript using .split(",").
<label for="artists">Top 5 Favorite Artists:</label>
<input type="text" id="artists" name="artists" placeholder="Comma-separated list" required>
<const artists = document.getElementById('artists').value;>

Guideline 2: List being used in the Program

Requirement: The program must create a list to manage multiple elements.

How My Code Meets This:

  • The input string is procesed into a array using .split(",").
  • This converst the text string to a list of artists
  • The list is stored in favorite_artists and sent to an API
const createProfile = async (name, artists, bio, profilePicture) => {
    const url = `${pythonURI}/api/profile`;

    const data = {
        name: name,
        uid: name,
        pfp: profilePicture,
        bio: bio,
        favorite_artist: artists.split(",")
    };

Guideline 3: Having a Function

Requirement: Define a function that serves a specific purpose.

What the Function Does

  • Takes user input (edited bio and favorite artists)
  • Processes and formats the input into a structured JSON object
  • Sends a PUT request to update the database
  • Calls another function to refresh the displayed profile
function editProfile() {
    const updatedProfile = {
        uid: uid,
        bio: document.getElementById('editBio').value,
        favorite_artist: document.getElementById('editArtists').value
    };

    const requestOptions = {
        method: "PUT",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(updatedProfile),
        redirect: "follow"
    };

    fetch(`${pythonURI}/api/profile`, requestOptions)
        .then((response) => response.text())
        .then((result) => {
            console.log(result);
            alert("Profile updated successfully!");
            fetchProfile();
        })
        .catch((error) => console.error("Error updating profile:", error));
}

Guideline 4: Calling a Function

Requirement: A function must be called in response to a user event.

How My Code Meets This:

  • The editProfile function is executed when the user clicks the Save Changes button:
<button type="button" onclick="editProfile()">Save Changes</button>
  • Additionally, the fetchProfile function is called when the page loads to automatically display the user’s profile:
window.onload = fetchProfile;

Study Guide