Texto a DNA golf
Reto
Convierta la entrada en una salida de ADN.
Algoritmo
- Convierta texto en puntos de código ASCII (por ejemplo,
codegolf
->[99, 111, 100, 101, 103, 111, 108, 102]
) - Cadena los códigos ASCII juntos (por ejemplo
99111100101103111108102
) - Convertir a binario (p
10100111111001101001011010001000011001101011011110000110010111111011000000110
. Ej. ) - Almohadillas
0
en el extremo para formar un número par de caracteres (p101001111110011010010110100010000110011010110111100001100101111110110000001100
. Ej. ) - Reemplazar
00
conA
,01
conC
,10
conG
y11
conT
(pGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
. Ej. ) - Salida
Casos de prueba
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Presupuesto
- Esto es código golf
- Su programa debe aceptar espacios en la entrada.
- Su programa debe funcionar para
codegolf
.
code-golf
string
conversion
No hay nadie aquí
fuente
fuente
}
lo que creo que se convierteTTGG
.99111100101103111108102
por ejemplo, es más grande que uint-64, por lo que algunos idiomas pueden tener dificultades con conversiones más grandes.Respuestas:
Jalea ,
1513 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
CJam,
2423 bytesGracias a Dennis por guardar 1 byte de una manera realmente inteligente. :)
Pruébalo aquí.
Explicación
Implementación muy directa de la especificación. Lo único interesante es el relleno de un número par de ceros (que en realidad fue idea de Dennis). En lugar de tratar los dígitos de cada par en el orden habitual, hacemos que el segundo bit sea el más significativo. Eso significa que terminar en un solo bit es idéntico a agregarle un cero, lo que significa que no tenemos que agregarle el cero.
fuente
Python 2,
109103bytesPruébalo en Ideone .
fuente
Ruby, 59 bytes
Un programa completo Corre con la
-p
bandera.fuente
Python 3, 130 bytes.
Guardado 2 bytes gracias a vaultah.
Guardado 6 bytes gracias a Kevin Lau, no a Kenny.
Odio lo difícil que es convertir a binario en Python.
Casos de prueba:
fuente
''.join
'ACGT'[int(z+y,2)]
lugar, convirtiendo directamente de binario en lugar de usar su cadena más larga y convirtiendo desde la base 10. Además, ¿no está seguro de cuánta diferencia haría, pero mire usar enre.sub
lugar de su truco de unión desordenado?int
. Lo investigarére.sub
, gracias por la sugerencia.Rubí, 80 bytes.
fuente
Mathematica, 108 bytes
Toma una cadena como entrada y genera una lista de bases.
fuente
Python 3, 126 bytes
fuente
Pyth, 25 bytes
Pruébalo aquí!
Explicación
Excavando el truco de relleno de la respuesta de Martins CJam .
fuente
05AB1E , 23 bytes
Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Java, 194 bytes
Sin golf
Nota
int[]
porque ese es un byte guardadochar[]
.Salida
fuente
MATL , 21 bytes
Pruébalo en línea!
Explicación
fuente
Pyth , 23 bytes
Pruébalo en línea!
Explicación
Tomando prestado el truco de la respuesta de Dennis 'Jelly .
fuente
Groovy, 114 bytes
Explicación:
fuente
Julia 0.4, 77 bytes
Esta función anónima toma una matriz de caracteres como entrada y devuelve una cadena.
Pruébalo en línea!
fuente
Python 2.7, 135 bytes
Sin golf:
Salida
fuente
g(...)
función allí dos veces, así que creo que reemplazarla con lajoin
agregaría 2 bytes.Javascript ES7,
105103 bytesLa parte ES7 es la
for(c of s)
parte.Versión ES6,
107105bytesCódigo sin golf
Este es mi primer intento de jugar golf en PPCG, no dude en corregirme si algo está mal.
Gracias @AlexA por la pequeña mejora.
fuente
f=
, ahorrando 2 bytes. :)J, 52 bytes
Uso:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
fuente
Lisp común (Lispworks), 415 bytes
sin golf:
Uso:
fuente
Perl,
155148137 + 1 (-p
flag) = 138 bytesPruébalo en Ideone .
fuente
Perl 6, 57 + 1 (
-p
bandera) = 58 bytesExplicación paso a paso:
-p
El indicador hace que el intérprete de Perl 6 ejecute el código línea por línea, coloque la línea actual$_
y, al final, vuelva a colocarlo$_
..ords
- Si no hay nada antes de un período, se llama a un método$_
.ords
El método devuelve una lista de puntos de código en una cadena.[~]
-[]
es un operador de reducción, que almacena su operador de reducción entre paréntesis. En este caso, es~
, que es un operador de concatenación de cadenas. Por ejemplo,[~] 1, 2, 3
es equivalente a1 ~ 2 ~ 3
.+
convierte su argumento en un número, necesario porque elbase
método solo se define para enteros..base(2)
- convierte un entero en una cadena en la base 2$_=
- asigna el resultado a$_
.s:g/..?/{...}/
- esta es una expresión regular que reemplaza cualquier:g
instancia (de modo global) de expresiones regulares..?
(uno o dos caracteres). El segundo argumento es un patrón de reemplazo, que en este caso en el código (en Perl 6, las llaves en cadenas y los patrones de reemplazo se ejecutan como código).$/
- una variable de coincidencia de expresiones regulares.flip
- invierte una cadena. Se convierte implícitamente$/
(un objeto de coincidencia de expresiones regulares) en una cadena. Esto se debe a que un solo carácter1
debe expandirse10
, en lugar de01
. Debido a ese cambio, el orden de los elementos en la matriz tiene G y C invertidos.:2(...)
- analiza una cadena de base 2 en un entero.<A G C T>
- conjunto de cuatro elementos....[...]
- operador de acceso a la matriz.Qué significa eso? El programa obtiene una lista de todos los puntos de código en una cadena, los concatena juntos, los convierte en base 2. Luego, reemplaza todas las instancias de dos o un carácter en una de las letras A, G, C, T dependiendo de la representación invertida de un número en binario
fuente
Hoon ,
148138 bytes"abc" es una lista de átomos. Interpolarlos en cadenas (
<a>
) mientras se pliega sobre la lista, uniéndolos en una nueva cadena. Analiza el número con++dem
para devolverlo a un átomo.Multiplique el número por (longitud en bits + 1)% 2 para rellenarlo. Use
++rip
para desarmar cada par de dos bytes del átomo en una lista, mapee sobre la lista y use el número como índice en la cadena "ACGT".fuente