# Enigmatic Code

Programming Enigma Puzzles

## Puzzle 51: A multiplication

From New Scientist #1102, 11th May 1978 [link]

In the multiplication sum below digits have been replaced by letters. The same letter stands for the same digit wherever it appears, and different letters stand for different digits. You are told that A is not greater than 5.

Find the digits for which the letters stand.

[puzzle51]

### 2 responses to “Puzzle 51: A multiplication”

1. Jim Randell 4 April 2018 at 8:51 am

We can solve this puzzle directly using the [[ `SubstitutedExpression()` ]] solver from the enigma.py library.

This run file executes in 125ms.

Run: [ @repl.it ]

```#!/usr/bin/env python -m enigma -r

SubstitutedExpression

--invalid="0,AV"
--invalid="6|7|8|9,A"

"ATVTSAV * A = VVJECKSA"
```

However an equally short program will work using the [[ `SubstitutedSum()` ]] solver from the enigma.py library.

This program runs in 81ms.

```from enigma import irange, SubstitutedSum

# A is not greater than 5 (but it is greater than 1)
for A in irange(2, 5):
# make an addition sum equivalent to the multiplication
p = SubstitutedSum(["ATVTSAV"] * A, "VVJECKSA", l2d=dict(A=A))
# and solve it
for s in p.solve():
print(p.substitute(s, "ATVTSAV * A = VVJECKSA"))
```

Either way:

Solution: The multiplication sum is 3818931 × 3 = 11456793.

There are no additional solutions, even if A is allowed to be greater than 5.

2. geoffrounce 7 April 2018 at 8:19 am

A short programme finds the requested digits for which letters stand.

```from itertools import permutations

for q in permutations('1234567890',8):
a, t, v, j, s, e, c, k = q
if a == '0' or int(a) >= 5: continue
if v == '0': continue
atvtsav = int(a + t + v + t + s + a + v)
A = int(a)
vvjecksa = int(v + v + j + e + c + k + s + a)
if A * atvtsav == vvjecksa:
print('A={}, T={}, V={}, J={}, S={}, E={}, C={}, K={}' \
.format(a, t, v, j, s, e, c, k))

# A=3, T=8, V=1, J=4, S=9, E=5, C=6, K=7
```

This site uses Akismet to reduce spam. Learn how your comment data is processed.