## Damsel And Suitor

### April 21, 2017

Chris Smith tweets mathematical curiosities at @aap03102. This one caught my eye the other day:

This is from 1779: a time when puzzles were written in poetry, solutions were assumed to be integers and answers could be a bit creepy:

Questions proposed in 1779, and answered in 1780.I. QUESTION 742,

by Mr. John Penberthy.I’m in love with a damsel, the pride of the plain,

Have courted and talk’d in Ovidian strain;

But vain is the rhetoric us’d by my tongue,

She says I’m too old and that she is too young:

From the foll’wing equations, dear ladies, unfold;

If she be too young, or if I be too old.

x^{3}+xy^{2}= 4640y

x^{2}y−y^{3}= 537.6xWhere

xrepresents my age, andythe damsel’s.

Your task is to compute the ages of the damsel and her suitor. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.

If you multiply the two left hand equations and the two right hand equations this reduces to: x^4-y^4 = 2494464 or x^4 = y^4 + 2494464

using this we can re can loop through values of y from 1..100 and look for results for which x is an integer…

Solving it 1779 style: the second equation tells us that that x is a multiple of 5, the first, for a given value of x, is just a quadratic in y with the relevant solution being 2320 – sqrt(5382400 – x^4))/x, Mr Napier’s logarithms tell us that the 4th root of 5382400 is 48.1 or thereabouts, so the oldest the man can be is 45. This doesn’t give a correct value for y, so we try the next one down and find that 40 satisfies both equations and gives 16 for the young lady’s age. Smaller values of x rapidly become increasingly unplausible.

Since both persons are most likely between 10 and 100 years of age…. here’s a simple brute-force way

x = 40

y = 16

Using the same logic as James Curtis-Smith, the minimum value of x and y are as below. These values turn out to be the solution.

It is convenient to substitute x=a*y. Excluding the possibility y=0, we can divide through by y. Both equations now only have y^2, which can be eliminated to give the equation

84*a^4-641*a^2+725=0.

This can be solved for a^2 using the quadratic formula. There are two positive solutions for a. Substituting the rational one (a=5/2) into one of the previous equations gives y^2=256 or y=16 and x=40.

The other solution gives y=40*(1.074276)^(1/4), x=y*(1+8/21)^(1/2) or approximately y=40.7 and x=47.8.

The latter ages are not integer, but not creepy.

Several solutions. Mathematica:

Solve[

{

x^3 + x y^2 == 4640 y,

10 x^2 y - 10 y^3 == 5376 x

},

{x, y}

] ~ Cases ~ {

x -> xi_Integer /; xi > 0,

y -> yi_Integer /; yi > 0

}

C11:

#include <iso646.h>

#include <stdbool.h>

#include <stdint.h>

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv) {

const uint32_t maxAge = 200;

puts("Solutions:");

for (uint32_t x = 1; x < maxAge; ++x) {

for (uint32_t y = 1; y < x; ++y) {

if (x*x*x + x*y*y == 4640*y and

10*x*x*y - 10*y*y*y == 5376*x) {

printf(" [ x = %d y = %d ]\n", x, y);

}

}

}

`exit(0);`

}

@Jan: nice solution. Here is the original (from “The Ladies’ Diary”) on Google books:

https://books.google.co.uk/books?id=VPQ3AAAAMAAJ&pg=PA45

The second solution, from Mr. Wm. Reynolds, is like yours. The solution from Mr. Tho. Truswell I don’t entirely follow.

I just brute forced it. In C++.

Which gave:

x = 40 & y = 16

Can’t find lisp/scheme which has list-of and range.

@Steve: The

`list-of`

macro is in my Standard Prelude, and also included in the code on ideone.com.eqa::{(x^3)+(x*(y^2))-(4640*y)}

eqb::{((x^2)*y)-(y^3)+(537.6*x)}

result::{[a list]; a::x; list::y; {:[eqa(a;x)=0; :[eqb(a;x)=0; :[~list?a,x; list::list,,a,x; “”]; “”]; “”]}’1+!100; list}

solve::{[list]; list::[]; {list::result(x;list)}’1+!100; list}

solve()

[[40 16]]

Shorter Klong version:

eqa::{(x^3)+(x*(y^2))-(4640*y)}

eqb::{((x^2)*y)-(y^3)+(537.6*x)}

result::{[a list]; a::x; list::y; {:[eqa(a;x)=0; :[eqb(a;x)=0; list::list,,a,x; “”]; “”]}’1+!100; list}

solve::{[list]; list::[]; {list::result(x;list)}’1+!100; list}

solve()

[[40 16]]

From Cache for Windows (x86-64) 2016.2.1 (Build…)

USER>zl damsel zp

damsel ;New routine

;

; n suitor,damsel

f suitor=1:1:100 d

. f damsel=1:1:100 d

. . i ((suitor**3)+(suitor*(damsel**2))-(4640*damsel))=0 d

. . . s e=((suitor**2)*damsel)

. . . s e2=(damsel**3)

. . . s e3=(537.6*suitor)

. . . i (e-e2-e3)=0 d

. . . . w !,suitor,” “,damsel

q

USER>d ^damsel

40 16