Project 2 CSC-171
Skyscraper Puzzle
3/9/2021
1 Problem
Imagine a city block of skyscrapers whose area is surrounded by streets. Skyscrapers of
various heights are evenly distributed into the rows and columns of the block. A skyscraper
puzzle is one where you are asked to organize the skyscrapers into a valid configuration that
meets all the criteria for the puzzle.
1.1 Puzzle Details
These game rules, along with sample puzzles, can be found at:
http://www.brainbashers.com/s...
Figure 1: Skyscraper Rules
1
Figure 2: Skyscraper ”Clues” or ”Looking Values”
Figure 3: Skyscraper Puzzle Solution
1.2 Warmup
Try to solve the puzzle in the figure below – this part is just for fun!
2
2 Project Requirements
Although it would be a very fun exercise to write a program to solve skyscraper puzzles, for
this project you are only asked to write a program to verify solutions.
You should design a Skyscraper class, with private variables representing the state (i.e., the
board configuration) as well as the following methods:
- public boolean verifyPlacement() – this method should return true if the placement
is valid (i.e., every row and every column contains each number exactly once.).
Otherwise, this method should return false. - public void loadPuzzle() – this method should read a puzzle from standard input
in the format specified below. This method must update the relevant instance variables
for the object. - public void print() – this method should print the puzzle to standard output following
the format specified below. - public void printWithVisibility() – this method should print the puzzle along
with the visibility scores on the outside. - A very simple main method which loads the puzzle from the user, then checks validity
and prints the result. If it’s valid, it also prints the puzzle with visibility.
Continued on next page.
3
2.1 Input and Output Format
The loadPuzzle() method reads the configuration from standard input. This is the format
of the input and the required output for basic printing: - The first line contains the square dimension of the board, DIM, as a single integer.
- The remaining DIM lines will each contain exactly DIM positive integers, separated by
a single space, but with no trailing space after the last integer. These lines represent
the heights of the skyscrapers in the same layout as the puzzle. - All subsequent lines should be ignored.
For example, the puzzle in Figure 3 is described by the input:
4 - 3 2 1
- 4 3 2
- 2 1 4
- 1 4 3
2.1.1 printWithVisibility Format
The printWithVisibility method should output a graphical representation of the puzzle,
along with the visibility scores calculated according to the rules described earlier.
For the puzzle in Figure 3, the output of this method should be: - 2 3 3【CSC-171 Skyscraper Puzzle】1|4 3 2 1|4
2|1 4 3 2|3
2|3 2 1 4|1
2|2 1 4 3|2 - 3 1 2
2.2 Design and Documentation
You are required to have exactly the public methods described in this document. You are
also encouraged (but not required) to have helper methods. (These may be particularly
helpful when verifying the puzzle and when calculating visibility.) All your helper methods
should be declared private. If you have any class variables, they must be declared private
as well.
Because it complicates grading, you are not allowed to have any package declarations. Including
package declarations in your submission will cause you to lose points.
As with all Java programs, your program filename must match the public class exactly,
therefore your program must be named Skyscraper.java and your class name must be
named Skyscraper.
4
Please include a readme in this submission which describes the state of your code. If everything
works, you can simply write that everything works. Otherwise, describe what does and
does not work when you submit it. Your readme should be plain text – no docx, rtf, or pdf
files please. - Grading
Your grade for this assignment will be based on the following
推荐阅读
- COMP20008 处理数据
- java|Java 学习路线
- 程序员|作为一个Java程序员,西安java工资统计
- 日志中台不重不丢实现浅谈
- 课程设计|SpringBoot+vue前后端分离的社区维修平台
- 课程设计|Springboot+vue前后端分离的考研资讯平台
- 课程设计|Springboot+vue前后端分离的租房网站
- 课程设计|Springboot+vue项目医院急诊系统
- 毕业设计|基于springboot的学生毕业选题管理系统