×

How to use Gradescope: A Student Guide

August 31, 2024
Ms. Lisa Chen
Ms. Lisa
🇬🇧 United Kingdom
Programming
Ms. Chen has a master’s degree in Cybersecurity from MIT and has worked on over 1200 assignments. With 6 years of experience in security protocols and network management, she is an expert in safeguarding applications from vulnerabilities. Her thorough understanding of cybersecurity ensures that all coding assignments are developed with a strong focus on security.
Tip of the day
Don’t just write code; spend time reading and analyzing code written by others. This could include open-source projects on GitHub or sample code in textbooks.
News
In September 2024, the Massachusetts Institute of Technology (MIT) introduced a graduate program in Music Technology and Computation. This interdisciplinary program invites students to explore the intersection of music, computing, and technology, reflecting MIT's commitment to integrating arts and engineering in its curriculum
Key Topics
  • Submitting your programming assignment in Gradescope
  • Troubleshooting Gradescope
  • Viewing comments and feedback from your professor
  • Submitting a re-grade request
    • Bottomline
    • The Squabble Game
    • ExtendedLetter.Java
    • Letter.Java
    • LinearNode.Java
    • TestWordLL
    • Word.Java
    • WordLL.Java
    • WordLLExample. Java

Gradescope is a renowned tool that helps instructors seamlessly grade and administer programming assignments. It provides a clear picture of the progress of students and saves time. It is not only instructors that should know how to use Gradescope. Students too need to know how to use Gradescope to:

  1. Submit their homework for grading
  2. Viewing scores and feedback
  3. Requesting for a re-grade within the prescribed guidelines

Gradescope is a unique tool that supports both variable-length and fixed-template programming assignments. You can submit multiple assignments of any file type. Gradescope also allows students to submit their programming assignments via BitBucket Integration and GitHub. Your professor can then auto-grade or manually grade your code. Manual grading supports in-line comments and grading with a rubric.

Submitting your programming assignment in Gradescope

It is recommended that you scan any handwritten work you upload to Gradescope. The scanned work should be uploaded as a PDF. Gradescope may not have a file size limit, but it usually rejects large files because they take time to process. Also, it would be best to use scanning apps that support iOS and Android devices. Gradescope gives you a chance to submit your assignment as a PDF or image. The steps to submit an assignment may vary depending on the type of assignment. In addition to submitting online and handwritten assignments, Gradescope allows you to submit code. Programming students who want to submit code have the following three options:

  • Dragging and dropping their code files into Gradescope
  • Submitting a Bitbucket repository
  • Submitting a Github repository
submitting a re grade request

Here are tips for uploading your assignment:

  1. Images on the phone and handwritten work: The first step is to ensure that you have a Gradescope mobile app. You can download it from their official website. After ensuring that the app is working and logging in, you can submit your assignment.
  2. Images and PDF on your computer: You should choose whether you upload a PDF or images. Find the images or PDF you want to submit on your computer and click on open. Click on the submit button once they have been uploaded.

Troubleshooting Gradescope

Most students who use Safari as their browser have complained about their assignments not loading. If you are using Safari to access Gradescope, you should adjust the security settings. Safari is known to block third-party apps and cookies. These settings may stop certain tools from working in Gradescope. If you are using Safari as your browser and you notice that your assignment is stuck on the loading page, please follow these simple steps:

  1. Go to the Safari menu.
  2. Move to preferences and then select Privacy
  3. Uncheck “prevent cross-site tracking

You can also avoid this hurdle by using another browser like chrome.

troubleshooting gradescope

The best thing about Gradescope is that you can modify your answers and re-submit your programming assignment as often as possible. However, your resubmissions have to be within the allotted timeframe. You will not be able to submit your assignment when the submission time ends. If you were working on a timed programming exam and time ran out before you could submit, Gradescope will automatically save your work and submit what has been done. Also, if you mistakenly closed down your browser or lost your internet connection, you can always navigate back to your assignment or exam. All the answers that you enter are auto-saved. However, the timer never stops. There is an auto-save indicator at the top of the left screen. You can always check it.

Viewing comments and feedback from your professor

You can quickly access the feedback and comments from your professor through the assignment link. All published comments and feedback will appear there. For timed assignments, click on view submission. On the other hand, you do not need to click on view submission if the assignment was not timed. The feedback will appear straight away. You can view the marked paper as well as your answers. The rubric always appears on the right-hand side, with your score on top. You can click on specific questions and expand if you want to see detailed comments and scores.

Submitting a re-grade request

Different instructors have different guidelines for when to submit a re-grade request and what should be included. You should check with your instructor before submitting a request. Re-grade requests are for programming assignments you feel were graded incorrectly. View your submission and check if the re-grade button has been enabled to check if re-grade requests are allowed. Follow these steps to submit your request:

  1. Click on the questions you wish to submit a re-grade request for. You should be able to see the rubric and the items that were applied to the questions.
  2. In the action bar, click on the request re-grade button
  3. Explain why you feel the question should be regarded on the textbox that appears
  4. Submit

Gradescope allows re-grade requests per question. It means that you must submit a request for each if you have multiple questions that you feel were incorrectly graded. A notification email will be sent to your instructor once your request has been sent. Your instructor can choose to re-grade, send you a response or close your case. You will receive a notification email once your request has been resolved. When you view the submission, you can view all the completed and pending re-grade requests.

Bottomline

Gradescope ensures that instructors and students collaborate better on grading. It allows you to participate in course activities assigned by your professor. If you have issues with Gradescope, link up with your instructor. They may be able to provide you with the real-time assistance that you need. No matter how complicated your programming homework is, your professor expects you to meet to submit your solution via Gradescope on time. One of the easiest ways to beat your strict java assignment deadline is to get assistance from an experienced java professional. For more information on how to use Gradescope, you can explore the documentation for students available on their website.

The Squabble Game

Squabble is one of the most interesting word games. Several people have fallen in love with this game because of the special features that make it exciting and nerve-racking at the same time. The rules are simple. Each player gets six chances to guess a five-lettered word that has been selected randomly. A player can only enter six words. In other words, you can enter five burner words that give you hints about the letters and their placements. The letters you guess are labeled as correct, used, or unused while considering a mystery word. For example, suppose the mystery word was "ADULT," but a player's guess was 'AGENT" the labeling will be as follows: A-correct, G-unused, E-unused, N-unused, and T-correct. This information can guide the player in the next guess and narrows down what the mystery word could be. Too much thought was put into creating this game of rules. Our tool aims to be less constrained and expand the possibilities. For instance, we will make the guesses and the word length arbitrary. We are also lifting textual limitations in our tools to support different letters other than those in the alphabet. To be more specific, our tools will allow for more variants for a Squabble-Esque game while still retaining the idea of labeling letters as per the mystery word.

ExtendedLetter.Java

/** * This class represents an Extended Letter. */ public class ExtendedLetter extends Letter { private String content; private int family; private boolean related; private static final int SINGLETON = -1; /** * Creates an ExtendedLetter object given the string. * @param s String */ public ExtendedLetter(String s) { super(s.charAt(0)); content = s; related = false; family = SINGLETON; } /** * Creates an ExtendedLetter object, given String and family. * @param s String * @param fam int */ public ExtendedLetter(String s, int fam) { super(s.charAt(0)); content = s; family = fam; related = false; } /** * Compares two ExtendedLetter objects */ public boolean equals(Object other) { if (!(other instanceof ExtendedLetter)) { return false; } ExtendedLetter obj = (ExtendedLetter)other; if (getFamily() == obj.getFamily()) { this.related = true; } return obj.getContent().equals(this.content); } /** * Getter for family. * @return Integer */ public int getFamily() { return this.family; } /** * Getter for content. * @return String */ public String getContent() { return this.content; } /** * Overrided toString method. */ @Override public String toString() { if(this.isUnused() && this.related) { return "." + this.content + "."; } else { return this.decorator() + this.content + this.decorator(); } } /** * Returns an array of Letter object given an string and family arr. * @param content String array * @param codes Integer array * @return Letter array */ public static Letter[] fromStrings(String[] content, int[]codes) { // Create an array of letter with the same size of content Letter[] letters = new Letter[content.length]; if (codes == null) { for (int i = 0; i < content.length; i++) { letters[i] = new ExtendedLetter(content[i]); } } else { for (int i = 0; i < content.length; i++) { letters[i] = new ExtendedLetter(content[i], codes[i]); } } return letters; }

Letter.Java

/** * Creates a Letter object. */ public class Letter { private char letter; private int label; private static final int UNSET = 0; private static final int UNUSED = 1; private static final int USED = 2; private static final int CORRECT = 3; public Letter(char c) { letter = c; label = UNSET; } public boolean equals(Object otherObject) { if(!(otherObject instanceof Letter)) { return false; } Letter obj = (Letter)otherObject; return this.letter == obj.getLetter(); } public String decorator() { String ret = ""; switch(this.label) { case UNSET: ret = " "; break; case UNUSED: ret = "-"; break; case USED: ret = "+"; break; case CORRECT: ret = "!"; break; } return ret; } @Override public String toString() { return decorator() + ("" + getLetter()).toUpperCase() + decorator(); } public void setUnused() { label = UNUSED; } public void setUsed() { label = USED; } public void setCorrect() { label = CORRECT; } public boolean isUnused() { return label == UNUSED; } public static Letter[] fromString(String s) { Letter[] letters = new Letter[s.length()]; for(int i = 0; i < s.length(); i++) { letters[i] = new Letter(s.charAt(i)); } return letters; } // getters public char getLetter() { return letter; }

LinearNode.Java

/** * LinearNode represents a node in a linked list. * * @author Dr. Lewis * @author Dr. Chase * @version 1.0, 08/13/08 */ public class LinearNode { private LinearNode next; private E element; /** * Creates an empty node. */ public LinearNode() { next = null; element = null; } /** * Creates a node storing the specified element. * * @param elem the element to be stored within the new node */ public LinearNode (E elem) { next = null; element = elem; } /** * Returns the node that follows this one. * * @return the node that follows the current one */ public LinearNode getNext() { return next; } /** * Sets the node that follows this one. * * @param node the node to be set to follow the current one */ public void setNext (LinearNode node) { next = node; } /** * Returns the element stored in this node. * * @return the element stored in this node */ public E getElement() { return element; } /** * Sets the element stored in this node. * * @param elem the element to be stored in this node */ public void setElement (E elem) { element = elem; } }

TestWordLL

public class TestWordLL { public static int passed = 0; public static int tested = 0; public static void main(String[] args) { //-------------------- Letter letter1 = new Letter('J'); Letter letter2 = new Letter('V'); Letter letter3 = new Letter('J'); // ********** Letter equals test(1,"Letter equals", !letter1.equals(letter2) && letter1.equals(letter3)); letter1.setCorrect(); letter2.setUsed(); letter3.setUnused(); // ********** Letter set methods test(2,"Letter set methods", (letter1.toString()+letter2.toString()+letter3.toString()).equals("!J!+V+-J-")); Letter[] array = Letter.fromString("JAVA"); // ********** Letter fromString test(3,"Letter fromString", array[1].equals(array[3]) && array[0].equals(letter1)); Word word1 = new Word(Letter.fromString("OBJECT")); Word word2 = new Word(Letter.fromString("CLASS")); word2.labelWord(word1); Word word3 = new Word(Letter.fromString("CODE")); word3.labelWord(word1); // ********** Word toString + Constructor test(4,"Word toString + Constructor", word1.toString().equals("Word: O B J E C T ")); // ********** Word label test(5,"Word label", word2.toString().equals("Word: +C+ -L- -A- -S- -S- ")); // ********** Word label test(6,"Word label", word3.toString().equals("Word: +C+ +O+ -D- !E! ")); // ********** Word label test(7,"Word label", (word1.labelWord(word1)+word1.toString()).equals("trueWord: !O! !B! !J! !E! !C! !T! ")); // ********** Word label test(8,"Word label", (word1.labelWord(word3)+word1.toString()).equals("falseWord: +O+ -B- -J- !E! +C+ -T- ")); WordLL wll = new WordLL(new Word(Letter.fromString("OBJECT"))); String[] arr = {"JOB","TESTING","OBJECTS"};

Word.Java

/** * Create a Word object. */ public class Word { private LinearNode firstLetter; /** * Constructor that receives a Letter array. * @param letters Letter array */ public Word(Letter[] letters) { firstLetter = new LinearNode(letters[0]); LinearNode current = firstLetter; for (int i = 1; i < letters.length; i++) { current.setNext(new LinearNode(letters[i])); current = current.getNext(); } } /** * Overrided toString method. */ @Override public String toString() { String ret = "Word: "; LinearNode current = firstLetter; while (current != null) { ret += current.getElement().toString() + " "; current = current.getNext(); } return ret; } /** * Compares letter objects from words to label them. * @param mystery Word object * @return boolean */ public boolean labelWord(Word mystery) { // Loop over the letters in this word LinearNode current = firstLetter; int i = 0; int j; boolean used; int correct = 0; while (current != null) { used = false; // Set the label of the current letter to UNUSED //current.getElement().setUnused(); // Loop over the letters in the mystery word LinearNode mCurrent = mystery.getFirstLetter(); j = 0; while (mCurrent != null) { // if get words are equal but in different index, set label to USED if (current.getElement().equals(mCurrent.getElement())) { if (i != j) { // Different index current.getElement().setUsed(); } else { //If the index are the same, the letter is correct current.getElement().setCorrect(); correct++; } used = true; } mCurrent = mCurrent.getNext(); j++; } // If the variable 'used' is false, then the letter is unused if (!used) { current.getElement().setUnused(); } current = current.getNext(); i++; } // If the counter 'correct' is equal to the number of elements in the LL, return true return correct == i; } /** * Getter method for firstLetter. * @return LinearNode of Letter object */ public LinearNode getFirstLetter() { return firstLetter; } }

WordLL.Java

/** * Creates a Word Linked List object. */ public class WordLL { private Word mysteryWord; private LinearNode history; /** * Initializes a WordLL object. * @param mystery Word object */ public WordLL(Word mystery) { mysteryWord = mystery; history = new LinearNode(); } /** * Compares to check if the words matches. * @param guess Word object * @return boolean */ public boolean tryWord(Word guess) { boolean result = guess.labelWord(mysteryWord); // Add to front LinearNode newNode = new LinearNode(guess); if (history.getElement() == null) { // history is empty history = newNode; } else { newNode.setNext(history); history = newNode; } return result; } /** * Overrided toString method. */ @Override public String toString() { String ret = ""; LinearNode current = history; while (current != null) { ret += current.getElement().toString() + "\n"; current = current.getNext(); } return ret; } }

WordLLExample. Java

import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class WordLLExamples { private static Scanner scan; private static final int NUMBER_OF_WORDS = 2992; // Number of possible mystery words private static String[] mysteryWord = new String[NUMBER_OF_WORDS]; private static String[] rank = { "9", "10", "J", "Q", "K", "A" }; private static String[] suit = { "C", "D", "H", "S" }; /** * a utility function to create card sets * @return a random Word representing an ascending set of 4 Euchre Cards. * The idea of ascending comes from both the rank (ordered: 9,10,jack,queen,king,ace) * and the suit (ordered: clubs, diamonds, hearts, spades) * in particular the ordering will be: 9C,10C,JC,QC,KC,AC,9D,...,AC,9H,...,AH,9S,...,AS * As well, cards of the same rank will be regarded as being related: so for instance, * 9C, 9D, 9H, and 9S are related */ public static Word ascendingEuchreCards() { // create a combination of (24 choose 4) int[] choice = new int[4]; for (int i = 0; i < choice.length; i++) { boolean taken = false; do { taken = false; choice[i] = pick(24); for (int j = 0; j < i; j++) if (choice[j] == choice[i]) taken = true; } while (taken); } // sort into ascending order for (int i = 0; i < choice.length; i++) { int min = i; for (int j = i; j < choice.length; j++) { if (choice[j] < choice[min]) min = j; } int temp = choice[i]; choice[i] = choice[min]; choice[min] = temp; } // create String representations for of the 24 cards and corresponding families String[] card = new String[4]; int[] family = new int[4]; for (int i = 0; i < choice.length; i++) { card[i] = rank[choice[i] % 6] + suit[(int) Math.floor(choice[i] / 6)]; family[i] = choice[i] % 6; //only the rank is important for the relatedness } return new Word(ExtendedLetter.fromStrings(card, family)); } /* Read input file 'words' that contains about 3000 mystery words */ public static void readMysteryWords(String filename) { try { File myObj = new File(filename); Scanner myReader = new Scanner(myObj); int i = 0; while (myReader.hasNextLine()) { mysteryWord[i++] = myReader.nextLine(); // System.out.println(mysteryWord[i-1]); } myReader.close(); } catch (FileNotFoundException e) { System.out.println("An error occurred opening file \'words\'."); e.printStackTrace(); } } public static int pick(int n) { // return an random choice 0-(n-1) return (int) Math.floor(Math.random() * n); } public static void main(String[] args) { scan = new Scanner(System.in, "UTF-8"); //readMysteryWords("words"); //playEnglish(); playCards(); System.out.println("end of testing."); } /* Play WordLL with words of varying lengths */ public static void playEnglish() { String randomWord = mysteryWord[pick(mysteryWord.length)].toUpperCase(); Word mystery = new Word(Letter.fromString(randomWord)); String message = "Enter a word of length " + randomWord.length() + " (XX to stop):"; WordLL wll = new WordLL(mystery); System.out.print(message); String wordStr = scan.next().toUpperCase(); while (!wordStr.equals("XX")) { Word word = new Word(Letter.fromString(wordStr)); if (wll.tryWord(word)) { System.out.println("Success!"); wordStr = "XX"; } else { System.out.println(wll); System.out.print(message); wordStr = scan.next().toUpperCase(); } } } /* Play WordLL with Euchre Cards rather than using the implicit patterns of language this game relies on * an ordering of the cards and the ranks of a card to give you information about the mystery "Word" * which is just a sequence of 4 cards. */ public static void playCards() { Word mystery = ascendingEuchreCards(); System.out.println("To Enter cards use this format: AC,KC,9H,1S or R (for a random guess)"); String message = "Enter 4 Cards (XX to stop):"; WordLL wll = new WordLL(mystery); // -------------------- Word word = null; System.out.print(message); String wordStr = scan.next().toUpperCase(); while (!wordStr.equals("XX")) { try { if (wordStr.charAt(0) == 'R') // this option saves on typing and lets the player start with some information word = ascendingEuchreCards(); else { // construct a card Word from the textual input String[] card = new String[4]; int[] rank = new int[4]; for (int i = 0; i < card.length; i++) { card[i] = wordStr.substring(i * 3, i * 3 + 2); if (card[i].charAt(0)=='1') card[i]="10"+card[i].charAt(1); //ugly //System.out.print(card[i]); rank[i] = "91JQKA".indexOf(card[i].charAt(0)); } word = new Word(ExtendedLetter.fromStrings(card, rank)); } if (wll.tryWord(word)) { System.out.println("Success!"); wordStr = "XX"; } else { System.out.println(wll); // shows the outcome of the guess through the WordLL history System.out.print(message); wordStr = scan.next().toUpperCase(); } } catch (Exception e) { System.out.println(e); wordStr = "XX"; } } } }

You Might Also Like to Read