In 1954 stichtten James Watson (PRO) en Francis Crick (TYR) de RNA Tie Club — een wetenschappelijke gentleman's club die zich tot doel stelde om het raadsel van de RNA structuur te ontwaren en te begrijpen hoe eiwitten gevormd worden. De club telde 20 leden die elk aangeduid werden met een aminozuur (de bouwstenen van eiwitten).

lid opleiding afkorting (dasspeld)
George Gamow fysicus ALA
Alexander Rich biochemicus ARG
Paul Doty fysische chemicus ASP
Robert Ledley wiskundige biofysicus ASN
Martynas Ycas biochemicus CYS
Robley Williams elektronenmicroscopist GLU
Alexander Dounce biochemicus GLN
Richard Feynman theoretische fysicus GLY
Melvin Calvin chemicus HIS
Norman Simmons biochemicus ISO
Edward Teller fysicus LEU
Erwin Chargaff biochemicus LYS
Nicholas Metropolis fysicus, wiskundige MET
Gunther Stent fysische chemicus PHE
James Watson bioloog PRO
Harold Gordon bioloog SER
Leslie Orgel theoretische chemicus THR
Max Delbrück theoretische fysicus TRY
Francis Crick bioloog TYR
Sydney Brenner bioloog VAL

In zijn memoires schrijft George Gamow (ALA):

We were just drinking California wine and we got the idea.

Elk lid kreeg een zwarte wollen stropdas waarop een rode-groene DNA-helix geborduurd was (foto, van links naar rechts: Francis Crick (TYR), Alexander Rich (ARG), Leslie Orgel (THR) en James Watson (PRO)).

RNA Tie Club

Elk lid kreeg ook een gouden dasspeld met daarop de drieletterige afkorting van zijn aminozuur. George Gamow (ALA) kreeg zelfs verschillende keren de vraag waarom het verkeerde monogram op zijn dasspeld stond.

Onder het motto "Do or die, or don't try" kwamen ze tweemaal per jaar samen om ideeën, sigaren en alcoholische dranken met elkaar te delen. Verschillende leden van de RNA Tie Club werden later Nobelprijswinnaars, maar het was uiteindelijk Marshall Nirenberg — die geen clublid was — die erin slaagde om de genetische code te ontcijferen die de link vormt tussen nucleïnezuren en aminozuren.

Opgave

We werken met een geheimschrift dat de leden van een club kunnen gebruiken om berichten naar elkaar te sturen die voor anderen onleesbaar zijn. De clubleden staan geregistreerd in een kommagescheiden bestand (CSV-bestand; comma-separated values) waarvan de eerste kolom de naam van een persoon bevat en de derde kolom een afkorting die bestaat uit één of meer hoofdletters. Met elke persoon correspondeert een unieke afkorting.

Een gecodeerd bericht bestaat uit een reeks (list of tuple) codes, waarbij elke code een string (str) is die bestaat uit de afkorting $$a$$ (één of meer hoofdletters) die correspondeert met een clublid, gevolgd door een positie $$p$$ (één of meer cijfers). Mogelijke codes zijn bijvoorbeeld GLU3, GLY2 of ALA10. Om het gecodeerde bericht te ontcijferen, moet elke code vervangen worden door de $$p$$-de letter in de naam van het clublid dat correspondeert met afkorting $$a$$. Alle letters in het ontcijferde bericht worden voorgesteld door hoofdletters. Voor de leden van de RNA Tie Club staat de code GLU3 voor de letter B (de derde letter van Robley Williams), de code GLY2 voor de letter I (de tweede letter van Richard Feynman), en ALA10 voor de letter O (de tiende letter van George Gamow). Gevraagd wordt:

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat het CSV-bestand RnaTieClub.csv zich in de huidige directory bevindt.

>>> afkorting = lees_afkortingen('RnaTieClub.csv')
>>> afkorting['GLU']
'ROBLEYWILLIAMS'
>>> afkorting['GLY']
'RICHARDFEYNMAN'
>>> afkorting['ALA']
'GEORGEGAMOW'

>>> splits_code('GLU3')
('GLU', 3)
>>> splits_code('GLY2')
('GLY', 2)
>>> splits_code('ALA10')
('ALA', 10)
>>> splits_code('R2D2')
Traceback (most recent call last):
AssertionError: ongeldige code

>>> ontcijfer(['GLU3', 'GLY2', 'ALA10', 'ASP4', 'ASP6', 'THR9', 'HIS11', 'PHE8', 'PHE4'], afkorting)
'BIOLOGIST'
>>> ontcijfer(('MET14', 'SER1', 'CYS5', 'PRO9', 'LYS4', 'HIS7', 'GLU11', 'GLU14', 'PHE4'), afkorting)
'PHYSICIST'
>>> ontcijfer(['CYS10', 'MET4', 'ARG8', 'ISO4', 'GLU8', 'MET18', 'PHE12'], afkorting)
'CHEMIST'
>>> ontcijfer(['THR9', 'PHE6', 'THR7', 'LEU9', 'GLU2', 'ALA1', 'TYR6', 'GLU14', 'ASP7'], afkorting)
'GEOLOGIST'
>>> ontcijfer(['THR9', 'ARG3', 'MET5', 'ALA5', 'ASN5', 'CYS2', 'MET14', 'GLY4', 'ASN11', 'ASN1'], afkorting)
'GEOGRAPHER'
>>> ontcijfer(['LYS11', 'MET8', 'ASP7', 'PHE7', 'ALA10', 'ISO11', 'ASN2', 'MET9', 'MET10', 'LEU5'], afkorting)
'ASTRONOMER'
>>> ontcijfer(['CYS12', 'PRO8', 'LYS8', 'CYS4', 'MET17', 'ISO12', 'PHE12', 'MET17', 'LYS6', 'MET17', 'PRO2', 'HIS6'], afkorting)
'STATISTICIAN'
>>> ontcijfer(['VAL7', 'ARG11', 'ALA3', 'MET3', 'ARG13', 'ASN11', 'HIS1', 'HIS5', 'PHE8', 'MET11'], afkorting)
'BIOCHEMIST'
>>> ontcijfer(['GLY12', 'ISO5', 'PHE9', 'GLY4', 'ASN8', 'ISO9', 'SER2', 'LEU7', 'LYS4', 'CYS10', 'TYR10', 'ALA8', 'GLN13'], afkorting)
'MATHEMATICIAN'
>>> ontcijfer(['ARG12', 'SER8', 'GLU13', 'ASP1', 'TRY9', 'PHE9', 'THR10', 'LEU12', 'MET8', 'GLN14', 'ISO8', 'ALA6', 'TYR4', 'LEU7', 'HIS5', 'CYS8', 'LEU7'], afkorting)
'COMPUTERSCIENTIST'