The three rules of Ruby Q.:
-
Please do not post any solutions or spoiler discussion for this quiz
until
48 hours have passed from the time on this message. -
Support Ruby Q. by submitting ideas as often as you can:
- Enjoy!
Suggestion: A [QUIZ] in the subject of emails about the problem helps
everyone
on Ruby T. follow the discussion. Please reply to the original quiz
message,
if you can.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
by Hugh S.
In the book “Starburst” by Frederik Pohl ISBN 0-345-27537-3, page 56,
without
really spoiling the plot, some characters complain about the verbosity
of
communications and encode a message by Gödelizing it (detailed on page
58).
The encoding works by taking each successive character of a message and
raising
each successive prime to some function of that character, and
multiplying these
powers of primes together. So for example we could use the ASCII code +
1 to
allow for nulls to be encoded. Then “Ruby\r\n” would end up as:
(2 ** R) * (3 ** u) * (5 ** b)…
10992805522291106558517740012022207329045811217010725353610920778
28664749233402453985379760678149866991742205982820039955872246774
86029159248495553882158351479922840433375701904296875000000000000
00000000000000000000000000000000000000000000000000000000000000000
000000
The idea is partly to obscure the message by the amount of factorization
needed.
This quiz is to write a program to Gödelize a message, and a program to
deGödelize it.
The funtion used to map characters described in the book is “A” => 1,
“B” => 2,
etc and an example is given where spaces are 0. Nothing further is said
about
punctuation, or lower case. The message sent in the book is:
msg = (3.875 * (12 ** 26)) +
(1973 ** 854) + (331 ** 852) +
(17 ** 2008) + (3 ** 9707) + (2 ** 88) - 78
which it turns out has lots of 0 powers in it, so I strictly don’t need
the
ASCII + 1 I’ve used in my example, I could use just ASCII, and the nulls
would
not increase the size of the resulting number. This further means that
if a list
of characters is sent in decreasing frequency order with the message,
the most
frequent could be encoded as 0 and the number would be that much
smaller. In
English it is likely to be an “e” or " " which ends up coded as 0.
Interesting things arising from this:
1 Finding the power once a prime is selected
2 Getting the list of primes in the first place
3 encoding of characters, as mentioned above
4 representing the number that results from encoding.