Problem 3: Word Transformation

advertisement
Problem 1: Sum it Up
Source file:
Input file:
Output file:
sumitup.{c|cpp|java}
sumitup.in
sumitup.out
Problem description:
Given a specified total t and a list of n integers, find all distinct sums using numbers from
the list that add up to t. For example, if t=4, n=6, and the list is {4,3,2,2,1,1}, then there
are four different sums that equal 4: 4, 3+1, 2+2, and 2+1+1. (A number can be used
within a sum as many times as it appears in the list, and a single number counts as a
sum.) Your job is to solve this problem in general.
Input:
The input file will contain one or more test cases, one per line. Each test case contains t,
the total, followed by n, the number of integers in the list, followed by n integers x1, x2,
…, xn. If n=0 it signals the end of the input; otherwise, t will be a positive integer less
than 1000, n will be an integer between 1 and 12 (inclusive), and x1, x2, … xn will be
positive integers less than 100. All numbers will be separated by exactly one space. The
numbers in each list appear in non-increasing order, and these may be repetitions.
Output:
For each test case, first output a line containing “Sum of “, the total, and a colon. Then
output each sum, one per line; if there are no sums, output the line “NONE”. The
numbers within each sum must appear in non-increasing order. A number may be
repeated in the sum as many times as it was repeated in the original list. The sums
themselves must be sorted in decreasing order based on the numbers appearing in the
sum. In other words, the sums must be sorted by their first number; sums with the same
first number must be sorted by their second number; sums with the same first two
numbers must be sorted by their third number, and so on. Within each test case, all sums
must be distinct; the same sum cannot appear twice.
Example:
Input:
46432211
53211
400 12 50 50 50 50 50 50 25 25 25 25 25 25
00
Output:
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25
Problem 2: Palindromes
Source file:
Input file:
Output file:
palind.{c|cpp|java}
palind.in
palind.out
Problem description:
A palindrome is a string that reads the same forward (from left to right) and backward
(from right to left). An L-palindrome is a string which is a palindrome if you ignore its
first character. An R-palindrome is a palindrome if its last character is ignored. Your job
is, given a string, to decide whether it is a palindrome, an L-palindrome, or an Rpalindrome.
Input:
Each input line contains only a string of at least 1 and at most 25 uppercase letters. End
of input is signaled by a line containing only the word END, which should be processed.
Output:
For each input string, output one or more of the following messages:
<input-string> is not any type of palindrome.
<input-string> is a palindrome.
<input-string> is an L-palindrome.
<input-string> is an R-palindrome.
where <input-string> is the input string in the input file.
If more than one message applies, they should be output in the order given above. Leave
a blank line after the output for each input string.
Example:
Input:
HELLOWORD
OTTO
OTTOR
LTOOT
AAAAAA
TOTO
Output:
HELLOWORD is not any type of palindrome.
OTTO is a palindrome.
OTTOP is an R-palindrome.
LTOOT is an L-palindrome.
AAAAAA is a palindrome.
AAAAAA is an L-palindrome.
AAAAAA is an R-palindrome.
TOTO is an L-palindrome.
TOTO is an R-palindrome.
Problem 3: Word Transformation
Source file:
Input file:
Output file:
word.{c|cpp|java}
word.in
word.out
Problem description:
A common word puzzle found in many newspapers and magazines is the word
transformation. By taking a starting word and successively altering a single letter to make
a new word, one can build a sequence of words which changes the original word to a
given end word. For instance, the word ``spice'' can be transformed in four steps to the
word ``stock'' according to the following sequence: spice, slice, slick, stick, stock. Each
successive word differs from the previous word in only a single character position while
the word length remains the same.
Given a dictionary of words from which to make transformations, plus a list of starting
and ending words, your job is to write a program to determine the number of steps in the
shortest possible transformation.
Input:
The input will be a single file in two sections. The first section will be the dictionary of
available words with one word per line, terminated by a line containing an asterisk (*)
rather than a word. There can be up to 200 words in the dictionary; all words will be
alphabetic and in lower case, and no word will be longer than ten characters. Words can
appear in the dictionary in any order.
Following the dictionary are pairs of words, one pair per line, with the words in the pair
separated by a single space. These pairs represent the starting and ending words in a
transformation. The pairs are terminated by the end-of-file. All pairs are guaranteed to
have a transformation using the dictionary given. The starting and ending words will
appear in the dictionary.
Output:
The output should contain one line per word pair, and must include the starting word, the
ending word, and the number of steps in the shortest possible transformation, separated
by single spaces.
Example:
Input:
dip
lip
mad
map
maple
may
pad
pip
pod
pop
sap
sip
slice
slick
spice
stick
stock
*
spice stock
may pod
Output:
spice stock 4
may pod 3
Problem 4: Slurpys
Source file:
Input file:
Output file:
slurpys.{c|cpp|java}
slurpys.in
slurpys.out
Problem description:
A Slurpy is a character string that consists of a Slimp followed by a Slump, which are
defined as follows:
A Slump is a character string that has the following properties:
1. Its first character is either a 'D' or an 'E'.
2. The first character is followed by a string of one or more 'F's.
3. The string of one or more 'F's is followed by either a Slump or a 'G'.
The Slump or 'G' that follows the F's ends the Slump. For example
DFFEFFFG is a Slump since it has a 'D' for its first character,
followed by a string of two F's, and ended by the Slump 'EFFFG'.
4. Nothing else is a Slump.
A Slimp is a character string that has the following properties:
1. Its first character is an 'A'.
2. If it is a two character Slimp then its second
and last character is an 'H'.
3. If it is not a two character Slimp then it is in
one of these two forms:
a. 'A' followed by 'B' followed by a Slimp
followed by a 'C'.
b. 'A' followed by a Slump (see above)
followed by a 'C'.
4. Nothing else is a Slimp.
Examples:
Slumps:
DFG, EFG, DFFFFFG, DFDFDFDFG, DFEFFFFFG
Not Slumps: DFEFF, EFAHG, DEFG, DG, EFFFFDG
Slimps:
AH, ABAHC, ABABAHCC, ADFGC, ADFFFFGC, ABAEFGCC,
ADFDFGC
Not Slimps: ABC, ABAH, DFGC, ABABAHC, SLIMP, ADGC
Slurpys:
AHDFG, ADFGCDFFFFFG, ABAEFGCCDFEFFFFFG
Not Slurpys: AHDFGA, DFGAH, ABABCC
Your program will read in strings of characters and output whether or not they are
Slurpys.
Input:
The first line contains an integer N between 1 and 10 describing how many strings of
characters are represented. The next N lines each contain a string of 1 to 60 alpha
characters.
Output:
The first line of output should read SLURPYS OUTPUT. Each of the next N lines of
output should consist of either YES or NO depending on whether or not the
corresponding input line is a Slurpy. The last line of output should read END OF
OUTPUT.
Example:
Input:
2
AHDFG
DFGAH
Output:
SLURPYS OUTPUT
YES
NO
END OF OUTPUT
Download