সাবস্ট্রিংয়ের যোগফল


26

ভূমিকা

এর এই অ্যারের পালন করা যাক: [3, 2, 4, 1, 1, 5, 1, 2]

প্রতিটি উপাদান সাবস্ট্রিংয়ের দৈর্ঘ্য প্রদর্শন করে যা সংক্ষিপ্ত হওয়া উচিত। আসুন উপরের অ্যারের প্রথম উপাদানটি একবার দেখুন:

[3, 2, 4, 1, 1, 5, 1, 2]
 ^

প্রথম সূচকের উপাদানটি 3 , সুতরাং আমরা এখন সূচনার অবস্থানের মতো একই সূচক সহ তিনটি দৈর্ঘ্যের একটি স্ট্রিং নিচ্ছি:

[3, 2, 4]

সংক্ষিপ্ত যখন, এটি 9 এ ফলাফল , সুতরাং বিয়োগফল যোগফল প্রথম উপাদান হয় 9

অ্যারেতে থাকা সমস্ত উপাদানগুলির জন্য আমরা এটি করি:

3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]

আপনি দেখতে পাচ্ছেন যে 5 নম্বরটি একটি বিচিত্র ঘটনা। এই সংখ্যাটি অ্যারের দৈর্ঘ্য ছাড়িয়ে গেছে:

[3, 2, 4, 1, 1, 5, 1, 2]
                ^  ^  ^  ^  ^

অ্যারে ছাড়িয়ে যাওয়া সমস্ত কিছুকে আমরা এড়িয়ে যাব, তাই আমরা কেবল ব্যবহার করি [5, 1, 2]

শেষ পদক্ষেপটি হ'ল সমস্ত কিছু সংযুক্ত করা:

[3, 2, 4]     -> 9
[2, 4]        -> 6
[4, 1, 1, 5]  -> 11
[1]           -> 1
[1]           -> 1
[5, 1, 2]     -> 8
[1]           -> 1
[2]           -> 2

এবং এটি অ্যারে যা আউটপুট করা দরকার:

[9, 6, 11, 1, 1, 8, 1, 2]

কাজটি

ধনাত্মক (অ-শূন্য) পূর্ণসংখ্যার সাথে একটি খালি অरेকে দেওয়া, স্ট্রিংয়ের যোগফল সেট করুন । এটি , তাই বাইটসের স্বল্পতম সংখ্যার সাথে জমা দেওয়া!

পরীক্ষার মামলা

[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]

আমি মনে করি আপনি "সাব-তালিকা" অর্থ, "সাবস্ট্রিং" নয়। কোন স্ট্রিং নেই।
mbomb007

4
@ mbomb007 আমি মনে করি যে এখানে দীর্ঘতম সাধারণ স্ট্রিং সমস্যা হিসাবে সাবস্ট্রিংয়ের একই অর্থ রয়েছে, অর্থাত্, একটি অনুচ্ছেদে যার উপাদানগুলি সংলগ্ন। উপাত্তের ধরণগুলি বাদ দিয়ে, একটি স্ট্রিং হ'ল বর্ণমালার সেটগুলির উপাদানগুলির একটি সীমাবদ্ধ ক্রম (এই ক্ষেত্রে, ধনাত্মক পূর্ণসংখ্যার)।
ডেনিস

উত্তর:


15

জেলি , 6 বাইট

ṫJḣ"ḅ1

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

ṫJḣ"ḅ1  Main link. Argument: A (array)

 J      Index; yield the 1-based indices of A.
ṫ       Tail; map k to the postfix of A that begins with the k-th element.
  ḣ"    Vectorized head; for each k in A, truncate the corr. postfix to length k.
    ḅ1  Convert the resulting slices from base 1 to integer.

11

পাইথন, 40 বাইট

f=lambda x:x and[sum(x[:x[0]])]+f(x[1:])

আইডিয়নে এটি পরীক্ষা করুন ।


আমি বুঝতে পেরেছিলাম যে সেখানে একটি গল্ফিয়ার পুনরাবৃত্তি সমাধান হবে তবে আপনি আমাকে এতে মারধর করেছেন।
এল'েন্ডিয়া স্টারম্যান

11

এক্সেল, 21 বাইট

=SUM(OFFSET(A1,,,A1))

একটি নতুন স্প্রেডশীট খুলুন, কলাম ক এ পরীক্ষার মানগুলি রাখুন বি 1 তে সূত্রটি প্রবেশ করান এবং সীমাটি চালানোর জন্য ঘরের হ্যান্ডেলটিতে ডাবল ক্লিক করুন।


আমি যদি ডাবল ক্লিক ট্রিক সম্পর্কে আমাকে শেখানোর জন্য একটি দ্বিতীয় upvote দিতে চাই।
নিল

যদিও এটি কাজ করে এটি প্রতারক হিসাবে কিছুটা হ'ল ম্যানুয়াল ইনপুট প্রয়োজন।
ব্যবহারকারী 3819867

3
@ ব্যবহারকারী 3819867 বেশিরভাগ প্রোগ্রাম প্রয়োগের চেয়ে উল্লেখযোগ্যভাবে বেশি নয়, আমি যুক্তি দেব। সম্ভবত আপনি যদি বি 1-তে সূত্রযুক্ত স্প্রেডশিটটি সংরক্ষণ করেন তবে এটি আরও তুলনামূলক হবে - তারপরে খুলুন, কলাম এটিতে ডেটা যুক্ত করুন এবং কার্যকর করতে B1-এ হ্যান্ডেলটিতে ডাবল ক্লিক করুন। অবশ্যই ওয়াইএমএমভি।
জোফান

7

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

lambda X:[sum(X[i:i+k])for i,k in enumerate(X)]

খুব সোজা বাস্তবায়ন। পাইথনের ডিফল্ট আচরণটি তালিকার শেষের আগে চলে যাওয়াগুলি এখানে খুব সুবিধাজনক ছিল ।



4

জাভাস্ক্রিপ্ট ES6, 50 বাইট

a=>a.map((e,i)=>a.slice(i,i+e).reduce((a,b)=>a+b))

খুব স্ব-ব্যাখ্যামূলক। এটি mapঅ্যারের প্রতিটি উপাদানকে ধরে রাখবে slice, iসূচকের মাধ্যমে সেই এনডিএক্স থেকে প্লাসের eleালুর মানটি reduceযোগ করে এবং যোগ করে আইএনএন x

f=
  a=>a.map((e,i)=>a.slice(i,i+e).reduce((a,b)=>a+b))

;[
  [3, 2, 4, 1, 1, 5, 1, 2],
  [1, 2, 3, 4, 5],
  [3, 3, 3, 3, 3, 3, 3, 3,],
  [5, 1, 2, 4, 1],
  [1]
].forEach(function(test){
  document.getElementById('p').textContent += test + ' => ' + f(test) + '\n';
});
<pre id="p"></pre>


4

জে, 11 বাইট

+/@{."_1]\.

ব্যবহার

   f =: +/@{."_1]\.
   f 3 2 4 1 1 5 1 2
9 6 11 1 1 8 1 2
   f 1 2 3 4 5
1 5 12 9 5

ব্যাখ্যা

+/@{."_1]\.  Input: A
        ]\.  Get each suffix of A from longest to shortest
   {."_1     For each value in A, take that many values from its corresponding suffix
+/@          Sum that group of values taken from that suffix
             Return the sums

4

জাভাস্ক্রিপ্ট (ES6), 45

reduce আবার মার!

a=>a.map((v,i)=>eval(a.slice(i,v+i).join`+`))

F=
a=>a.map((v,i)=>eval(a.slice(i,v+i).join`+`))

;[[3, 2, 4, 1, 1, 5, 1, 2],
  [1, 2, 3, 4, 5],
  [3, 3, 3, 3, 3, 3, 3, 3,],
  [5, 1, 2, 4, 1],
  [1]].forEach(t=>console.log(t+' -> '+F(t)))


1
যতদূর আমি জানি, আপনি এই উত্তরটিf= যেমন সরাতে পারেন তেমন ।
LarsW

@ লার্সডাব্লু ঠিক আছে, f=ইতিমধ্যে 45 বাইটে গণনা করা হচ্ছে না
edc65

3

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

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

\d+
$*
M!&`\b1(1)*(?<-1>,1+)*
M%`1
¶
,

ইনপুট এবং আউটপুট কমা দ্বারা পৃথক করা তালিকা।

এটি অনলাইন চেষ্টা করুন! (প্রথম লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))


3

গণিত 60 55 বাইট

Tr@Take[#,UpTo@#&@@#]&/@Drop[#,t-1]~Table~{t,Length@#}&

যেমন

f = %; f /@ {{1, 2, 3, 4, 5}, {3, 3, 3, 3, 3, 3, 3, 3}, {5, 1, 2, 4, 1}, {1}}

(*    {{1, 5, 12, 9, 5}, {9, 9, 9, 9, 9, 9, 6, 3}, {13, 1, 6, 5, 1}, {1}}    *)

5 মার্টিন শেভ করার জন্য @ মার্টিনএন্ডারকে ধন্যবাদ :)


1
সারণীটি এড়াতে এখানে একটি ধারণা দেওয়া হয়েছে: #+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&এটি সর্বোত্তম তবে এটি 17 বাইট সংরক্ষণ করে তা নিশ্চিত হন না।
মার্টিন ইন্ডার



2

এরলং, 69 বাইট

f(A)->put(1,1),L=lists,[L:sum(L:sublist(A,put(1,get(1)+1),X))||X<-A].

তালিকার জন্য এরলংয়ের উচ্চতর অর্ডার ফাংশন বর্তমান উপাদানটির সূচকটি গ্রহণ করে না। এটি বর্তমান উপাদানের সূচক সেট করতে প্রক্রিয়া অভিধান ব্যবহার করে।



2

ভিবিএ, 160 বাইট

Function e(g())
Dim h()
k=LBound(g)
l=UBound(g)
ReDim h(k To l)
On Error Resume Next
For i=k To l
For j=i To i+g(i)-1
h(i)=h(i)+g(j)
Next
Next
e=h
End Function

2

পাইথ, 6 বাইট

ms<~tQ

পরীক্ষা স্যুট

এটি এখন পর্যন্ত অন্য যে কোনও ব্যক্তির থেকে আলাদা সমাধান। এটি ইনপুটটির উপরে লুপ করে, প্রাথমিক মানগুলির সংক্ষিপ্তসার কেটে, তারপরে সঞ্চিত ইনপুটটির প্রথম উপাদানটি সরিয়ে পুনরাবৃত্তি করে।

ব্যাখ্যা:

ms<~tQ
ms<~tQdQ    Implicit variable introduction
            Implicit: Q = eval(input())
m      Q    Map d over the input, Q
  <  Qd     Take the first d elements of Q
 s          Sum them
   ~tQ      Afterwards, set Q to the tail of Q, removing the first element.


1

এফ #, 84 82 বাইট

let f(A:int[])=[for i in 0..A.Length-1->Seq.skip i A|>Seq.truncate A.[i]|>Seq.sum]

1

জাভাস্ক্রিপ্ট (ES6) - 79 বাইট

একটি পুনরাবৃত্ত সমাধান যা অ্যারে পদ্ধতিগুলির কোনও ব্যবহার করে না:

f=([a,...t],n)=>a&&n?a+f(t,n-1):0;g=([a,...t],r=[])=>a?g(t,[...r,a+f(t,a-1)]):r

পরীক্ষামূলক:

f=([a,...t],n)=>a&&n?a+f(t,n-1):0;
g=([a,...t],r=[])=>a?g(t,[...r,a+f(t,a-1)]):r;

[
  [3, 2, 4, 1, 1, 5, 1, 2],
  [1, 2, 3, 4, 5],
  [3, 3, 3, 3, 3, 3, 3, 3,],
  [5, 1, 2, 4, 1],
  [1]
].forEach(a=>console.log(''+g(a)));


1

সি #, 89 বাইট

int[]s(List<int>a)=>a.Select((n,i)=>a.GetRange(i,Math.Min(n,a.Count-i)).Sum()).ToArray();

অনেকটাই অকপট

উন্নতি ধারণা প্রশংসা


1

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

.v|h~l(A:Tc?;A?)b:0&~b.h~+A

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

  .v           Input = Output = []
|            Or
  h~l          A is a list, its length is the value of the first element of the Input
  (
    A:Tc?        The concatenation of A with another list T results in the Input
  ;            Or
    A?           A = Input
  )
  b:0&         Call recursively on Input minus the first element
  ~b.          Output is the output of that call with an extra element at the beginning
  h~+A         That extra element is the sum of the elements of A

1

ডায়ালগ এপিএল, 15 বাইট

{+/¨⍵↑∘⌽¨⌽,\⌽⍵}

অথবা

{⌽+/¨(-↑¨,\)⌽⍵}

1

পিএইচপি প্রোগ্রাম, 72 বাইট

<?foreach($a=$_GET[a]as$i=>$v)echo array_sum(array_slice($a,$i,$v)),"
";

সাথে কল php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...

+11 একটি ফাংশন হিসাবে:

function f($a){foreach($a as$i=>$v)$r[]=array_sum(array_slice($a,$i,$v));return$r;}

বিল্টিন ছাড়া +9:

function p($a){foreach($c=$r=$a as$i=>$v)for($k=$i;$k--;)if(--$a[$k]>0)$r[$k]+=$v;return$r;}

($ সি মূল মান রাখে, each প্রতিটি সূচকের জন্য একটি গণনা করা হয়, $ r যোগফল পায়)

প্রোগ্রাম হিসাবে -3

<?foreach($a=$r=$c=$_GET[a]as$i=>$v)for($k=$i;$k--;)if(--$c[$k]>0)$r[$k]+=$v;print_r($r);

1

কিউ (37 বাইট)

{sum each(til[count x],'x)sublist\:x}

উদাহরণ:

q){sum each(til[count x],'x)sublist\:x}3 2 4 1 1 5 1 2
9 6 11 1 1 8 1 2

1

ম্যাট্রিক্স , 25 বাইট

হ্যাঁ, পরিশেষে একটি চ্যালেঞ্জ আমার নতুন বৈশিষ্ট্যগুলির দরকার নেই!

md{z:l-g:c;+c;q:c;};:1:l;

সাথে চালান: python matricks.py substring.txt [[<input>]] 0

ব্যাখ্যা:

m                  :1:l;   #loop over entire input
                           #set each value to...
 d{               }        #the sum of...
   z:l-g:c:+c;q:c;         #the input cropped to
                           #the length of the value in the cell

1

জাভাস্ক্রিপ্ট (বহিরাগত গ্রন্থাগার ব্যবহার করে) (by 66 বাইট)

n=>_.From(n).Select((v,i)=>_.From(n).Slice(i,i+v).Sum()).ToArray()

লিবের লিঙ্ক: https://github.com/mvegh1/ গণনাযোগ্য

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

এখানে চিত্র বর্ণনা লিখুন


var ভেরিয়েবলগুলি থেকে অপসারণ করুন , গল্ফটিতে আপনার এটির দরকার নেই। আপনি যেটিতে বাইট কম দামে তা পরিবর্তন .forEachকরতে পারেন .map
Charredgrass

ওহ হ্যাঁ, আপনি ঠিক বিভিন্ন বিষয়ে ঠিক বলেছেন। ধন্যবাদ! আমি আগামীকাল আবার এই উত্তরটি দিয়ে যাব। দেখে মনে হচ্ছে নেটিভ জেএস (এস)) আমার
সলিউশনটিকে মারে

Var অপসারণ করার জন্য ভাল কল। আমি আরও একটি সমাধান উপলব্ধি করেছি যা বাইট গণনাটি অনেক হ্রাস করে এবং আরও স্বজ্ঞাত
আপেলজ্যাক্স 01

1

Clojure, 63 বাইট

(defn f[[b & r]](concat[(apply + b(take(dec b)r))](if r(f r))))

প্রথম এবং বাকি আর্গুমেন্টগুলিতে ইনপুট আর্গুমেন্টকে পচন করতে প্যাটার্ন মেলানো ব্যবহার করে।


1

এমএটিএল , 17 14 13 বাইট

fGy+!-R0<G*!s

ব্যাখ্যা

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন (বেশ কয়েকটি ইনপুট পরিচালনা করতে কোড সংশোধিত)।

f     % Take input implicitly. Indices of nonzero elements: this gives [1 2 ... n]
      % where n is input size
G     % Push input again
y     % Push a copy of [1 2 ... n]
+     % Add. Gives [a+1 b+2...] where [a b...] is the input
!     % Transpose into a column vector
-     % Subtraction with broadcast. Gives 2D array
R     % Keep upper triangular part, making the rest of entries 0
0<    % True for negative entries. Each row corresponds to a substring sum.
      % For each row, this gives true for the entries of the input that make up
      % that substring sum. Each row is thus a mask to select entries of the input
G     % Push input again
*     % Multiply with broadcast. This multiplies the input times each row
!s    % Sum of each row. Implicitly display

0

সি #, 94 বাইট

Console.Write(String.Join(",",a.Select((v,i)=>a.Skip(i).Take(v).Sum().ToString()).ToArray()));

যেখানে একটি হ'ল ইনট [] যা সমাধান করার জন্য ইনপুট উপস্থাপন করে।


আপনাকে কোনও চলক ধরে নেওয়ার অনুমতি নেই পূর্বনির্ধারিত
ডাউনরেপ_নেশন

ভেরিয়েবল এ হ'ল ইনপুট।
সুপারমারকাত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.