পার্টিশন পারিশ্রমিক


21

একটি নম্বর এন> Give 77 দেওয়া , এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা আলাদা ধনাত্মক পূর্ণসংখ্যার সমষ্টি খুঁজে পায় যেমন সেটটির সমষ্টি n সমান হয় এবং সেটটির পারস্পরিক ক্রমের যোগফল 1 সমান হয়।

80 এর উদাহরণ:

80 = 2 + 4 + 10 + 15 + 21 + 28 ⟶ 1/2 + 1/4 + 1/10 + 1/15 + 1/21 + 1/28 = 1

আপনার প্রোগ্রাম বা ফাংশন অবশ্যই (তাত্ত্বিকভাবে) যে কোনও এন <2 32 এর জন্য কাজ করবে এবং ভাসমান পয়েন্ট গোলাকার ত্রুটির জন্য ক্ষমা করা হবে না। দ্রষ্টব্য যে সমাধানগুলি সমস্ত এন> 77 এর জন্য বিদ্যমান ।


বাইটস মধ্যে সংক্ষিপ্ত কোড।

একটি বোনাস প্রণোদনা রয়েছে: আমি ক্ষুদ্রতম সমাধানটিকে একটি অনুদান দেব যা কোনও এন এর জন্য কাজ করে এবং লগ চালায় (এন) । ছোট এন এর জন্য এটি দ্রুত হওয়া উচিত (আমার বিবেচনার ভিত্তিতে নির্ধারিত)। হ্যাঁ, এটি সম্ভব।


3
এই জাতীয় পচনের কি সর্বদা উপস্থিত থাকার নিশ্চয়তা রয়েছে? কোনও সংখ্যা-তাত্ত্বিক উপপাদ্য যে আশ্বাস দেয়?
লুইস মেন্ডো

মনে হচ্ছে যে সেখানে সব n> 77 জন্য। (আমি প্রতিটি বিবরণ চেক করিনি)) এটি আপনার চ্যালেঞ্জের বর্ণনায় হওয়া উচিত ...
flawr

1
@ ফ্লোয়ার, আমি ধারণা করি যে তিনি সেই উল্লেখটি অন্তর্ভুক্ত করেননি কারণ এটি O(log n)অ্যালগরিদমকে দেয় ।
পিটার টেলর

1
তবুও তার উল্লেখ করা উচিত ছিল যে এই সেটটি প্রদত্ত এন এর জন্য বিদ্যমান। (এবং শিরোনাম
গুগল

1
@ ফ্লোর, এটি খুঁজে পেতে আমার প্রায় 10 মিনিট সময় লেগেছে। আমি মিশরীয় ভগ্নাংশের একটি পৃষ্ঠার মাধ্যমে এটি পেয়েছিলাম এবং আপনি 10 সেকেন্ডের মধ্যে আমাকে নিমজ্জন করতেন।
পিটার টেলর

উত্তর:


3

গণিত, 54 বাইট

Select[IntegerPartitions@#,Unequal@@#&&Tr[1/#]==1&,1]&

এটি যতটা অদক্ষত হয় ঠিক তেমন এটি n = 78প্রায় 9 সেকেন্ডের মধ্যে সমাধান হয়ে যায় solve

সিঙ্গেলটন তালিকায় মোড়ানো একটি তালিকা হিসাবে ফলাফলটি ফিরে আসে, যেমন:

{{45, 12, 9, 5, 4, 3}}

ভাবছি এটি খুব বড় এন এর জন্য কাজ করে কিনা।
এনজিপিপোরগান

@ এনজেপাইপোরগান যথেষ্ট স্মৃতি এবং সময় দেওয়া হয়েছে, হ্যাঁ।
মার্টিন এেন্ডার

আমি ইন্টিজার পার্টিশনের দৈর্ঘ্যের একটি অনুমান পেয়েছি [এন], যা এক্স (স্কয়ার্ট (এন)) এর অর্ডারে, এন = 2 ^ 30 এর জন্য ~ 10 ^ 10 ^ 4.5। আমি সত্যিই বিশ্বাস করি না যে গণিত (বা কোনও কোনও স্থাপত্য) অ্যারে ধরে রাখতে সক্ষম।
এনজিপিপোরগান

@ এনজেপাইপোরগান চ্যালেঞ্জটি স্পষ্টভাবে বলেছে যে অ্যালগরিদম অবশ্যই তাত্ত্বিকভাবে 2 ^ 32 পর্যন্ত কাজ করতে হবে , ব্যবহারিকভাবে নয় (সাধারণত কোড গল্ফের জন্য সাধারণত ধরে নেওয়া হয়, যদি না চ্যালেঞ্জটির স্পষ্টভাবে প্রয়োজন হয় যে প্রোগ্রামটি যথাযথ পরিমাণ এবং মেমরির সমস্ত ইনপুট সমাপ্ত করে না )।
মার্টিন এেন্ডার

4

পাইথন 3, 7306 1995 বাইট

এই সমাধানটি লগ (এন) জটিলতায় চলে (যতদূর আমি বলতে পারি)।

def i(s,t):
 for n in s[::-1]:t=t.replace(*n)
 return [[]]*78+[list(bytearray.fromhex(a))for a in t.split(",")]
def f(n):
 g,h=lambda c,n:c+[[[2],[3,7,78,91]][n[len(c)]%2]+[i*2for i in c[-1]]],lambda n:[]if n<78 else h((n-[2,179][n%2])//2)+[n]
 v=h(n);c=[i([['g',',03040'],['h',',,0306080'],['i',',020'],['j','b0c1'],['k','21'],['l','60'],['m','30'],['n','141'],['o','k24'],['p',',g'],['q','618'],['r','0c0'],['s','1e'],['t',',0ml'],['u','283c'],['v','e0f1'],['w','2a38'],['x','80'],['y','a0'],['z','01'],['A','50'],['B','24'],['C','i40'],['D','plb1'],['E','gl'],['F','48'],['G','bre1'],['H','28'],['I','6k'],['J','416s'],['K',',040Al'],['L','90'],['M','2a'],['N','54'],['O','k6o'],['P','3c'],['Q','il'],['R','18'],['S','px'],['T','im'],['U','70'],['V','b1'],['W','23'],['X','pj'],['Y','hj'],['Z','0n']],'020lxycHTaRHCyf1517CyfneC91k51cCLdneQU912MCyf0dBiALyf2dClfPEyfneT9s2dELdneEjIgmLydHg5rd14BKLardsE3n8sQ9rd1517Q9rdneplmdRBgUmcRMC5sPEyf102bgA6sPE91z2miAj41IQmc0dRBQUen7spl31z82bT9RFT3wE7neMgmyf0dRBgUmaHMELc1b36EUdBMQLyfs2d,C710M2bgLardRHT3BFQ9rf0dPQ7rdBMQm9Rs2d,0mAl9100d142bE710M2bQmc0fRPtxarfn8sEc1k4sBTfnePExcwtxarf1k8BExcuT3kkT91663C51964,0mAl71k4BMELe12NTcRwQjOT820ltmarf1z8mExeRNCqBFtmyjIHKLa100ds2bQU91bM36garf1k4sBTcRBFgxarfwE91keB2dtUxcn8sME9nbs36gm9rduC5R78,0mAUyf0d14BME91kbB36QLc12AB2dgyjqkHEUeMNT9157eQU9RMFT8s78C8neuixLc1zk4AtUxc1z8Mmt8re0fn8sWhLyc1bH36pl8neu,Kxycsw,iAxc1420l,K8ren8NS9n81bs36hc0vz8WmYzqkmhyv2WBHhyVOHXkJoSjIwSjIuSvz4WASVZIAXZ6skmSj6oFXzOmplvcsW46D61csk46plv8WBFDqoF,tarvk8WBH,tyjkqoHhGqkN,tmvZ8sWmhVZqskmpc0vZ8WAXZqkAplbnImASbn6skwSbn6skuSVOwSVOupGONSbn6soFpyVkJk5aSj6sk78YJkuDkIP5aYOuhvzk4WBAhVzk416oA,tyjkJ265a,,0mxyjk41q53sYzIHmPXkqowXkqouhyVqoHFYz6omFhb0e1zqkmNSyVIP78YJ20klpyVOHwYk620olpc0vz8WBmFXzqomFpG61ckH38PhyjIP78Yz620kmlDkImLDzINUhGIuNDzIA78hb0e1ZIANYkqk366chG6oFNXkJkP5ahVZ6somFSb0e1620kNlhVk41qomADzIFLXkqso78pGqoFNXzkImP5a,tyjk620oHlhG620kNlXzqskm78,tjZqskHmPYqouFD6sku78YzqkNU,tjZqsomF')[v[0]]]
 for o in range(len(v)-1):c=g(c,v)
 return c[-1]

আপনি এটি পরীক্ষা করতে পারেন যা f(2**32 - 1)প্রায় তাত্ক্ষণিকভাবে চালিত হয়

আমি এই কাগজটি এটির গণনার জন্য কোনও পদ্ধতিতে ব্যবহার করেছি। এই পদ্ধতির সাহায্যে এন-এর প্রাক-নির্ধারিত মানগুলির জন্য বৃহত পরিমাণে ডেটা রয়েছে data 78 থেকে ৩৩৪ পর্যন্ত সমান সংখ্যা ছাড়াই ১8৮ এর পরে I আমি এই ডেটাটিকে কিছুটা ছোট আকারে পরিণত করতে চেয়েছিলাম এবং আমি কোনও ভাল সংক্ষেপণ অ্যালগরিদম জানি না তাই আমি আমার নিজের তৈরি।

নিয়ম প্রতিস্থাপনের স্ট্রিংয়ের একটি তালিকা রেখে আমি এটি যেভাবে সংকুচিত করেছি। আমি এমন একটি পদ্ধতি তৈরি করেছি যা স্ট্রিং প্রতিস্থাপনের নিয়মের সন্ধান পেয়েছিল যা নিয়মকে সংজ্ঞায়িত করে বিবেচনায় নেওয়া সমস্ত ক্ষেত্রে সর্বাধিক সামগ্রী কেটে দেয়। আমি তখন পর্যন্ত পুনরাবৃত্তভাবে এটি প্রয়োগ করেছি যতক্ষণ না আমি আর কোনও বিধি তৈরি করতে পারি না (আমি অক্ষর জিজেড এবং এজেড ব্যবহার করেছি)। আমি যে স্ট্রিংটি দিয়ে প্রতিস্থাপন করেছি তা হ'ল প্রতিটি সংখ্যার জন্য হেক্স মানগুলির একটি কমা দ্বারা পৃথক করা তালিকা। পূর্ববর্তী ক্ষেত্রে, তাদের হেক্স মানগুলিতে রূপান্তর করা বুদ্ধিমান পছন্দ নাও হতে পারে, তবে দশমিকের মধ্যে রেখে দেওয়া সম্ভবত সংক্ষিপ্ত হবে, কারণ হেক্স কেবল তিনটি সংখ্যার জন্য সংরক্ষণ করতে পারে তবে একক সংখ্যার জন্য 0 যুক্ত করে would

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

এই কোডটিতে এমন অনেকগুলি জায়গা রয়েছে যেখানে আমি সম্ভবত বাক্য গঠনটি কেটে ফেলতে পারি, যেমন তালিকাগুলির তালিকাটিকে একক তালিকায় পরিণত করা এবং তারপরে পাঠ্যটি প্রতিস্থাপনের জন্য নিয়মগুলি অ্যাক্সেস করার জন্য আলাদা পদ্ধতি ব্যবহার করে


1
n=218ফলাফল [2]কি প্রত্যাশিত ??
অফিসিয়ালাইম

1
না, আমি কেন পরে কিছুটা ঘটছে তা দেখতে পাচ্ছি। আমার ক্ষমা। আমি প্রাথমিকভাবে সংকুচিত হওয়া ডেটাতে ত্রুটি হতে পারে।
ক্যামেরন আভিক

1

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

import Data.List
import Data.Ratio
p n=[x|x<-subsequences[2..n],sum x==n,1==sum(map(1%)x)]!!0

মারাত্মকভাবে ধীর 1 কিন্তু এটি ধ্রুব স্মৃতিতে চলে। তুচ্ছ সমাধান: [2..n]পারস্পরিক যোগফলের যোগফলের যোগফলের সমস্ত অনুচ্ছেদগুলি পরীক্ষা করে দেখুন ।

একের পরিবর্তে সমস্ত সমাধান ফিরে পাওয়া 3 বাইট সংক্ষিপ্ত: কেবল সরিয়ে ফেলুন !!0(সাবধান: চলমান সময় সর্বদা চার্টের বাইরে থাকবে)।


1 চলমান সময়টি উপসংখ্যার তালিকায় ফলাফলটি কত তাড়াতাড়ি প্রদর্শিত হবে তার উপর নির্ভর করে। প্রথম ম্যাচটি পাওয়া গেলে হাস্কেলের অলসতা অনুসন্ধান থামিয়ে দেয়। সংকলিত হয়ে গেলে, p 89(ফলাফল [3,4,6,9,18,21,28]:) আমার (4 বছরের পুরানো) ল্যাপটপে 35 এর দশকে চলে। অন্যান্য মান এমনকি ছোট মানগুলিও কয়েক ঘন্টা সময় নিতে পারে।


0

জুলিয়া, 77 বাইট

n->collect(filter(i->i==∪(i)&&sum(j->Rational(1,j),i)==1,partitions(n)))[1]

এটি একটি অদক্ষ ল্যাম্বদা ফাংশন যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং পূর্ণসংখ্যার অ্যারে প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

আমরা ব্যবহার করে পূর্ণসংখ্যার পার্টিশন পাই partitions। তারপরে আমরা কেবলমাত্র অনন্য উপাদানগুলির সাথে পার্টিশনের সেটগুলি ফিল্টার করি যাদের পারস্পরিক Rationalক্রিয়াকলাপ 1 এর সমষ্টি হয় round কোনও রাউন্ডঅফ ত্রুটি না ঘটে তা নিশ্চিত করার জন্য, আমরা পারস্পরিক কাঠামো নির্মাণের জন্য জুলিয়ার ধরণটি ব্যবহার করি । filterএকটি পুনরুক্তি ফেরত দেয়, তাই আমাদের collectএটি অ্যারেতে করতে হবে। এটি আমাদের অ্যারেগুলির একটি অ্যারে দেয় (কেবলমাত্র একটি একক উপাদান সহ), যাতে আমরা প্রথমটি ব্যবহার করতে পারি [1]

এখন, যখন আমি অদক্ষ বলি, তখন আমি এটি বোঝাতে চাই। এটি এন = 80 এর জন্য চালানো আমার কম্পিউটারে 39.113 সেকেন্ড সময় নেয় এবং 13.759 গিগাবাইট মেমরি বরাদ্দ করে।

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