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 rood-groene DNA-helix geborduurd was (foto, van links naar rechts: Francis Crick (TYR), Alexander Rich (ARG), Leslie Orgel (THR) en James Watson (PRO)).
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.
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. De waarden in de verschillende kolommen bevatten zelf geen komma's. Met elke persoon correspondeert een unieke afkorting.
Een gecodeerd bericht bestaat uit een reeks codes, waarbij elke code bestaat uit de afkorting $$a$$ (één of meer hoofdletters) die correspondeert met een clublid, gevolgd door een positie $$p$$ (één of meer cijfers zonder voorloopnullen). 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 hoofdletter B (de derde letter van Robley Williams), de code GLY2 voor de hoofdletter I (de tweede letter van Richard Feynman), en ALA10 voor de hoofdletter O (de tiende letter van George Gamow).
Schrijf een bash shell script decode waaraan een CSV-bestand met de leden van een club, en één of meer codes van een gecodeerd bericht moeten doorgegeven worden. Het shell script moet ervan uitgaan dat het gegeven bericht gecodeerd werd aan de hand van de ledenlijst uit het gegeven CSV-bestand, en moet het ontcijferde bericht uitschrijven naar standard output. Het shell script moet de volgende foutafhandeling voorzien:
er moeten minstens twee argumenten aan het shell script doorgegeven worden; als dat niet het geval is of als het eerste argument geen gewoon leesbaar bestand is, dan moet een gepaste boodschap (zie onderstaande voorbeeldsessie) uitgeschreven worden naar standard error en moet het shell script eindigen met exit status 1
als minstens één van de opgegeven codes ongeldig is, dan moet een gepaste boodschap met de eerste ongeldige code (zie onderstaande voorbeeldsessie) uitgeschreven worden naar standard error en moet het shell script eindigen met exit status 2; een code is ongeldig als ofwel
de code niet bestaat uit een afkorting $$a$$ (één of meer hoofdletters) gevolgd door een positie $$p$$ (één of meer cijfers zonder voorloopnullen)
in het gegeven CSV-bestand geen clublid voorkomt dat correspondeert met de afkorting $$a$$
de naam van het clublid dat correspondeert met de afkorting $$a$$ geen $$p$$-de letter heeft
Onderstaande voorbeeldsessie geeft aan hoe het shell script decode moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat het CSV-bestand RnaTieClub.csv zich in de huidige directory bevindt.
$ decode RnaTieClub.csv GLU3 GLY2 ALA10 ASP4 ASP6 THR9 HIS11 PHE8 PHE4 BIOLOGIST $ echo $? 0 $ decode RnaTieClub.csv ARG12 SER8 GLU13 ASP1 TRY9 PHE9 THR10 LEU12 MET8 GLN14 ISO8 ALA6 TYR4 LEU7 HIS5 CYS8 LEU7 COMPUTERSCIENTIST $ decode RnaTieClub.csv Syntax: decode FILE CODE... $ echo $? 1 $ decode unknown.csv GLU3 Syntax: decode FILE CODE... $ echo $? 1 $ chmod u-r RnaTieClub.csv $ decode RnaTieClub.csv GLU3 Syntax: decode FILE CODE... $ echo $? 1 $ chmod u+r RnaTieClub.csv $ decode RnaTieClub.csv GLU3 R2D2 C3P0 decode:invalid code:R2D2 $ echo $? 2 $ decode RnaTieClub.csv GLU3 XXX2 YYY7 decode:invalid code:XXX2 $ echo $? 2 $ decode RnaTieClub.csv GLU3 GLY2000 ALA100 decode:invalid code:GLY2000 $ echo $? 2