The
little book of
programming
challenges
24
The following challenges are here to challenge and inspire you as
well as help you on your journey to becoming a computational
thinker.
Challenge 26
CodeBreaker
You may be set these as homework or in the classroom. Try to complete them to the best of your ability. If you cant write a successful
solution don't worry, you are still learning from the attempt you
have made.
The computer generates a 4 digit code
The user types in a 4 digit code. Their guess.
The computer tells them how many digits they guessed correctly
Try to complete the extension exercises too whenever possible
extension doesn't mean optional!
Extension : the computer tells them how many digits are
guessed correctly in the correct place and how many digits have
been guessed correctly but in the wrong place.
Writing programs can be frustrating - if you get stuck don't give
up!
The user gets 12 guesses to either win guess the right code. Or
lose run out of guesses.
Use the internet for help (but not the answer!)
Use the help features of the programming development environment.
Use features like break points and variable watches to try to
work out what is happening if the program doesnt seem to
work.
Work with other students on the coursetwo heads are better than one
Challenge 27
HangMan
Player 1 types in a word
Player 2 has to guess the word in 5 lives
The display would look like this
Word to guess: ******
You have 5 lives left - Letter? E
Word to guess: **EE*E
You have 5 lives left - Letter? Z
Word to guess: **EE*E
You have 4 lives left - Letter?
23
Challenge 25
Remember Challenge 9?
Write a program that will generate a random
playing card e.g. 9 Hearts, Queen Spades
when the return key is pressed.
Rather than generate a random number from 1
to 52. Create two random numbers one for the
suit and one for the card.
Challenge 1
However we don't want the same card drawn twice. Update this
program by using an array to prevent the same card being dealt
twice from the pack of cards.
Extension
display the punchline in a different colour
Write a program that will display a joke
Dont display the punchline until the reader
hits the enter key.
Convert this code into a procedure DealCard that will display the
card dealt or no more cards.
Prior Knowledge Needed
How to output information to the screen
Call your procedure 53 times!
Challenge 25 Extended
Blackjack.
Challenge 2
Play a game that draws two random cards (see above).
The player then decides to draw or stick.
Write a program that will ask you your name
If the score goes over 21 the player loses (goes bust).
Keep drawing until the player sticks.
After the player sticks draw two computer cards. If the player
beats the score they win.
Added complication : Aces can be 1 or 11! The number used is
whichever gets the highest score.
It will then display Hello Name where Name is the
name you have entered.
E.g.
What is your name?
Ada
Hello Ada
Prior Knowledge Needed
How to create variables
How to input data into a variable
How to display variables
22
Challenge 3
Challenge 24
Create a program with the following record structure
Write a program to work out the areas of a rectangle.
Collect the width and height of the rectangle from the keyboard
Structure Results
HomeTeam as string
HomeTeamScore as integer
AwayTeam as string
AwayTeamScore as integer
End Structure
Calculate the area
Make an array of 20 Results
display the result.
Create a program with a menu whose options are
1.
Add a result
2. Search for all results for a team
Extension
display the volume of a cuboid.
Prior Knowledge Needed
See what happens when you
don't type in numbers! - Try
to explain what has happened and why
How to create variables
How to input data into a variable
How to display variables
How to perform basic mathematical
calculations
Write the code to carry out these two things.
If option 1 is selected
collect the result and add it to the end of the results array
If option 2 is selected
Collect team name
display all the results that in includes that team in either the
home or away team
Challenge 4
Write a program that will work out the
distance travelled if the user enters in the
speed and the time.
Extension
Get the program to tell you the speed you would have to travel
at in order to go a distance within a certain time entered by the
user.
Hint
Include a variable to store the current number of results
Prior Knowledge Needed
How to create record structures
Creating arrays of record structures
Iteration and selection
21
Challenge 22
Create a two-dimensional array of integers 10 by 10.
Challenge 5
Fill the array with random numbers in the range 0 to 15
Write a program to work out how many days you have lived for.
Display the array on the screen showing the numbers
Agorithm
Display the array on the screen as spaces whose BackColor property has been set to the number in this position of the array.
Prior Knowledge Needed
How to create 2D arrays
Using nested loops
Enter date of birth
Get todays date
Get the difference in days between the two dates
Display result
Extension
Challenge 23
Create a simple treasure hunt game.
Create a two-dimensional array of integers 10 by 10.
In a random position in the array store the number 1.
repeat
Work out how many seconds youve lived for.
Hints
Use Date.Now to get todays date
Use the date type for a variable to store your date of birth
Use the datediff function to get the difference between two days
Get the user to enter coordinates where they think the treasure is.
If there is a 1 at this position display success.
Until they find the treasure
Prior Knowledge Needed
Extension
How to create variables
How to input data into a variable
How to display variables
How to use system functions.
How to use system variables
Add a feature to say hot cold
warm depending on how close
their guess was to the actual hidden location.
20
Prior Knowledge Needed
How to create 2D arrays
Challenge 6
Challenge 21
Write a program that will store names into an array.
Make a game for seeing how good people are at
guessing when 10 seconds have elapsed.
As a new name is entered it will be added to the end of the array.
The user can keep adding names until they enter the dummy
value exit
Once this has been done the program will display any duplicate
names.
Algorithm
Tell them to hit enter key when ready
E.g.
Get the first time in seconds
Enter name: Bill
Get them to hit the enter key when they think
time has elapsed
Enter name: Mary
Get the second time in seconds
Enter name: Anisha
Subtract first time from the second time
Enter name: Mary
Tell them how close to 10 the answer was.
Enter name: exit
Mary is a duplicate.
Hint
Extension
Use Now.Second - To get the current time in seconds of the minute
Display how many times each name has been duplicated
Extension
Prior Knowledge Needed
Sometimes this solution doesn't
work. Can you work out why it
doesnt work? Can you fix it?
How to create variables
How to input data into a variable
How to display variables
How to use system functions.
How to use system variables
Prior Knowledge Needed
How to create a Nested FOR
loop structure.
Using arrays
19
Challenge 20
Create a Fibonacci sequence generator. (The Fibo-
Challenge 7
quence goes like this.
Extend the program in Challenge 5 to make a
game for seeing how quick people are at typing the alphabet.
nacci sequence was originally used as a basic model
for rabbit population growth). The Fibonacci se0,1,1,2,3,5,8,13
The Nth term is the sum of the previous two terms. So in the
example above the next term would be 21 because it would be the
previous two terms added together (8+13).
You will need create a list of Fibonnaci numbers up to the 50th
term.
The program will then ask the user for which position in the sequence they want to know the Fibonacci value for (up to 50).
E.g
Algorithm
Tell them to hit enter key when ready
Get the first time in seconds (and minutes)
Get them to type in the alphabet and hit enter
Get the second time in seconds (and minutes)
Check they have entered the alphabet correctly
(start counting at 0)
Which position in sequence? 6
If they entered it correctly then
Fibonacci number is 8
Subtract first time from the second time
Tell them how many seconds they took
Hint
You will need to store the sequence in an array of Long (these
numbers can get pretty big!)
Prior Knowledge Needed
How to create a FOR loop structure.
Using arrays
18
Hint
Youll need to store their attempt at the alphabet in a variable and
compare with abcdef...
Extension
Prior Knowledge Needed
Keep a record of the best time
achieved.
As challenge 5 plus..
How to write an IF statement.
Deal with upper or lower case letters entered
Challenge 8
Write a program that will accept someones date of birth and
work out whether they can vote (i.e. Are they 18?)
Prior Knowledge Needed
How to create IF statement.
Using the dateDiff function
Challenge 19 Continued...
The Ceaser algorithms may have fooled the Gauls but it doesn't
take a genius to crack. So a much better algorithm would be one
that has a different offset for every letter. We can do this using the
random number generatorbecause it generates the same sequence of random numbers from a seed position. As long as
sender and receiver agree where to seed (this will be the encryption key) they can both work out the same offsets.
Algorithm for encrypt function
function Encrypt(text, key)
Randomize(key)
Challenge 9
For each letter in text
Write a program that will generate a
random playing card e.g. 9 Hearts,
Queen Spades when the return key is
pressed.
Rather than generate a random number
from 1 to 52. Create two random numbers one for the suit and one for the
card.
Get its ascii code
Add random offset int(rnd()*10) to ascii code
Turn this new ascii code back to a character
Append character to ciphertext string
End for
return ciphertext
Extension
end
Make a loop structure so playing cards can keep being generated
Prior Knowledge Needed
How to create IF or CASE statements with logical operators .
How to generate random numbers
Prior Knowledge Needed
How to create IF statements.
Extension
Try to use a single function with
an extra parameter to indicate
whether the text is being encrypted or decrypted rather than
having two different functions.
17
How to create a condition controlled loop structure.
Using procedures and functions
String manipulation
Challenge 19
Write a program to perform a basic Ceaser encryption and decryption on text.
Challenge 10
Make a game of rock, paper scissors against the
computer.
This algorithm works by moving letters along by an
offset. If the offset is 2 then b > d, h>j etc.
Try to write two functionsOne called encrypt and one called
decrypt. Both will return a string.
The user selects whether the wish to encrypt or decrypt.
The user enters sentence to encrypt and the encryption key (i.e.
How many we move the letters alongthis is a smallish integer)
The program responds with the encrypted or decrypted version
Algorithm
Tell user to enter either rock,paper or scissors
Get the response
Generate a random number from 1 to 3
3=scissors)
(1=rock,2=paper,
Compare user selection and computer selection
Display who wins.
Algorithm for encryption
Hints
To get a single character
from a string of characters
just add position in brackets
after string name.
Text=Hello
Text(0)=H
Type in text
Type in encryption key
Display Encrypt(text, key)
function Encrypt(text,key)
Len(Text) or Text.length
will give you the number of
characters in string.
For each letter in text
Get its ascii code
Add the key to the ascii code
Hint
Dont forget to randomize!
Extension
Make sure the user enters a valid entry.
Add a loop structure to play several times and keep a running
score
Make an enumerated variable type to store choices.
Turn this new ascii code back to a character
Prior Knowledge Needed
Append character to ciphertext string
How to create IF statements with
logical operators (or nested Ifs)
End for
return ciphertext
How to generate random numbers
end
16
Challenge 11
Write a program that will give the
students the answer to logic gate
questions e.g.
Challenge 18
Write a procedure(sub) drawstars that will draw a sequence of
spaces followed by a sequence of stars. It should accept two parametersthe number of spaces and the number of stars.
E.g
Enter logic gate : OR
Drawstars(3,5) would produce
Enter first input : 1
___*****
( _ indicates a space!)
Enter second input :0
Result = 1
Use your procedure to draw
It should work for the logic gates OR, AND and XOR
Prior Knowledge Needed
How to create IF statements
using logical operators
Extension
Include NAND and NOR gates
***
***
*
***
Challenge 12
Write a program that will display all the factors of a number, entered by the user, that are bigger than 1.
(e.g. the factors of the number 12 are 6,4,3 and 2 because they divide into 12 exactly).
Prior Knowledge Needed
How to create procedures
How to use parameters
*******
***
* *
** **
Hint
Extension
to find out whether a number X is a factor of Y use :
Now write a program using this procedure that will draw a pyramid whose base is a width specified by the user. E.g.
IF Y mod X =0 (there is nothing remaining when Y is divided by X)
Enter base size of pyramid : 5
Extension
Tell the user if the number they
entered is a prime number
Prior Knowledge Needed
How to create IF statements
How to create a loop structure
10
*
***
*****
(assume the user has to enter an odd number)
15
Challenge 17
Write a function that will convert a UMS score into a grade. The
function will return A> U.
The function will require a parameter to do its job: the mark
The formula for AS level is >=80% >A, >=70%>B, >=60%>C
etc.
Assume the maximum module mark is 100
Having written the function we want to use it three times.
Write a program with the function that allows the user to enter
two module AS scores and displays the grade. It then adds the two
results together and displays the students overall grade. E.g.
Challenge 13
Write a program for a game where the computer generates a
random starting number between 20 and 30.
The player and the computer can remove 1,2 or 3 from the number in turns. Something like this...
Starting number : 25
How many do you want to remove? 3
22 left
Computer removes 2
20 left
Enter Module 1 result: 78
Enter Module 1 result: 67
The player who has to remove the last value to bring the number
down to 0 is the loser.
Result
1 left
Module 1 : B
Computer removes 1
Module 2: C
You win!
AS Level : B
Easy option
Get the computer to choose a number between 13 at random
Extension
Allow a maximum mark other than 100. This will require the user
to enter both the mark and maximum possible for that module.
The function will also require the maximum mark in order to calculate the grade so another parameter will be needed.
Harder option
Get the computer to employ a strategy to try and win
Prior Knowledge Needed
How to generate random numbers.
How to create IF statements
Prior Knowledge Needed
How to create functions
How to use parameters
How to create a loop structure
14
11
Challenge 14
Write a program for a Higher / Lower guessing game
Challenge 15
Write a program to count the number of words in a sentence.
The computer randomly generates a sequence of up to 10 numbers between 1 and 13. The player each after seeing each number
in turn has to decide whether the next number is higher or lower.
If you can remember Brucies Play your cards right its basically
that. If you get 10 guesses right you win the game.
The user enters a sentence.
The program responds with the number of words in the sentence.
Hint
Look for spaces and full stops in the string.
Starting number : 12
Higher(H) or lower(L)? L
Extension
Next number 8
Develop a program that will
display a sentence backwards
after entered.
Higher(H) or lower(L)? L
Next number 11
You lose
Prior Knowledge Needed
How to use string manipulation functions
Using loops and selection
Challenge 16
Guess the number game.
Hints
Use a condition controlled loop (do until, while etc) to control the
game. Do not find yourself repeating the same code over and
over!
The computer selects a random number between 1 and 100.
You don't need to remember all 10 numbers just the current number /next number. Dont forget youll have to keep a count of the
number of turns theyve had.
The computer responds got it or too high or too low after each
guess.
Extensions
After the user has guessed the number the computer tells them
how many attempts they have made.
Give the players two lives
Make sure only H or L can
be entered
Prior Knowledge Needed
How to create IF statements.
How to create a condition controlled
loop structure.
12
The user keeps guessing which number the computer has chosen
until they get it right.
Extension- Reverse the game. You think of a number. Get the
computer to guess a number and you respond with too high(H),
too low(L) or got it(G). Make sure the computer has a game
plandon't just let it guess at random!
13