Create skycast.py

Skycast
Gaurav is a 12 year old student who’s fractured his leg and lower back in a bicycle accident and
is on a bed rest for the next 2 months. He keeps himself busy by watching television on his
Skycast DTH. While watching the television, one day he decided to play a small game, where
he has to identify the minimum number of clicks required to surf a given set of channels in a
sequence. He quickly decided that it makes for an interesting problem to solve using a software
program, (oh, forgot to tell you that he likes to code when he is not busy with his school work).
Your task is to write the software program (using any of the programming language choices
given), before Gaurav can do it himself, we think he is going to take 2 hours, so you think you
can beat the 12 year old in solving this, we think so! Your time starts now!
Obviously the program has to take the following instructions and constraints into account.
Instructions
There are 13 buttons on his remote: 10 buttons for the numbers (0-9), an "Up Channel" button,
a "Down Channel" button, and a "Back" button:
● The number buttons allow you to jump directly to a specific channel. (Ex: to go to
channel 63 by typing “6”, “3”.)
● The "Up Channel" button increments the current channel to the next higher viewable
channel, unless the current channel is the highest viewable channel, in which case it
rolls over to the lowest viewable channel.
● The "Down Channel" button decrements to the next lower viewable channel, unless the
current channel is the lowest viewable channel, in which case it rolls over to the highest
viewable channel.
● The "Back" button reverts to whatever channel was on the television before the current
channel. (Ex: If channel 1 is viewed, then channel 100, then when Back is pressed, the
television will go to channel 1.)
Gaurav can get from one channel to the next in one of the two ways:
● Clicking any combination of "Up Channel", "Down Channel", and "Back" buttons.
● Keying in the numbers to the channel. Gaurav will never combine "Back" and number
buttons when moving from one channel to the next.
Gaurav’s parents have set some parental control on some channels on Gaurav's television.
These channels are not viewable, so they are skipped by the "Up Channel" and "Down
Channel" buttons.
Given a list of channels to view, the lowest channel, the highest channel, and a list of blocked
channels, your program should return the minimum number of clicks necessary to get
through all the shows that Gaurav would like to watch.
Input
Your program has to take 3 inputs for each test case, the first input will contain two space
delimited numbers, these will form the lowest channel and the highest channel. The next input
will contain the number of blocked channels followed by sequence of blocked channels (again
space delimited). The first number in the input will contain the number of inputs The last input is
the sequence of channels that Gaurav must view (in order). Again, the first number will contain
the number of inputs
Notes:
● Unit tests are mandatory, so please ensure that the code you submit has automated unit
tests and you adopt TDD principles (as it applies to this problem statement)
Sample Input
Test Case #1
1 20
2 18 19
5 15 14 17 1 17
Test Case #2
103 108
1 104
5 105 106 107 103 105
Test Case #3
1 100
4 78 79 80 3
8 10 13 13 100 99 98 77 81
Test Case #4
1 200
0
4 1 100 1 101
Sample Output
Output for Test Case #1: 7
Output for Test Case #2: 8
Output for Test Case #3: 12
Output for Test Case #4: 7
Constraints
● The lowest channel on the television will be greater than 0, and less than or equal to
10,000.
● The highest channel on the television will be greater than or equal to lowest channel,
and less than or equal to 10,000.
● The list of channels that are blocked on Gaurav's television. All the channels in this list
will be valid channels (greater than or equal to lowest channel, less than or equal to
highest channel). Duplicates may be ignored. The blocked list can be maximum of 40
channels.
● The sequence that Gaurav must view contains between 1 and 50 elements, inclusive. All
channels in this sequence are not in the blocked list and are between lowest channel
and highest channel, inclusive.