Starting from:

$35

Post-Apocalyptic Poetry Interpreter Solution

The Scene.

The year is 2217. World War IV has recently ended. It engulfed planet earth in tragedy, and in its aftermath, governments everywhere have cracked down on artistic expression. By stifling the strong emotions that are often expressed through art, the governments of the world hope to avert future wars.

But the human spirit is resilient. People all over the globe have joined the Poetry Movement in a commitment to continue creating and sharing poetry of all kinds. They are determined to prevent this post-apocalyptic world from becoming a post-artistic world.

However, they must be stealthy. If they are caught transmitting their poetry, the punishment is prison for an indefinite length of time.

The poets have devised a method of communication that embeds their poems into seemingly random strings of hexadecimal digits. Because of your reputation as a trusted member of the Poetry Movement, you have been approached by a young man in need of your help. He chose to forego all the computer science classes offered in his elementary, middle, and high school, so he doesn't have the skills to encode or decode poetry. But his beloved was stranded on the other side of the world when war broke out, and she has been sending him encrypted poems.

Your mission is to assist this young man to decode the poems from his beloved. When you have done this, your program will also be able to decode poems of every kind! You will be supporting love, family, and freedom for poets the world over!

You should know: The poems that are created in this post-apocalyptic expressionism are different than the poems of old. They are less sentential in form, and more like abstract word art. This structure allows them to much more easily evade detection. But as you will soon see, they can be just as meaningful.
The Task.

DO NOT start your own code from scratch. Paste the skeleton code provided (Canvas -> files -> Project 2 -> PoetryMovementSkeletonCode.java) to start your own .java file. Read all of these instructions before doing so, because there are requirements for naming your file and for importing the necessary libraries that you will be using.

The encoded poems that you will take as input appear to be a randomly formatted string of hex digits.

For example, here is one (hex digits are NOT case sensitive):

6C6F7665

In order to decode this hex string into the words it contains, you must pair up the hex digits – in this case, it will be 6C, 6F, 76, 65. You must transform those hex digit pairs into their corresponding ASCII character. (http://www.ascii-code.com/)

6C = l

6F = o

76 = v

65 = e

This hex string, 6C6F7665, actually spells "love". **Note: you do NOT need a long if-else or switch statement to translate these hex digits into letters. You can do one-line character arithmetic that translates the hex code into a valid English letter.

After you have decoded your hex string into a string of English letters, the real computational task begins.

You must search through the string of English letters to identify all words that are in the English language. We are providing you with a toolkit to check if a word is in the dictionary, so you don’t have to worry about that part (you will just call the method isWord() which is provided in the skeleton code).

You must identify words of length 4, 5, and 6. Traverse your string checking for words of all of those lengths. The same characters may be members of more than one word.



You must download the skeleton code provided by the teaching staff and use it as the starting point for your own code.



Here are some examples of how some of your methods should work:

An example of hex character translation: (for an odd number of digits)

0f is mapped to p

6f is o in the ascii table
77 is w in the asci table



Ex: String letter := “fourgooddogsswam”, int wordSize := 4

This method would check these four-letter substrings:



four

ourg

urgo

rgoo

good

oodd

oddo

ddog

dogs

ogss

gssw

sswa

swam



The string array returned from your method would be ["four", "good", “dogs", “swam”, null, null, null, null, null, null, null, null, null]

It is possible that the string of hex digits is too short to support looking for some lengths of words. For example, if only six hex digits are provided, that would translate into three English letters, which cannot produce a word of lengths 4, 5, or 6. In that case your program should not crash, it should simply not give any output. You will have to handle this case within your methods. If the input is long enough to find words of size 4 but not larger, or up to size 5 but not larger, you must find those words and output a poem as normal. The program will simply not check for larger words if the input is not long enough to support that length of word.

Formatting the poem for output.

You must format the poem as follows for output. Note that your method will be returning a formatted String and the ONLY println will happen in the main method which is fully provided for you. To insert tabs and line breaks into your String, you will insert \t and \n characters, respectively. For example, the

string “theirs earth mine\n\tyours ours\n\t\tours\n\t\t\tours” will print as follows. Note the line break and the tabs. The \n and \t are treated as one single special character in Java.

theirs earth mine
yours ours
ours
hers


All poems are formatted with at most one word of each length per line. First, the word of longest length

    (6) appears if there is such a word that hasn’t already been placed in the poem. Then a space, then a word of the medium length (5) if available. Then, finally a word of the shortest length (4) if available. Each successive line should be indented one additional tab more than the previous line. See the example output poems at the end of this document for details on how it works with different sets of words.

Instructions for setting up your project workspace:

First, create your project. In Eclipse, click File -> New -> Java Project. Name it PoetryMovement. Make sure that you check the option to create a separate src folder.

Then, in the src folder that was created, make a new Java Class (a new .java file will result). This file will be your main source code, where you will create your solution to the project. Name this Java file

PoetryDecoder.

Now, in your PoetryDecoder.java file is where you will copy-paste the skeleton code provided for you below. This is also the file you will turn in for grading. You will only submit PoetryDecoder.java.

Finally, you must add an external set of utilities to your project space.

First, download the jar file with utilities. Add this .jar (Java Archive, a kind of zip file) to your project so that your code will be able to call the packages in it to determine what is a word. After you have downloaded the .jar to your computer, right-click on your project name in Eclipse and choose Properties. On the left bar click Java Build Path. On the top tabs, click Libraries. Then click the Add External Jar button on the right. A file chooser will appear. Navigate to wherever you saved the .jar file we provided. (It may be in your Downloads folder by default depending on how you have your computer set up.) After you do this, all the import statements in the skeleton code will compile! Before you import the jar, the skeleton code won’t be able to find the packages we import (for example, org.jsoup.Jsoup, etc). They are in that jar that you add to your project.

Instructions for submitting:

Turn in only the PoetryDecoder.java file on Canvas. If you do not follow the naming requirements above or if you rename any methods (or change their signatures) in the skeleton code provided, your code will lose all points associated with automatic testing. The teaching staff will automatically test your code using JUnit testing, which we will cover in class later. JUnit testing requires that our code be able to call your code by the precise method names specified, which is why you must not change them. There is a second reason that this structure benefits you: it helps you learn how to organize a program into methods that make sense and communicate with each other.


Documentation:

The skeleton code has a lot of instructions for you. Before you turn in your code, replace the instructional documentation with appropriate comments of your own. Some of the existing comments will remain, but you should comment each method and the class as you normally would.



Test cases:

Please enter your input:
6c6f766564

loved love

Please enter your input:
736b69657368667368696e6568666c6f76657070666c6f77626277777468656d
skies kies
shine shfs
shin
love
flow

Please enter your input:
7368696e657362626c6f76657071707175706f6e72776f726c64

shines shine shin
world love

Please enter your input:
6d696e65707068656172746e6d75706f6e7161686561727473676e657665726170617274
hearts heart mine
heart hear
never hear
apart arts
neve
ever
apar
part

(Note this took 1 min and 10 seconds to display, be patient!!)

Please enter your input:
62616e616e6178786170706c656f7461636f6f72616e6765677265656e626c75656f6365616e706f6f6c6

46f6e65

banana apple taco
orange orang oran

range rang
green blue

ocean pool
done




















Please enter your input: 010413130411606e006b0405db826bee6f02659c5ba better snake flak
flake lake
ocean

More products