ICS H32 Fall 2024
Project 0B: Square One

Due date and time: Friday, October 4, 11:59pm


Introduction

In this course, you will continue to develop the programming skills you began building in your prior coursework, by learning Python and also by honing an ever-sharpening focus on solving larger, more complex problems at a level of quality that edges closer to work done by professionals. While the projects we'll work on this quarter might be simple for someone who has years of prior experience, we will nonetheless attack these problems with the same approach that a professional software engineer might. We'll consider each problem in its full depth, think about how to work on it incrementally, spend some time testing our solution to ensure that it works correctly, and make sure that we've got the little details correct and not just the big ideas. Larger programs that solve real-world problems succeed or fail on being completely correct, and even a one-character mistake in input or output can sometimes make all the difference, so we need to get accustomed to that level of scrunity, so that we can apply it when it is warranted.

This project asks you to do two things:

  1. Set up your development environment, so you will be ready to work on your projects this quarter.
  2. Write a short program and submit it, to ensure that you're aware of the mechanisms of the course — how to write short Python programs, how to submit your work — and so you can become acclimated to how automated testing will be used to grade at least some of your work this quarter.

Setting up your development environment

It is very common in real-world software development jobs to be given, at the outset of a new job, a list of tools that you will be required to use. Flexibility is great, and it's nice to be able to choose one's own toolset, but, unfortunately, many software tools introduce constraints on how a program can be written, how its components can be arranged, what functions can be called, what documentation can be written and how, what additional software it can be combined with, how it can be "built" to be distributed to end users, and so on. So, like it or not, real-world software development usually requires at least some of the tools to be set in stone and used by all members of a team, even if not all members have the same preferences; this is simply a reality that software developers have to face, because smooth collaboration in a team environment is usually more important than satisfying every individual's whim. (While your work in this course is individual, you'll nonetheless be working with a team of course staff, who won't be able to support everyone's individual tools and bespoke preferences.)

Since we will be poking our heads into a fair number of darker "real-world" corners in this course, it becomes necessary for us to agree on the set of development tools that we'll use. Not only will it be important to agree on the right tools, but it will be important to agree to use the right versions of those tools, as each differs in not-insignificant ways. One goal of this project is to introduce you to those tools, provide instructions on how to install and configure them on your own machines, and get you ready to use them for your work this quarter.

Writing a short program

This project will also require you to write and submit a short program. Unlike most of our projects, we're less concerned about how you solve the problem than we normally will be. There are no points for what we call "quality of solution," meaning that issues like style, organization of your program, and so on, are not relevant on this project. All that matters is that the program works, but that is a very precise requirement: The output of your program has to be correct to the character to receive full credit. Paying attention to the exact requirements, then, will be paramount.


The ICS H32 development environment

The development environment for this course will be the IDLE environment that is included within Python. Furthermore, we'll be standardizing on a particular version of Python (3.12) and certain configuration that was less important previously will become more important to us this quarter. We all need to be on version 3.12 for this course, and using any version other than 3.12 exposes you to risks that will interfere with your work and your ability to obtain a high score when we grade it — and note that you bear all of this risk.

So, your best bet is to follow the instructions linked below, so that you can be sure that you're set up in a way that's compatible with how your work will be graded.

The particulars of getting set up

If you will be doing your work solely using machines in the ICS labs, you're ready to go! The software you need is already installed and configured properly, so there's nothing you'll need to do for this project. Note, though, that some of our labs are "laptop-only" sections, so there may not always be a workstation available to you that has the necessary tools installed on it.

So, assuming that you will be wanting to do at least some of your work on your own machine, what you do next depends on what operating system you're running on your machine.

Once you're done following the installation instructions for your chosen operating system, you're ready to proceed with your Python-based work in this course, beginning with this project.


The program

Your program is required to read a single line of input from the user (without printing any input prompt), which is expected to be a positive integer n (i.e., n will be neither zero nor negative). You can freely assume that your program will be given a positive integer, and it's not important what you do in any other case; we'll only test your program with positive integer input. You can also freely assume that n will not be greater than 999.

After reading the input, your program will print a downward block diagonal of size n. The precise format of a downward block diagonal is best demonstrated with an example. If the input to the program was 4, the output would look like this:


+-+
| |
+-+-+
  | |
  +-+-+
    | |
    +-+-+
      | |
      +-+

A few additional requirements apply:

This is a complete specification of the structure of a downward block diagonal; the description is enough to solve the problem, so we will not be answering any additional questions about its structure. However, we are providing a tool that will give you a basic understanding of whether your program is reading the correct input and generating output in the correct format.

Naming and organizational requirements

How you organize your program is, for the most part, up to you, with a couple of requirements that you'll need to follow.

Other than that, anything goes; you can organize your solution in any way you'd like. Note that future projects will take what we call "quality of solution" a lot more seriously, but the name of the game in this warm-up project is simply to submit a program that works.

Sanity-checking your output

We are also providing a tool that you can use to sanity-check whether you've followed the basic requirements above. It will only give you a "passing" result in these circumstances:

Note that additional test inputs will be used when we grade your project. The way to understand the sanity checker's output is to think of it this way: Just because the sanity checker says your program passes doesn't mean it's perfect, but if you cannot get the sanity checker to report that your program passes, it surely will not pass all of our automated tests.

Running the sanity checker is simple. First, download the Python module linked below:

Put that file into the same directory as your project0b.py file, but don't copy this code into your project0.py file or submit it. Running the project0b_sanitycheck.py module — for example, by loading it in IDLE and pressing F5 (or selecting Run Module from the Run menu) — will run the sanity checker and report a result, which will be printed to the Python shell.

How we will grade your submission

Unlike other projects, this project will be graded on a 2-point scale, with the 2 points being allocated completely to whether or not you submitted something that meets all of the above requirements. The following rubric will be used:


Deliverables

Submit your project0b.py (and no others) to Canvas. There are a few rules to be aware of.

Can I submit after the deadline?

This project is not included in the late work policy for this course. The objective is not just that you do this one, but that you do it early enough to be of benefit, so it needs to be completed during the initial days of the course and submitted before the due date above. Submissions beyond that deadline will not be considered under any circumstances.

The late work policy for this course — which does not apply to this project, but applies to most of the others — is described in the section titled Late work at this link.

What do I do if Canvas adjusts my filename?

Canvas will sometimes modify your filenames when you submit them (e.g., by adding a numbering scheme like -1 or a long sequence of hexadecimal digits to its name). In general, this is fine; as long as the file you submitted has the correct name prior to submission, we'll be able to obtain it with that same name, even if Canvas adjusts it.