এই সেট একটি প্রাকৃতিক সংখ্যা প্রতিনিধিত্ব করে?


26

সেট তত্ত্ব, প্রাকৃতিক সংখ্যার N={0,1,2,3,...} সাধারণত যেমন এনকোডেড থাকে বিশুদ্ধ সেট সেট যা শুধুমাত্র ফাঁকা সেট বা অন্যান্য সেটের যে বিশুদ্ধ থাকতে যে। তবে, সমস্ত খাঁটি সেট প্রাকৃতিক সংখ্যা উপস্থাপন করে না। এই চ্যালেঞ্জটি কোনও স্থিত খাঁটি সেটটি প্রাকৃতিক সংখ্যার এনকোডিং উপস্থাপন করে কিনা তা নির্ধারণের বিষয়ে।

প্রাকৃতিক সংখ্যার এনকোডিং নিম্নলিখিত পদ্ধতিতে 1 :

  • : জিরো খালি সেট Set(0)={}
  • একটি সংখ্যার জন্য n>0 : Set(n)=Set(n1){Set(n1)}

সুতরাং, প্রথম কয়েকটি প্রাকৃতিক সংখ্যার এনকোডিংগুলি

  • 0{}
  • 1{0}{{}}
  • 2{0,1}{{},{{}}}
  • 3{0,1,2}{{},{{}},{{},{{}}}}
  • 4{0,1,2,3}{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}

কাজটি

  • একটি খাঁটি সেট উপস্থাপন করে একটি স্ট্রিং দেওয়া, উপরোক্ত নির্মাণ অনুযায়ী এই সেটটি একটি প্রাকৃতিক সংখ্যা এনকোড করে কিনা তা নির্ধারণ করুন।
  • দ্রষ্টব্য, তবে, যে সেটগুলির উপাদানগুলি অর্ডার করা হয় না, তাই এর একমাত্র বৈধ উপস্থাপনা নয় যেমন the একই সেটটি উপস্থাপন করে।{{},{{}},{{},{{}}}}3{{{}},{},{{{}},{}}}
  • আপনি এই ব্যবহার করতে [], ()বা <>পরিবর্তে {}
  • আপনি ধরে নিতে পারেন সেটগুলি ,বিভাজক হিসাবে দেওয়া হয়েছে ।
  • আপনি ধরে নিতে পারেন ইনপুটটিতে কোনও সদৃশ উপাদান থাকবে না, উদাহরণস্বরূপ {{},{}}কোনও বৈধ ইনপুট নয় এবং ইনপুটটি সুগঠিত যেমন, না {{},, {,{}}বা অনুরূপ।

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

সত্য:

{}
{{}}
{{},{{}}}
{{{}},{}}
{{},{{}},{{},{{}}}}
{{{},{{}}},{},{{}}}
{{{{}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
{{{{{}},{}},{{}},{}},{{}},{},{{},{{}}}}
{{},{{}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{{}},{}},{{},{{}},{{},{{}}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}

মিথ্যা:

{{{}}}
{{{{}}}}
{{{{}},{}}}
{{},{{}},{{{}}}}
{{{},{{}}},{{}}}
{{{{{}}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{{}}}}}
{{{{{}},{}},{{{}}},{}},{{}},{},{{},{{}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}

সম্পর্কিত: প্রাকৃতিক নির্মাণ (আউটপুট একটি প্রদত্ত প্রাকৃতিক সংখ্যা এনকোডিং সেট।)
1 দেখুন https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers


13
পরীক্ষার কেসগুলি একটি (এখনও) নিরবচ্ছিন্ন এশালংয়ের কোনও প্রোগ্রামের মতো দেখায় :)
গ্যালেন ইভানভ

2
ইনপুটটি স্ট্রিংয়ের পরিবর্তে কোনও ডেটা স্ট্রাকচার (নেস্টেড তালিকা) হতে পারে?
এনজিএন

3
আমি ভেবেছিলাম এটি একটি মুহুর্তের জন্য ব্রেইন-ফ্ল্যাঙ্ক
বেলহেনিক্স

5
@ngn না, ইনপুটটির স্ট্রিং হওয়া দরকার।
লাইকনি

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

উত্তর:


11

জাভাস্ক্রিপ্ট (নোড.জেএস) , 53 48 44 বাইট

f=a=>(a=eval(a)).every(e=>a[e.length]&&f(e))

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


!e[a.length-1]3 বাইট সংরক্ষণ করা উচিত
আর্নল্ড

1
@ আরনাউল্ড বা আরও ভাল, a[e.length]&&5 বাইটের জন্য!
নীল

@ জোকিং উগ, আমি কেবলমাত্র আরনাউল্ড অনুলিপি করেছি ... স্ট্রিং ইনপুটটির জন্য 14 বাইট খরচ হয় :-(
নীল

অবশ্যই, g=(A,a=eval(A))=>a.every(e=>a[e.length]&&g(e))কাজ করবে?
ক্রিটিকি লিথোস

@ কউসক্যাক আহ, সুন্দর, এটি আসলে 4 বাইট সংরক্ষণ করে, ধন্যবাদ!
নিল

6

পাইথন 3 , 69 58 44 বাইট

11 বাইট আউটগলফার এরিক ধন্যবাদ।

মিঃ এক্সকোডারকে 14 বাইট ধন্যবাদ।

f=lambda s:all(len(e)<len(s)*f(e)for e in s)

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


@ মিঃ এক্সকোডারটি সম্পন্ন করেছেন
লিকি নুন

ওহ, ভাল উন্নতি!
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এবং তারপরে আমি এখন বুঝতে পারি যে এটি নীলের উত্তর হিসাবে একই ... তাই প্রযুক্তিগতভাবে নীল আমাকে পরাজিত করেছে
লিকি নুন

5

ওল্ফ্রাম ভাষা (গণিত) , 60 59 বাইট

E!=(If[Sort@#===Range[t=Tr[1^#]]-1,t,E]&//@ToExpression@#)&

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

এই সমাধানের মূলটি হ'ল ফাংশন

If[Sort@#===Range[t=Tr[1^#]]-1,t,E]&

যা {0,1,2,...,n-1}কোনও ক্রমের ফর্মের একটি তালিকা আউটপুটে nরূপান্তর করে (বিশেষত, এটি রূপান্তর {}করে 0) এবং অন্য যে কোনও কিছুকে আসল সংখ্যায় রূপান্তর করে E

এই ফাংশন কল করুন f। একটি ইনপুট দেওয়া যেমন "{{{}},{}}", আমরা নিম্নলিখিতটি করি:

  1. স্ট্রিংটিকে ম্যাথামেটিকা ​​এক্সপ্রেশনে রূপান্তর করুন।
  2. fপেয়ে প্রতিটি স্তরে আবেদন করুন f[{f[{f[{}]}], f[{}]}]
  3. সকলের মূল্যায়ন করা fএকটি ইনপুট প্রতিনিধিত্ব করে এর জন্য একটি প্রাকৃতিক সংখ্যা উত্পন্ন করবে। উদাহরণস্বরূপ, f[{f[{f[{}]}], f[{}]}]= f[{f[{0}], 0}]= f[{1, 0}]= 2। অন্য কিছু উত্পাদন করবে E
  4. ফলাফলটি যদি প্রাকৃতিক সংখ্যা হয় কিনা তা পরীক্ষা করে আমরা পরীক্ষা করে দেখি E

3

ব্র্যাচল্যাগ (ভি 2), 9 বাইট

↰ᵐo.t~k|Ė

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

জন্য যথারীতি এটি একটি সম্পূর্ণ প্রোগ্রাম। বর্গাকার বন্ধনী ব্যবহার করে স্ট্যান্ডার্ড ইনপুট থেকে ইনপুট। true.বনাম হিসাবে মান আউটপুট আউটপুট false.

ব্যাখ্যা

যদিও আমি উপরে বলেছি যে এটি একটি সম্পূর্ণ প্রোগ্রাম, এটি আসলে এটির চেয়ে আরও আকর্ষণীয়; এটি একটি সম্পূর্ণ প্রোগ্রাম এবং একটি ফাংশন উভয়ই । যখন পূর্ণ প্রোগ্রাম হিসাবে ব্যবহার করা হয়, true.সেটটি প্রাকৃতিক সংখ্যা, বা false.এটি না থাকলে প্রিন্ট করে । যখন একটি ফাংশন হিসাবে ব্যবহৃত হয়, এটি একটি প্রাকৃতিক সংখ্যাকে "সাধারণকরণ" করে (অর্থাত্ এটির সমস্ত উপাদানকে স্বাভাবিক করে তোলে এবং মান অনুসারে সাজায়; এই প্রোগ্রামটি অভ্যন্তরীণভাবে তালিকাগুলি সেট করে না, ব্যবহার করে), বা "একটি ব্যতিক্রম নিক্ষেপ করে" (আসলে এটি একটি ব্যর্থতা, এটি হিসাবে যদি প্রলোগ হয়) যদি ইনপুটটি কোনও প্রাকৃতিক সংখ্যা না হয়।

সম্পূর্ণ প্রোগ্রামের আচরণটি ব্যাখ্যা করা যথেষ্ট সহজ: এটি ব্র্যাকল্যাগের সম্পূর্ণ প্রোগ্রামগুলির চিকিত্সার সাথে সম্পূর্ণরূপে অন্তর্নিহিত যা I / O নির্দেশাবলী অন্তর্ভুক্ত করে না। প্রশ্নের মধ্যে থাকা আচরণটি হ'ল "ফাংশনটি পরিচালনা করুন, স্ট্যান্ডার্ড ইনপুট থেকে এটির ইনপুট নেবে এবং জোর দেওয়া যে এর আউটপুটটি প্রথম কমান্ড-লাইন আর্গুমেন্টের দেওয়া বর্ণনার সাথে মেলে; যদি দৃ the় ব্যর্থতা বা প্রোগ্রাম ব্যতিক্রম ছুঁড়ে, মুদ্রণ করুন false., অন্যথায় মুদ্রণ করুন true." । এই ক্ষেত্রে, কমান্ড-লাইন আর্গুমেন্ট অনুপস্থিত (যেমন "কিছু যায়"), সুতরাং ফাংশনটির ব্যতিক্রম / না-ব্যতিক্রম আচরণ আউটপুট দেয়।

ফাংশন আচরণ হিসাবে:

↰ᵐo.t~k|Ė
↰ᵐ          Map a recursive call to this function over the list
  o         Sort the list
   .   |    Assert that the following operation need not change the list:
    t         Take the last (i.e. greatest) element of the list
     ~k       Append an arbitrary element to the resulting list
   .   |    Output the unchanged list
       |    Exception handler: if the above threw an exception,
        Ė     Assert that the input is empty, and output an empty list

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

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

ফাংশনটি এইভাবে চারটি প্রধান অংশ রয়েছে। ↰ᵐপ্রতিটি উপাদান একটি প্রাকৃতিক সংখ্যা এবং এটি প্রতিটি উপাদানকে একটি সাধারণ আকারে রূপান্তরিত করে তা নিশ্চিত করে তা পুনরাবৃত্ত কল is oসংখ্যাটি নিজেই স্বাভাবিক করে তোলে (এর উপাদানগুলি ইতিমধ্যে স্বাভাবিক হয়ে গেছে, তাই আমাদের যা করতে হবে তা এটি বাছাই করা)। তারপরে .t~k|এটি নিশ্চিত করে যে বৃহত্তম উপাদান এবং অন্যান্য উপাদানগুলি একই checking একটি খালি তালিকায় (অর্থাত্ 0) একটি শেষ উপাদান নেই, সুতরাং এটির সাথে দৃ failure় ব্যর্থতা পাবেন t; এই ক্ষেত্রে পরিচালনা, কেস যেখানে ইনপুট তালিকা খালি মধ্যে একটি সুনির্দিষ্ট ফলব্যাক দান মাধ্যমে।


2

কে (এনএনজি / কে) , 26 24 27 বাইট

~^{$[#(!#x)^o'x;0N;#x]}@`j@

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

ইনপুটটি একটি জেসন স্ট্রিংটি পার্স করেছে `j@(এনএনজি / কে-তে নির্দিষ্ট সিনট্যাক্স)

{ }যুক্তি সহ একটি পুনরাবৃত্ত ফাংশন x। এটি সেট দ্বারা প্রতিনিধিত্ব করা প্রাকৃতিক সংখ্যাটি x, বা 0Nযদি এটির প্রতিনিধিত্ব না করে তবে নাল ( ) প্রদান করে।

$[ ; ; ]অন্যথায় যদি হয়। 0 টি মিথ্যা, অন্যান্য পূর্ণসংখ্যা সত্য

!#xপূর্ণসংখ্যা 0 (সহ) থেকে দৈর্ঘ্য x(একচেটিয়া) পর্যন্ত

^ ছাড়া

o'xoপ্রতিটি ( ') উপাদানের উপর পুনরাবৃত্তি ( )x

# লম্বা

^ নাল?

~ না

@যাতে একটি ডামি গত ক্রিয়া হিসাবে কাজ করে ~এবং ^সঙ্গে স্থিরীকৃত পেতে { }এটা প্রয়োগ করা হচ্ছে পরিবর্তে



0

জাপট , 9 বাইট

নীল এর জেএস সমাধান বন্দরের । আপনি যদি এইটিকে উজ্জীবিত করেন তবে দয়া করে এটি উত্সাহ দিন।

e@Ê>XÊ©ßX

এটি ব্যবহার করে দেখুন বা সমস্ত পরীক্ষার কেস চালান

              :Implicit input of array U
e             :Does every element in U return true
 @            :When passed through the following function as X
  Ê           :Length of U
   >          :Greater than
    XÊ        :Length of X
      ©       :Logical AND with
       ßX     :A recursive call of the programme with X passed as the new value of U


0

জেলি , 8 বাইট

߀Ṣ
ÇṖƤƑ

যেহেতু ইনপুটটি স্ট্রিং হতে হবে, এই জমাটি কেবলমাত্র একটি সম্পূর্ণ প্রোগ্রাম হিসাবে বৈধ।

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

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

߀Ṣ   Helper link. Argument: A (array)

߀    Recursively map the helper link over A.
  Ṣ   Sort the result.

এটি সম্পূর্ণরূপে বাছাই করা অ্যারে সমন্বিত ইনপুটটির একটি স্বতন্ত্র প্রতিনিধিত্ব করে।

ÇṖƤƑ  Main link. Argument: A (array)

Ç     Call the helper link to canonicalize the array.
   Ƒ  Fixed; call the link to the left and test if it returns its argument unchanged.
 ṖƤ       Pop prefix; for each non-empty prefix of the result, remove its last element.

0

জেলি , 7 বাইট

Ẉ<La߀Ạ

এটি লিকি নুনের পাইথন উত্তরের একটি বন্দর ।

যেহেতু ইনপুটটি স্ট্রিং হতে হবে, এই জমাটি কেবলমাত্র একটি সম্পূর্ণ প্রোগ্রাম হিসাবে বৈধ।

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

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

Ẉ<La߀Ạ  Main link. Argument: A (array)

Ẉ        Width; compute the length of A's elements.
  L      Yield the length of A.
 <       Compare them, yielding an array of Booleans.
    ߀   Recursively map the main link over A.
   a     Take the logical AND of the Booleans and the results of the map.
      Ạ  All; yield 1 if and only if all ANDs yielded 1.

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