☀️ Summer Challenge

Summer Coding Challenges

20 Python challenges from FizzBuzz to Merge Sort. Work through them at your own pace, tick them off as you go, and arrive in September actually ready.

6 Beginner 7 Intermediate 7 Advanced
0 / 20 challenges completed 0%
🔢

FizzBuzz

Beginner loopsconditionals

Print numbers 1–100. For multiples of 3 print "Fizz", multiples of 5 print "Buzz", both print "FizzBuzz".

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz …
🔄

Reverse a String

Beginner stringsloops

Write a function that takes a string and returns it reversed. Do it without using Python's built-in slice shortcut.

"hello" → "olleh" "racecar" → "racecar"
🔤

Count the Vowels

Beginner stringsloopsconditionals

Write a function that counts how many vowels (a, e, i, o, u) are in a given string. Make it case-insensitive.

"Hello World" → 3 "rhythm" → 0

Sum Without sum()

Beginner listsloops

Write a function that adds up all numbers in a list without using Python's built-in sum() function.

[1, 2, 3, 4, 5] → 15 [10, -3, 7] → 14
🏆

Find the Maximum

Beginner listsloopsconditionals

Find the largest number in a list without using Python's max() function or sorting.

[3, 1, 4, 1, 5, 9, 2] → 9 [-5, -1, -3] → -1
✖️

Times Table Generator

Beginner loopsoutput

Write a function that prints the full times table for a given number (1 to 12).

times_table(7): 7 × 1 = 7 7 × 2 = 14 … 7 × 12 = 84
🪞

Palindrome Checker

Intermediate stringslogic

Write a function that returns True if a word or phrase is a palindrome (reads the same forwards and backwards). Ignore spaces, punctuation and case.

"racecar" → True "A man a plan a canal Panama" → True "hello" → False
🔐

Caesar Cipher

Intermediate stringsASCIIencryption

Encrypt a string by shifting each letter forward by n places in the alphabet. Wrap around from Z to A. Leave non-letters unchanged.

encrypt("hello", 3) → "khoor" encrypt("xyz", 2) → "zab"
📊

Word Frequency Counter

Intermediate stringsdictionariessorting

Count how many times each word appears in a string. Return the results as a dictionary sorted by frequency (most common first).

"the cat sat on the mat the cat" → {"the": 3, "cat": 2, "sat": 1, "on": 1, "mat": 1}
💻

Binary to Decimal Converter

Intermediate binarystringsmaths

Write a function that converts a binary string (e.g. "1011") to its decimal equivalent WITHOUT using int(x, 2).

"1011" → 11 "11111111" → 255 "10000000" → 128
🔵

Prime Number Checker

Intermediate mathsloopsfunctions

Write a function that returns True if a number is prime. Then use it to print all primes up to 100.

is_prime(7) → True is_prime(9) → False is_prime(1) → False
📚

Build a Stack

Intermediate OOPdata structures

Implement a Stack class with push(), pop(), peek(), is_empty() and size() methods. Use a list internally but don't expose it directly.

s = Stack() s.push(1); s.push(2); s.push(3) s.peek() → 3 s.pop() → 3 s.size() → 2
🔀

Anagram Detector

Intermediate stringssortingdictionaries

Write a function that returns True if two strings are anagrams of each other (same letters, different order). Ignore spaces and case.

"listen", "silent" → True "triangle", "integral" → True "hello", "world" → False
🌀

Fibonacci with Memoisation

Advanced recursionmemoisationperformance

Write a recursive Fibonacci function. First write the naive version, then add memoisation to avoid recalculating the same values. Time both.

fib(10) → 55 fib(50) → 12586269025 (naive fib(50) will hang — memoised won't)
🎯

Binary Search

Advanced searchingalgorithmslists

Implement binary search on a sorted list — WITHOUT using Python's bisect module. Return the index of the target, or -1 if not found.

binary_search([1,3,5,7,9,11,13], 7) → 3 binary_search([1,3,5,7,9], 4) → -1
🔀

Merge Sort

Advanced sortingrecursiondivide and conquer

Implement merge sort from scratch. Write a recursive function that splits a list in half, sorts each half, then merges them back together in order.

merge_sort([38, 27, 43, 3, 9, 82, 10]) → [3, 9, 10, 27, 38, 43, 82]
🧮

Reverse Polish Notation Calculator

Advanced stacksdata structuresmaths

Evaluate a mathematical expression written in Reverse Polish Notation (postfix). Use a stack to process tokens left to right.

"3 4 +" → 7 "5 1 2 + 4 × + 3 -" → 14 "2 3 ^ 1 -" → 7 (^ = power)
🪜

Word Ladder

Advanced BFSgraphsstringsalgorithms

Given a start word and end word, find the shortest sequence of single-letter changes that gets from one to the other, where every intermediate step must be a real word. Use BFS.

"cat" → "dog": cat → cot → dot → dog (4 steps)
🗜️

Run-Length Encoding

Advanced stringscompressionalgorithms

Implement run-length encoding (RLE): compress a string by replacing consecutive repeated characters with the character and its count. Also write a decompressor.

encode("AAABBBCCDDDDEE") → "3A3B2C4D2E" decode("3A3B2C4D2E") → "AAABBBCCDDDDEE"
⛓️

Linked List

Advanced OOPdata structurespointers

Build a singly linked list from scratch with a Node class and LinkedList class. Implement: append, prepend, delete, search, and print_list.

ll = LinkedList() ll.append(1); ll.append(2); ll.append(3) ll.delete(2) ll.print_list() → 1 → 3 → None

Tick off each challenge as you complete it — progress saves automatically in your browser.

← Back to Summer Hub