সমস্ত যুক্তিযুক্ত সংখ্যার একটি তালিকা আউটপুট করুন


13

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

এই প্রশ্নের সাধারণ ধারণাটি অনন্তের উদ্ভট বাস্তবের মুখোমুখি। এই চ্যালেঞ্জে, আপনার প্রোগ্রামটি একটি তালিকা আউটপুট দেবে যা হ'ল:

  • যে কোনও নির্দিষ্ট মুহুর্তে, সর্বদা সম্পূর্ণ সংখ্যক এন্ট্রি রাখুন
  • অবশেষে পুরো তালিকায় একবারে নির্দিষ্ট (শূন্য নয়) যুক্তিযুক্ত সংখ্যাটি অবশ্যই যথাযথভাবে অন্তর্ভুক্ত করুন
  • খালি স্লটগুলির একটি আনবাউন্ডেড সংখ্যা (অকারণে 0 তে সেট করা তালিকার এন্ট্রি) থাকে
  • খালি স্লটগুলির একটি অনুপাত রয়েছে যা 100% এর সীমাতে পৌঁছেছে
  • প্রতিটি ধনাত্মক পূর্ণসংখ্যার এন এর জন্য এন টানা শূন্য স্লট সহ অসীম সংখ্যক স্থান পান

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা নিম্নলিখিত বিধিগুলির সাথে একটি বিশেষ তালিকা আউটপুট করবে:

  1. বর্গ সংখ্যা নয় এমন একটি সূচক সহ সমস্ত এন্ট্রি শূন্যতে সেট করা উচিত। সুতরাং, প্রথম এন্ট্রি হবে নঞ্জেরো, দ্বিতীয় এবং তৃতীয়টি শূন্য, চতুর্থ ননজারো ইত্যাদি হবে etc.
  2. সমস্ত যৌক্তিক সংখ্যাগুলি সরল করা হয়েছে এমন একটি অনুচিত ভগ্নাংশ (যেমন 4/5 বা 144/13) আকারে হবে। ব্যতিক্রম শূন্য, যা সহজ হবে 0
  3. আপনার প্রোগ্রামটি দীর্ঘ পর্যাপ্ত এবং পর্যাপ্ত স্মৃতিশক্তি নিয়ে চলতে থাকলে সমস্ত (ধনাত্মক এবং নেতিবাচক) যুক্তিযুক্ত সংখ্যাগুলি শেষ পর্যন্ত তালিকায় উপস্থিত হওয়া উচিত। যে কোনও নির্দিষ্ট যুক্তিযুক্ত সংখ্যার জন্য প্রয়োজনীয় সময়টি নির্বিচারে বড় হতে পারে, তবে সর্বদা সসীম, সময় পরিমাণ।
  4. যদি অসীম সময়ের জন্য চালানো হয় তবে কোনও শূন্য-যুক্তিযুক্ত সংখ্যার আর দু'বার প্রদর্শিত হবে না।

বিধি 3 কিছু ভিন্নতার জন্য অনুমতি দেয়, কারণ এখানে বিভিন্ন সম্ভাব্য আইনী ফলাফলের অসীম সংখ্যা রয়েছে।

আউটপুট লাইনের একটি স্ট্রিম হবে। প্রতিটি লাইনটি সাধারণ আকারের হবে 5: 2/3যেখানে প্রথম সংখ্যাটি প্রবেশের নম্বর এবং তারপরে যৌক্তিক সংখ্যাটি। নোট করুন যে 1: 0সর্বদা আউটপুট প্রথম লাইন হবে।

আউটপুট স্নিপেট উদাহরণ:

1: 1/1
2: 0
3: 0
4: 2/1
5: 0
6: 0
7: 0
8: 0
9: -2/1
10: 0
etc...

বিধি, প্রবিধান এবং নোটসমূহ

এটি কোড গল্ফ। স্ট্যান্ডার্ড কোড গল্ফ বিধি প্রযোজ্য। এছাড়াও, আউটপুটে অনুমোদিত বৈচিত্রের কারণে, আপনাকে অন্তত দেখানো দরকার যে আপনি কেন বিশ্বাস করেন যে আপনার তালিকায় ঠিক একবারে সমস্ত সম্ভাব্য যৌক্তিক সংখ্যা থাকবে এবং আপনার সমাধানটি সঠিক।

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


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

এটি দেখায় যে কিভাবে পূর্ণসংখ্যার অতি ক্ষুদ্র অংশের এখনও সম্পূর্ণ যুক্তিযুক্ত সংখ্যার সম্পূর্ণ সেটের মতো একই কার্ডিনালিটি রয়েছে এবং এটি খালি স্লটগুলির শতাংশকে 100% এ পৌঁছানোর অনুমতি দেয় (তবে কখনও পৌঁছায় না)।
PhiNotPi

আমি ধরে নিচ্ছি যে প্রোগ্রামটিও একটি নির্দিষ্ট পরিমাণ মেমরির মধ্যে চালানো দরকার, অর্থাৎ এটি ধরে নিতে পারে না যে মেশিনটি সবসময় আরও বেশি বরাদ্দ করতে পারে? এছাড়াও, যখন আপনি জানেন যে এটির সীমাবদ্ধতা রয়েছে তখন তালিকা সূচকের জন্য কোন সি (আইটি) ব্যবহার করা নিয়মের বিরুদ্ধে নয়? (যদিও প্রয়োগের সাথে সঠিক সীমাটি পৃথক হতে পারে?) বিগনামের কোনও রূপের প্রয়োজন কি?
ব্রেডবক্স

1
@ ফিলনটপি, এটি করার অনেক সহজ উপায় রয়েছে এবং এটি প্রশ্নের আরও আকর্ষণীয় অংশ থেকে দূরে রয়েছে।
পিটার টেলর

1
নোট করুন যে 1: 0সর্বদা আউটপুট প্রথম লাইন হবে। - এটি আপনার উদাহরণের সাথে বিরোধিতা করে এবং আমার কাছে তা বোঝায় না।
Wrzlprmft

উত্তর:


6

হাস্কেল, 184 টি অক্ষর

main=putStr.unlines$zip[1..](s>>=g)>>=h
s=(1,1):(s>>=f)
f(a,b)=[(a,a+b),(a+b,b)]
g x@(a,b)=[x,(-a,b)]
h(i,(a,b))=(i^2)%(u a++'/':u b):map(%"0")[i^2+1..i*(i+2)]
i%s=u i++": "++s
u=show

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

আউটপুট (শূন্যতার জন্য শূন্য লাইন বাদে):

1: 1/1
4: -1/1
9: 1/2
16: -1/2
25: 2/1
36: -2/1
49: 1/3
64: -1/3
81: 3/2
100: -3/2
...

5

সেজ, 103 113 128

Ageষি সহজেই যুক্তি তালিকা করতে পারেন! প্রোগ্রামের প্রয়োজনীয়তাগুলি যথাযথভাবে ফিট করার জন্য ফর্ম্যাট করা সবকিছু নষ্ট করে দেয়।

for i,q in enumerate(QQ):
 for j in[(i-1)^2+1..i*i]:print'%d:'%j,[0,'%d/%d'%(q.numer(),q.denom())][j==i*i]

Ageষি QQতাদের উচ্চতা অনুসারে গণনা করেন : জিসিডি হ্রাসের পরে অংকের সবচেয়ে বেশি এবং পরের মানটি value


আপনি বাদ দিতে পারে x.next()এবং ব্যবহার printনিম্নরূপ শুধুমাত্র একবার, 124 নেমে স্কোর আনয়ন: x=enumerate(QQ) for i,q in x: for j in[(i-1)^2+1..i*i]: print'%d: '%j,'%d/%d'%(q.numer(),q.denom())if j.is_square()else 0। এটি কোনও মন্তব্যে সঠিকভাবে প্রদর্শন করে না, তবে আমি মনে করি আপনি কী বলতে চাইছেন তা দেখতে পারেন।
মাঝামাঝি

বিটিডাব্লু, আমি লক্ষ্য করেছি যে প্রথম 4 টি ইতিবাচক উপাদানগুলির পরে, সেজের গণনা অন্যান্য উত্তরগুলির মতো নয়। ক্যালকিন-উইলফ সূত্রগুলি এমন একটি অনুক্রম দেয় যাতে যুক্তিটির ডিনোমিনেটর পরবর্তী যুক্তির সংখ্যক হয়; যেমন (..., 1/3, 3/2, 2/3, ...), সেজের তুলনায় (..., 1/3, 3/1, 2/3, ...)। আমি সেজ এর গণনার জন্য কোনও ডকুমেন্টেশন সন্ধান করতে পারছি না, এটি কীভাবে গণনা করা হয়েছে তা দেখতে।
মাঝামাঝি

@ রেস, ধন্যবাদ! আমি মুদ্রণ বিবৃতি মার্জ করতে চেয়েছি, কিন্তু [x..y] স্বরলিপি ব্যবহার করতে ভুলে গেছি। এখানে অন্য Sষি ব্যবহারকারীকে দেখতে দুর্দান্ত!
বুথবি


2

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

mapM_ print$join$iterate(>>=(\x->[x+1,1/(1+1/x)]))[1%1]

আউটপুট

1 % 1
2 % 1
1 % 2
3 % 1
2 % 3
3 % 2
1 % 3
4 % 1
...

1% 1 হ'ল ক্যালকিন-উইলফ গাছের মূল; পুনরাবৃত্তি প্রতিটি নোডের উভয় শিশুকে যুক্ত করে; যোগদানটি একক তালিকায় স্তরগুলি ধসে পড়ে।

আপনি যথাযথ আমদানি, 0 এবং নেতিবাচক যোগ করলে 120 অক্ষর:

import Data.Ratio
import Control.Monad
main=mapM_ print$0:(join(iterate(>>=(\x->[x+1,1/(1+1/x)]))[1%1])>>=(\x->[-x,x]))

আউটপুট

0 % 1
(-1) % 1
1 % 1
(-2) % 1
2 % 1
(-1) % 2
1 % 2
(-3) % 1
3 % 1
(-2) % 3
2 % 3
(-3) % 2
3 % 2
(-1) % 3
1 % 3
(-4) % 1
4 % 1
...

খালি স্লট আউটপুটিং? এটি স্বল্প স্বাদে :( আপনি আমাকে "সমস্ত ইতিবাচক যুক্তির তালিকায়" রেখেছিলেন


mapM_ print$fix((1%1:).(>>= \x->[x+1,1/(x+1)]))47 টি অক্ষর। haskellwiki থেকে । কোনও আমদানি ছাড়াই, হেস্কেল.আর.গুজে "চেষ্টা করে দেখুন" REPL (ভাল, mapM_ printঅংশটি ছাড়াই ...)
নেস

1

পিএইচপি 105 বাইট

দ্রষ্টব্য: সঠিকভাবে চালানোর জন্য এই কোডটি আইসো -8859-1 (আনসি) হিসাবে সংরক্ষণ করতে হবে। ডিফল্টরূপে সমস্ত ইনপুট utf8 এ এনকোড করে এমন অনলাইন ইন্টারলিটার (যেমন আইডোন হিসাবে) ভুল আউটপুট উত্পন্ন করে।

<?for($f=µ;$i++<$j*$j||++$j%2||(--$$f?$$f--:$f^=C);)echo"$i: ",$i==$j*$j?$j%2?$x=++$ö.~Ð.++$µ:"-$x":0,~õ;

জর্জি ক্যান্টরের গণনা ব্যবহার করা (+/- মানগুলির জন্য কিছুটা সংশোধিত)।

উপরের কোডটি চালাতে আপনার যদি সমস্যা হয় (সম্ভবত বিজ্ঞপ্তির বার্তাগুলির অত্যধিক পরিমাণের কারণে), এটি পরিবর্তে (107 বাইট) ব্যবহার করুন:

<?for($f=µ;$i++<$j*$j||++$j%2||(--$$f?$$f--:$f^=C);)echo"$i: ",$i==$j*$j?$j%2?$x=++$ö.'/'.++$µ:"-$x":0,'
';

1
আমি এই কোডটি দিয়ে রান-টাইম ত্রুটিগুলি পাই (এতে কিছু অদ্ভুত অক্ষর রয়েছে বলে মনে হয়; যেমন, "$ ö। ~ Ð।")।
মাঝামাঝি

আইডিয়োনে বলুন, আপনি কি সমাধান করতে পারেন যে এই সমাধানটি কাজ করে? আমি ত্রুটিগুলিও পেয়েছি: আদর্শ one.com/ru1fo
মেল্লামোকব

অনেকগুলি নোটিশ বার্তা উত্পন্ন হওয়ার সময় আইডিয়োন ত্রুটিযুক্ত বলে মনে হচ্ছে: ite Ð ('/' এর সমান) এবং ~ õ ("\ n" এর সমান) উভয়ই প্রতিটি পুনরাবৃত্তিতে একটি বিজ্ঞপ্তি উত্পন্ন করবে। অবশ্যই, যদি আপনার বিজ্ঞপ্তি বন্ধ থাকে তবে এটি কোনও সমস্যা নয়। উভয়ই প্রতিস্থাপিত (107 বাইট) সহ একটি পেস্ট: আদর্শ one.com/lFUbl
প্রিমো

আমি সবেমাত্র লক্ষ্য করেছি যে আইডিয়নের পিএইচপি ব্যাখ্যামূলক ভুল আউটপুট উত্পন্ন করে। আপনি যদি স্থানীয়ভাবে কোডটি চালান, আপনি দেখতে পাবেন যে এটি সঠিক। অথবা, আপনি এটি একটি বৈধ পিএইচপি ব্যাখ্যামূলক, যেমন অ্যানার্চি গল্ফের পারফরম্যান্স চেকার দিয়ে পরীক্ষা করতে পারেন: golf.shinh.org/checker.html (এটি একটি ফাইলে সংরক্ষণ করুন এবং আপলোড করুন)
প্রিমো

আমি যখন আপনার সংশোধিত কোডটি এএনএসআই এনকোডিং সহ কোনও ফাইলে সংরক্ষণ করি তখন এটি অ্যানার্চি গল্ফ ইন্টারপ্রেটারে চলে। তবে, এখন অন্যরকম সমস্যা রয়েছে: এটি তালিকায় "কোনও শূন্য-যুক্তিযুক্ত সংখ্যা কখনও দু'বার প্রদর্শিত হওয়া উচিত নয়" এই প্রয়োজনীয়তা লঙ্ঘন করে । প্রকৃতপক্ষে, কোডটি প্রতিটি যুক্তিযুক্ত সীমাহীনভাবে বহুবার তালিকাভুক্ত করে; যেমন 1/1, 2/2, 3/3, ... সব একই মূলদ ইত্যাদি, এবং 1/2 একইভাবে জন্য, 2/4, 3/6, ...,
মাঝামাঝি

0

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

a=b=p=1;do for i=(p-1)^2+1:p^2-1 printf("%d: 0\n",i)end
printf("%d: %d/%d\n",p^2,a,b)
a=-a;if a>0do if b==1 b=a+1;a=1;else a++;b--;end until 1==gcd(a,b)end
p++;until 0

সমাধানটি খুব পরিশীলিত নয়, এটি যুক্তিযুক্ত সংখ্যার "কার্পেট" এর কেবল একটি সাধারণ তির্যক ট্র্যাভারসাল, সরল করা যায় এমন সমস্ত ভগ্নাংশকে বর্জন করে। ধনাত্মক সংখ্যার পরে a/b, এর ক্রমিকটি -a/bপরবর্তী ক্রমটি আগে চলে যাওয়ার আগে সর্বদা মুদ্রিত হয়।

সমস্ত ধনাত্মক যুক্তির তির্যক ক্রান্তীয়

যেহেতু সমস্ত ধনাত্মক সরল ভগ্নাংশ মুদ্রণ করা হবে এবং সেগুলির বিপরীতে স্বাক্ষরিত ভগ্নাংশগুলি মুদ্রিত হবে এবং দুটি ভিন্ন সরল ভগ্নাংশের একই মান পাওয়া সম্ভব নয়, সুতরাং প্রতিটি শূন্য-যুক্তিযুক্ত সংখ্যা ঠিক একবার মুদ্রিত হবে।

Degolfed:

a=b=p=1
do
    for i=(p-1)^2+1:p^2-1
        printf("%d: 0\n",i)         # p=2,3,4: 1..3,5..8,10..15
    end
    printf("%d: %d/%d\n", p^2,a,b); # p=2,3,4: 4,9,16
    a=-a;
    if a>0                          # the rule is: after a/b, a>0 output -a/b
        do
            if b==1 b=a+1;a=1; else a++;b--; end
        until 1==gcd(a,b)
    end
    p++;
until 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.