বিভাজ্যতার সম্পর্কের ক্ষেত্রে সর্বাধিক মিল Find


16

আপনাকে ইতিবাচক পূর্ণসংখ্যার একটি সেট দেওয়া হয়েছে। আপনাকে অবশ্যই এগুলি জোড়া তৈরি করতে হবে:

  • প্রতিটি জোড়ায় 2 টি সংখ্যা থাকে, যার একটিতে অন্যটির একাধিক। উদাহরণস্বরূপ, 8 হ'ল 4 এর একক, এবং 9 9 এর একাধিক।
  • যদি প্রাথমিক সংখ্যায় একই সংখ্যার সংখ্যক বার দেখা যায় তবে এটি জোড়ায় বহুবার ব্যবহার করা যেতে পারে; একটি সংখ্যার এমনকি একই সংখ্যার অন্য ঘটনাটি যুক্ত করা যায়
  • সর্বোচ্চ সম্ভাব্য সংখ্যক জোড় প্রাপ্ত হয়।

আউটপুট অবশ্যই জোড়ের সংখ্যা হতে হবে। সংক্ষিপ্ততম কোড জিতেছে।

নমুনা তথ্য

2,3,4,8,9,18 -> 3

7,14,28,42,56 -> 2

7,1,9,9,4,9,9,1,3,9,8,5 -> 6

8,88,888,8888,88888,888888 -> 3

2,6,7,17,16,35,15,9,83,7 -> 2


3
যে কেউ জানেন যে এই সমস্যাটি এনপি-সম্পূর্ণ কিনা? আমি মনে করি সবচেয়ে ছোট "হার্ড" সেটটি 2,3,4,8,9,18। (তালিকার প্রতিটি সংখ্যা একটি ফ্যাক্টর এবং / বা তালিকার অন্তত দুটি আরও সংখ্যার একাধিক, তবে এর কেবল একটি সমাধান রয়েছে))
নীল

উত্তর:


6

হাস্কেল, 109 107 76 70 বাইট

নিমিকে ধন্যবাদ 33 বাইট সংরক্ষণ এবং আমাকে আরও কিছু হাস্কেল শেখানোর জন্য ll :)
আরও 6 বাইট সংরক্ষণ করার জন্য xnor ধন্যবাদ।

import Data.List
f l=maximum$0:[1+f t|a:b:t<-permutations l,a`mod`b<1]

হ্যাঁ, আমার প্রথম হাস্কেল গল্ফ এটি এখন পর্যন্ত সমস্ত উত্তরগুলির মতো একইরূপে কাজ করে (ভাল, বেশ নয়: এটি কেবল প্রতিটি অনুক্রমের মধ্যে বৈধ জোড়গুলির দীর্ঘতম উপসর্গের দৈর্ঘ্য গণনা করে তবে এটি সমতুল্য এবং আসলে আমার আসল সিজেম কোডটি করেছিল)।

অতিরিক্ত গলফিউডের জন্য এটি প্রত্যয়টির প্রতিটি ক্রমবিন্যাস পুনরাবৃত্তভাবে উত্পন্ন করে অতিরিক্ত প্রতিবন্ধী হয় যখনই প্রতিটি আদেশের প্রথম দুটি উপাদান বৈধ জোড় হয়।


Is f=প্রয়োজনীয়?
অ্যালেক্স এ।

@AlexA। আমি নিশ্চিত না যে হাস্কেলের নামবিহীন ফাংশনগুলির জন্য পিপিসিজিতে স্ট্যান্ডার্ড নীতিটি কী, তবে আমি কয়েকটি অন্যান্য হাস্কেলের উত্তর পরীক্ষা করে দেখেছি এবং তারা নামকৃত ফাংশন ব্যবহার করেছে। এছাড়াও, আপনি প্রযুক্তিগতভাবে ফাংশনটির চারপাশে প্রথম বন্ধনী ব্যবহার করতে চান যদি আপনি এটিকে একটি নামহীন ফাংশন হিসাবে ব্যবহার করতে চান, তবে আমার মনে হয় এটি একই বাইট গণনা হবে।
মার্টিন ইন্ডার

@ নিমি আমাকে জানাতে ধন্যবাদ। :) আপনি কি আরও কিছু দেখেন যা সংক্ষিপ্ত করা যেতে পারে? এর জন্য আমদানি chunksOfবেদনাদায়ক। সংক্ষিপ্ত সমমানের কোনও কার্যকারিতা আছে কিনা তা বলতে সক্ষম হয়ে আমি হাসাকেলের স্ট্যান্ডার্ড লাইব্রেরিটি সত্যিই জানি না। আমি নিজে এটি প্রয়োগ করার চেষ্টা করেছি, তবে এটি আমদানির চেয়ে দীর্ঘ দুই বা তিন বাইট বেরিয়ে এসেছিল।
মার্টিন ইন্ডার

ওহহ, উভয়কে ধরা []এবং [_]একই সাথে g x=[]দ্বিতীয় রেখে সত্যই চালাক। আমি চেষ্টা করে দেব। ধন্যবাদ :)
মার্টিন এন্ডার

একটু খাটো মনে হচ্ছে যাও recursively পুরো ফাংশন নির্ধারণ করতে: f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
xnor

3

সিজেম, 22 18 বাইট

q~e!{2/::%0e=}%:e>

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

সিজেএম-শৈলীর তালিকার আকারে ইনপুট আশা করে।

বৃহত্তর তালিকার জন্য এটি কিছুটা অকার্যকর (এবং আপনি আরও কিছু না দিলে জাভা সম্ভবত মেমরির বাইরে চলে যাবে)।

ব্যাখ্যা

q~     e# Read and evaluate input.
e!     e# Get all distinct permutations.
{      e# Map this block onto each permutation...
  2/   e#   Split the list into (consecutive) pairs. There may be a single element at the
       e#   end, which doesn't participate in any pair.
  ::%  e#   Fold modulo onto each chunk. If it's a pair, this computes the modulo, which
       e#   yields 0 if the first element is a multiple of the second. If the list has only
       e#   one element, it will simply return that element, which we know is positive.
  0e=  e#   Count the number of zeroes (valid pairs).
}%
:e>    e# Find the maximum of the list by folding max() onto it.

এটি এর জন্য আউটপুট দেয় না [1 2 3 4 5 6 7 8 9 10]তবে এটি [7 1 9 9 4 9 9 1 3 9 8 1]যা দীর্ঘতর তালিকা, সঠিকভাবে কাজ করে। কেন এমন?
ভূত_স_ই_কোড

@ঘোস্ট_ইন_টি_কোড কারণ পূর্ববর্তীটির আরও স্বতন্ত্র অনুমতি রয়েছে। 10! = 3628800, কিন্তু 12! / 5! / 3! = 665280। সুতরাং এটি প্রথম ক্ষেত্রে মেমরির বাইরে চলে যায়। আপনি যদি জাভা ইন্টারপ্রেটারের সাথে এটি কনসোল থেকে চালান, আপনি জাভাকে আরও মেমরি ব্যবহার করতে বলতে পারেন এবং প্রথম কেসটিও কাজ করবে (যদিও এটি কিছুটা সময় নিতে পারে, জানেন না)।
মার্টিন এন্ডার

3

পাইথ, 13 বাইট

eSm/%Mcd2Z.pQ

সময় এবং স্টোরেজ জটিলতা সত্যিই ভয়ানক। আমি প্রথমে যা করি তা হ'ল মূল তালিকার সমস্ত ক্রমযুক্ত তালিকা সহ একটি তালিকা তৈরি করা। এটি n*n!স্টোরেজ লাগে । 9 দৈর্ঘ্যের ইনপুট তালিকাগুলি ইতিমধ্যে বেশ দীর্ঘ সময় নেয়।

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

eSm/%Mcd2Z.pQ
            Q   read the list of integer
          .p    create the list of all permutations
  m             map each permutation d to:
      cd2          split d into lists of length 2
    %M             apply modulo to each of this lists
   /     Z         count the zeros (=number of pairs with the first 
                   item divisible by the second)
 S              sort these values
e               and print the last one (=maximum)

2

গণিত, 95 93 87 83 79 60 58 বাইট

Max[Count[#~Partition~2,{a_,b_}/;a∣b]&/@Permutations@#]&

বৃহত্তর উদাহরণগুলির জন্য কয়েক সেকেন্ড সময় নেয়।


0

মতলব (120 + 114 = 234)

  function w=t(y,z),w=0;for i=1:size(z,1),w=max(w,1+t([y,z(i,:)],feval(@(d)z(d(:,1)&d(:,2),:),~ismember(z,z(i,:)))));end

প্রধান:

  a=input('');h=bsxfun(@mod,a,a');v=[];for i=1:size(h,1) b=find(~h(i,:));v=[v;[(2:nnz(b))*0+i;b(b~=i)]'];end;t([],v)

  • টোপার ফাংশনটি মূল অংশ দ্বারা ডাকা হয়।

  • ইনপুট ফর্ম হয় [. . .]


0

মতলব (365)

  j=@(e,x)['b(:,' num2str(e(x)) ')'];r=@(e,y)arrayfun(@(t)['((mod(' j(e,1) ',' j(e,t) ')==0|mod(' j(e,t) ',' j(e,1) ')==0)&',(y<4)*49,[cell2mat(strcat(r(e(setdiff(2:y,t)),y-2),'|')) '0'],')'],2:y,'UniformOutput',0);a=input('');i=nnz(a);i=i-mod(i,2);q=0;while(~q)b=nchoosek(a,i);q=[cell2mat(strcat((r(1:i,i)),'|')) '0'];q=nnz(b(eval(q(q~=0)),:));i=i-2;end;fix((i+2)/2)

  • দৃশ্যত এটি দীর্ঘতর, তবে অনেলিনার এবং নির্বাহী এবং আমি পালাতে সক্ষম হয়েছি perms ফাংশন পেরেছি কারণ এটি চিরতরে লাগে।

  • এই ফাংশনটি বেনাম ফাংশনগুলির কারণে শান্তভাবে চালাতে অনেক প্রতিশোধ নেয়, আমি এখানে পরামর্শের জন্য উন্মুক্ত আছি :)

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