## 2023-02-10*Author: @JensLincke* coding and decoding

Tobi würde sagen: "Ich hab mich snippen lassen"


```javascript
import Strings from 'src/client/strings.js'

var dna = `CTATGAAGCCTGTGATAGAGCATGCTGCTATACCTACACAGCTGATGTAGCATGCTACTGTAGAGCGCTCACCTACTGGTCCTATAGCACCTCTCGCTAAGCCATCTGTGAAGCTACCTACACAGCACTCACGC`+
`ATAGAGCTCGTGTACAACATAGAGCACTCATCTACACAGCCTCCTGTCACGTTAGAGCATGTGTCACTAGATGCACTAGATCCTGTCACGTAGCAGCAGCAGCTACCTGCTATGACTATGAAGCACAACTATCAGCATCACTTACCTACTCAGCATG`+
`CTGCACAGCCTAGATTCACGTAGCACTATCATCCTAAGCACTCATAGCTCTATTAGCGATCGTCACAGCGCAGATACAAGCTACCTGGTCCTGTAGACTATCAGCCGTCTAACTATCTAGCGTAGCTCACTACTCTAGCTACACAGCACTACAAGCTCAA`+
`CTACAGAGGATTGAAGCCTGCTGCTGAGCCTACTGCTCACGAGCTACCTGCTATGACTACACAGCTGTCACTAGAGCCTGTGATAGAGCGCTCACAGCACAACTCTCTCACGTCTAAGCGTATGTCTCAGCCTAGATTCACGTAGCGTACTGCTAATCAT`+
`CCTACTGTCACGTTAGAGCCTCTGTTCACGTAGCCTACTGCTCAGCACAGACTGATAGCTACACCTGGATACAAGCTACACTCGTCTACACAGCCGTCTGCTACACAGCCTACTGCTCCTAAGCTCGGATCACGCACTAAGCATGCTAGTCCATCTATGA`+
`TCACGTCACCTACTGCATGATCTCGTCAGCAGCACTACAAGCCATACTCGTCTCCGTTGTGCTAGCGTCCACCTGCTACATCTCCTGTAGGCATGACTACTAAGCCTCCTGTCACGTTAGAGCCTCACTTCACGTAGCCACCTATCACGTTAGTGAAGCT`+
`GATGTCTCTACCTACACCTCAGCCTCACTTCACGTAGCATCCTGCTCTCGTGAAGCGCAGATACAAGCTAGACTTAGTGATCACGTATCCTGTCACGTCTACTCAGCGTCCACCTGCTACATCTCCTGTAGGCATGACTACTAAGCACTCATCATCTGCT`+
`AGTCCTACTCACGAGCAGCCATCTACTGACAAGCCTATACCTATCGACTAGCTACCTAACAAGCCATCTAATCCTGCTACATTAGCTACTCAGCGCAATGCTGTGATCACGTCTACTCTGATAGTGTGAGGAGAGCACTGATGCTAGCTACCTAACAAGC`+
`ATGCTAGTCAGCGCAGATACAAGCTACCGTTCAAGCACTCTCGTCCTATCGTGTACAACACTACTCAGCCGTACTCATTAGAGCCTGCGTCACAGCCTATGAAGCTACACTCTCCTCAGCTGATCACGTTGTCTCAGCGCTACTTGATAGAGCGTCCTAT`+
`GATCACGTACTGCTGCTTAGACGAGCAGCCTACTGCTCAGCGAGACTACTCACAGCACACTATAGCTACACAGCATGCTACTGTAGCTACACAGCGATCTCTACAGCTACACTCTCCTCAGCCTCTGTTCACGTACAACTATCAGCCTCACTTCACGTAG`+
`CATCCTGCTCTCGTGAAGCACTCATGTCCTACATTGTGTCCTACTCAGCTGATAGCTACGTTAGAGCCTGCGTCACAGCTACACTCTCCTCAGCGTATGTCACAGCTACCTAACAAGCTACCGTTCAACGAGCAGCAGCATGCTGCACAGCGCTCACCTAG`+
`ATCTACTCAGCGATCTCTGAAGCTACACTCACACTGATGCTAGCACACTGTAGAGCCTAGATTCACGTAGCTACCTGCTAAGCATGTGTTCACGTCTAAGCACTGATTGATCGATCCTGCTCGTCCTACTCAGCGCAGATAGCATCACTTGATGACTACTC`+
`AGCGATCTCTACAGCGCAGATACACTGCTCTACCTATGATAGAGCGCTCACAGCCTACTGCTCCTAAGCTGATAGGATCTCTACCTAAGCTACCTACTCAGCGAGCACGCTGATCTCGTCTGATGATAGCACCTATGATGAAGCCATCTACTGTGACTACT`+
`GTAGCTAAGCATCCTAGTCCTACTCAGCGCAGATAGCTCGCTCCTCCTACTCACGAGCGATCTCTACAGCCTCCTGTCACGTTAGAGCGTACTACACGTCCTATGATGACTACTCAGCGTATGTCACCGTCTACACAGCCTCTGTTCACGTAGCCTACTGC`+
`TCCTACTCAGCTGATCACGTCTCCTAATCATCTAGCTATGATAGAGCACAACTTCACGTCTACTCAGCTACACTACACTGTAGAGCATGCTGCACAGCACTATCATCCTAAGCACTGATTCACGTAGCGTCCTATGAGATCTCTACAGCCATATCCTACTG`+
`CATCTACTCAGCAGCAGCAGCGTCACTCTCGCAAGCATCCTGCTACATCTAAGCGTCCACTGATGACTAAGCCTAGATCACCTACACAGCTACCGTAGCTGATAGGATTACCTGTGAAGC`


var dnaTokens = Strings.matchAll(/.{1,3}/g, dna).map(ea => ea[0])

var code = {0: "ATA",
1: "TCT",
2: "GCG",
3: "GTG",
4: "AGA",
5: "CGC",
6: "ATT",
7: "ACC",
8: "AGG",
9: "CAA",
start: "TTG",
stop: "TAA",
A: "ACT",
B: "CAT",
C: "TCA",
D: "TAC",
E: "CTA",
F: "GCT",
G: "GTC",
H: "CGT",
I: "CTG",
J: "TGC",
K: "TCG",
L: "ATC",
M: "ACA",
N: "CTC",
O: "TGT",
P: "GAG",
Q: "TAT",
  R: "CAC",
  S: "TGA",
  T: "TAG",
  U: "GAT",
  V: "GTA",
  W: "ATG",
  X: "AGT",
  Y: "GAC",
  Z: "GCA",
" ": "AGC",
  ".": "ACG"}



const flip = (data) => Object.fromEntries(
  Object
    .entries(data)
    .map(([key, value]) => [value, key])
  );


var decode =flip(code)


dnaTokens.filter(ea => ea).map(ea => decode[ea]).join("") 
```


Result: // ES IST WIEDER SO WEIT FREIGETRNKE BIS DER ARZT KOMMT ABER NICHT WORTWRTLICH    DIESES MAL LADEN WIR EUCH ALLE AB 16 UHR ZUM DIGITAL HEALTH CENTER AM CAMPUS III EIN. DIESER ORT IST FR MANCHE VON EUCH VIELLEICHT NOCH EIN MYSTERIUM DAHER HIER EINE KURZE WEGBESCHREIBUNG  AM BAHNHOF GRIEBNITZSEE NICHT NACH RECHTS SONDERN NACH LINKS ZUM TATSCHLICHEN GRIEBNITZSEE ABBIEGEN.  BEIM EDEKA DEM BELIEBTEN ZWISCHENSTOPP AUF DEM WEG ZUM DHC ANGEKOMMEN HABT IHR ES DANN SCHON FAST GESCHAFFT.  EIN PAAR METER WEITER UND DANN NOCHMAL NACH LINKS ABGEBOGEN STEHT IHR DANN VOR DEM DHC.   WIR FREUEN UNS DARAUF MIT EUCH DIE WOCHE AUSKLINGEN ZU LASSEN UND ZUMINDEST FR EINE STUNDE DEN PRFUNGSSTRESS BEISEITE LEGEN ZU KNNEN. UND NICHT VERGESSEN VORHER NOCH EINEN SCHNELLTEST MACHEN DAMIT WIR ALLE AUCH GESUND BLEIBEN    GANZ LIEBE GRSSE EURER DH STUDIS 



Und weil das mit den Regex splitting so komisch aussah, hier noch imperativ...

```javascript
function spitInTippels(dna) {
  var dnaTokens = []
  var i = 0
  while(i < dna.length) {
    var s = ""
    for(var j=0; j < 3; j++) {
      var c = dna[i+j]
      if (c) s += c
    }
    dnaTokens.push(s)
    i += 3
  }
  return dnaTokens
}
var dnaTokens = spitInTippels(dna)
```

Auch nicht schön... aber egal.

Ah, ok, es geht auch direkter:

``` javascript
var dnaTokens =  Array.from(dna.match(/.{3}/g))
 ```


Btw. es scheint ein issue mit sehr langen zeilen in CodeMirror bzw. unserem editor Code zu geben. 
Er kommt nicht damit klar, wenn die DNA geprinted wird. Entweder sind es die highlights oder ...





