Part I: draw a square. divide it into four identical squares. remove the bottom left hand square. now divide the resulting shape into four identical shapes.
Part II: draw an equilateral triangle (all sides same length). divide it into four identical shapes. remove the bottom left hand shape. now divide the resulting shape into four identical shapes.
This is the sort of problem that i would expect on a MENSA test. i’m not too sure whether getting this right constitutes intelligence in a way that would benefit computer scientists, but maybe it does. if you figure it out, then you can say it does. if you can’t figure it out, then you can just say it’s all hogwash and it’s a stupid question.
Thanks to mark chesser
Solution
part I: draw a square. divide it into four identical squares. remove the bottom left hand square. now divide the resulting shape into four identical shapes.
part II: draw an equilateral triangle (all sides same length). divide it into four identical shapes. remove the bottom left hand shape. now divide the resulting shape into four identical shapes.
this is the sort of problem that i would expect on a MENSA test. i’m not too sure whether getting this right constitutes intelligence in a way that would benefit computer scientists, but maybe it does. if you figure it out, then you can say it does. if you can’t figure it out, then you can just say it’s all hogwash and it’s a stupid question.
solution:
part I

part II

2026 Update: Counting Shapes — Combinatorics and Visual Reasoning
Counting shapes problems (triangles in a figure, rectangles in a grid, etc.) appear in both puzzle interviews and competitive programming. The key is finding the mathematical formula rather than counting manually.
from math import comb
# Problem 1: Count rectangles in an m×n grid
def count_rectangles(m: int, n: int) -> int:
"""
Count all rectangles (including squares) in an m×n grid.
Choose 2 horizontal lines from (m+1) and 2 vertical lines from (n+1).
"""
return comb(m + 1, 2) * comb(n + 1, 2)
print(count_rectangles(2, 3)) # C(3,2)*C(4,2) = 3*6 = 18
print(count_rectangles(4, 4)) # C(5,2)*C(5,2) = 10*10 = 100
# Problem 2: Count squares in an n×n grid
def count_squares(n: int) -> int:
"""
Count all squares (including non-unit squares) in n×n grid.
A k×k square: there are (n-k+1)^2 positions.
"""
return sum((n - k + 1) ** 2 for k in range(1, n + 1))
# Equivalent to n(n+1)(2n+1)/6
print(count_squares(4)) # 1+4+9+16 = 30 (for 4×4 grid) = wait...
# For n=4: 4^2 + 3^2 + 2^2 + 1^2 = 16+9+4+1 = 30
# Problem 3: Count triangles in a triangle divided into n rows
def count_triangles_figure(n: int) -> int:
"""
Count upward and downward triangles in triangular figure with n rows.
Upward: n(n+2)(2n+1)/8
Downward: n(n-2)(2n+3)/8 (when n is even) or similar
"""
# Simple simulation for small n
total = 0
# For n rows: upward triangles of size k: (n-k+1)*(n-k+2)/2 for k=1..n
for k in range(1, n + 1):
upward = (n - k + 1) * (n - k + 2) // 2
total += upward
# Downward triangles (more complex, depends on parity)
# For n=4: upward=10+6+3+1=20, downward=0+1+3=4, total=24
return total # Upward only (full formula depends on figure)
# Problem 4: Triangles from n points on circle (no 3 collinear)
def count_triangles_circle(n: int) -> int:
"""Any 3 of n points on a circle form a unique triangle."""
return comb(n, 3)
print(count_triangles_circle(6)) # C(6,3) = 20
# Problem 5: Count line segments between n points (complete graph edges)
def count_segments(n: int) -> int:
return comb(n, 2)
print(count_segments(10)) # C(10,2) = 45
Pattern: Counting geometry problems almost always reduce to choosing k items from n (combinations). Rectangles = choose 2 lines; triangles = choose 3 points. When counting shapes in specific figures (star, hexagon, etc.), the challenge is identifying the combinatorial structure. Practice: count diagonals in an n-gon = C(n,2) – n = n(n-3)/2.