Essays/Vier Neun
The Puzzle
From the New Scientist:
VIER and NEUN represent 4-digit squares, each letter denoting a distinct digit. You are asked to find the value of each, given the further requirement that each uniquely determines the other.
The "further requirement" means that of the numerous pairs of answers, choose the one in which each number only appears once in all of the pairs.
A Solution
The 4-digit squares are >.%:1000 squared to <.%:9999 squared, or, as a character matrix,
s=: 4":,.*:32+i.68 4{.s 1024 1089 1156 1225 _4{.s 9216 9409 9604 9801
To form all pairs of such squares, catenate each row to all other rows, and make into a matrix, thus:
p=: ,/ ,"1/ ~ s $p 4624 8 4{.p 10241024 10241089 10241156 10241225 _4{.p 98019216 98019409 98019604 98019801
The pattern of digit assignments must be the same as the pattern of letters in "vierneun", and so:
a=: p #~ (i.~'vierneun') -:"1 i.~"1 p $a 9 8 a 13694624 13695625 17645625 43561521 47615625 62419409 70561521 75691681 75694624
Finally, choose numbers that are unique in all the pairs. An item is unique if its index of first occurrence is the same as its index of last occurrence. Thus:
a #~ (4{."1 a) *.&(i.~ = i:~) 4}."1 a 62419409
Collecting together the essential lines:
p=: ,/ ,"1/ ~ 4 ": ,. *: 32+i.68 a=: p #~ (i.~'vierneun')-:"1 i.~"1 p a #~ (4{."1 a) *.&(i.~ = i:~) 4}."1 a 62419409
See also
Contributed by Roger Hui. Substantially the same text previously appeared as a thread in the newsgroup comp.lang.apl on 2001-03-02.