সমস্ত কে-মর্স / এন-গ্রাম


21

ইন্ট্রো

আমাদের কাছে হিস্টোগ্রাম এবং গণনা ছিল , তবে সেগুলির সবগুলিই তালিকাভুক্ত নয়।

প্রতি বছর ডায়ালগ লিমিটেডের একটি ছাত্র প্রতিযোগিতা অনুষ্ঠিত হয়। সেখানে চ্যালেঞ্জটি হ'ল ভাল এপিএল কোড লেখার । এটি এই বছরের ষষ্ঠ সমস্যার একটি ভাষা অজ্ঞেয় সংস্করণ।

প্রতিযোগিতার মূল লেখকের কাছ থেকে এখানে এই চ্যালেঞ্জটি পোস্ট করার স্পষ্ট অনুমতি আমার কাছে রয়েছে। প্রদত্ত লিঙ্কটি অনুসরণ করে এবং লেখকের সাথে যোগাযোগ করে নির্দ্বিধায় অনুভব করুন ।

সমস্যা

কে-মের শব্দটি সাধারণত দৈর্ঘ্যের কে এর সমস্ত সম্ভাব্য সাবস্ট্রিংগুলিকে বোঝায় যা স্ট্রিংয়ে থাকে। গণনামূলক জিনোমিক্সে, কে-ম্যার্স ডিএনএ সিকোয়েন্সিংয়ের মাধ্যমে প্রাপ্ত পড়া থেকে সমস্ত সম্ভাব্য উপসর্গ (দৈর্ঘ্যের কে ) উল্লেখ করে to একটি ফাংশন / প্রোগ্রাম লিখুন যা একটি স্ট্রিং এবং কে (সাবস্ট্রিংয়ের দৈর্ঘ্য) নেয় এবং মূল স্ট্রিংয়ের কে-মেরসের ভেক্টরকে ফেরত / আউটপুট দেয়।

উদাহরণ

[4,"ATCGAAGGTCGT"]["ATCG","TCGA","CGAA","GAAG","AAGG","AGGT","GGTC","GTCG","TCGT"]

k > স্ট্রিং দৈর্ঘ্য? রিটার্ন কিছুই / কোন খালি ফলাফল:
[4,"AC"][]বা ""বা[""]


4
আউটপুট ক্রম কি ব্যাপার? যখন স্ট্রাস্টিং একাধিকবার ঘটে তখন এটি কি আউটপুটটিতে পুনরাবৃত্তি করা উচিত?
ফেয়ারসাম

1
আমি কি এই জাতীয় স্ট্রিংগুলির পরিবর্তে নিউ লাইনের দ্বারা পৃথক করা প্রয়োজনীয় সাবস্ট্রিংগুলির একটি স্ট্রিং ফিরিয়ে দিতে পারি ?
ফাঁস নুন

আমরা কী অক্ষরের অ্যারে হিসাবে স্ট্রিংটিকে ইনপুট এবং আউটপুট দিতে পারি (এর ['A', 'T', 'C', 'G']পরিবর্তে "ATCG"?
আদনান

এই পিপিসিজি চ্যালেঞ্জটিতে ডায়ালগ এপিএল উত্তরগুলি কি অনুমোদিত (কারণ চ্যালেঞ্জটি ডায়ালগও হোস্ট করে)?
কৃতিমিক লিথোস

1
@ ফেয়ারসাম অর্ডার বিষয়গুলি, এবং পুনরাবৃত্তিগুলি পুনরাবৃত্তি করা উচিত। এটি ঠিক একটি স্লাইডিং উইন্ডোর মতো।
অ্যাডম

উত্তর:


15

জেলি , 1 বাইট

জেলি এর খুব অপারেশনের জন্য একটি একক বাইট ডায়াডিক পরমাণু রয়েছে

এটি অনলাইন চেষ্টা করুন! (ফুষ্টরটি ছড়িয়ে ছিটিয়ে থাকা উপস্থাপনা এড়ানোর জন্য, নতুন লাইনের সাথে ফলাফলের তালিকাটি বিভক্ত করে))


1
কোনওভাবে ওপি অবশ্যই জানা থাকতে পারে ...
লিকি নুন

1
পছন্দ করুন
Adám

8

অক্টাভা, 28 বাইট

@(N,s)s((1:N)+(0:nnz(s)-N)')

এটি অনলাইন চেষ্টা করুন!

কে> স্ট্রিংয়ের দৈর্ঘ্য অক্টেভ ৪.২.১-উইন্ডোজগুলিতে কাজ করে তবে টিওতে (অক্টেভ ৩.০.৩) কাজ করে না।

একটানা উপাদানগুলির সংখ্যাসূচক সূচক তৈরি করে এবং এটির মাধ্যমে স্ট্রিংকে সূচক করে।

s= "ATCGAAGGTCGT"
N = 4
idx = (1:N)+(0:nnz(s)-N)'
 =
    1    2    3    4
    2    3    4    5
    3    4    5    6
    4    5    6    7
    5    6    7    8
    6    7    8    9
    7    8    9   10
    8    9   10   11
    9   10   11   12

s(idx) =

ATCG
TCGA
CGAA
GAAG
AAGG
AGGT
GGTC
GTCG
TCGT


7

সি (POSIX উপর জিসিসি), 67 66 63 বাইট

-3 বাইট @ লিক্যুনকে ধন্যবাদ!

f(i,s,j)char*s;{for(;j+i<=strlen(s);puts(""))write(1,s+j++,i);}

এটি অনলাইন চেষ্টা করুন!


আমি মনে করি না আপনার দরকার আছে j=0
ফাঁস নুন

@ লিকিউন ফাংশনটি পুনরায় ব্যবহারযোগ্য হবে। এটি অনলাইন চেষ্টা করুন! বনাম এটি অনলাইন চেষ্টা করুন!
betseg

যদিও যদি আমি করি এই ...
betseg

1
আপনি প্রতিস্থাপন করতে পারেন j+i<=strlen(s)শুধু সঙ্গেs[j+i]
Kritixi Lithos

5

ব্র্যাচল্যাগ , 3 বাইট

s₎ᶠ

এটি অনলাইন চেষ্টা করুন!

চশমা:

  • ইনপুট: ["ATCGAAGGTCGT",4]
  • যুক্তি: Z
  • আউটপুট: Z = ["ATCG","TCGA","CGAA","GAAG","AAGG","AGGT","GGTC","GTCG","TCGT"]

কিভাবে এটা কাজ করে

s₎ᶠ
s    Output is a substring of first element of input,
 ₎   with length specified by second element of input.
  ᶠ  Find all solutions.

5

পাইথন 3 ,  47 45 42 বাইট

-3 বাইটস ওভসকে ধন্যবাদ (লেজটিতে পুনরায় ব্যবহার করতে পাইথন 3 এর আনপ্যাকিং ব্যবহার করুন a[n-1:]))

f=lambda a,n:a[n-1:]and[a[:n],*f(a[1:],n)]

স্ট্রিং, aএবং স্লাইসের দৈর্ঘ্য nএবং স্লাইসগুলির একটি তালিকা বা খালি স্ট্রিং ফিরিয়ে নেওয়া একটি পুনরাবৃত্ত ফাংশন ।

a[n-1:]পর্যাপ্ত উপাদান বাকি রয়েছে কিনা তা পরীক্ষা করার জন্য এন -1 (0-ইনডেক্সড) উপাদান থেকে বর্তমান স্ট্রিংয়ের এক টুকরো সময় নেয় (এটি একটি খালি স্ট্রিংটি পাইথনে মিথ্যা) - এটি সমপরিমাণের চেয়ে কম হয় len(a)>=n

  • যদি স্ট্রিংয়ের [...]প্রথম nউপাদানগুলির সাথে তালিকা তৈরি করা হয় এবং বর্তমান ইনপুটটির (প্রথম উপাদান ব্যতীত) একটি শনাক্ত করা সংস্করণ সহ স্ট্রিংয়ের প্রথম উপাদানগুলি a[:n]এবং ফাংশনটিকে আবার কল করার *f(...)আনপ্যাকড ফল না থাকলে পর্যাপ্ত উপাদান থাকে,a[1:]

  • যদি পর্যাপ্ত উপাদান না থাকে a[n-1:]তবে ফিরে আসার সময় পুনরাবৃত্তির লেজ পৌঁছে যায় (এই ক্ষেত্রে একটি খালি স্ট্রিং)।

এটি অনলাইন চেষ্টা করুন!


পাইথন 2 বা 3 এর সাথে 45 এর সাথে:

f=lambda a,n:a[n-1:]and[a[:n]]+f(a[1:],n)or[]

f=lambda a,n:a[n-1:]and[a[:n],*f(a[1:],n)]42 বাইটের জন্য (পাইথন 3) টিআইও
ovs

@ ওভস, খুব সুন্দর, আমি জিজ্ঞাসা করেছি যে এটি গ্রহণযোগ্য কিনা (যেহেতু তারা খালি ফলাফল একটি স্ট্রিং, যখন খালি খালি ফলাফলটি একটি তালিকা)।
জোনাথন অ্যালান

4

জে , 2 বাইট

,\

এটি একটি সম্পূর্ণ প্রোগ্রাম নয়, তবে অপারেটরের সাথে ফাংশন।

এটিকে কল করুন:

echo 4 ,\ 'ATCGAAGGTCGT'

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

অপারেটর ( \" সংঘবদ্ধ " নামে পরিচিত ) (নাম " ইনফিক্স ") যেমন ব্যবহৃত হয়:

(x u\ y)uতালিকার ক্রমাগত অংশগুলিতে ক্রিয়া প্রয়োগ করে y(ইনফিক্সিস নামে পরিচিত)।

এই ক্ষেত্রে ফাংশন ("ক্রিয়া" নামে পরিচিত) uহ'ল ফাংশন ,যা একটি সাধারণ " অ্যাপেন্ড " ফাংশন:

এর আইটেমগুলি xঅনুসরণ করে এর অ্যারে তৈরি করে y


3

গণিত, 21 বাইট

##~StringPartition~1&

বেনামে ফাংশন। স্ট্রিং এবং একটি সংখ্যাকে (সেই ক্রমে) ইনপুট হিসাবে নেয় এবং আউটপুট হিসাবে স্ট্রিংগুলির একটি তালিকা প্রদান করে।


3

আর, 65 61 বাইট

-২ বাইট ধন্যবাদ মিকিটি-কে ধন্যবাদ

ইনডেক্সিং পরিবর্তন করে -2 বাইট

একটি বেনামী ফাংশন প্রদান করে।

function(s,n,x=nchar(s))`if`(n>x,'',substring(s,x:n-n+1,n:x))

substringসূচকগুলির মাধ্যমে চক্র ( substrযার বিপরীতে নয়) এবং যদি সূচক 1 এর চেয়ে কম হয় তবে এটি ডিফল্ট হয়1 পরিবর্তে , তাই এটি খালি স্ট্রিংটি পরীক্ষা করে ফেরত দেয়।

x:n-n+11:(x-n+1)যেহেতু সমান: অঙ্কগুলি / পার্থক্যের চেয়ে অগ্রাধিকার নেয়

এটি অনলাইন চেষ্টা করুন!


আপনি function(s,n,x=nchar(s))যদি এর সাথে (n>x,'',substring(s,1:(x-n+1),n:x))
কয়েকটা

@ মিকিটি, ধন্যবাদ! আমি আরও লক্ষ্য করেছি যে আমি সূচি গণনা পরিবর্তন করে কিছু বাইট ফেলে দিতে পারি
জিউসেপ

2

পাইথ , 2 বাইট

.:

এটি একটি সম্পূর্ণ প্রোগ্রাম নয়, তবে একটি অন্তর্নির্মিত ফাংশন।

এটিকে কল করুন:

.:"ATCGAAGGTCGT"4

এটি অনলাইন চেষ্টা করুন!

সম্পূর্ণ প্রোগ্রাম:

.:.*

এটি অনলাইন চেষ্টা করুন!

( .*স্প্লিট হয়।)


যদিও এটি সত্যিই গুরুত্বপূর্ণ নয়, .:Fপুরো প্রোগ্রামটির জন্য এটি একটি বাইট ছোট।
FryAmTheEggman

2

জেলিফিশ , 7 বাইট

p
_I
\i

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

লিনিয়ারে:, p(\(I,i))যেখানে pমুদ্রণ হয় এবং \প্রয়োজনীয় সাবস্ট্রিংগুলি পাওয়া যায়।

I কাঁচা প্রথম ইনপুট হয় iমূল্যায়ন দ্বিতীয় ইনপুট হয় হয়।

জেলিফিশে প্রতিটি ফাংশন এবং অপারেটর দুটি আর্গুমেন্ট পায়, একটি ডান থেকে এবং একটি নীচ থেকে। এখানে, ফাংশনটি pআউটপুট থেকে আর্গুমেন্টটি পায় _, যা প্রয়োজন যদি আমরা \সাবস্ট্রিংগুলি পেতে অপারেটরটি ব্যবহার করি ।



2

জাভা (ওপেনজেডিকে 8) , 92 বাইট

void f(String s,int n){for(int i=n;i<=s.length();)System.out.println(s.substring(i-n,i++));}

এটি অনলাইন চেষ্টা করুন!


আপনি এটিকে 3 বাইট দ্বারা গল্ফ করতে পারেন: 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;}
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আমি আমার উত্তর পরিবর্তন করেছি।
ফুটো নুন

2

Clojure, 19 বাইট

ওয়েল এই কুশলী হল:

#(partition % 1 %2)

উদাহরণ:

(def f #(partition % 1 %2))
(println [(f 4 "ATCGAAGGTCGT")
          (f 4 "abc")])

[((A T C G) (T C G A) (C G A A) (G A A G) (A A G G) (A G G T) (G G T C) (G T C G) (T C G T))
 ()]

2

সিজেম , 4 বাইট

{ew}

বেনামে ব্লক যা স্ট্যাকের উপর আর্গুমেন্টগুলি প্রত্যাশা করে এবং ফলাফলটি স্ট্যাকের পরে ছেড়ে দেয়।

এটি অনলাইন চেষ্টা করুন!

ew একটি অন্তর্নির্মিত যা প্রয়োজন ঠিক তাই করে।


5
: আমি বলতে শুধুমাত্র এক জিনিস আছে ইডব্ল্যু
আদম

2

রেটিনা , 41 38 বাইট

.*$
$*
!&`(.)+(?=.*¶(?<-1>.)+(?(1)¶)$)

এটি অনলাইন চেষ্টা করুন!

স্ট্রিং নেয় এবং পৃথক লাইনে গণনা করুন। প্রথম দুটি লাইনটি দশমিক থেকে আনারিতে গণনা রূপান্তর করতে ব্যবহৃত হয়, সুতরাং যদি অ্যানারি ইনপুট গ্রহণযোগ্য হয় তবে বাইট গণনাটি হ্রাস পেয়ে ৩৪ 31 এ পরিণত হবে Edit অথবা, যদি আপনি পছন্দ করেন তবে একটি 48-বাইট সংস্করণ যা স্ট্রিংয়ে নতুন লাইনে পরিচালনা করে, যদিও এটি বিভ্রান্তিকর ফলাফল দেয়:

.*$
$*
!&`(\S|\s)+(?=[\S\s]*¶(?<-1>.)+(?(1)$.)$)

@ ক্রিটিক্সিলিথোস আমি দেখছি না যে আপনার সমাধান কীভাবে গণনাটিকে বিবেচনায় নিয়েছে ...
নীল

ওহ, দুঃখিত আমার সবেমাত্র একটি মস্তিষ্কের
ঘাটি

এই অগত্যা স্ট্রিং একটি newline ধারণ করতে পারে যদি কাজ না করে তাই আমি মনে করি আপনি পরিবর্তন করতে পারেন (?!)থেকে
FryAmTheEggman

2

অক্টেভ ভাবমূর্তি প্যাকেজ, 29 বাইট সঙ্গে

@(s,n)[im2col(+s, [1 n])' '']

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

ফাংশনটি im2col(m,b)একটি ম্যাট্রিক্স নেয় m, bএটি থেকে আকারের ব্লকগুলি বের করে এবং কলাম হিসাবে তাদের সাজায়। ডিফল্টরূপে ব্লকগুলি স্লাইডিং হয় (স্বতন্ত্র বিপরীতে)। এখানে ম্যাট্রিক্স mইনপুট স্ট্রিং এর হওয়া ASCII কোড একটি সারি ভেক্টর হয় s(এই যেমন সম্পন্ন করা হয় +sযেটি মান তুলনায় ছোট, double(s)), এবং আকার bহয় [1 n]এর অনুভূমিকভাবে সহচরী ব্লক প্রাপ্তn উপাদান।

ফলগুলি স্থানান্তরিত করা হয় (কমপ্লেক্স-কনজুগেট ট্রান্সপোজ ব্যবহার করে ', যা ট্রান্সপোজের চেয়ে সংক্ষিপ্ত .') কলামগুলিকে সারি করে দেয় এবং তারপরে এটি চরে রূপান্তরিত হয় ( [... '']যা মানের চেয়ে সংক্ষিপ্ত char(...))।



1

পাইথন ঘ , 49 বাইট

f=lambda a,n:[a[i:i+n]for i in range(len(a)-n+1)]

এটি অনলাইন চেষ্টা করুন!

সংক্ষিপ্ত না হলেও এক পুনরাবৃত্তির সমাধান।

পাইথন 2 এর সাথে সামঞ্জস্যপূর্ণ।


আপনি f=দুটি বাইট সংরক্ষণ করে ড্রপ করতে পারেন , কারণ আপনি fঅন্য কোথাও ব্যবহার করেন না। ডিফল্টরূপে, সুনির্দিষ্টভাবে ঘোষিত এবং ব্যবহৃত না হওয়া ফাংশনগুলি নামহীন রেখে দেওয়া যেতে পারে।
মিঃ এক্সকোডার


1

হাস্কেল, 39 বাইট

n#s|length s<n=[]|1<2=take n s:n#tail s

ব্যবহারের উদাহরণ: 4 # "ABCDEF"-> ["ABCD","BCDE","CDEF"]এটি অনলাইন চেষ্টা করুন!

একটি সাধারণ পুনরাবৃত্তি যা nইনপুট স্ট্রিংয়ের প্রথম অক্ষরকে তার দৈর্ঘ্যের চেয়ে কম না হওয়া পর্যন্ত স্ট্রিংয়ের লেজের সাথে চলতে থাকে n




1

স্ট্যাকড , 7 বাইট

infixes

এটি অনলাইন চেষ্টা করুন!

বেশ মান। এই বিল্টিনটি ছাড়া এটি 20 বাইট হয়ে যায়:

{%x#'y-#+:>y#-#>x\#}

যা হলো:

{%x#'y-#+:>y#-#>x\#}
{%                 }   dyad; first arg: x, second arg: y
  x#'                  length of x (the array)
     y-                minus y (the skew)
       #+              plus 1
         :>            range [x, y]
           y#-         y minus 1
              #>       range from [[x, y], [x, y] + y]
                x\#    get indices from x



1

রুবি, 48 46 বাইট

->(s,k){0.upto(s.size-k).map{|i|s[i..i+k-1]}}

কোনও নির্দিষ্ট কৌশল নয়, কেবল একটি স্ট্যাবি-ল্যাম্বদা কোনও ফাংশন সংজ্ঞায়িত করে যা প্রতিটি বৈধ প্রারম্ভিক বিন্দু থেকে প্রয়োজনীয় সাবস্ট্রিং টান দেয়।

দুটি বাইট সংরক্ষণ করা হয়েছে, যেহেতু ল্যাম্বডা সংরক্ষণ করার প্রয়োজন নেই বলে মনে হচ্ছে।


1

ভি , 16 বাইট

òÀ|ly0Ïp
"_xòkVp

ভয়াবহভাবে গল্ফ করা নয় আমি ভয় পাচ্ছি, "কে> লেন (স্ট্র) যদি স্ট্রিং মুছুন" সাথে লড়াই করে যাচ্ছেন। ইনপুট ফাইলটিতে রয়েছে, k একটি আর্গুমেন্ট। ব্যাখ্যার আগে গল্ফিং

এটি অনলাইন চেষ্টা করুন!


যদি আপনি কে> লেন (স্ট্র) কেসটি হ্যান্ডেল করার চেষ্টা না করেন তবে কি হবে?
অ্যাডম

আমি যে পদ্ধতিটি ব্যবহার করি তার উপর নির্ভর করে (এটি বিশেষত একটিতে) এটি কেবল স্ট্রিংটিকে রেখে দেয়
nmjcman101

1

স্ট্যান্ডার্ড এমএল (মোসএমএল), 109 65 61 বাইট

fun f(n,x)=if n>length(x)then[]else List.take(x,n)::f(n,tl x)

একটি সংখ্যা এবং একটি চরিত্রের তালিকা গ্রহণ করে (এসএমএল বিশ্বে স্ট্রিংয়ের বেশ সাধারণ বিকল্প)। (অবশ্যই সমস্ত তালিকায় অবশ্যই কাজ করে))

ব্যবহার:

- f(3,explode("ABCDEFGH"));
> val it =
    [[#"A", #"B", #"C"], [#"B", #"C", #"D"], [#"C", #"D", #"E"],
     [#"D", #"E", #"F"], [#"E", #"F", #"G"], [#"F", #"G", #"H"]] :
  char list list
- f(7, explode("ABCD"));
> val it = [] : char list list

পরিবর্তণের:

  • ঠিক আছে, এখানে একটি স্ট্যান্ডার্ড লাইব্রেরি আছে .. (-44 বাইট)
  • প্রস্তাবিত (-4 বাইট) হিসাবে তুলনা এবং শূন্য [] এ পরিবর্তন করুন

1
আপনি পরিবর্তন করে একটি বাইট সংরক্ষণ করতে পারবেন if length(x)<n thenকরার if n>length(x)then। তবে এসএমএলের পক্ষে স্ট্রিংগুলি পরিচালনা করা যেহেতু পুরোপুরি সম্ভব, আমি নিশ্চিত নই যে এটি explodeইতিমধ্যে ইনপুট স্ট্রিংয়ে প্রয়োগ করা প্রয়োজন applied
লাইকনি

এছাড়াও then nil elseসংক্ষিপ্ত করা যেতে পারে then[]else
লাইকনি

@ লাইকোনিও নিশ্চিত নন, তবে ¯ \ _ (ツ) _ / ¯
L3viathan

কিছু অন্যান্য গ্রন্থাগার ফাংশন ব্যবহার করে আমি একটি 68 বাইট সংস্করণ পেয়েছি যা চর তালিকার পরিবর্তে স্ট্রিংগুলির সাথে সম্পর্কিত। এছাড়াও আপনার পদ্ধতির 54 বাইট সংক্ষিপ্ত করা যেতে পারে: fun f$n=if n>length$then[]else List.take($,n)::f(tl$)n
লাইকনি

1

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 51 বাইট

(s,n,t='')=>[for(c of s)if((t+=c)[n-1])t.slice(-n)]

ES6 এ 64 বাইট:

(s,n,t=s.slice(0,--n))=>[...s.slice(n)].map(c=>(t+=c).slice(~n))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.