অঙ্কের একটি সেট ফিট করে এমন একটি অ্যারের সন্ধান করুন


17

Aদৈর্ঘ্যের অ্যারে বিবেচনা করুন n। অ্যারেতে কেবল ধনাত্মক পূর্ণসংখ্যা থাকে। উদাহরণস্বরূপ A = (1,1,2,2)। আসুন f(A)এর সমস্ত খালি খালি মিলিত সাবহারির সমষ্টিগুলির সেট হিসাবে সংজ্ঞায়িত করা যাক A। এই ক্ষেত্রে f(A) = {1,2,3,4,5,6}। উত্পাদনের পদক্ষেপগুলি f(A) নিম্নরূপ:

এর subarrays Aহয় (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)। তাদের নিজ নিজ পরিমাণ হয় 1,1,2,2,2,3,4,4,5,6। এই তালিকা থেকে আপনি যে সেটটি পান তা তাই {1,2,3,4,5,6}

কার্য

অঙ্কের একটি সেট দেওয়া Sসাজানো ক্রম শুধুমাত্র ধনাত্মক পূর্ণসংখ্যা এবং একটি অ্যারের দৈর্ঘ্য ধারণকারী দেওয়া n, আপনার টাস্ক অন্তত একটি অ্যারের আউটপুট হয় Xযেমন যে f(X) = S

উদাহরণস্বরূপ, যদি S = {1,2,3,5,6}এবং তার n = 3পরে বৈধ আউটপুট হয় X = (1,2,3)

যদি এমন কোনও অ্যারে না থাকে তবে Xআপনার কোডের কোনও ধ্রুবক মান আউটপুট করা উচিত।

উদাহরণ

ইনপুট:, n=4, S = (1, 3, 4, 5, 6, 8, 9, 10, 13)সম্ভাব্য আউটপুট:X = (3, 5, 1, 4)

ইনপুট:, n=6, S = (2, 3, 4, 5, 7, 8, 9, 10, 12, 14, 17, 22)সম্ভাব্য আউটপুট:X = (5, 3, 2, 2, 5, 5)

ইনপুট:, n=6, S = (2, 4, 6, 8, 10, 12, 16)সম্ভাব্য আউটপুট:X = (4, 2, 2, 2, 2, 4)

ইনপুট:, n=6, S = (1, 2, 3, 4, 6, 7, 8, 10, 14)সম্ভাব্য আউটপুট:X = (4, 2, 1, 1, 2, 4)

ইনপুট: n=10, S = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25)সম্ভব আউটপুট: X = (1, 1, 3, 1, 2, 1, 2, 5, 4, 5)

ইনপুট: n=15, S = (1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31)সম্ভব আউটপুট: X = (1, 2, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 2, 1, 3)

ইনপুট এবং আউটপুট ফর্ম্যাট

আপনার কোডটি ইনপুট নিতে পারে এবং কোনও সুবিধাজনক হিসাবে সহজেই পড়া মানুষের পড়া বিন্যাসে আউটপুট দিতে পারে। তবে, দয়া করে প্রশ্নের উদাহরণগুলিতে এটি পরীক্ষার ফলাফল দেখান show

সময় চলমান

প্রশ্নের অবশ্যই সমস্ত উদাহরণের জন্য আপনার কোডটি শেষ করতে সক্ষম হবেন। এটা ঠিক এ জন্য সঠিক হওয়া উচিত nপর্যন্ত 15কিন্তু আপনি প্রমাণ করতে এটা সব ইনপুট জন্য যথেষ্ট দ্রুত হবে প্রয়োজন হবে না।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ডেনিস

সম্ভবত 2-সংখ্যার নম্বরযুক্ত একটি পরীক্ষার কেস থাকা উচিত।
ম্যাজিক অক্টোপাস আরন

উত্তর:


6

হুশ , 20 বাইট

ḟȯ⁰¦ṁ∫ṫ!¡Sof~Λ€∫×:¹g

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

একটি সমাধান, বা যদি এটি না থাকে তবে একটি খালি তালিকা প্রদান করে। n=15টিআইও-তে শেষ পরীক্ষার কেসটি 3.8 সেকেন্ডে শেষ হয়।

ব্যাখ্যা

প্রোগ্রামটির দুটি অংশ রয়েছে। প্রথম অংশে (¡ এবং এর ডানদিকে), আমরা একটি অসীম তালিকা তৈরি করি যার kতম উপাদানটি সমস্ত দৈর্ঘ্যের kতালিকা রয়েছে যার তালিকাগুলির স্লাইস অঙ্কগুলি রয়েছে S। আমরা সূক্ষ্মভাবে এটি করি, এর 1-উপাদানগুলির টুকরোগুলি থেকে শুরু করে Sএবং প্রতিটি পদক্ষেপে Sপ্রতিটি তালিকার প্রতিটি উপাদানকে পূর্বনির্ধারিত করে এবং যাদের উপসর্গের যোগফল রয়েছে তাদের রেখে দেওয়া S। দ্বিতীয় অংশে ( !এবং এর বাম দিকে), আমরা তালিকার nতম উপাদানটি নিই , যার মধ্যে দৈর্ঘ্য- nতালিকা রয়েছে contains এর মধ্যে আমরা প্রথমটি নির্বাচন করি যার স্লাইস অঙ্কগুলিতে প্রতিটি উপাদান থাকে S

কোডটিতে, প্রথমে স্বচ্ছতার জন্য প্রথম বন্ধনী দ্বারা প্রথমে প্রতিস্থাপন oএবং ȯ(যা দুটি এবং তিনটি ফাংশন রচনা করা হয়) তৈরি করি।

¡S(f~Λ€∫)×:¹g  First part. Input is a list, say S=[1,2,3]
            g  Group equal adjacent elements: [[1],[2],[3]]
¡              Iterate function:
                Argument is a list of lists, say [[1,1],[1,2],[2,1]]
         ×      Mix (combine two lists in all possible ways)
          :     by prepending
           ¹    with the list S: [[1,1,1],[1,1,2],[2,1,1],[1,2,1],[2,1,2],[3,1,1],[2,2,1],[3,1,2],[3,2,1]]
   f            Filter by condition:
        ∫        Cumulative sums: [[1,2,3],[1,2,4],[2,3,4],[1,3,4],[2,3,5],[3,4,5],[2,4,5],[3,4,6],[3,5,6]]
     ~Λ          All of the numbers
 S     €         are elements of S: [[1,1,1]]
                 Only this list remains, since the other cumulative sums contain numbers not from S.
               Result of iteration: [[[1],[2],[3]],[[1,1],[1,2],[2,1]],[[1,1,1]],[],[],[]...

ḟ(⁰¦ṁ∫ṫ)!      Second part. Implicit input, say n=2.
        !      Take nth element of above list: [[1,1],[1,2],[2,1]]
ḟ              Find first element that satisfies this:
                Argument is a list, say [1,2]
      ṫ         Tails: [[1,2],[2]]
    ṁ           Map and concatenate
     ∫          cumulative sums: [1,3,2]
 ȯ ¦            Does it contain all elements of
  ⁰             S? Yes.
               Result is [1,2], print implicitly.

কিছু অংশ রয়েছে যার আরও ব্যাখ্যা প্রয়োজন। এই প্রোগ্রামে সুপারস্প্রিপ্টগুলি ⁰¹উভয়ই প্রথম যুক্তিকে বোঝায় S। তবে, যদিα কোনও ফাংশন হয় তবে এর α¹অর্থ "প্রয়োগ αকরুন S", এর ⁰αঅর্থ " Sদ্বিতীয় আর্গুমেন্টে প্লাগ করুন α"। ফাংশনটি ¦পরীক্ষা করে দেখেছে যে এটির প্রথম যুক্তিতে দ্বিতীয়টির সমস্ত উপাদান রয়েছে (গুণমানের সংখ্যা গণনা করা) তাই Sএটির দ্বিতীয় যুক্তি হওয়া উচিত।

প্রথম অংশে, যে ফাংশনটি ¡ব্যবহার করে তা ব্যাখ্যা করা যেতে পারে S(f~Λ€∫)(×:)¹। Combinator Sআচরণ করবে পছন্দ Sαβγ -> (αγ)(βγ), যার মানে যে আমরা এটি প্রক্রিয়া সহজ করতে (f~Λ€∫¹)(×:¹)। দ্বিতীয় অংশটি ×:¹হ'ল " Sপ্রিপেন্ডিং দ্বারা মিশ্রণ ", এবং এর ফলাফল প্রথম অংশে পাস করা হয়। প্রথম অংশটি f~Λ€∫¹, এটির মতো কাজ করে। ফাংশন fএকটি শর্ত দ্বারা একটি তালিকা ফিল্টার করে, যা এই ক্ষেত্রে ~Λ€∫¹। এটি তালিকাগুলির একটি তালিকা পেয়েছে এটি একটি ফাংশন যা এতে সদস্যতা চেক করে এবং একটি শর্ত নেয় (এখানে এখানে)L , সুতরাং আমাদের কাছে রয়েছে ~Λ€∫¹L। Combinator ~আচরণ করবে মত ~αβγδε -> α(βδ)(γε): প্রথম যুক্তি প্রেরণ করা β, এর দ্বিতীয় γ, এবং ফলাফল সঙ্গে মিলিত হয় α। এর অর্থ আমাদের আছে Λ(€¹)(∫L)। শেষ অংশটি ∫Lহ'ল সংক্ষিপ্ত পরিমাণগুলির L,€¹SΛ€¹ ) এবং একটি তালিকা (এখানে ∫L) নেয় এবং সমস্ত উপাদান এটি সন্তুষ্ট করে কিনা তা পরীক্ষা করে। সহজ কথায় বলতে গেলে, আমরা মিশ্রণের ফলাফলগুলি তাদের মোট পরিমাণগুলি কিনা তা দিয়ে ফিল্টার করি S


আমি ব্যাখ্যার অপেক্ষায় রয়েছি!
আনুশ

1
@ আনুশ আমি একটি কোড ব্রেকডাউন যুক্ত করেছি।
জাগারব

আমি এই সমাধানটি সত্যিই পছন্দ করি। এটি একরকম সুন্দর।
আনুশ

6

রুবি , 135 বাইট

->a,n{r=w=1;r+=1until w=(s=a[0,r]).product(*[s]*~-n).find{|x|x.sum==a.max&&a==[]|(1..n).flat_map{|r|x.each_cons(r).map(&:sum)}.sort};w}

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

প্রথম প্রস্থের অনুসন্ধান ব্যবহার করুন। n = 10 টিআইওতে কাজ করে, n = 15 এক মিনিটের চেয়ে বেশি সময় নেয় তবে আমার মেশিনে কাজ করে।

রুবি , 147 বাইট

->a,n{r=w=1;r+=1until w=([a[-1]-a[-2]]).product(*[s=a[0,r]]*~-n).find{|x|x.sum==a.max&&a==[]|(1..n).flat_map{|r|x.each_cons(r).map(&:sum)}.sort};w}

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

অপ্টিমাইজড সংস্করণ, এন = 15 (20 সেকেন্ড) এর জন্য টিআইওতে কাজ করে

প্রকৃতপক্ষে, এটি একটি নিরপেক্ষ শক্তি প্রয়োগের শুরু। আমি আশা করি যে কেউ এটিতে কাজ করবেন এবং একটি সম্পূর্ণ সমাধান খুঁজে পাবেন।

প্রথম ধারণা:

  • আউটপুট অ্যারের যোগফল ইনপুট অ্যারের শেষ উপাদান (সর্বাধিক)।
  • প্রথম (বা শেষ) উপাদানটি আউটপুট অ্যারে বিয়োগের যোগফল, ইনপুট অ্যারের দ্বিতীয় শেষ উপাদান।
  • যদি অ্যারেটি সমাধান হয় তবে বিপরীত অ্যারেটিও একটি সমাধান, তাই আমরা ধরে নিতে পারি প্রথম উপাদানটি ইনপুট অ্যারের শেষ 2 টির মধ্যে পার্থক্য।
  • দ্বিতীয় উপাদানটি ইনপুট অ্যারের দ্বিতীয় এবং তৃতীয় বা দ্বিতীয় এবং চতুর্থ শেষ উপাদানটির মধ্যে পার্থক্য হতে পারে।

যা আমাদের পরবর্তী অপ্টিমাইজেশনে নিয়ে আসে:

রুবি , 175 বাইট

->a,n{r=w=1;r+=1until w=([a[-1]-a[-2]]).product([a[-2]-a[-3],a[-2]-a[-4]],*[s=a[0,r]]*(n-2)).find{|x|x.sum==a.max&&a==[]|(1..n).flat_map{|r|x.each_cons(r).map(&:sum)}.sort};w}

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

টিআইওতে .5 8.5 সেকেন্ড। খারাপ না...

... এবং আরও (বাস্তবায়িত করা)


এটি দেখতে খুব সুন্দর!
আনুশ

আমি আপনার নতুন অ-ব্রুট ফোর্স অ্যালগরিদম দ্বারা উচ্ছ্বসিত। আপনি যদি আরও উদাহরণ পরীক্ষা করতে চান তবে আমি সেগুলিকে প্রশ্নের নতুন অংশে যুক্ত করতে পারি।
আনুশ

2
@ আনুশ আসলে এটি এখনও নিষ্ঠুর শক্তি (ক্ষতিকারক সময়), তবে কিছু (বহুভিত্তিক উপাদান) অপ্টিমাইজেশনের সাথে।
ব্যবহারকারী 202729

আমার জন্য আপনি ভুলে গেছেন যে প্রথম উপাদানটি (উপাদানটি আরও ছোট) এটি সর্বদা সমাধান হয়: সুতরাং আমাদের 1 এবং সর্বশেষ (সকলের যোগফল) রয়েছে; এবং আপনি দ্বিতীয়টি বলছেন তবে এটি আমার পক্ষে পরিষ্কার নয় ... অন্য সকলকে এইভাবে খুঁজে পাওয়ার সম্ভাবনা রয়েছে ...
রোজলুপি

5

হাস্কেল, 117 111 বাইট

6 বাইট সংরক্ষিত হয়েছে @ নিমিকে ধন্যবাদ!

f r i n s|n<1=[r|r==[]]|1<2=[y:z|y<-s,t<-[y:map(y+)i],all(`elem`s)t,z<-f[a|a<-r,all(a/=)t]t(n-1)s]
n&s=f s[]n s

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

frএসins

nশূন্য কখন (গল্ফড n<1) হবে তালিকাটি অবশ্যই প্রস্তুত থাকতে হবে, তাই আমরা পরীক্ষা করে নিই যে সমস্ত মান দেখা গেছে কিনা। যদি তা না হয়, তবে কোনও সমাধানের ইঙ্গিত দিতে আমরা একটি খালি তালিকা ফিরিয়ে দেব, অন্যথায় আমরা একটি খালি তালিকা সম্বলিত একটি সিঙ্গলটন তালিকা ফিরিয়ে দেব, যেখানে নির্বাচিত উপাদানগুলি পুনরায় চাপানো হবে। এই ক্ষেত্রে অতিরিক্ত সমীকরণ দিয়ে পরিচালনা করা যেতে পারে

f [] _ 0 _=[[]]
f _ _ 0 _=[]

যদি nশূন্য না হয়, আমরা ফিরে আসি

[y:z|y<-s,t<-[y:map(y+)i],all(`elem`s)t,z<-f[a|a<-r,all(a/=)t]t(n-1)s]
 ^1^ ^2^^ ^......3......^ ^.....4.....^ ^.............5.............^

এটি (1) তালিকার তালিকা যেখানে প্রথম উপাদান (2) আসে sএবং বাকী (5) পুনরাবৃত্ত কল থেকে আসে, (4) শর্তে সমস্ত নতুন অঙ্কের মধ্যে রয়েছে s। নতুন অঙ্কগুলি (3) তে গণনা করা হয়েছে - নোট যেটি tসিঙ্গলটনের তালিকা থেকে আঁকা, আইডেমোমেটিক হাস্কেল কী হবে তার জন্য একটি কুৎসিত গল্ফিং হ্যাক let t=y:map(y+)i। পুনরাবৃত্ত কল (5) নতুন rসংখ্যার মধ্যে উপস্থিত হওয়া উপাদানগুলি ছাড়াই পুরানোটিকে নতুন সেট হিসাবে পেয়েছে t

মূল ফাংশনটি &সাহায্যকারী ফাংশনটিকে বলে যে আমাদের এখনও সমস্ত মান ( r=s) দেখতে হবে এবং এখনও কোনও পরিমাণ নেই (i=[] )।

আরও সাতটি বাইটের জন্য, আমরা গণনাটি কেবলমাত্র প্রথম ফলাফল (যদি থাকে) দিতে সীমাবদ্ধ করতে পারি, যা অনেক দ্রুত এবং সমস্ত পরীক্ষার কেস 2 সেকেন্ডেরও কম সময়ে পরিচালনা করে।

এটি অনলাইন চেষ্টা করুন! (এটি পুরানো সংস্করণের প্রথম ফলাফলের একমাত্র প্রকরণ)


1
এটি আশ্চর্যজনকভাবে দ্রুত। আপনি যদি অ্যালগরিদমটি ব্যাখ্যা করতে পারেন তবে দুর্দান্ত।
আনুশ


আমি এই সমস্যার দ্রুততম কোড সংস্করণ দেওয়ার কথা ভাবছি। আপনি কি মনে করেন কোনও পলি টাইম সমাধান হতে পারে?
আনুশ 21

@ নিমি ধন্যবাদ! আহ্, ভাল বয়স্ক map, আমি কেবল চেষ্টা করেছি <$>তবে তার জন্য অতিরিক্ত প্যারেন দরকার ... @ আনুশ আমার বহু-কালিক সমাধানের কোনও ধারণা নেই
খ্রিস্টান সিভর্স

3

পরিষ্কার , 177 বাইট

import StdEnv,Data.List
$s n=find(\a=sort(nub[sum t\\i<-inits a,t<-tails i|t>[]])==s)(?{#u\\u<-s|u<=(last s)-n}(last s)n)
?e s n|n>1=[[h:t]\\h<-:e|h<=s-n,t<- ?e(s-h)(n-1)]=[[s]]

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

এর জন্য আমার মেশিনে প্রায় 40 সেকেন্ড সময় নেয় n=15পরীক্ষার ক্ষেত্রে , তবে এটি টিআইও থেকে বেরিয়ে যায়।

পরিষ্কার , 297 বাইট

import StdEnv,Data.List
$s n=find(\a=sort(nub[sum t\\i<-inits a,t<-tails i|t>[]])==s)(~[u\\u<-s|u<=(last s)-n](last s)n(reverse s))
~e s n a|n>4=let u=a!!0-a!!1 in[[u,h:t]\\h<-[a!!1-a!!2,a!!1-a!!3],t<- ?e(s-u-h)(n-2)]= ?e s n
?e s n|n>1=[[h:t]\\h<-e,t<- ?(takeWhile((>=)(s-n-h))e)(s-h)(n-1)]=[[s]]

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

এটি একটিতে জিবি দ্বারা তৈরি কয়েকটি অপ্টিমাইজেশন অন্তর্ভুক্ত রয়েছে পাশাপাশি আমার নিজের কিছু । আমি মনে করি তাদের মধ্যে কয়েকটিকে আরও জেনেরিক করা যায়, কাজটি শেষ হয়ে গেলে আমি একটি ব্যাখ্যা যুক্ত করব।

এটি আমার মেশিনে প্রায় 10 সেকেন্ড সময় নেয়, টিআইওতে 40 সেকেন্ড।


আপনি যে অপটিমাইজেশন ব্যবহার করেছেন তা দয়া করে বানান করতে পারেন? আমি খুব আগ্রহী.
আনুশ

1
@ আনুশ আমি তাদের সাথে এবং @mentionআপনার সাথে কালকে উত্তরটি সম্পাদনা করব যখন তারা উঠবে, দুর্ভাগ্যক্রমে আজকের সময় নেই।
Οurous

3

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

from itertools import*
s,n=eval(input())
for[*t]in combinations(s[:-2],n-2):
  a=[*map(int.__sub__,t+s[-2:],[0,*t,s[-2]])];
  {sum(a[p//n:p%n+1])for p in range(n*n)}^{0,*s}or-print(a)

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

(পাঠকদের কোড স্ক্রোল করতে এড়ানোর জন্য কিছু নতুনলাইন / স্পেস যুক্ত করা হয়েছে)

আমার জেলি উত্তরের একটি সরাসরি বন্দর (কিছু সংশোধন সহ, নীচে "নোট" বিভাগটি দেখুন)

স্থানীয় রান ফলাফল:

[user202729@archlinux golf]$ printf '%s' "from itertools import*
s,n=eval(input())
for[*t]in combinations(s[:-2],n-2):a=[*map(int.__sub__,t+s[-2:],[0,*t,s[-2]])];{sum(a[p//n:p%n+1])for p in range(n*n)}^{0,*s}or-print(a)" > a.py
[user202729@archlinux golf]$ wc -c a.py
177 a.py
[user202729@archlinux golf]$ time python a.py<<<'([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25], 10)' 2>/dev/null
[1, 4, 1, 1, 1, 1, 1, 7, 7, 1]

real    0m3.125s
user    0m3.119s
sys     0m0.004s
[user202729@archlinux golf]$ time python a.py<<<'([1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31], 15)' 2>/dev/null
[3, 1, 2, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 2, 1]

real    11m36.093s
user    11m33.941s
sys     0m0.387s
[user202729@archlinux golf]$ 

আমি শুনেছি যে itertoolsভার্বোস, তবে আমার সর্বোত্তম combinationsবাস্তবায়নটি আরও বেশি ভার্জোজ:

c=lambda s,n,p:s and c(s[1:],n-1,p+s[:1])+c(s[1:],n,p)or[]if n else[p]

নোট

  • বিভাগ / মডুলো ইন ব্যবহার করতে a[p//n:p%n+1]প্রায় 2x বেশি সময় লাগে, তবে কিছু বাইট সংরক্ষণ করে।
  • এটি জেলি উত্তর থেকে কিছুটা আলাদা - জেলি উত্তরটি পিছনের দিকে পুনরাবৃত্তি করে।
  • combinationsএকটি পুনরাবৃত্তি ফিরিয়ে দেওয়ার জন্য ধন্যবাদ , এটি আরও মেমরি-বান্ধব।

2

জেলি , 35 বাইট

Ẇ§QṢ⁼³
;³ṫ-¤0;I
ṖṖœcƓ_2¤¹Ṫ©ÇѬƲ¿ṛ®Ç

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

স্থানীয়ভাবে চালান: (এন = 15 1 গিগাবাইটেরও বেশি র‌্যাম নেয়)

aaa@DESKTOP-F0NL48D MINGW64 ~/jellylanguage (master)
$ time python scripts/jelly fu z '[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,23,24,25]'<<<10
[8, 6, 2, 1, 1, 1, 1, 3, 1, 1]
real    0m1.177s
user    0m0.000s
sys     0m0.015s

aaa@DESKTOP-F0NL48D MINGW64 ~/jellylanguage (master)
$ time python scripts/jelly fu z '[1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 2
6, 27, 28, 30, 31]'<<<15
[3, 1, 2, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 2, 1]
real    12m24.488s
user    0m0.000s
sys     0m0.015s

(আসলে আমি ইউটিএফ 8-এনকোড সংস্করণটি চালিয়েছি, যা 35 বাইটেরও বেশি লাগে, তবে ফলাফল যাইহোক একই রকম হয়)

এই সমাধান রান-টাইম হ্রাস করতে শর্ট সার্কিট ব্যবহার করে।

শর্ট সার্কিট না করে এই কোডটি মোটামুটিভাবে নেয় (|এস|-2এন-2)×(এন36+ +এন2লগএন2) অপারেশন, যা মূল্যায়ন (26-215-2)×(1536+ +152লগ152)5,79×109যাইহোক, পাইথন এবং জেলির অদক্ষতার কারণে এটি সম্পূর্ণ হতে চিরতরে লাগে। সংক্ষিপ্ত-প্রচারের জন্য ধন্যবাদ, এটি অনেক তাড়াতাড়ি শেষ করতে পারে।

ব্যাখ্যা

আমরা লক্ষ করি যে সমস্ত খালি খালি উপসর্গের যোগফল ইনপুটটিতে উপস্থিত রয়েছে এবং সেগুলি কঠোরভাবে বৃদ্ধি পাচ্ছে। আমরা এটিও ধরে নিতে পারি যে বৃহত্তম এবং দ্বিতীয় বৃহত্তম উপাদানটি একটি উপসর্গের যোগফল।

অতএব, আমরা চয়ন করতে সমস্ত উপায় বিবেচনা করতে পারেন এন-2 প্রথম থেকে পৃথক উপাদান |এস|-2 উপাদান (আছে (|এস|-2এন-2)যেমন তালিকাগুলি), উপাদানগুলি পুনরুদ্ধারে একটানা পার্থক্য গণনা করুন; তারপরে এটি নিখরচায় বৈধ কিনা তা পরীক্ষা করে দেখুন (সবই পানএন2subarrays, যোগফল গণনা, পৃথক করা। সাবারিগুলির মোট দৈর্ঘ্য প্রায়এন36)


স্বীকৃত (তবে অভিন্ন পারফরম্যান্স থাকা উচিত)

জেলি , 32 বাইট

Ṫ©ÑẆ§QṢ⁻³
;³ṫ-¤ŻI
ṖṖœcƓ_2¤¹Ñ¿ṛ®Ç

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


আরও অকার্যকর সংস্করণ (শর্ট সার্কিট ছাড়াই):

জেলি , 27 বাইট

Ẇ§QṢ⁼³
ṖṖœcƓ_2¤µ;³ṫ-¤0;I)ÑƇ

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

এন = 15 পরীক্ষার জন্য, এটি 2 গিগাবাইট র‍্যাম নেয় এবং ~ 37 মিনিটের পরে শেষ হয় না।


নোট : Ẇ§সঙ্গে প্রতিস্থাপন করা যেতে পারে ÄÐƤẎ। এটি আরও দক্ষ হতে পারে।


1

এপিএল (এনএআরএস), অক্ষর 758, বাইট 1516

r←H w;i;k;a;m;j
   r←⊂,w⋄→0×⍳1≥k←↑⍴w⋄a←⍳k⋄j←i←1⋄r←⍬⋄→C
A: m←i⊃w⋄→B×⍳(i≠1)∧j=m⋄r←r,m,¨∇w[a∼i]⋄j←m
B: i+←1
C: →A×⍳i≤k

G←{H⍵[⍋⍵]}

r←a d w;i;j;k;b;c
   k←↑⍴w ⋄b←⍬⋄r←0 ⋄j←¯1
A: i←1⋄j+←1⋄→V×⍳(i+j)>k
B: →A×⍳(i+j)>k⋄c←+/w[i..(i+j)]⋄→0×⍳∼c∊a⋄→C×⍳c∊b⋄b←b,c
C: i+←1⋄→B
V: →0×⍳∼a⊆b
   r←1

r←a F w;k;j;b;m;i;q;x;y;c;ii;kk;v;l;l1;i1;v1
   w←w[⍋w]⋄r←a⍴w[1]⋄l←↑⍴w⋄k←w[l]⋄m←8⌊a-2⋄b←¯1+(11 1‼m)⋄j←2⋄i←1⋄x←↑⍴b⋄i1←0⋄v1←⍬
I: i1+←1⋄l1←w[l]-w[l-i1]⋄v1←v1,w[1+l-i1]-w[l-i1]⋄→I×⍳(l1=i1)∧l>i1⋄→B
E: r←,¯1⋄→0
F: i←1⋄q←((1+(a-2)-m)⍴0),(m⍴1),0⋄r+←q
A:   i+←1⋄j+←1⋄→E×⍳j>4000
B:   →F×⍳i>x⋄q←((1+(a-2)-m)⍴0),b[i;],0⋄q+←r⋄v←q[1..(a-1)]⋄→A×⍳0>k-y←+/v
   q[a]←k-y⋄→A×⍳l1<q[a]⋄→A×⍳∼q⊆w⋄→A×⍳∼l1∊q⋄→A×⍳∼v1⊆⍦q⋄c←G q∼⍦v1⋄ii←1⋄kk←↑⍴c⋄→D
C:   →Z×⍳w d v1,ii⊃c⋄ii+←1
D:   →C×⍳ii≤kk
   →A
Z: r←v1,ii⊃c

জি এক্স-তে (এইচ ফাংশনের সাহায্যে) ফাংশনটি এক্স এর সমস্ত অনুমানের সন্ধান করবে। এক্স এর মধ্যে ডি ফাংশনটি সন্ধান করে যে y অ্যারেটি অনুশীলনের অ্যারে এক্সের মাধ্যমে জেনারেট করে যদি কোনও বুলিয়ান মান দেয়। এক্স এফ ওয়াই এফ ফাংশনটি দৈর্ঘ্যের এক্সের অ্যারের আরটি ফিরিয়ে দেবে, যেমনটি ydr সত্য (= 1) বাস্তবায়নের পরে একটু দীর্ঘ, তবে এটিই যা পরীক্ষার ক্ষেত্রে সমস্ত ক্ষেত্রে কম সময় গণনা করে ... শেষ কেস n = 15 এর জন্য এটি কেবলমাত্র 20 সেকেন্ড চলবে ... আমি এটি বলতে চাই যে এটির অনেকগুলি সমাধান খুঁজে পাওয়া যায় না, কেবলমাত্র একটি সমাধান ফিরে পাওয়া (শেষ পর্যন্ত এটিরকম মনে হয়) কম সময়ে (বিভিন্ন ইনপুটগুলির জন্য অন্বেষণ করা পরীক্ষা নয় ...) 16 + 39 + 42 + 8 + 11 + 11 + 18 + 24 + 24 + 54 + 11 + 12 + 7 + 45 + 79 + 69 + 12 + 38 + 26 + 72 + 79 + 27 + 15 + 6 + 13 (758)

  6 F (2, 3, 4, 5, 7, 8, 9, 10, 12, 14, 17, 22)
5 3 2 2 5 5 
  6 F (2, 4, 6, 8, 10, 12, 16)
4 2 2 2 2 4 
  6 F (1, 2, 3, 4, 6, 7, 8, 10, 14)
4 2 1 1 2 4 
  10 F (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25)
1 1 3 1 2 3 5 1 3 5 
  15 F (1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31)
1 2 1 3 3 1 3 3 1 3 3 1 2 1 3 
  ww←(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25)
  ww≡dx 1 1 3 1 2 3 5 1 3 5 
1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.