Intro
Kami telah memiliki histogram dan penghitungan , tetapi tidak mencantumkan semuanya.
Setiap tahun, Dyalog Ltd. mengadakan kompetisi siswa. Tantangannya adalah untuk menulis kode APL yang baik . Ini adalah edisi kode golf- bahasa agnostik dari masalah keenam tahun ini.
Saya memiliki izin eksplisit untuk mengirimkan tantangan ini di sini dari penulis asli kompetisi. Jangan ragu untuk memverifikasi dengan mengikuti tautan yang disediakan dan menghubungi penulis.
Masalah
Istilah k-mer biasanya merujuk pada semua kemungkinan panjang substring k yang terkandung dalam string. Dalam genomik komputasi, k-mers merujuk ke semua kemungkinan berikutnya (dengan panjang k ) dari pembacaan yang diperoleh melalui Sequencing DNA. Tulis fungsi / program yang mengambil string dan k (panjang substring) dan mengembalikan / menampilkan vektor k-mer dari string asli.
Contohnya
[4,"ATCGAAGGTCGT"]
→ ["ATCG","TCGA","CGAA","GAAG","AAGG","AGGT","GGTC","GTCG","TCGT"]
k > panjang string? Kembalikan apa-apa / hasil kosong:
[4,"AC"]
→ []
atau ""
atau[""]
['A', 'T', 'C', 'G']
bukan"ATCG"
?Jawaban:
Jelly , 1 byte
Jelly memiliki atom diad byte tunggal untuk operasi ini
Cobalah online! (footer membagi daftar yang dihasilkan dengan baris baru, untuk menghindari representasi yang dicetak.)
sumber
Oktaf, 28 byte
Cobalah online!
Untuk k> string length berfungsi di Octave 4.2.1-windows tetapi di tio (Octave 4.0.3) tidak berfungsi.
Membuat indeks numerik elemen berurutan dan mengindeks string dengan itu.
sumber
05AB1E , 2 byte
Kode:
Penjelasan:
Menggunakan penyandian 05AB1E .
Cobalah online!
sumber
C (GCC pada POSIX),
676663 byte-3 byte terima kasih kepada @LeakyNun!
Cobalah online!
sumber
j=0
.j+i<=strlen(s)
dengan hanyas[j+i]
Brachylog , 3 byte
Cobalah online!
Spesifikasi:
["ATCGAAGGTCGT",4]
Z
Z = ["ATCG","TCGA","CGAA","GAAG","AAGG","AGGT","GGTC","GTCG","TCGT"]
Bagaimana itu bekerja
sumber
Python 3 ,
47 4542 byte-3 byte berkat ovs (gunakan pembongkaran Python 3 untuk digunakan kembali
a[n-1:]
di bagian ekor.)Fungsi rekursif mengambil string,
a
dan panjang irisann
,, dan mengembalikan daftar irisan atau string kosong.a[n-1:]
mengambil sepotong string arus dari n-1 th (0-diindeks) elemen selanjutnya untuk menguji apakah ada cukup elemen yang tersisa (string kosong adalah falsey di Python) - ini lebih pendek dari setaralen(a)>=n
.Jika ada cukup elemen daftar dibangun
[...]
,, dengann
elemen pertama dari string,a[:n]
dan hasil membongkar memanggil fungsi lagi*f(...)
,, dengan versi dequeued dari input saat ini (tanpa elemen pertama)a[1:]
,.Jika tidak ada cukup elemen, ujung rekursi tercapai ketika
a[n-1:]
dikembalikan (dalam hal ini string kosong).Cobalah online!
45 untuk Python 2 atau 3 dengan:
sumber
f=lambda a,n:a[n-1:]and[a[:n],*f(a[1:],n)]
untuk 42 byte (Python 3) TIOJ , 2 byte
Ini bukan program yang lengkap, tetapi fungsi dengan operator.
Sebut saja seperti itu:
Cobalah online!
Bagaimana itu bekerja
Operator (disebut "konjungsi")
\
(dinamai " infix ") digunakan sebagai berikut:Fungsi (disebut "kata kerja")
u
dalam hal ini adalah fungsi,
yang merupakan fungsi " tambahkan " sederhana :sumber
Mathematica, 21 byte
Fungsi anonim. Mengambil string dan angka (dalam urutan itu) sebagai input dan mengembalikan daftar string sebagai output.
sumber
R,
6561 byte-2 byte terima kasih kepada MickyT
-2 byte dengan mengubah pengindeksan
mengembalikan fungsi anonim.
substring
siklus melalui indeks (yang bertentangan dengansubstr
yang tidak), dan jika indeks awal kurang dari 1, defaultnya adalah1
sebagai gantinya, sehingga memeriksa dan mengembalikan string kosong.x:n-n+1
setara dengan1:(x-n+1)
karena:
didahulukan dari jumlah / perbedaanCobalah online!
sumber
function(s,n,x=nchar(s))
jika(n>x,'',substring(s,1:(x-n+1),n:x))
Pyth , 2 byte
Ini bukan program yang lengkap, tetapi fungsi bawaan.
Sebut saja seperti itu:
Cobalah online!
Program lengkap:
Cobalah online!
(Ini
.*
percikan.)sumber
.:F
byte lebih pendek untuk program lengkap.Ubur-ubur , 7 byte
Cobalah online!
Bagaimana itu bekerja
Dalam linear:, di
p(\(I,i))
manap
cetak dan\
mendapatkan substring yang diperlukanI
adalah input pertama sementara mentahi
input kedua dievaluasi.Dalam Ubur-ubur, setiap fungsi dan operator mendapat dua argumen, satu dari kanan, dan satu dari bawah. Di sini, fungsi
p
mendapatkan argumen dari output_
, yang diperlukan jika kita ingin menggunakan operator\
untuk mendapatkan substring.sumber
Python 2 , 54 byte
Cobalah online!
sumber
Java (OpenJDK 8) , 92 byte
Cobalah online!
sumber
String[]f(String s,int n){int i=0,t=s.length()-n+1;String[]r=new String[t];for(;i<t;r[i]=s.substring(i,n+i++));return r;}
Clojure, 19 byte
Nah ini berguna:
Contoh:
sumber
CJam , 4 byte
Blok anonim yang mengharapkan argumen pada stack dan membiarkan hasilnya pada stack setelahnya.
Cobalah online!
ew
adalah built-in yang melakukan persis apa yang diperlukan.sumber
Retina ,
4138 byteCobalah online!
Mengambil string dan mengandalkan garis yang terpisah. Dua baris pertama digunakan untuk mengubah hitungan dari desimal ke unary, jadi jika input unary dapat diterima maka jumlah byte akan dikurangi menjadi
3431. Edit: Disimpan 3 byte berkat @FryAmTheEggman. Atau, jika Anda lebih suka, versi 48-byte yang menangani baris baru dalam string, meskipun itu menghasilkan output yang membingungkan:sumber
(?!)
ke¶
.Paket Oktaf dengan Gambar, 29 byte
Cobalah online!
Penjelasan
Fungsi ini
im2col(m,b)
mengambil matriksm
, mengekstrak blok ukuranb
dari itu, dan mengaturnya sebagai kolom. Secara default blok geser (berbeda dengan yang berbeda). Di sini matriksm
adalah vektor baris kode ASCII dari string inputs
(ini dilakukan sebagai+s
, yang lebih pendek dari standardouble(s)
), dan ukurannyab
adalah[1 n]
untuk mendapatkan blok gesern
elemen secara horizontal .Hasilnya ditransposisikan (menggunakan kompleks-konjugat transpose
'
, yang lebih pendek dari transpose.'
) untuk mengubah kolom menjadi baris, dan kemudian dikonversi kembali ke char ([... '']
, yang lebih pendek dari standarchar(...)
).sumber
OK, 2 byte
oK memiliki operator jendela geser !
sumber
Python 3 , 49 byte
Cobalah online!
Solusi non-rekursif, meskipun tidak lebih pendek.
Kompatibel dengan Python 2.
sumber
f=
, menghemat dua byte, karena Anda tidak menggunakanf
tempat lain. Secara default, fungsi-fungsi yang baru saja dinyatakan dan tidak digunakan dapat dibiarkan tanpa nama.PHP, 75 Bytes
Versi Online
80 Bytes tanpa nilai ganda
sumber
Haskell, 39 byte
Contoh penggunaan:
4 # "ABCDEF"
->["ABCD","BCDE","CDEF"]
. Cobalah online!Rekursi sederhana yang menjaga
n
karakter pertama dari string input dan berlanjut dengan ekor string selama panjangnya tidak kurang darin
.sumber
Microsoft Sql Server, 199 byte
Periksa.
sumber
PowerShell, 70 byte
Cobalah online!
sumber
Ditumpuk , 7 byte
Cobalah online!
Cukup standar. Tanpa builtin ini, itu menjadi 20 byte:
Yang mana:
sumber
MATL , 3 byte
Cobalah online!
Penjelasan
sumber
C # 89 byte
Cobalah online!
Metode terbaik yang bisa saya temukan di C # pada dasarnya sama dengan Java
sumber
Ruby,
4846 byteTidak ada trik khusus, hanya stabby-lambda yang mendefinisikan fungsi yang menarik substring yang diperlukan dari setiap titik awal yang valid.
Disimpan dua byte, karena sepertinya tidak ada kebutuhan untuk menyimpan lambda.
sumber
V , 16 byte
Tidak terlalu golf, aku takut, berjuang dengan "hapus string jika k> len (str)". Input ada dalam file, k adalah argumen. Golf sebelum penjelasan
Cobalah online!
sumber
Standar ML (mosml),
1096561 byteMembawa nomor dan daftar karakter (alternatif yang cukup umum untuk string di dunia SML). (Benar-benar berfungsi pada semua daftar tentu saja.)
Pemakaian:
Changelog:
sumber
if length(x)<n then
keif n>length(x)then
. Namun, karena sangat mungkin bagi SML untuk menangani string, saya tidak yakin itu diizinkan untuk mengharuskanexplode
sudah diterapkan pada string input.then nil else
bisa disingkat menjadithen[]else
.fun f$n=if n>length$then[]else List.take($,n)::f(tl$)n
.JavaScript (Firefox 30-57), 51 byte
64 byte dalam ES6:
sumber