More results...

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
post
page
Python IDE Dashboard

Manhattan distance calculator

When calculating the distance between two points on a 2D plan/map we often calculate or measure the distance using straight line between these two points. Thought this “as the crow flies” distance can be very accurate it is not always relevant as there is not always a straight path between two points.

The perfect example to demonstrate this is to consider the street map of Manhattan which uses a grid-based layout: a mesh of horizontal and vertical roads crossing at a right angle.
taxicab-manhattan-grid-layout

Distance “as the crow flies”


The shortest distance between two points on a 2D grid is the distance using a straight line path between these two points.
taxicab-manhattan-grid-straight-path

On a 2D plan, using Pythagoras theorem we can calculate the distance between two points A and B as follows:
taxicab-manhattan-grid-straight-distance

Manhattan Distance (aka taxicab Distance)


The Manhattan distance (aka taxicab distance) is a measure of the distance between two points on a 2D plan when the path between these two points has to follow the grid layout. It is based on the idea that a taxi will have to stay on the road and will not be able to drive through buildings! The following paths all have the same taxicab distance:
taxicab-manhattan-grid-layout-paths

The taxicab distance between two points is measured along the axes at right angles.
taxicab-manhattan-grid-taxicab-distance
Note that the taxicab distance will always be greater or equal to the straight line distance.

Python Implementation


Check the following code to see how the calculation for the straight line distance and the taxicab distance can be implemented in Python.

Tagged with:

Secret Santa’s Ciphers

It’s only few days before Christmas so here are some secret messages from Santa for you to decode…

Secret Message #1, encoded using Maritime Signal Flags


secret-santa-maritime-flags
International maritime signal flags are various flags used to communicate with ships. Each flag represents a letter of the alphabet or a digit (0 to 9). You may need to research on the internet to find out the whole list of flags.


Secret Message #2, encoded using a Pigpen cipher


secret-santa-pigpen-cipher
A pigpen cipher is a type of visual cryptography where each character of the alphabet is replaced with a symbol.


Secret Message #3, encoded using Morse code


secret-santa-morse-code
Morse code is a method of transmitting text information as a series of on-off tones, lights, or clicks that can be directly understood by a skilled listener or observer without special equipment. Each character (letter or numeral) is represented by a unique sequence of dots and dashes. The duration of a dash is three times the duration of a dot.


Secret Message #4, encoded using Semaphore Flags


secret-santa-semaphore-flags
Flag semaphore is a telegraphy system conveying information at a distance by means of visual signals with hand-held flags. Information is encoded by the position of the flags. The current flag semaphore system uses two short poles with square flags, which a signalman holds in different positions to signal letters of the alphabet and numbers. The signalman holds one pole in each hand, and extends each arm in one of eight possible directions. At sea, the flags are coloured red and yellow, while on land, they are white and blue.


Secret Message #5, encoded using a rail-fence cipher


secret-santa-rail-fence
The rail fence cipher (sometimes called zigzag cipher) is a transposition cipher that jumbles up the order of the letters of a message using a basic algorithm.
The rail fence cipher works by writing your message on alternate lines across the page, and then reading off each line in turn. You can read more about the rail-fence cipher on this page.


Secret Message #6, encoded using a mono-alphabetic substitution cipher


A mono-alphabetic cipher (aka simple substitution cipher) is a substitution cipher where each letter of the plain text is replaced with another letter of the alphabet. It uses a fixed key which consist of the 26 letters of a “shuffled alphabet”.

You can decipher a mono-alphabetic cipher using a frequency analysis.

Cipher Text:

“G RGXX XGMK GO BAK YULB, BAK YHKLKOB, UOQ BAK PCBCHK!”, LNHIIZK HKYKUBKQ, UL AK LNHUVJXKQ ICB IP JKQ. “BAK LYGHGBL IP UXX BAHKK LAUXX LBHGMK RGBAGO VK. IA WUNIJ VUHXKS! AKUMKO, UOQ BAK NAHGLBVUL BGVK JK YHUGLKQ PIH BAGL! G LUS GB IO VS DOKKL, IXQ WUNIJ; IO VS DOKKL!”

AK RUL LI PXCBBKHKQ UOQ LI ZXIRGOZ RGBA AGL ZIIQ GOBKOBGIOL, BAUB AGL JHIDKO MIGNK RICXQ LNUHNKXS UOLRKH BI AGL NUXX. AK AUQ JKKO LIJJGOZ MGIXKOBXS GO AGL NIOPXGNB RGBA BAK LYGHGB, UOQ AGL PUNK RUL RKB RGBA BKUHL.

“BAKS UHK OIB BIHO QIRO”, NHGKQ LNHIIZK, PIXQGOZ IOK IP AGL JKQ–NCHBUGOL GO AGL UHVL, “BAKS UHK OIB BIHO QIRO, HGOZL UOQ UXX. BAKS UHK AKHK—G UV AKHK—BAK LAUQIRL IP BAK BAGOZL BAUB RICXQ AUMK JKKO, VUS JK QGLYKXXKQ. BAKS RGXX JK. G DOIR BAKS RGXX!”

AGL AUOQL RKHK JCLS RGBA AGL ZUHVKOBL UXX BAGL BGVK; BCHOGOZ BAKV GOLGQK ICB, YCBBGOZ BAKV IO CYLGQK QIRO, BKUHGOZ BAKV, VGLXUSGOZ BAKV, VUDGOZ BAKV YUHBGKL BI KMKHS DGOQ IP KEBHUMUZUONK.

“G QIO’B DOIR RAUB BI QI!”, NHGKQ LNHIIZK, XUCZAGOZ UOQ NHSGOZ GO BAK LUVK JHKUBA; UOQ VUDGOZ U YKHPKNB XUINIIO IP AGVLKXP RGBA AGL LBINDGOZL. “G UV UL XGZAB UL U PKUBAKH, G UV UL AUYYS UL UO UOZKX, G UV UL VKHHS UL U LNAIIXJIS. G UV UL ZGQQS UL U QHCODKO VUO. U VKHHS NAHGLBVUL BI KMKHSJIQS! U AUYYS OKR SKUH BI UXX BAK RIHXQ. AUXXI AKHK! RAIIY! AUXXI!”

AK AUQ PHGLDKQ GOBI BAK LGBBGOZ–HIIV, UOQ RUL OIR LBUOQGOZ BAKHK: YKHPKNBXS RGOQKQ.


unlock-access

Solution...

The solution for this challenge is available to full members!
Find out how to become a member:
➤ Members' Area
Tagged with: ,

Level generation using a 2D array

In this post we will investigate how to generate a level/stage for a platform game using a 2D array.

We will focus on the level for a 2D platform game such as Super Mario:
platform-level

By applying a grid layout to this stage, we can break down the stage in a collection of tiles. We can then store each tile using a 2D array as follows:

2d-array-level .

In this array, each tile can be associated with an integer value. For instance, in the above array/grid, a 1 represents a platform, a 2 represents a gold coin.

In javascript, the 2D array for this stage would be initialised as follows:

var grid = [
  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0],
  [0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0],
  [0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0],
  [0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0],
  [1,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0],
  [0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0],
  [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
];

Using nested loops, we can then write an algorithm to scan through all the values of the array and display each tile corresponding to their integer value accordingly.

See the Pen
Level Generator
by 101 Computing (@101Computing)
on CodePen.

Please note that using a 2D array approach to store the details of a stage/level is not the only approach available. Other approaches could be used such as storing the position and dimensions of each platform in a list. The use of a 2D array in a more advanced game could quickly become too “greedy” in terms of memory use.

Adapt the code…


Using a 2D array approach can be used to create games using a top-down view such as Pacman. You can adapt the above code to recreate a maze used in a Pacman game as follows:
2d-array-pacman-maze-layout

Tagged with:

Heads or Tails

flip-a-coinIn this challenge we will create a game of heads to tails using the following rules:

  • The game will consist of 5 rounds.
  • In each round:
    • the user will make a guess,
    • the computer will flip a coin,
    • the player will score 1 point for a correct guess.

In order to complete this game we will first create a function called flipCoin() to flip a coin and return the value “Heads” or “Tails”.

Here is the flowchart for this function:
flipcoin-function-flowchart

We will then use this function in our game:
heads-or-tails-flowchart

From flowchart to Python code


Using both flowcharts provided above, you can now implement the full code for this game:

Extension Task #1


Can you tweak this code so that the user can only enter the value “Heads” or “Tails” and nothing else. (If they do, the program should ask them to re-enter their guess until they enter a valid guess.)

Extension Task #2


Add some code so that when the 5 rounds are over, the user is given the option to either start a new game or to quit.
unlock-access

Solution...

The solution for this challenge is available to full members!
Find out how to become a member:
➤ Members' Area
Tagged with:

Javascript: Alert, prompt or confirm?

javascript-popupJavascript popup box are extremely useful when you start coding in Javascript. They enable you to write basic programs based on the Input/Process/Output very easily.

alert(“…”)


An alert box is an easy approach in javascript to display a message to the end user. It can be used as a form of output (equivalent to a print() statement in Python). The main drawback (or benefit?) of an alert box is that the Javascript code will pause until the user closes the popup box.

alert("Hello world!");
Try this code!

prompt(“…”)


An prompt box is an easy approach in javascript to retrieve a user input from the end user. It can be used as a form of input (equivalent to a input() statement in Python). The value returned by a prompt() function can then be stored in a variable.

var name;
name = prompt("What's your name?");
alert("Hello " + name + "!");
Try this code!

confirm(“…”)


A confirm box is used when you need the user to verify or accept something.
When a confirm box pops up, the user has to click either “OK” or “Cancel” to proceed.
If the user clicks “OK”, the box returns true. If the user clicks “Cancel”, the box returns false.

var play = confirm("Would you like the play a game of heads or tails?");
if (play==true) {
   if (Math.floor(Math.random() * 2) == 0) {
      alert("Heads!");
   } else {
      alert("Tails!");
   }
} else {
   alert("Good bye then!");
}
Try this code!

Your Turn


Use the codepen below to create pure Javascript games or programs based on the input/process/output model.
You can look at the following challenges to implement these using Javascript.

See the Pen
Heads or Tails
by 101 Computing (@101Computing)
on CodePen.

Network Design Tasks

In this post we will investigate the different components needed to set up a network. We will investigate specific customer requirements to create suitable network designs.

You will use our online network design tool to create these designs using the relevant hardware and cables.

Before attempting this task, you may want to read more about the different network components and their purpose.

Customer ACustomer BCustomer C
recruitment-agency

Customer A


Customer A is a recruitment agency that employs 7 members of staff working in a small office.

  1. They would like to have enough desktops for each employee to be able to work at the same time.
  2. They would like all files to be stored on a central server.
  3. Each employee is provided with a laptop or smartphone which they will need to connect to the network using a wireless connection.
  4. They should be able to access the internet.
  5. They want to have a secure connection that prevents unauthorised requests entering the network.
Design Your Own Network Online

Video Tutorial



network-web-design

Customer B


Customer B is web design agency that employs 5 members of staff working in a small office.

  1. They would like to have enough desktops for each employee to be able to work at the same time.
  2. They would like to connect a printer to the network.
  3. They would like all files to be stored on a central server.
  4. They should be able to access the internet.
  5. They would like to set up email accounts using their own email server.
  6. They design webpages for their customers and would like to host them on their own servers.
  7. They would like a centralised solution to back up all their files.
  8. They need a secure connection that prevents unauthorised access to the network.
Design Your Own Network Online
primary-school

Customer C


Customer C is a primary school that has 3 IT classrooms with 8 desktop computers per room.

  1. They would like all desktops to be connected in a local area network.
  2. They would also like the 5 teachers to have wireless access to the LAN using their own laptops.
  3. They would like all students’ files to be stored on a central server.
  4. They would like a centralised backup solution to backup all students files every night.
  5. All desktops and laptops should be able to access the internet.
  6. They would like to have a printer in each IT room and a centralised approach to organise printer credits and print queues.
  7. They would like to set up email accounts using their own email server.
  8. They would like to apply specific education filters to restrict students access to specific webpages.
  9. They would like to improve the performance of the network by temporary caching webpages that have been accessed by students.
  10. They need a secure connection that prevents unauthorised access to the network.
Design Your Own Network Online
unlock-access

Solution...

The solution for this challenge is available to full members!
Find out how to become a member:
➤ Members' Area
Tagged with:

Divisibility Rules

For this challenge we will investigate a range of algorithms used to apply some of the most common divisibility rules. We will first focus on the divisibility rule of 3 to introduce the concept of recursion.

A divisibility rule is a shorthand way of determining whether a given integer is divisible by a fixed divisor without performing the division, usually by examining its digits

Divisibility rule

So, for this challenge we will focus on implementing the divisibility rules using some python scripts without using the DIV (//) or MOD (%) operators. In reality, these operators would be a more elegant way of checking if a number is divisible by another number.

Divisibility Rule for 2

A number is divisible by 2 if its last digit is a multiple of 2. (e.g. 0,2,4,6,8)

Divisibility rule for 2

Let’s look at the following example: is 378 divisible by 2? Yes because its last digit, 8 is a multiple of 2.

Let’s write a Python a function to implement this divisibility rule for 2:

Divisibility Rule for 3

A number is divisible by 3 if the sum of all its digits is divisible by 3.

Divisibility rule for 3

Let’s look at the following example: is 378 divisible by 3?
divisibility-rule-for-3

Our aim is to write a function that takes a number as a parameter and returns whether this number is divisible by 3. To implement this function we will use a recursive function (A function with a call to itself).

Your Task


Your task is to adapt the above algorithms to implement the divisibility rules for 4,5,6.

A number is divisible by 4, if the number formed by its last two digits is divisible by 4.

Divisibility rule for 4

A number is divisible by 5, if its last digit is either a 0 or a 5.

Divisibility rule for 5

A number is divisible by 6, if it is divisible by 3 and by 2.

Divisibility rule for 6

Extension Task: Divisibility rule for 7


Apply a recursive method to find out is a number is divisible by 7. First you will need to read more about the divisibility rule for 7 on this wikipedia page.

Tagged with:

Number 2520?

number-2520Did you know that 2520 is the smallest number exactly divisible by all integers from 1 to 10.

The aim of this challenge is to write a python script to work out this number from its definition.

Note that a number (a) is exactly divisible (whole division) by another number (b) if the remainder of divising a per b is equal to 0.

In pseudo code:

a = INPUT("Type a whole number (integer)")
a = INPUT("Type another whole number (integer)")
IF (a MOD b) == 0 THEN
   OUTPUT(a + " is exactly divisible by " + b)
ELSE
  OUTPUT(a + " is not exactly divisible by " + b)
END IF

In Python the MOD operator (remainder) is %.

a = int(input("Type a whole number (integer)"))
b = int(input("Type another whole number (integer)"))
if (a % b) == 0:
   print(str(a) + " is exactly divisible by " + str(b))
else:
  print(str(a) + " is not exactly divisible by " + str(b))

We are going to use this operator in our code to find out the smallest number exactly divisible by all integers from 1 to 10.

Note that we know, per definition, that this number will have to be greater or equal to 10. So, using an iterative approach (in this case, a while loop) we will test every number from 10, one at a time up until we find a number that is divisible by all the numbers from 1 to 10.

Flowchart


Here is the flowchart of our algorithm:
number-2520-flowchart

Python Code


You can use the above flowchart to recreate the Python code in the trinket window below:

Tagged with:

Vatsyayana cipher

The Vatsyayana cipher is a simple substitution cipher where the 26 letters of the alphabet are organised into 13 pairs of characters. These pairs are then used to encrypt the text by direct substitution of the letters in the pairs.

Vatsyayana-substitution-cipher

Pairs:

A/E B/T C/J D/N
F/W G/S H/K I/Z
L/V M/R O/Y P/U
Q/X

With the above key, all “A” letters in the plain text will be encoded to an “E” whereas all letters “E” will be replaced with an “A”.

This type of cipher is a form of symmetric encryption as the same key can be used to both encrypt and decrypt a message.

You can generate your own encryption keys and encrypt your own messages using our online mono-alphabetic substitution engine:

Frequency Analysis


One approach used to help decrypt a Vatsyayana substitution cipher is to use a frequency analysis based on counting the number of occurrence of each letter to help identify the most recurrent letters. (e.g. In the English language, letters E, T, A and O).

Tagged with: ,

Caesar Shift (Substitution Cipher)

A Caesar Shift cipher is a type of mono-alphabetic substitution cipher where each letter of the plain text is shifted a fixed number of places down the alphabet. For example, with a shift of 1, letter A would be replaced by letter B, letter B would be replaced by letter C, and so on. This type of substitution Cipher is named after Julius Caesar, who used it to communicate with his generals.

Key +5
Plain text alphabet:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
shift-5-places
Cipher text alphabet: F G H I J K L M N O P Q R S T U V W X Y Z A B C D E

This type of cipher is a form of symmetric encryption as the same key can be used to both encrypt and decrypt a message. (e.g. If a message is encrypted with a key of +5, it can be decrypted with a key of -5).

A cipher wheel is a tool used to help decipher a message encrypted using the Caesar cipher:

You can generate your own encryption keys and encrypt your own messages using our online Caesar Shift substitution engine:

Frequency Analysis


One approach used to help decrypt a Caesar shift substitution cipher is to use a frequency analysis based on counting the number of occurrence of each letter to help identify the most recurrent letters. (e.g. In the English language, letters E, T and A).

Your Task:


Complete a frequency analysis to decrypt the following ciphers.
Cipher #1Cipher #2Cipher #3
“ZE KYV KFNE NYVIV Z NRJ SFIE
CZMVU R DRE NYF JRZCVU KF JVR
REU YV KFCU LJ FW YZJ CZWV
ZE KYV CREU FW JLSDRIZEVJ
JF NV JRZCVU LG KF KYV JLE
‘KZC NV WFLEU R JVR FW XIVVE
REU NV CZMVU SVEVRKY KYV NRMVJ
ZE FLI PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
REU FLI WIZVEUJ RIV RCC RSFRIU
DREP DFIV FW KYVD CZMV EVOK UFFI
REU KYV SREU SVXZEJ KF GCRP
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
(WLCC JGVVU RYVRU DI. GRIBVI, WLCC JGVVU RYVRU
WLCC JGVVU RYVRU ZK ZJ, JVIXVREK
RTKZFE JKRKZFE, RTKZFE JKRKZFE
RPV, RPV, JZI, WZIV
TRGKRZE, TRGKRZE)
RJ NV CZMV R CZWV FW VRJV
VMVIPFEV FW LJ YRJ RCC NV EVVU (YRJ RCC NV EVVU)
JBP FW SCLV (JBP FW SCLV) REU JVR FW XIVVE (REU JVR FW XIVVE)
ZE FLI PVCCFN JLSDRIZEV (ZE FLI PVCCFN, JLSDRIZEV, YR YR)
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV
NV RCC CZMV ZE R PVCCFN JLSDRIZEV
PVCCFN JLSDRIZEV, PVCCFN JLSDRIZEV”

View Hint
A song by The Beattles
“WAOUWBS HVSFS’G BC QCIBHFWSG
WH WGB’H VOFR HC RC
BCHVWBU HC YWZZ CF RWS TCF
OBR BC FSZWUWCB, HCC
WAOUWBS OZZ HVS DSCDZS
ZWJWBU ZWTS WB DSOQS
MCI, MCI AOM GOM W’A O RFSOASF
PIH W’A BCH HVS CBZM CBS
W VCDS GCASROM MCI KWZZ XCWB IG
OBR HVS KCFZR KWZZ PS OG CBS
WAOUWBS BC DCGGSGGWCBG
W KCBRSF WT MCI QOB
BC BSSR TCF UFSSR CF VIBUSF
O PFCHVSFVCCR CT AOB
WAOUWBS OZZ HVS DSCDZS
GVOFWBU OZZ HVS KCFZR
MCI, MCI AOM GOM W’A O RFSOASF
PIH W’A BCH HVS CBZM CBS
W VCDS GCASROM MCI KWZZ XCWB IG
OBR HVS KCFZR KWZZ ZWJS OG CBS”

View Hint
A song by John Lennon
“SBRL ZRFDHSRLY OHZ YLABYULK AV OPZ OVTL WSHULA VM AHAVVPUL PU HU HAALTWA AV YLZJBL OPZ MYPLUK OHU ZVSV MYVT AOL JSBAJOLZ VM AOL CPSL NHUNZALY QHIIH AOL OBAA.

SPAASL KVLZ SBRL RUVD AOHA AOL NHSHJAPJ LTWPYL OHZ ZLJYLASF ILNBU JVUZAYBJAPVU VU H ULD HYTVYLK ZWHJL ZAHAPVU LCLU TVYL WVDLYMBS AOHU AOL MPYZA KYLHKLK KLHAO ZAHY.

DOLU JVTWSLALK, AOPZ BSAPTHAL DLHWVU DPSS ZWLSS JLYAHPU KVVT MVY AOL ZTHSS IHUK VM YLILSZ ZAYBNNSPUN AV YLZAVYL MYLLKVT AV AOL NHSHEF…”


View Hint
Star wars opening crawl
Tagged with: ,