Text-based programming resources
Practice challenges
Students can use the practice challenges on our challenges page for both the Navgiators and Trailblazers challenges.
Note: The pathfinder group has been removed from the 2026 Coding challenge.
If you are a teacher, you have access to additional questions in the quiz menu of the teacher admin system.
Skills list
For each text-based challenge, students should have an understanding of the skills listed below:
| Skill | Navigator | Trailblazer |
|---|---|---|
| Input and output | ||
| Reading input | ||
| Reading structured input (multiple values / lines) | ||
| Converting data between types (e.g. string and integer) | ||
| Producing output that exactly matches a given specification | ||
| Variables and data | ||
| Using variables to store data | ||
| Updating variable values during program execution | ||
| Storing and updating state across iterations | ||
| Selection (Decision making) | ||
| Using IF / ELSE / ELSEIF statements | ||
| Using comparison operators | ||
| Using logical operators (AND, OR, NOT) | ||
| Applying multiple rules to validate data | ||
| Iteration (Repetition) | ||
| Using count-controlled loops (FOR) | ||
| Using condition-controlled loops (WHILE) | ||
| Controlling when a loop starts and stops | ||
| Repeating a process until a condition is met | ||
| Arithmetic and logic | ||
| Using arithmetic operators | ||
| Using modulo to test divisibility | ||
| Using counters and running totals | ||
| Calculating differences and averages | ||
| String handling | ||
| Finding the length of a string | ||
| Accessing and extracting parts of a string | ||
| Joining strings together | ||
| Reordering characters based on position | ||
| Checking for specific characters or patterns | ||
| Lists / arrays | ||
| Accessing items by position | ||
| Finding the length of a list | ||
| Iterating through a list | ||
| Comparing neighbouring values in a list | ||
| Tracking patterns across a sequence | ||
| Two-dimensional data | ||
| Representing data in rows and columns | ||
| Accessing values using coordinates | ||
| Checking boundaries in a grid | ||
| Processing connected areas of data | ||
| Databases / SQL | ||
| Writing a basic SELECT query | ||
| Filtering records using WHERE | ||
| Sorting results using ORDER BY | ||
| Selecting specific columns from a table | ||
For a PDF version of the list for printing please download this here.
Help sheets
Trailblazer- SQL hints and tips
Trailblazer - Python hints and tips
Navigator - Python hints and tips
Using the code grader
Adding code to the editor
When entering code into the editor do not include any extra printed messages or input prompts in your submission code: your only output must be the requested result.

Testing code
Students can use the sandbox to test code without it being part of the submissions. Testing code does not count towards marks.

Submitting code for grading

Code snippets
All of these examples show the answer in different languages to the first question of the Navigators specimen challenge, full name.
The examples take two lines of input; the first line will contain a first name and the second line will contain a last name.
The output is a single line containing the two names separated by a space.
For languages such as Java/C# which require a class definition, the main class should be called: solution.
Python
#Get input fname = input() lname = input() # output print(fname, lname)
C#
using System;
class solution
{
static void Main()
{
Console.Write("");
string firstName = Console.ReadLine(); // Input
Console.Write("");
string surname = Console.ReadLine(); // Input
string fullName = firstName + " " + surname; // Processing
Console.WriteLine(fullName); // Output
}
}
Java
import java.util.Scanner;
public class solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("");
String firstName = scanner.nextLine(); // Input
System.out.print("");
String surname = scanner.nextLine(); // Input
String fullName = firstName + " " + surname; // Processing
System.out.println(fullName); // Output
VB
Module Module1
Sub Main()
Console.Write("")
Dim firstName As String = Console.ReadLine()
Console.Write("")
Dim surname As String = Console.ReadLine()
Dim fullName As String = firstName & " " & surname
Console.WriteLine(fullName)
End Sub
End Module
Javascript (node.js)
process.stdin.setEncoding('ascii');
var stdin = "";
var stdin_arr;
var prompt = () => stdin_arr.pop();
process.stdin.on('data', (data) => { stdin += data; });
process.stdin.on('end', () => {
stdin_arr = stdin.split("\n"); // Split input into array (line by line)
stdin_arr.reverse(); // Reverse to use `.pop()` in order
main(); // Call main function after input is received
});
process.stdin.resume();
function main() {
let firstName = prompt(); // Get first input
let lastName = prompt(); // Get second input
console.log(firstName + " " + lastName); // Output full name
}
The Raspberry Pi Foundation runs the UK Bebras Challenge. Discover free teaching resources, tools, and expert support for computing education at raspberrypi.org.
