Text zu DNA Golf
Herausforderung
Umwandlung von Input in einen DNA-Output.
Algorithmus
- Text in ASCII-Codepunkte konvertieren (z. B.
codegolf
->[99, 111, 100, 101, 103, 111, 108, 102]
) - String die ASCII-Codes zusammen (zB
99111100101103111108102
) - In Binärdatei konvertieren (z. B.
10100111111001101001011010001000011001101011011110000110010111111011000000110
) - Füge
0
s am Ende ein, um eine gerade Anzahl von Zeichen zu erhalten (zB101001111110011010010110100010000110011010110111100001100101111110110000001100
) - Ersetze
00
mitA
,01
mitC
,10
mitG
und11
mitT
(zBGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
) - Ausgabe
Testfälle
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Spezifikationen
- Das ist Code-Golf
- Ihr Programm muss Leerzeichen in der Eingabe akzeptieren.
- Ihr Programm muss funktionieren
codegolf
.
code-golf
string
conversion
Niemand ist hier
quelle
quelle
}
was meiner Meinung nach wirdTTGG
.99111100101103111108102
ist beispielsweise größer als uint-64, sodass einige Sprachen möglicherweise mit größeren Konvertierungen zu kämpfen haben.Antworten:
Jelly ,
15 bis13 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
CJam,
2423 BytesVielen Dank an Dennis für das wirklich clevere Speichern von 1 Byte. :)
Teste es hier.
Erläuterung
Sehr direkte Umsetzung der Spezifikation. Das einzig interessante ist das Auffüllen auf eine gerade Anzahl von Nullen (was eigentlich Dennis 'Idee war). Anstatt die Ziffern in jedem Paar in der üblichen Reihenfolge zu behandeln, machen wir das zweite Bit zum höchstwertigen. Das bedeutet, dass das Beenden eines einzelnen Bits mit dem Anhängen einer Null identisch ist. Das bedeutet, dass wir überhaupt keine Null anhängen müssen.
quelle
Python 2,
109103 BytesTeste es auf Ideone .
quelle
Ruby, 59 Bytes
Ein volles Programm. Laufen Sie mit der
-p
Flagge.quelle
Python 3, 130 Bytes.
2 Bytes dank Vaultah gespart.
6 Bytes dank Kevin Lau gespeichert - nicht Kenny.
Ich hasse es, wie schwer es ist, in Python nach Binär zu konvertieren.
Testfälle:
quelle
''.join
'ACGT'[int(z+y,2)]
stattdessen, konvertieren Sie direkt aus dem Binären, anstatt Ihren längeren String zu verwenden, und konvertieren Sie von der Basis 10. Sie können sich auch nicht sicher sein, welchen Unterschied es machen würde, wenn Siere.sub
anstelle Ihres chaotischen Join-Tricks die Verwendung betrachten?int
. Ich werde nachsehenre.sub
, danke für den Vorschlag.Ruby, 80 Bytes
quelle
Mathematica, 108 Bytes
Nimmt einen String als Eingabe und gibt eine Liste von Basen aus.
quelle
Python 3, 126 Bytes
quelle
Pyth, 25 Bytes
Probieren Sie es hier aus!
Erläuterung
Den Polstertrick von Martins CJam-Antwort ausgraben .
quelle
05AB1E , 23 Bytes
Code:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Java, 194 Bytes
Ungolfed
Hinweis
int[]
Zeichenfolge gelten sollte). Der Parameter ist vom Typ, da dies ein Byte ist, über das gespeichert wurdechar[]
.Ausgabe
quelle
MATL , 21 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth , 23 Bytes
Probieren Sie es online!
Erläuterung
Den Trick von Dennis 'Gelee-Antwort ausleihen .
quelle
Groovy, 114 Bytes
Erläuterung:
quelle
Julia 0,4, 77 Bytes
Diese anonyme Funktion verwendet ein Zeichenarray als Eingabe und gibt eine Zeichenfolge zurück.
Probieren Sie es online!
quelle
Python 2.7, 135 Bytes
Ungolfed:
Ausgabe
quelle
g(...)
Funktion dort zweimal, also glaube ich, sie durch die zu ersetzen,join
würde 2 Bytes hinzufügen?Javascript ES7,
105103 BytesDer ES7-Teil ist der
for(c of s)
Teil.ES6-Version,
107105 BytesUngolfed Code
Dies ist mein erster Versuch, auf PPCG zu golfen. Sie können mich jederzeit korrigieren, wenn etwas nicht stimmt.
Danke @AlexA für die kleine Verbesserung.
quelle
f=
und 2 Bytes zu sparen. :)J, 52 Bytes
Verwendung:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
quelle
Common Lisp (Lispworks), 415 Bytes
ungolfed:
Verwendung:
quelle
Perl,
155148137 + 1 (-p
Flag) = 138 BytesTeste es auf Ideone .
quelle
Perl 6, 57 + 1 (
-p
Flag) = 58 BytesSchritt für Schritt Erklärung:
-p
flag bewirkt, dass der Perl 6-Interpreter den Code Zeile für Zeile ausführt, die aktuelle Zeile$_
einfügt und am Ende von dort zurückgibt$_
..ords
- Wenn vor einem Punkt nichts steht, wird eine Methode aufgerufen$_
.ords
Methode gibt Liste der Codepunkte in einer Zeichenfolge zurück.[~]
-[]
ist ein Reduktionsoperator, der seinen Reduktionsoperator in eckigen Klammern speichert. In diesem Fall handelt es sich~
um einen Operator zur Verkettung von Zeichenfolgen. Zum Beispiel[~] 1, 2, 3
ist äquivalent zu1 ~ 2 ~ 3
.+
konvertiert sein Argument in eine Zahl, die benötigt wird, weilbase
Methode nur für Ganzzahlen definiert ist..base(2)
- konvertiert eine Ganzzahl in eine Zeichenfolge in Basis 2$_=
- weist das Ergebnis zu$_
.s:g/..?/{...}/
- Dies ist ein regulärer Ausdruck, der eine beliebige (:g
im globalen Modus) Regex-Instanz..?
(ein oder zwei Zeichen) ersetzt. Das zweite Argument ist ein Ersetzungsmuster, das in diesem Fall im Code enthalten ist (in Perl 6 werden geschweifte Klammern in Zeichenfolgen und Ersetzungsmuster als Code ausgeführt).$/
- Eine reguläre Übereinstimmungsvariable.flip
- Invertiert eine Zeichenkette. Es konvertiert implizit$/
(ein reguläres Übereinstimmungsobjekt) in einen String. Dies liegt daran , ein einzelne Zeichen1
erweitert werden soll10
, im Gegensatz zu01
. Aufgrund dieser Umkehrung sind G und C in der Reihenfolge der Elemente im Array umgekehrt.:2(...)
- Parst eine Base-2-Zeichenfolge in eine Ganzzahl.<A G C T>
- Array von vier Elementen....[...]
- Array-Zugriffsoperator.Was bedeutet das? Das Programm ruft eine Liste aller Codepunkte in einer Zeichenfolge ab, verknüpft sie miteinander und konvertiert sie zur Basis 2. Anschließend werden alle Instanzen von zwei oder einem Zeichen in einen der Buchstaben A, G, C, T ersetzt, abhängig von der gespiegelten Darstellung einer Zahl in binär.
quelle
Hoon ,
148138 Bytes"abc" ist eine Liste von Atomen. Interpolieren Sie sie in Strings (
<a>
), während Sie die Liste überlagern, und fügen Sie sie zu einem neuen String zusammen. Analysieren Sie die Zahl mit++dem
, um sie auf ein Atom zurückzuführen.Multiplizieren Sie die Zahl mit (bitweise Länge + 1)% 2, um sie aufzufüllen. Verwenden Sie
++rip
diese Option, um jedes Zwei-Byte-Paar des Atoms in eine Liste zu zerlegen, die Liste zuzuordnen und die Nummer als Index für die Zeichenfolge "ACGT" zu verwenden.quelle