# I made this. Find the missing number

8, 13, 15, 43, 30, 37, 32, 6, 36, 37, 1, 7, 18, 15, ???

Hint 1:

The whole sequence is a word.

Hint 2:

In english.

• This most probably has only one solution. Definitely not. But hopefully your intended solution would appear to be the most logical, i.e. will require the less convoluted justification. Mar 2 '18 at 13:18
• I am not certain if those are proper hints. If you are interested to provide hints, then give something less general and more specific.
– Sid
Mar 2 '18 at 13:40
• Your updated hints are even more confusing. The "missing number" is a word? I mean, "one", "two", "three" etc are words, but if that's what you mean, then that still doesn't actually help... Mar 2 '18 at 13:43
• No no no, the whole thing is a single word. Mar 2 '18 at 13:50
• @vaanchitkaul Is it possible to deduce the next number from the the sequence of numbers alone? Or does the word you have in mind give you deductive information about the final number? Apr 24 '20 at 8:37

I believe the missing number is

18

and that the number sequence spells the word

anthropologists

Rationale:

Assuming each number is mapped one-to-one to a letter, we are looking for a 15-letter word with the following properties:

1. the 3rd and 14th letters are the same
2. the 6th and 10th letters are the same
3. the 15th letter repeats one of the previous letters
4. none of the remaining letters are repeated

This is the only word in the Scrabble Tournament Word List that fits these criteria.

• There are 3 o's in your word though, and that number isn't repeated three times. Mar 3 '18 at 4:38
• @phenomist I think I solved this problem in my answer by checking for corresponding positions in the word without knowing the actual characters. Apr 24 '20 at 8:36

I defined an abstract mapping that gave a description of each word.

def matmap(x):
z = np.zeros((len(x),len(x)))
for i, xi in enumerate(x):
for j, xj in enumerate(x):
if i > j and xi == xj:
z[i,j] = 1
return z


And then using this description I defined a function to check if two sequences are isomorphic.

def isomorphs(x,y):
if np.all(matmap(x) == matmap(y)):
return True
else:
return False


And then I brute-force checked all words in a database of words, checking for appropriate length and whether there was the desired isomorphism.

x = [8, 13, 15, 43, 30, 37, 32, 6, 36, 37, 1, 7, 18, 15]

word_db = []
with open('words.txt', 'r') as f:
for word in f:
word = word.replace('\n', '')
if len(word) == len(x)+1:
if isomorphs(word[:-1], x):
word_db.append(word)


Out of the 466551 words in the aforementioned database, only 1 had the correct length and was isomorphic to the sequence I was given. The word is

plumbaginaceous

Having this candidate word, I worked backward on a mapping for the known characters.

letter_map = {}
for i,j in zip(x, word_db[0][:-1]):
letter_map[i] = j


And taking a look at the map I see that the letters are not well-orded with the indices according to alphanumeric order (no surprise there).

>>> letter_map {8: 'p', 13: 'l', 15: 'u', 43: 'm', 30: 'b', 37: 'a', 32: 'g', 6: 'i', 36: 'n', 1: 'c', 7: 'e', 18: 'o'}

Nothing jumps out at me, meaning that while I may have successfully found a word that matches, I have not found the last number. Either I somehow missed the right word out of a huge dataset (possible), or the information I need can be inducted from the provided sequence (possible). A scatterplot shows that the next element of the sequence is not simply predicted by the preceding one:

Looking at the trace of numbers against index isn't really revealing either.

# ToDo

Find the last number.