Teks ke DNA golf
Tantangan
Ubah input menjadi output DNA.
Algoritma
- Konversi teks menjadi poin kode ASCII (mis
codegolf
- -[99, 111, 100, 101, 103, 111, 108, 102]
) - Rangkai kode ASCII bersama (mis.
99111100101103111108102
) - Konversikan ke biner (mis.
10100111111001101001011010001000011001101011011110000110010111111011000000110
) - Pad
0
s ke ujung untuk membuat jumlah karakter genap (mis.101001111110011010010110100010000110011010110111100001100101111110110000001100
) - Ganti
00
denganA
,01
denganC
,10
denganG
, dan11
denganT
(misalnyaGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
) - Keluaran
Uji Kasus
codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
ppcg > GGCTAATTGTCGCACTT
} > TTGG (padding)
Spesifikasi
- Ini adalah kode-golf
- Program Anda harus menerima spasi dalam input.
- Program Anda harus bekerja
codegolf
.
code-golf
string
conversion
Tidak Ada Di Sini
sumber
sumber
}
yang saya percaya menjadiTTGG
.99111100101103111108102
misalnya lebih besar dari uint-64, sehingga beberapa bahasa mungkin kesulitan dengan konversi yang lebih besar.Jawaban:
Jelly ,
1513 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
CJam,
2423 byteTerima kasih kepada Dennis karena telah menghemat 1 byte dengan cara yang sangat pintar. :)
Uji di sini.
Penjelasan
Implementasi spesifikasi yang sangat langsung. Satu-satunya yang menarik adalah padding ke angka nol (yang sebenarnya adalah ide Dennis). Alih-alih memperlakukan digit pada masing-masing pasangan dalam urutan yang biasa, kami membuat bit kedua yang paling signifikan. Itu berarti, mengakhiri dengan bit tunggal identik dengan menambahkan nol padanya, yang berarti kita tidak harus menambahkan nol sama sekali.
sumber
Python 2,
109103 byteUji di Ideone .
sumber
Ruby, 59 byte
Program lengkap. Jalankan dengan
-p
bendera.sumber
Python 3, 130 byte.
Disimpan 2 byte berkat vaultah.
Disimpan 6 byte berkat Kevin Lau - bukan Kenny.
Aku benci betapa sulitnya untuk mengkonversi ke biner dengan python.
Kasus uji:
sumber
''.join
'ACGT'[int(z+y,2)]
alih-alih, konversikan langsung dari biner alih-alih menggunakan string yang lebih panjang dan konversi dari basis 10. Juga, tidak yakin berapa banyak perbedaan yang akan terjadi tetapi lihat menggunakanre.sub
alih-alih trik gabung berantakan Anda?int
. Saya akan melihat ke dalamre.sub
, terima kasih atas sarannya.Ruby, 80 byte
sumber
Mathematica, 108 byte
Mengambil string sebagai input, dan menampilkan daftar basis.
sumber
Python 3, 126 byte
sumber
Pyth, 25 byte
Coba di sini!
Penjelasan
Membongkar trik padding dari jawaban Martins CJam .
sumber
05AB1E , 23 byte
Kode:
Menggunakan pengodean CP-1252 . Cobalah online! .
sumber
Java, 194 byte
Tidak disatukan
Catatan
int[]
karena satu byte disimpanchar[]
.Keluaran
sumber
MATL , 21 byte
Cobalah online!
Penjelasan
sumber
Pyth , 23 byte
Cobalah online!
Penjelasan
Meminjam trik dari jawaban Dennis 'Jelly .
sumber
Groovy, 114 byte
Penjelasan:
sumber
Julia 0.4, 77 byte
Fungsi anonim ini mengambil array karakter sebagai input dan mengembalikan string.
Cobalah online!
sumber
Python 2.7, 135 byte
Tidak Disatukan:
Keluaran
sumber
g(...)
fungsi di sana dua kali, jadi saya percaya menggantinya denganjoin
akan menambah 2 byte?Javascript ES7,
105103 byteBagian ES7 adalah
for(c of s)
bagiannya.Versi ES6,
107105 byteKode tidak dikunci
Ini adalah percobaan pertama saya bermain golf di PPCG, jangan ragu untuk mengoreksi saya jika ada sesuatu yang salah.
Terima kasih @AlexA untuk perbaikan kecilnya.
sumber
f=
, menghemat 2 byte. :)J, 52 byte
Penggunaan:
3 :'''ACGT''{~#._2,\#:".,&''x''":(,&:(":"0))/3&u:y' 'codegolf'
==>GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA
sumber
Gangguan Umum (Lispworks), 415 byte
ungolfed:
Pemakaian:
sumber
Perl,
155148137 + 1 (-p
flag) = 138 byteUji di Ideone .
sumber
Perl 6, 57 +1 (
-p
bendera) = 58 bytePenjelasan langkah demi langkah:
-p
flag menyebabkan penerjemah Perl 6 menjalankan kode baris demi baris, meletakkan baris saat ini$_
, dan pada akhirnya mengembalikannya$_
..ords
- Jika tidak ada sebelum periode, suatu metode dipanggil$_
.ords
metode mengembalikan daftar codepoint dalam sebuah string.[~]
-[]
adalah operator reduksi, yang menyimpan operator reduksi di antara kurung. Dalam hal ini, itu~
, yang merupakan operator penggabungan string. Misalnya,[~] 1, 2, 3
setara dengan1 ~ 2 ~ 3
.+
mengubah argumennya menjadi angka, diperlukan karenabase
metode hanya didefinisikan untuk bilangan bulat..base(2)
- Mengonversi bilangan bulat ke string di basis 2$_=
- Menugaskan hasilnya ke$_
.s:g/..?/{...}/
- ini adalah ekspresi reguler yang menggantikan setiap:g
instance ( , mode global) regex..?
(satu atau dua karakter). Argumen kedua adalah pola penggantian, yang dalam hal ini dalam kode (dalam Perl 6, kurung keriting dalam string dan pola penggantian dijalankan sebagai kode).$/
- variabel pencocokan regex.flip
- membalikkan sebuah string. Secara implisit mengkonversi$/
(objek pencocokan regex) ke string. Ini karena satu karakter1
harus diperluas ke10
, sebagai lawan01
. Karena flip itu, urutan elemen dalam array memiliki G dan C terbalik.:2(...)
- mem-parsing string basis-2 ke dalam integer.<A G C T>
- Array empat elemen....[...]
- Operator akses array.Apa artinya? Program mendapatkan daftar semua codepoint dalam sebuah string, menggabungkannya bersama-sama, mengubahnya menjadi basis 2. Kemudian, ia mengganti semua instance dari dua atau satu karakter menjadi salah satu huruf A, G, C, T tergantung pada penggambaran representasi angka yang terbalik. dalam biner.
sumber
Hoon ,
148138 byte"abc" adalah daftar atom. Interpolasi mereka menjadi string (
<a>
) sambil melipat daftar, bergabung bersama menjadi string baru. Pisahkan nomor dengan++dem
untuk mengembalikannya ke atom.Lipat gandakan angka dengan (panjang bitwise + 1)% 2 untuk memasangnya. Gunakan
++rip
untuk membongkar setiap pasangan dua byte atom ke dalam daftar, memetakan daftar dan menggunakan nomor sebagai indeks ke dalam string "ACGT".sumber