SMS sur DNA golf
Défi
Convertissez l'entrée en sortie ADN.
Algorithme
- Convertir du texte en points de code ASCII (par exemple
codegolf
->[99, 111, 100, 101, 103, 111, 108, 102]
) - Enchaînez les codes ASCII ensemble (par exemple
99111100101103111108102
) - Convertir en binaire (par exemple
10100111111001101001011010001000011001101011011110000110010111111011000000110
) - Tapez
0
s à la fin pour créer un nombre pair de caractères (par exemple101001111110011010010110100010000110011010110111100001100101111110110000001100
) - Remplacez
00
parA
,01
parC
,10
parG
et11
parT
(par exempleGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
) - Sortie
Cas de test
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Caractéristiques
- C'est du code-golf
- Votre programme doit accepter des espaces en entrée.
- Votre programme doit fonctionner pour
codegolf
.
code-golf
string
conversion
Il n'y a personne
la source
la source
}
ce que je crois devenirTTGG
.99111100101103111108102
par exemple, est plus grand que uint-64, donc certaines langues peuvent avoir du mal avec des conversions plus importantes.Réponses:
Gelée ,
1513 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
CJam,
2423 octetsMerci à Dennis d'avoir sauvé 1 octet de manière très intelligente. :)
Testez-le ici.
Explication
Mise en œuvre très directe de la spécification. Le seul élément intéressant est le remplissage d'un nombre pair de zéros (ce qui était en fait l'idée de Dennis). Au lieu de traiter les chiffres de chaque paire dans l'ordre habituel, nous faisons du deuxième bit le plus significatif. Cela signifie que se terminer par un seul bit est identique à lui ajouter un zéro, ce qui signifie que nous n'avons pas du tout besoin d'ajouter le zéro.
la source
Python 2,
109103 octetsTestez-le sur Ideone .
la source
Rubis, 59 octets
Un programme complet. Courez avec le
-p
drapeau.la source
Python 3, 130 octets.
Enregistré 2 octets grâce à vaultah.
Enregistré 6 octets grâce à Kevin Lau - pas Kenny.
Je déteste la difficulté de convertir en binaire en python.
Cas de test:
la source
''.join
'ACGT'[int(z+y,2)]
place, convertissant directement en binaire au lieu d'utiliser votre chaîne plus longue et convertissant à partir de la base 10. De plus, vous ne savez pas quelle différence cela ferait, mais envisagez d'utiliser à lare.sub
place de votre astuce de jointure malpropre?int
. Je vais vérifierre.sub
, merci pour la suggestion.Ruby, 80 octets
la source
Mathematica, 108 octets
Prend une chaîne en entrée et génère une liste de bases.
la source
Python 3, 126 octets
la source
Pyth, 25 octets
Essayez-le ici!
Explication
Creuser le truc de rembourrage de Martins CJam réponse .
la source
05AB1E , 23 octets
Code:
Utilise CP-1252 encodage . Essayez-le en ligne! .
la source
Java, 194 octets
Non golfé
Remarque
int[]
car c'est un octet enregistré surchar[]
.Sortie
la source
MATL , 21 octets
Essayez-le en ligne!
Explication
la source
Pyth , 23 octets
Essayez-le en ligne!
Explication
Emprunter l'astuce de la réponse de Dennis 'Jelly .
la source
Groovy, 114 octets
Explication:
la source
Julia 0.4, 77 octets
Cette fonction anonyme prend un tableau de caractères en entrée et renvoie une chaîne.
Essayez-le en ligne!
la source
Python 2.7, 135 octets
Non golfé:
Sortie
la source
g(...)
fonction là-dedans deux fois, donc je crois que le remplacer parjoin
ajouterait 2 octets?Javascript ES7,
105103 bytesLa partie ES7 est la
for(c of s)
partie.Version ES6,
107105 octetsCode non golfé
C'est mon premier essai de golf sur PPCG, n'hésitez pas à me corriger si quelque chose ne va pas.
Merci @AlexA pour la petite amélioration.
la source
f=
en économisant 2 octets. :)J, 52 octets
Utilisation:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
la source
Lisp commun (Lispworks), 415 octets
non golfé:
Usage:
la source
Perl,
155148137 + 1 (-p
pavillon) = 138 octetsTestez-le sur Ideone .
la source
Perl 6, 57 + 1 (
-p
indicateur) = 58 octetsExplication étape par étape:
-p
L'indicateur amène l'interpréteur Perl 6 à exécuter le code ligne par ligne, à mettre la ligne actuelle$_
et à la fin à la remettre$_
..ords
- S'il n'y a rien avant un point, une méthode est appelée$_
.ords
retourne la liste des points de code dans une chaîne.[~]
-[]
est un opérateur de réduction, qui stocke son opérateur de réduction entre parenthèses. Dans ce cas, c'est~
, qui est un opérateur de concaténation de chaînes. Par exemple,[~] 1, 2, 3
est équivalent à1 ~ 2 ~ 3
.+
convertit son argument en nombre, nécessaire car labase
méthode n'est définie que pour les entiers..base(2)
- convertit un entier en une chaîne en base 2$_=
- attribue le résultat à$_
.s:g/..?/{...}/
- il s'agit d'une expression régulière remplaçant toute:g
instance ( , en mode global) de regex..?
(un ou deux caractères). Le deuxième argument est un modèle de remplacement, qui dans ce cas en code (en Perl 6, les accolades dans les chaînes et les modèles de remplacement sont exécutés en tant que code).$/
- une variable de correspondance regex.flip
- inverse une chaîne. Il convertit implicitement$/
(un objet de correspondance d'expression régulière) en une chaîne. En effet, un caractère unique1
doit être étendu à10
, par opposition à01
. En raison de ce retournement, l'ordre des éléments dans le tableau a G et C inversés.:2(...)
- analyse une chaîne de base 2 en un entier.<A G C T>
- tableau de quatre éléments....[...]
- opérateur d'accès à la baie.Qu'est-ce que ça veut dire? Le programme obtient la liste de tous les points de code dans une chaîne, les concatène ensemble, les convertit en base 2. Ensuite, il remplace toutes les instances de deux ou un caractère en une des lettres A, G, C, T selon la représentation inversée d'un nombre en binaire.
la source
Hoon ,
148138 octets"abc" est une liste d'atomes. Interpolez-les en chaînes (
<a>
) tout en repliant la liste, en les réunissant en une nouvelle chaîne. Analyser le nombre avec++dem
pour le ramener à un atome.Multipliez le nombre par (longueur au niveau du bit + 1)% 2 pour le remplir. Utilisez
++rip
pour désassembler chaque paire de deux octets de l'atome dans une liste, mappez sur la liste et utilisez le numéro comme index dans la chaîne "ACGT".la source