From The Sunday Times, 9th December 1979 [link]
During my recent trip into the jungle, I came across a clearing, at the centre of which was a stone with the following design:

On closer inspection, I saw that the small squares were numbered from 1 to 10 (left to right along the bottom row), then from 11 to 20 (right to left on the next row up), 21 to 30 (left to right on the third row up), and so on. The lines joined the following pairs of squares:
13 & 32
25 & 48
35 & 54
45 & 66
63 & 88
79 & 94
My guide explained that it was a very old snakes and ladders board. However, due to the ravages of time, it was not possible to tell which of the six lines were snakes and which were ladders. Fortunately the guide knew a legend concerning the board, and he told it to me.
Many years ago, the king of that region had a beautiful daughter, and offered her in marriage to the first man who could get from square 1 to square 100 in just one turn. After many young men had tried and failed, a handsome prince from a neighbouring country had his turn, and threw 12 consecutive sixes. As he stood on square 1 to start, the first six took him to square 7. The remaining sixes took him to square 100.
Which of the lines are snakes?
This puzzle is included in the book The Sunday Times Book of Brain-Teasers: Book 2 (1981). The puzzle text above is taken from the book.
It is also included in the book The Sunday Times Book of Brainteasers (1994).
[teaser914]
Jim Randell 8:41 am on 31 March 2022 Permalink |
I took “exactly one letter in common” to mean that there was exactly one letter of the alphabet that appeared in both words, but the letter may be repeated in one (or both) of the words.
The following Python program runs in 51ms.
Run: [ @replit ]
from enigma import (subsets, intersect, ordered, update, tuples, join, printf) # available words words = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'TEN') # find words that share exactly one letter S1 = set(ordered(*ws) for ws in subsets(words, size=2) if len(intersect(ws)) == 1) # check two words share exactly one letter check = lambda *ws: ordered(*ws) in S1 # generate a ring of words such that adjacent items share exactly one letter def generate(s, ws): sz = s[-1] # are we done? if not ws: # check closure and eliminate duplicates if check(sz, s[0]) and s[1] < sz: yield s else: # extend the ring for (i, w) in enumerate(ws): if check(sz, w): yield from generate(s + [w], ws[:i] + ws[i + 1:]) # solve the puzzle starting with the first word for s in generate([words[0]], words[1:]): # find two adjacent words that can be swapped for (i, w) in enumerate(s): if i == len(s) - 1: break s2 = update(s, (i + 1, i), s[i:i + 2]) if all(check(a, b) for (a, b) in tuples(s2, 2, circular=1)): # the numbers opposite the swapped pair r = (s2[(i + 5) % 10], s2[(i + 6) % 10]) fmt = lambda x: join(x, sep=" ", enc="()") printf("{r}; {s} -> {s2}", r=fmt(r), s=fmt(s), s2=fmt(s2))Solution: The two numbers are: SEVEN and EIGHT.
One scenario is that the cards were initially laid out:
And the ONE and FOUR cards were swapped over to give
Or we started with the second set and swapped ONE and FOUR to get the first set.
LikeLike