CSE 143: Computer Programming II Spring 2015 HW7: 20 Questions (due Thursday, May 28, :30pm)

Similar documents
CSE 143: Computer Programming II Summer 2015 HW6: 20 Questions (due Thursday, August 13, :30pm)

CSE 143: Computer Programming II Summer 2017 HW5: Anagrams (due Thursday, August 3, :30pm)

CSE 143: Computer Programming II Summer 2017 HW4: Grammar (due Tuesday, July :30pm)

CSE 143: Computer Programming II Winter 2019 HW6: AnagramSolver (due Thursday, Feb 28, :30pm)

CSE 143: Computer Programming II Spring 2015 HW2: HTMLManager (due Thursday, April 16, :30pm)

CSE 143, Winter 2013 Programming Assignment #8: Huffman Coding (40 points) Due Thursday, March 14, 2013, 11:30 PM

15-110: Principles of Computing, Spring 2018

Tips from the experts: How to waste a lot of time on this assignment

Tips from the experts: How to waste a lot of time on this assignment

Advanced Java Concepts Unit 5: Trees. Notes and Exercises

CSCI Lab 9 Implementing and Using a Binary Search Tree (BST)

Account joeacct = new Account (100, new Account (500)); Account joeacct = new Account (100, new Account (500, null));

Due: 9 February 2017 at 1159pm (2359, Pacific Standard Time)

Blocky: A Game of Falling Blocks

CSE 12 Abstract Syntax Trees

CSE143X: Computer Programming I & II Programming Assignment #9 due: Monday, 11/27/17, 11:00 pm

Background: This programming assignment focuses on implementation and usage of a graph data structure.

CSE 142/143 Unofficial Commenting Guide Eric Arendt, Alyssa Harding, Melissa Winstanley

Classes, interfaces, & documentation. Review of basic building blocks

Compuer Science 62 Assignment 10

CIS 121 Data Structures and Algorithms with Java Spring 2018

Animals Due Part 1: 19 April Part 2: 26 April

CIS 121 Data Structures and Algorithms with Java Spring 2018

Background: This programming assignment focuses on implementation and usage of a graph data structure.

CSE143X: Computer Programming I & II Programming Assignment #10 due: Friday, 12/8/17, 11:00 pm

Building Java Programs

CS 142 Style Guide Grading and Details

If you took your exam home last time, I will still regrade it if you want.

Introduction to Programming Using Java (98-388)

Tips from the experts: How to waste a lot of time on this assignment

Programming Assignment: recursion, recursion, recursion Due date: Thursday, July 26 at 11:29 am

CS211 Computers and Programming Matthew Harris and Alexa Sharp July 9, Boggle

Project 3: Implementing a List Map

Our second exam is Thursday, November 10. Note that it will not be possible to get all the homework submissions graded before the exam.

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

Com S 227 Spring 2018 Assignment points Due Date: Thursday, September 27, 11:59 pm (midnight) "Late" deadline: Friday, September 28, 11:59 pm

Hangman YEAH Hours. Thursday, February 14, 7:30 9:00PM Andrew Tierno

The name of our class will be Yo. Type that in where it says Class Name. Don t hit the OK button yet.

CS3114 (Fall 2013) PROGRAMMING ASSIGNMENT #2 Due Tuesday, October 11:00 PM for 100 points Due Monday, October 11:00 PM for 10 point bonus

EECE.2160: ECE Application Programming

Project 1 Balanced binary

CS 3114 Data Structures and Algorithms DRAFT Project 2: BST Generic

CSE143 Summer 2008 Final Exam Part A KEY August 21, 2008

Out: April 19, 2017 Due: April 26, 2017 (Wednesday, Reading/Study Day, no late work accepted after Friday)

CS 201 Advanced Object-Oriented Programming Lab 6 - Sudoku, Part 2 Due: March 10/11, 11:30 PM

CMPSCI 187 / Spring 2015 Sorting Kata

XC Total Max Score Grader

Array Based Lists. Collections

Programming Standards: You must conform to good programming/documentation standards. Some specifics:


Assignment #4 Hangman Due: 10:30am on Friday, Febuary 17th This assignment may be done in pairs (which is optional, not required)

Good Coding Practices Spring 2018

Procedural Abstraction

Introduction to Programming System Design CSCI 455x (4 Units)

12/22/11. Java How to Program, 9/e. public must be stored in a file that has the same name as the class and ends with the.java file-name extension.

CMPSCI 187 / Spring 2015 Postfix Expression Evaluator

These are notes for the third lecture; if statements and loops.

CS 314 Exam 2 Spring

Expert Systems artificial intelligence

Assignment #4 Hangman Due: 11am on Monday, May 14th This assignment may be done in pairs (which is optional, not required)

Midterm 2. 7] Explain in your own words the concept of a handle class and how it s implemented in C++: What s wrong with this answer?

This examination has 11 pages. Check that you have a complete paper.

Adam Blank Lecture 3 Autumn 2016 CSE 143. Computer Programming II

CSE 143. More ArrayIntList; pre/post; exceptions; debugging. Computer Programming II. CSE 143: Computer Programming II

Assignment #4 Hangman Due: 3:15pm on Monday, November 3rd Your Early Assignment Help (YEAH) hours: 4:15pm-5:15pm, Friday, October 24th in Hewlett 200

CMPSCI 187 / Spring 2015 Hangman

Soda Machine Laboratory

Getting Started. Excerpted from Hello World! Computer Programming for Kids and Other Beginners

CSE332: Data Abstractions Lecture 22: Shared-Memory Concurrency and Mutual Exclusion. Tyler Robison Summer 2010

1 Epic Test Review 2 Epic Test Review 3 Epic Test Review 4. Epic Test Review 5 Epic Test Review 6 Epic Test Review 7 Epic Test Review 8

CS 251 Intermediate Programming Methods and More

Computer Science E-119 Fall Problem Set 3. Due before lecture on Wednesday, October 31

This sheet must be the cover page for every programming assignment. Total

Programming Project 1

Second Examination Solution

Java How to Program, 10/e. Copyright by Pearson Education, Inc. All Rights Reserved.

Lab 4: Super Sudoku Solver CSCI 2101 Fall 2017

CSE 143 Lecture 10. Recursion

Computer Science E-119 Fall Problem Set 1. Due before lecture on Wednesday, September 26

1 Inheritance (8 minutes, 9 points)

Implementing a List in Java. CSE 143 Java. Just an Illusion? List Interface (review) Using an Array to Implement a List.

Java for Non Majors. Final Study Guide. April 26, You will have an opportunity to earn 20 extra credit points.

Project Compiler. CS031 TA Help Session November 28, 2011

Lab 2: File Input and Output

There are several files including the start of a unit test and the method stubs in MindNumber.java. Here is a preview of what you will do:

Advanced Java Concepts Unit 5: Trees. Notes and Exercises

Computer Science CSC324 Wednesday February 13, Homework Assignment #3 Due: Thursday February 28, 2013, by 10 p.m.

Week 8: Operator overloading

Hello World! Computer Programming for Kids and Other Beginners. Chapter 1. by Warren Sande and Carter Sande. Copyright 2009 Manning Publications

CSCI 200 Lab 3 Using and implementing sets

Lecture Notes 4 More C++ and recursion CSS 501 Data Structures and Object-Oriented Programming Professor Clark F. Olson

CMSC 201 Spring 2018 Project 3 Minesweeper

CSE 142, Autumn 2018 Programming Assignment #9: Critters (20 points) Due Tuesday, December 4th, 9:00 PM

CS ) PROGRAMMING ASSIGNMENT 11:00 PM 11:00 PM

Recursive Data and Recursive Functions

CSE 331 Midterm Exam Sample Solution 2/18/15

Type Hierarchy. Comp-303 : Programming Techniques Lecture 9. Alexandre Denault Computer Science McGill University Winter 2004

Homework #10 due Monday, April 16, 10:00 PM

Hangman - Compsci 201

There are many other applications like constructing the expression tree from the postorder expression. I leave you with an idea as how to do it.

Transcription:

CSE 143: Computer Programming II Spring 2015 HW7: 20 Questions (due Thursday, May 28, 2015 11:30pm) This program focuses on binary trees and recursion. Turn in the following files using the link on the course website: QuestionsGame.java A class that represents a tree of questions and answers QuestionNode.java A class that represents a single question and its answers You will need the support files QuestionMain.java, question.txt, and big-question.txt; place these in the same folder as your program or project. You should t modify the provided files. The code you submit must work properly with the unmodified versions. The Game of Twenty Questions 20 Questions is a guessing game in which the objective is to ask / questions to determine an object. In our version, the human begins a round by choosing some object, and the computer attempts to guess that object by asking a series of / questions until it thinks it kws the answer. Then, the computer makes a guess; if its guess is correct, the computer wins, and otherwise you win. For example, consider the following game: Am I right? (y/n)? y Awesome! I win! In this assignment, you will create classes QuestionsGame and QuestionNode to represent the computer s tree of / questions and answers for playing games of 20 Questions. You are provided with a client QuestionMain.java that handles user interaction and calls your tree s methods to play games. QuestionNode The contents of the QuestionNode class are up to you. Though we have studied trees of ints, you should create des specific to solving this problem. Your QuestionNode class should have at least one constructor used by your tree. Your de s fields must be public. Any fields representing data must be final. QuestionNode should t contain any actual game logic. It should only represent a single de of the tree. QuestionsGame This class represents a game of 20 Questions. It keeps track of a binary tree whose des represent questions and answers. (Every de s data is a string representing the text of the question or answer.) The leaves of the tree represent possible answers (guesses) that the computer might make. All the other des represent questions that the computer will ask to narrow the possibilities. The left branch indicates the next question the computer asks if the answer is, and the right branch is the next question if the answer is. Note that even though the name of the game is 20 questions, the computer will t be limited to only twenty; the tree may have a larger height. 1

QuestionsGame should have the following constructors: public QuestionsGame(String object) This constructor should initialize a new QuestionsGame object with a single leaf de representing the object object. You may assume the String is t null. To get main to use this constructor, you should supply an empty file or one that doesn t exist. public QuestionsGame(Scanner input) This constructor should initialize a new QuestionsGame object by reading from the provided Scanner containing a tree of questions in standard format. You may assume the Scanner is t null and is attached to a legal, existing file in standard format. Make sure to read entire lines of input using calls on Scanner s nextline. QuestionsGame should also implement the following methods: public void savequestions(printstream output) This method should store the current questions tree to an output file represented by the given PrintStream. This method can be used to later play ather game with the computer using the questions from this one. You should throw an IllegalArgumentException if the PrintStream is null. public void play() This method should use the current question tree to play one complete guessing game with the user, asking / questions until reaching an answer object to guess. A game begins with the root de of the tree and ends upon reaching an answer leaf de. If the computer wins the game, this method should print a message saying so. Otherwise, this method should ask the user for the following: what object they were thinking of, a question to distinguish that object from the player s guess, and whether the player s object is the or answer for that question. User Input: Yes and No At various points in this assignment, you will need to get a or answer from the user. You should consider any word that begins with y to be (Yes, YEs, Yup, yeehaw), and anything else to be a. The easiest way to do this (assuming console is a Scanner initialized to System.in) is the following: console.nextline().trim().tolowercase().startswith("y") Question Tree Standard Format In savequestions and the second constructor, your class will be interacting with files containing questions. Just like with BNF where we used a common format so everyone could share the same grammars, here, we specify a common question tree format. A single QuestionNode should be represented as a n-empty sequence of line pairs. The first line of the pair should contain either or to differentiate between questions (branches) and answers (leaves). The second line of the pair should contain the text for that de (the actual question or answer). The des of the tree should appear in pre-order. The readtree and writetree methods from section will be very helpful for any method that deals with this format. 2

Full Example Walk-Through spec-questions.txt The following output log shows one game being played on the above tree: Welcome to CSE 143 Game of N-Questions! Which questions file would you like to use? spec-questions.txt Let's play! Please choose your object, and I'll start guessing. Press Enter when you're ready to begin! Am I right? (y/n)? y Awesome! I win! Do you want to play again (y/n)? n Initially, the computer is t very intelligent, but it grows smarter each time it loses a game. If the computer guesses incorrectly, it asks you to give it a new question to help in future games. For example, suppose in the preceding log that the player was thinking of a car instead. You might get this game log: Welcome to CSE 143 Game of N-Questions! Which questions file would you like to use? spec-questions.txt Let's play! Please choose your object, and I'll start guessing. Press Enter when you're ready to begin! Am I right? (y/n)? n Boo! I Lose. Please help me get better! What is your object? car Please give me a / question that distinguishes between car and. Does it get stuck in traffic? Is the answer "" for car? (y/n)? y Do you want to play again (y/n)? n The computer takes the new information from a lost game and uses it to replace the old incorrect answer de with a new question de that has the old incorrect answer and new correct answer as its children. 3

After the preceding log, the computer s overall game tree would be the following: spec-questions.txt Does it get stuck in traffic? car car Does it get stuck in traffic? Note that, as usual, your output must match the output in the specification exactly. The output comparison tool will be helpful to make sure that your output is identical. Creative Aspect (myquestions.txt) Along with your program, turn in a file myquestions.txt that represents a saved question tree in the format specified from your savequestions method. For full credit, this must be in proper format, have a height of at least 5, and be your own work. Development Strategy We suggest that you develop the program in the following stages: (1) Before you begin, you should stub the methods you intend to write. In other words, you want to be able to test using QuestionsMain; so, you should provide dummy methods that do thing for it to call. (2) First, you should decide what fields belong in the QuestionNode and QuestionsGame classes. Once you ve chosen the fields, you should implement the first constructor (the one that takes a String). (3) Then, you should implement play. At this point, you ll be able to play the game, even though you aren t able to save or load any questions. When you play, you can add questions one by one and play with your game to check if it s working. (4) Next, you should implement savequestions (because it s easier than loading them). Make sure to look back at writetree from the section handout! (5) Finally, you should implement the second constructor which reads in a question tree. Make sure to look back at readtree form the section handout! 4

Style Guidelines and Grading Part of your grade will come from appropriately utilizing binary trees and recursion to implement 20 questions as described previously. Every method with complex code flow should be implemented recursively, rather than with loops. A full-credit solution must have zero loops. We will also grade on the elegance of your recursive algorithm; don t create special cases in your recursive code if they are unnecessary. x = change(x) An important concept introduced in lecture was called x = change(x). This idea is related to proper design of recursive methods that manipulate the structure of a binary tree. You must follow this pattern on this assignment to receive full internal correctness credit. For example, at the end of a game lost by the computer, you might be tempted to morph what used to be an answer de of the tree into a question de. Since the data in your question de must be final, this should t compile. One of the reasons this is the case is question des and answer des are fundamentally different kinds of data. You can rearrange where des appear in the tree, but you shouldn t turn a former answer de into a question de just to simplify the programming you need to perform. Avoid Redundancy Create helper method(s) to capture repeated code. As long as all extra methods you create are private (so outside code cant call them), you can have additional methods in your class beyond those specified here. If you find that multiple methods in your class do similar things, you should create helper method(s) to capture the common code. Generic Structures You should always use generic structures. If you make a mistake in specifying type parameters, the Java compiler may warn you that you have unchecked or unsafe operations in your program. If you use jgrasp, you may want to change your settings to see which line the warning refers to. Go to Settings/Compiler Settings/Workspace/Flags/Args and then uncheck the box next to Compile and type in: -Xlint:unchecked Data Fields Properly encapsulate your objects by making your fields private. (You can and should make your fields in QuestionNode public.) Avoid unnecessary fields; use fields to store important data of your objects but t to store temporary values only used in one place. Fields should always be initialized inside a constructor or method, never at declaration. Java Style Guidelines Appropriately use control structures like loops and if/else statements. Avoid redundancy using techniques such as methods, loops, and factoring common code out of if/else statements. Properly use indentation, good variable names, and types. Do t have any lines of code longer than 80 characters. Commenting You should comment your code with a heading at the top of your class with your name, section, and a description of the overall program. All method headers should be commented as well as all complex sections of code. Make sure you describe complex methods inside methods. Comments should explain each method s behavior, parameters, return values, and assumptions made by your code, as appropriate. The ArrayIntList class from lecture provides a good example of the kind of documentation we expect you to include. You do t have to use the pre/post format, but you must include the equivalent information including the type of exception thrown if a precondition is violated. Write descriptive comments that explain error cases, and details of the behavior that would be important to the client. Your comments should be written in your own words and t taken verbatim from this document. 5