ফিসিল নাম্বার


47

ওইআইএস-এর বিবর্তনে কাজ করার সময় আমি এই সিকোয়েন্সটি পেয়েছি তবে এটি উত্তর হিসাবে পোস্ট করার মত আর কখনও পাইনি। ম্যাথামেটিকায় একটি রেফারেন্স বাস্তবায়ন লেখার পরে, আমি ভেবেছিলাম যদিও এটি একটি পৃথক চ্যালেঞ্জ হিসাবে করা মজাদার অনুশীলন, তাই আমরা এখানে যাই।

আসুন একটি সংখ্যার বিভাজন চুল্লি তৈরি করুন! একটি ধনাত্মক পূর্ণসংখ্যা বিবেচনা করুন N। উদাহরণ হিসাবে, আমরা তাকান করব 24। এই সংখ্যাটি বিভক্ত করতে, আমাদের সংখ্যার ধারাবাহিক ধনাত্মক সংখ্যার সর্বাধিক সংখ্যক সন্ধান করতে হবে N। এই ক্ষেত্রে, এটি 7 + 8 + 9 = 24। সুতরাং আমরা 24তিনটি নতুন সংখ্যায় বিভক্ত করেছি । তবে চেইন প্রতিক্রিয়া ছাড়াই এটি বিভাজন চুল্লির বেশি হবে না। সুতরাং আসুন পুনরাবৃত্তভাবে এই উপাদানগুলির জন্য প্রক্রিয়া পুনরাবৃত্তি:

       24
       /|\
      / | \
     /  |  \
    7   8   9
   / \     /|\
  3   4   / | \
 / \     /  |  \
1   2   2   3   4
           / \
          1   2

লক্ষ্য করুন যে আমরা যখনই সংখ্যাটি ছোট ছোট টানা পূর্ণসংখ্যায় বিভক্ত করতে না পারি তখন আমরা প্রক্রিয়াটি থামিয়ে দিই। এছাড়াও মনে রাখবেন আমরা লিখিত আছে পারে 9যেমন 4 + 5, কিন্তু 2 + 3 + 4আরো উপাদান আছে। বিদারণ সংখ্যা এর Nএখন সহ এই প্রক্রিয়া, প্রাপ্ত পূর্ণসংখ্যার সংখ্যা হিসেবে সংজ্ঞায়িত করা হয় Nনিজেই। উপরের গাছটি 13 টি নোড আছে, তাই F(24) = 13

এই ক্রমটি হ'ল OEIS এন্ট্রি A256504

প্রথম 40 টি শর্তাবলী, থেকে শুরু N = 1হয়

1, 1, 3, 1, 5, 6, 5, 1, 6, 7, 12, 10, 12, 11, 12, 1, 8, 16, 14, 17, 18, 18,
23, 13, 21, 18, 22, 23, 24, 19, 14, 1, 22, 20, 23, 24, 31, 27, 25, 26

প্রথম 1000 পদগুলি এই পেস্টবিনে পাওয়া যাবে ।

চ্যালেঞ্জ

ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে N, এর ফিশন সংখ্যা নির্ধারণ করুন F(N)। (সুতরাং আপনাকে 0ওইআইএস-এ তালিকাভুক্ত শীর্ষস্থানীয় আবরণ দেওয়ার দরকার নেই ।)

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

বোনাস প্রশ্ন: আপনি এই ক্রমের কোনও আকর্ষণীয় বৈশিষ্ট্য খুঁজে পেতে পারেন?


আমি লক্ষ্য করেছি যে ওইআইএসের এন = 34 এ ত্রুটি রয়েছে বলে মনে হচ্ছে: এন = 32 থেকে শুরু করে, এটি (বর্তমানে) 1, 22, 22, 23, 24, 31 তালিকার 1, 22, 20, 23, 24 এর পরিবর্তে তালিকাবদ্ধ করেছে 31.
mathmandan

1
@ মাঠমান্ডন ভাল ক্যাচ, আমি সম্ভবত একটি সংশোধন প্রস্তাব করব (প্রথম চিত্র সহ)
মার্টিন ইন্ডার


@ মাঠমান্ডান এফওয়াইআই, আমি এখনই ক্রম এবং উদাহরণটি সংশোধন করেছি এবং আমার রেফারেন্স বাস্তবায়ন এবং প্রথম 10 কে পদ যুক্ত করেছি।
মার্টিন ইন্ডার

ভাল লাগছে! আপনার কাজের জন্য ধন্যবাদ!
mathmandan

উত্তর:


16

পাইথ, 23 22 21 বাইট

Lh&lJfqbsT.:tUb)syMeJ

এটি একটি পুনরাবৃত্তি ফাংশন সংজ্ঞায়িত করে y। অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

L                      define a function y(b): return ...
            tUb          the list [1, 2, ..., b-1]
          .:   )         generate all consecutive sub-sequences
     f                   filter for sub-sequences T, which satisfy:
      qbsT                   b == sum(T)
    J                    and store them in J

                         return 
   lJ                        len(J)
  &                        and (if len(J) == 0 then 0 else ...)
                    eJ       last element of J (=longest sub-sequence) 
                  yM         recursive calls for all these numbers
                 s           sum
 h                         incremented by one (counting the current node)

52

বিদারণ , 1328 989 887 797 বাইট

এই উত্তরটি অযৌক্তিকভাবে দীর্ঘ (আমি আশা করি আমরা ছিল একটি বিট কলাপসিবল অঞ্চলে ) ... ভুলবেন না দয়া করে এই গত স্ক্রোল করুন এবং অন্যান্য উত্তর কিছু ভালোবাসা প্রদর্শন!

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

সুতরাং আমি তোমাকে উপস্থাপন করলাম, মনস্ট্রোসিটি:

 R'0@+\
/  Y@</ /[@ Y]_L
[? % \  / \ J
   \$@  [Z/;[{+++++++++L
UR+++++++++>/;
9\   ;    7A9
SQS  {+L  /$     \/\/\/\/\/   5/ @  [~ &@[S\/ \  D /8/
~4X /A@[  %5                   /; &    K  } [S//~KSA /
  3    \  A$@S  S\/  \/\/\/   \/>\ /S]@A  /  \ { +X
W7           X  X    /> \      +\ A\ /   \ /6~@/ \/
        /   ~A\;     +;\      /@
    ZX [K    / {/  / @  @ }  \ X @
       \AS   </      \V /    }SZS S/
         X   ;;@\   /;X  /> \ ; X X
 ;       \@+  >/ }$S SZS\+;    //\V
           / \\  /\; X X @  @  \~K{
           \0X /     /~/V\V /   0W//
    \        Z      [K \  //\
W       /MJ $$\\ /\7\A  /;7/\/ /
       4}K~@\ &]    @\  3/\
 /     \{   }$A/1 2  }Y~K <\
[{/\  ;@\@  /   \@<+@^   1;}++@S68
@\ <\    2        ;   \    /
$  ;}++ +++++++L
%@A{/
M  \@+>/
~     @
SNR'0YK
  \  A!/

এটি প্রত্যাশা করে যে ইনপুটটিতে কোনও ট্রেলিং নিউলাইন নেই, তাই আপনি এটি পছন্দ করতে চাইতে পারেন echo -n 120 | ./Fission oeis256504.fis

লেআউটটি সম্ভবত এখনও আরও দক্ষ হতে পারে, তাই আমি মনে করি এখানে উন্নতির জন্য আরও অনেক জায়গা রয়েছে (উদাহরণস্বরূপ, এতে 911 581 461 374 স্পেস রয়েছে)।

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

g++ -g --std=c++11 *.cpp -o Fission

মজাদার ঘটনা: এই প্রোগ্রামটি প্রায় প্রতিটি উপাদান ফিশনকে #(র্যান্ডম মিরর), :(অর্ধ মিরর), -বা |(প্লেইন মিরর) ব্যতীত "(প্রিন্ট মোড) ছাড়াই ব্যবহার করে।

পৃথিবীতে কি?

সতর্কতা: এটি বেশ দীর্ঘ হবে ... আমি ধরে নিচ্ছি যে ফিশন কীভাবে কাজ করে এবং কীভাবে এটি এতে প্রোগ্রাম করতে পারে সে সম্পর্কে আপনি সত্যই আগ্রহী। কারণ আপনি যদি না হন তবে আমি কীভাবে সম্ভবত এটি সংক্ষেপ করতে পারি তা নিশ্চিত নই। (পরবর্তী অনুচ্ছেদে যদিও ভাষার সাধারণ বিবরণ দেওয়া আছে।)

বিভাজন একটি দ্বি-মাত্রিক প্রোগ্রামিং ভাষা, যেখানে ডেটা এবং নিয়ন্ত্রণ প্রবাহ উভয়ই গ্রিডের মধ্য দিয়ে অণু দ্বারা প্রতিনিধিত্ব করা হয় । আপনি যদি আগে মার্বেলসটি দেখে বা ব্যবহার করেন তবে ধারণাটি অস্পষ্টভাবে পরিচিত হওয়া উচিত। প্রতিটি পরমাণুর দুটি পূর্ণসংখ্যা বৈশিষ্ট্য রয়েছে: একটি অ-নেতিবাচক ভর এবং একটি স্বেচ্ছাসেবী শক্তি। ভর যদি কখনও নেতিবাচক হয়ে যায় তবে গ্রিড থেকে পরমাণু অপসারণ করা হয়। বেশিরভাগ ক্ষেত্রে আপনি ভরকে পরমাণুর "মান" এবং শক্তিকে কিছু ধরণের মেটা-সম্পত্তি হিসাবে বিবেচনা করতে পারেন যা পরমাণুর প্রবাহ নির্ধারণের জন্য বিভিন্ন উপাদান দ্বারা ব্যবহৃত হয় (অর্থাত্ বেশিরভাগ ধরণের স্যুইচের চিহ্নের উপর নির্ভর করে) শক্তি). আমি (m,E)যখন প্রয়োজন হবে তখন দ্বারা পরমাণুগুলি চিহ্নিত করব । প্রোগ্রামের শুরুতে, গ্রিডটি একটি গুচ্ছ দিয়ে শুরু হয়(1,0)চারটি উপাদানগুলির যে কোনও স্থানে আপনি যেখানেই রেখেছেন সেখান থেকে পরমাণুগুলি UDLR(যেখানে অক্ষরটি নির্দেশ করে যে দিকে পরমাণুটি প্রাথমিকভাবে চলছিল)। এরপরে বোর্ডটি পুরো গুচ্ছ উপাদানগুলির সাথে জনবহুল হয় যা পরমাণুর ভর ও শক্তি পরিবর্তন করে, তাদের দিক পরিবর্তন করে বা আরও অত্যাধুনিক জিনিসগুলি করে। একটি সম্পূর্ণ তালিকার জন্য esolangs পৃষ্ঠাটি দেখুন , তবে আমি এই ব্যাখ্যায় তাদের বেশিরভাগকে পরিচয় করিয়ে দেব। আরেকটি গুরুত্বপূর্ণ পয়েন্ট (যা প্রোগ্রামটি বেশ কয়েকবার ব্যবহার করে) হ'ল গ্রিডটি টোরয়েডাল: একটি পরমাণু যা কোনও দিককে আঘাত করে তার বিপরীত দিকে উপস্থিত হয়, একই দিকে চলে।

আমি প্রোগ্রামটি কয়েকটি ছোট অংশে লিখেছি এবং শেষে তাদের একত্রিত করেছি, যাতে আমি ব্যাখ্যাটি দিয়ে যাব।

atoi

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

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

     ;
 R'0@+\
/  Y@</ /[@ Y]_L
[? % \  / \ J 
   \$@  [Z/;[{+++++++++L
UR+++++++++>/;
           O

ফিশনের দুটি গুরুত্বপূর্ণ উপাদান হ'ল ফিশন এবং ফিউশন রিঅ্যাক্টর। ফিশন রিঅ্যাক্টরগুলি হ'ল V^<>(উপরের কোডগুলি ব্যবহার করে <এবং >)। একটি বিভাজন চুল্লী একটি পরমাণু (চরিত্রের পালকে প্রেরণ করে) এটি ডিফল্ট হিসাবে সংরক্ষণ করতে পারে (2,0)। যদি কোনও পরমাণু চরিত্রের শীর্ষকে আঘাত করে, তবে দুটি নতুন পরমাণু পক্ষগুলিতে প্রেরণ করা হবে। তাদের ভর সঞ্চিত ভর দ্বারা আগত ভরকে বিভক্ত করে নির্ধারিত হয় (অর্থাত্ ডিফল্ট হিসাবে অর্ধেক হওয়া) - বাম-বাম পরমাণু এই মানটি পায় এবং ডানদিকের পরমাণু ভরটির বাকী অংশটি পায় (অর্থাত্ বিচ্ছেদটিতে ভর সংরক্ষণ করা হয়) । উভয় বহির্গামী পরমাণুর মধ্যে আগত শক্তি বিয়োগ হবে minসঞ্চিত শক্তি এর অর্থ আমরা পাটিগণিতের জন্য বিভাজন বিক্রিয়াগুলি ব্যবহার করতে পারি - উভয় বিয়োগ এবং বিভাগের জন্য। যদি সাইট থেকে বিভাজন চুল্লিটি আঘাত করা হয় তবে পরমাণুটি কেবল তির্যকভাবে প্রতিবিম্বিত হয় এবং তারপরে চরিত্রের শীর্ষের দিকে অগ্রসর হয়।

ফিউশন রিঅ্যাক্টরগুলি হ'ল YA{}(উপরের কোডগুলি ব্যবহার করে Yএবং {)। তাদের ফাংশনটি অনুরূপ: তারা একটি পরমাণু (ডিফল্ট (1,0)) সঞ্চয় করতে পারে এবং শীর্ষ থেকে আঘাত করা হলে দুটি নতুন পরমাণু পাশগুলিতে প্রেরণ করা হবে। তবে, এই ক্ষেত্রে দুটি পরমাণু সমান হবে, সর্বদা আগত শক্তি বজায় রাখবে এবং সঞ্চিত ভর দ্বারা আগত ভরকে গুণ করবে lying এটি, ডিফল্টরূপে, ফিউশন রিঅ্যাক্টর কেবল তার শীর্ষকে আঘাত করে যে কোনও পরমাণুকে নকল করে। যখন চারদিক থেকে আঘাত লয় চুল্লি একটি বিট আরো জটিল আছেন: পরমাণু হল এছাড়াওকোনও পরমাণু বিপরীত দিকে আঘাত না করা পর্যন্ত সঞ্চিত (অন্য স্মৃতি থেকে স্বতন্ত্র)। যখন এটি ঘটে তখন শীর্ষের দিকের দিকে একটি নতুন পরমাণু প্রকাশিত হয় যার ভর এবং শক্তি দুটি পুরাতন পরমাণুর যোগফল। কোনও নতুন পরমাণু যদি একই দিকে হিট হয় তবে কোনও মিলিত পরমাণু বিপরীত দিকে পৌঁছানোর আগেই পুরানো পরমাণুটি সরানো হবে। সংযোজন এবং গুণ প্রয়োগ করতে ফিউশন রিঅ্যাক্টর ব্যবহার করা যেতে পারে।

আর একটি সহজ উপাদান যা আমি বেরিয়ে আসতে চাই তা হ'ল [এবং ]যা পরমাণুর দিকটি যথাক্রমে ডান এবং বামে সেট করে (আগত দিক নির্বিশেষে)। উল্লম্ব সমতুল্য M(ডাউন) এবং W(উপরে) কিন্তু সেগুলি atoiকোডের জন্য ব্যবহৃত হয় না । তাদের প্রাথমিক পরমাণু প্রকাশের পরেও UDLRকাজ করে WM][

যাইহোক, চলুন এখানে কোডটি দেখুন। প্রোগ্রামটি 5 টি পরমাণু দিয়ে শুরু হয়:

  • Rএবং Lনীচে কেবল (সাথে তাদের ভর বৃদ্ধি পেতে +) পরিণত (10,0)এবং তারপর একটি বিদারণ এবং একটি লয় চুল্লী সঞ্চিত যথাক্রমে। বেস -10 ইনপুট পার্স করতে আমরা এই চুল্লিগুলি ব্যবহার করব।
  • Lউপরের ডান কোণায় থাকা তার বর্তমান ভরের (সঙ্গে decremented পায় _) পরিণত (0,0)এবং লয় চুল্লী পাশ মধ্যে সংরক্ষিত হয় Y। এটি আমরা যে সংখ্যাটি পড়ছি তার উপর নজর রাখার জন্য - আমরা সংখ্যাগুলি পড়ার সাথে সাথে এটি ধীরে ধীরে বাড়িয়ে তুলব।
  • Rউপরের বাম কোণায় চরিত্র কোডে তার বর্তমান ভরের সেট পায় 0সঙ্গে (48) '0, তারপর ভর এবং শক্তি আনা হয় @এবং পরিশেষে ভর বৃদ্ধি সঙ্গে একবার +দিতে (1,48)। এরপরে এটি ডায়াগোনাল মিররগুলির সাথে পুনঃনির্দেশিত হয় \এবং /ফিশন চুল্লিটিতে সংরক্ষণ করা হয় be 48ASCII ইনপুটটিকে অঙ্কগুলির প্রকৃত মানগুলিতে রূপান্তর করতে আমরা বিয়োগের জন্য ব্যবহার করব । 1বিভাজন এড়াতে আমাদের ভরও বাড়াতে হয়েছিল 0
  • অবশেষে, Uনীচের বাম কোণে হ'ল যা গতিতে সমস্ত কিছু নির্ধারণ করে এবং প্রাথমিকভাবে কেবল নিয়ন্ত্রণ প্রবাহের জন্য ব্যবহৃত হয়।

ডান দিকে পুনঃনির্দেশিত হওয়ার পরে, নিয়ন্ত্রণ পরমাণু হিট ?। এটি ইনপুট উপাদান। এটি একটি অক্ষর পড়ে এবং পরমাণুর ভরকে পড়ুন ASCII মান এবং শক্তিতে সেট করে 0। আমরা যদি এর পরিবর্তে ইওএফটিকে আঘাত করি তবে শক্তি সেট হয়ে যাবে 1

পরমাণু চলতে থাকে এবং তারপরে আঘাত করে %। এটি একটি আয়না সুইচ। ধনাত্মক শক্তির জন্য, এটি /আয়নার মতো কাজ করে । তবে ইতিবাচক শক্তির জন্য এটি একটির মতো কাজ করে \(এবং শক্তিটি 1 দ্বারা হ্রাসও করে)। সুতরাং আমরা যখন অক্ষরগুলি পড়ছি তখন পরমাণু উপরের দিকে প্রতিবিম্বিত হবে এবং আমরা অক্ষরটি প্রক্রিয়া করতে পারি। তবে আমরা যখন ইনপুটটি দিয়ে এসেছি তখন পরমাণুটি নীচের দিকে প্রতিবিম্বিত হয় এবং ফলাফলটি পুনরুদ্ধার করতে আমরা বিভিন্ন যুক্তি প্রয়োগ করতে পারি। FYI, বিপরীত উপাদান হয় &

সুতরাং আমরা একটি পরমাণু আপ জন্য আপ চলিত আছে। আমরা প্রতিটি চরিত্রের জন্য যা করতে চাই তা হ'ল তার অঙ্কের মানটি পড়া, এটি আমাদের চলমান মোটে যোগ করুন এবং তারপরে পরবর্তী অঙ্কের জন্য প্রস্তুত করার জন্য সেই চলমান মোটকে 10 দিয়ে গুণ করুন।

অক্ষরের পরমাণুটি প্রথমে একটি (ডিফল্ট) ফিউশন রিঅ্যাক্টরটিকে হিট করে Y। এটি পরমাণুকে বিভক্ত করে এবং আমরা ইনপুট উপাদানটিতে ফিরে লুপ করতে এবং পরের অক্ষরটি পড়তে নিয়ন্ত্রণের পরমাণু হিসাবে বাম-বামে থাকা অনুলিপিটি ব্যবহার করি। ডানদিকে যাওয়া অনুলিপি প্রক্রিয়া করা হবে। আমরা যেখানে চরিত্রটি পড়েছি সেই ক্ষেত্রে বিবেচনা করুন 3। আমাদের পরমাণু হবে (51,0)। আমরা ভর এবং শক্তি এর সাথে অদলবদল করি @, যেমন আমরা পরবর্তী বিভাজন চুল্লিটির বিয়োগফলকে ব্যবহার করতে পারি। চুল্লিটি 48শক্তিকে বিয়োগ করে (ভর পরিবর্তন না করে), সুতরাং এটি দুটি কপি প্রেরণ করে (0,3)- শক্তিটি এখন আমাদের পড়া অঙ্কটির সাথে সামঞ্জস্য করে। উপরের অনুলিপিটি সহজেই বাতিল করা হয় ;(এমন উপাদান যা কেবলমাত্র সমস্ত আগত পরমাণু ধ্বংস করে)। আমরা ডাউনগিংয়ের অনুলিপি নিয়ে কাজ চালিয়ে যাব। আপনাকে এর মধ্য দিয়ে চলতে হবে/এবং \আয়না কিছুটা।

@শুধু লয় চুল্লী অদলবদল ভর এবং শক্তি আবার সামনে, এই ধরনের যে আমরা যুক্ত করতে হবে (3,0)আমাদের চলমান মোট Y। মনে রাখবেন যে চলমান মোটে নিজেই সর্বদা 0শক্তি থাকে।

এখন Jএক লাফ। এটি যা করে তা হ'ল যে কোনও আগত পরমাণুটিকে তার শক্তিতে এগিয়ে যায়। যদি এটি হয় 0তবে পরমাণুটি কেবল সোজাভাবে এগিয়ে চলেছে। যদি এটি 1একটি ঘর এড়িয়ে যায়, যদি এটি 2দুটি ঘর ছেড়ে যায় এবং আরও অনেক কিছু। শক্তি লাফিয়ে ব্যয় হয়, তাই পরমাণু সর্বদা শক্তি দিয়ে শেষ হয় 0। যেহেতু চলমান মোটের শূন্য শক্তি রয়েছে তাই আপাতত লাফটি উপেক্ষা করা হবে এবং পরমাণুটিকে ফিউশন রিঅ্যাক্টরে পুনঃনির্দেশিত করা হবে {যা এর ভরকে বহুগুণ করে 10। ডাউনগিংয়ের অনুলিপিটি বাতিল হয়ে যায় ;যখন আপগোং করা অনুলিপিটি Yনতুন চলমান মোট হিসাবে চুল্লিটিতে ফেরত দেওয়া হয় ।

উপরেরগুলি পুনরাবৃত্তি করতে থাকে (মজাদার পাইপলাইনযুক্ত পদ্ধতিতে যেখানে পূর্ববর্তীগুলি সম্পন্ন হওয়ার আগে নতুন অঙ্কগুলি প্রক্রিয়া করা হচ্ছে) যতক্ষণ না আমরা ইওএফ-তে আঘাত করি। এখন %পরমাণুটিকে নীচের দিকে প্রেরণ করবে। (0,1)চলমান মোট চুল্লী আঘাত করার আগে এই পরমাণুটিকে এখনই পরিণত করার ধারণাটি তৈরি করা হয়েছে যাতে ক) মোট প্রভাবিত হয় না (শূন্য ভর) এবং খ) আমরা 1উপরের দিকে ঝাঁপিয়ে পড়ার শক্তি পাই [। আমরা সহজেই শক্তির সাথে যত্ন নিতে পারি $, যা শক্তি বৃদ্ধি করে।

ইস্যুটি হ'ল ?আপনি যখন ইওএফ-তে আঘাত করছেন তখন ভর পুনরায় সেট করবেন না যাতে ভরটি এখনও সর্বশেষ অক্ষরের পড়ার মতো হবে এবং শক্তিটি হবে 0(কারণ %এতে 1পিছনে হ্রাস হয়েছে 0)। সুতরাং আমরা এই ভর থেকে মুক্তি পেতে চাই। এটি করার জন্য আমরা @আবারও ভর এবং শক্তি অদলবদল করি ।

আমি এই বিভাগে আপ শেষ হচ্ছে সামনে আরও একটি উপাদান পরিচয় করিয়ে দিতে প্রয়োজন: Z। এটি মূলত %বা হিসাবে একই &। পার্থক্যটি হ'ল এটি ইতিবাচক-শক্তি পরমাণুগুলি সরাসরি (শক্তি হ্রাস করার সময়) মধ্য দিয়ে যেতে দেয় এবং বামে 90 ডিগ্রিহীন-ধনাত্মক-শক্তি পরমাণুকে প্রতিফলিত করে। আমরা এটিকে পরমাণুর শক্তিটি অতিক্রম করে লুপিং দ্বারা ব্যবহার করতে পারি Z- শক্তি শেষ হওয়ার সাথে সাথে পরমাণু অপসারণ হয়ে লুপটি ছেড়ে যাবে। এই নিদর্শন:

/ \
[Z/

যেখানে শক্তি শূন্য হলে পরমাণু উপরের দিকে চলে যাবে। আমি এই প্যাটার্নটি প্রোগ্রামের অন্যান্য অংশগুলিতে এক আকারে বা অন্য কয়েকবার ব্যবহার করব।

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

সুতরাং এখন শক্তি দিয়ে 1, এই পরমাণুটি এড়িয়ে যাবে [এবং এতে লাফিয়ে যাবে /। এটি এটিকে একটি ফিশন চুল্লিতে প্রতিবিম্বিত করে যা আমরা 10 দ্বারা বিভক্ত করতে এবং আমাদের বহিরাগত গুণকে ঠিক করার জন্য প্রস্তুত করেছি। আবার, আমরা একটি অর্ধেকে ফেলে রেখে অন্যটিকে ;আউটপুট হিসাবে রাখি (এখানে উপস্থাপন করা হয় Oযার সাথে কেবল এটি সম্পর্কিত অক্ষরটি মুদ্রণ করবে এবং পরমাণুটিকে ধ্বংস করবে - পুরো প্রোগ্রামে আমরা পরিবর্তে অ্যাটমটি ব্যবহার করি)।

itoa

           /     \
input ->  [{/\  ;@
          @\ <\   
          $  ;}++ +++++++L
          %@A{/
          M  \@+>/
          ~     @
          SNR'0YK
            \  A!/

অবশ্যই, আমাদের ফলাফলটি আবার স্ট্রিংয়ে রূপান্তর করতে হবে এবং এটি মুদ্রণ করতে হবে। এই অংশটির জন্য এটিই। এটি ধরে নিয়েছে যে ইনপুটটি 10 ​​বা তার বেশি টিকের আগে আসে না, তবে সহজেই দেওয়া পুরো প্রোগ্রামে। এই বিটটি পুরো প্রোগ্রামের নীচে পাওয়া যাবে।

এই কোডটি একটি নতুন খুব শক্তিশালী ফিশন উপাদান: স্ট্যাক প্রবর্তন করে K। স্ট্যাক প্রাথমিকভাবে খালি। অ-নেতিবাচক শক্তির সাথে একটি পরমাণু যখন স্ট্যাকটিকে আঘাত করে, তখন পরমাণুটিকে কেবল স্ট্যাকের দিকে ঠেলে দেওয়া হয়। নেতিবাচক শক্তির সাথে একটি পরমাণু যখন স্ট্যাকটিকে আঘাত করে, তখন এর ভর এবং শক্তি স্ট্যাকের শীর্ষে (যা দ্বারা পপ করা হয়) পরমাণু দ্বারা প্রতিস্থাপিত হবে। যদি স্ট্যাকটি খালি থাকে তবে পরমাণুর দিকটি বিপরীত হয় এবং এর শক্তি ইতিবাচক হয়ে যায় (অর্থাত্ এটি বহুগুণ হয় -1)।

ঠিক আছে, আসল কোডে ফিরে আসুন। itoaস্নিপেটের ধারণাটি হ'ল বারবার পরবর্তী অঙ্কটির জন্য ইনপুট মডুলো 10 নেওয়া যখন পরবর্তী পুনরাবৃত্তির জন্য 10 দ্বারা ইনপুট ভাগ করে div এটি বিপরীত ক্রমে সমস্ত অঙ্ক উপার্জন করবে (কমপক্ষে তাত্পর্যপূর্ণ থেকে অত্যন্ত তাৎপর্যপূর্ণ পর্যন্ত)। অর্ডার ঠিক করার জন্য আমরা সমস্ত অঙ্কগুলি একটি স্ট্যাকের দিকে ঠেলা দিয়ে থাকি এবং শেষে তাদের মুদ্রণের জন্য একে একে একে পপ করে ফেলি।

কোডের উপরের অর্ধেকটি অঙ্কের গণনা করে: Lপ্লাসগুলি সহ একটি 10 ​​দেয় যা আমরা ক্লোন করে ফিশন এবং ফিউশন রিঅ্যাক্টারে ফিড করি যাতে আমরা বিভাজন করতে পারি এবং 10 দ্বারা গুণ করতে পারি লুপটি মূলত [উপরের বাম কোণায় শুরু হওয়ার পরে শুরু হয় । বর্তমান মানটি বিভক্ত: একটি অনুলিপি 10 দ্বারা বিভক্ত হয়, তারপরে 10 দ্বারা গুণিত হয় এবং একটি ফিশন রিঅ্যাক্টরে সংরক্ষণ করা হয়, যা শীর্ষে অন্য অনুলিপি দ্বারা আঘাত করা হয়। এই i % 10হিসাবে গণনা i - ((i/10) * 10)। আরও মনে রাখবেন যে Aবিভাগের পরে এবং গুণনের আগে মধ্যবর্তী ফলাফলকে বিভক্ত করে, যেমন আমরা i / 10পরবর্তী পুনরাবৃত্তিতে ফিড করতে পারি ।

%লুপ aborts একবার পুনরাবৃত্তির পরিবর্তনশীল 0. হিট যেহেতু এই হল বেশী বা কম একটি কাজের জন্য সময় লুপ, এই কোড would এমনকি মুদ্রণের জন্য কাজ 0(নেতৃস্থানীয় শূণ্যসমূহ অন্যথায় তৈরি ছাড়াই)। একবার লুপটি ছেড়ে গেলে আমরা স্ট্যাকটি খালি করতে চাই এবং অঙ্কগুলি মুদ্রণ করতে চাই। Sএর বিপরীত Z, সুতরাং এটি একটি স্যুইচ যা ডান থেকে 90 ডিগ্রি অ-ধনাত্মক শক্তি সহ একটি আগত পরমাণুকে প্রতিফলিত করবে। সুতরাং পরমাণুটি আসলে কোনও অঙ্কটি পপ অফ করতে Sসোজা থেকে সোজা থেকে প্রান্তের উপরে চলে যায় K( ~যা নিশ্চিত করে যে আগত পরমাণুর শক্তি আছে -1)। যে অঙ্ক দ্বারা মান বৃদ্ধি হয় 48সংশ্লিষ্ট অঙ্ক চরিত্রের হওয়া ASCII কোড পাওয়ার জন্য। এর Aসাথে একটি অনুলিপি মুদ্রণের জন্য অঙ্কটি বিভক্ত করে!এবং অন্যান্য অনুলিপিটি Yপরবর্তী অঙ্কের জন্য চুল্লিটিতে ফিড করুন । মুদ্রিত অনুলিপিটি স্ট্যাকের পরবর্তী ট্রিগার হিসাবে ব্যবহৃত হয়েছে (নোট করুন যে আয়নাগুলি এটিকে প্রান্তের চারপাশে Mবাম দিক থেকে আঘাত করতে প্রেরণ করে )।

যখন স্ট্যাকের খালি, Kপরমাণু প্রতিফলিত এবং তার শক্তি চালু হবে +1, এই ধরনের এটি সোজা মাধ্যমে প্রেরণ করা SNএকটি নতুন লাইন প্রিন্ট করে (কেবল এটি পরিষ্কার :)) এবং তারপরে পারমাণবিকটি R'0আবার দিকে ফিরে যায় Y। আশেপাশে আর কোনও পরমাণু নেই বলে এটি কখনই প্রকাশিত হবে না এবং প্রোগ্রামটি সমাপ্ত হবে।

বিভাজন সংখ্যা গণনা করা: ফ্রেমওয়ার্ক

আসুন প্রোগ্রামটির আসল মাংসে আসি। কোডটি মূলত আমার গাণিতিক রেফারেন্স প্রয়োগের একটি বন্দর:

fission[n_] := If[
  (div = 
    SelectFirst[
      Reverse@Divisors[2 n], 
      (OddQ@# == IntegerQ[n/#] 
       && n/# > (# - 1)/2) &
    ]
  ) == 1,
  1,
  1 + Total[fission /@ (Range@div + n/div - (div + 1)/2)]
]

divসর্বাধিক বিভাজনে পূর্ণসংখ্যার সংখ্যা কোথায় ।

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

এই ধারণার জন্য এখানে একটি কাঠামো দেওয়া হল:

                      +--- input goes in here
                      v 

                     SQS ---> compute div from n          D /8/
                     ~4X               |                /~KSA /
                       3               +----------->    { +X
initial trigger ---> W                               6~@/ \/
                              4                   
                     W        ^                     /
                              |              3
                     ^     generate range    |
                     |     from n and div  <-+----- S6
                     |         -then-      
                     +---- release new trigger

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

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

একবার কিউ খালি, ট্রিগার প্রতিফলিত হবে মাধ্যমে সোজা ক্ষণস্থায়ী Sএবং উপরের ডান দিকের কোণায়, যেখানে এটি থেকে কাউন্টার (চূড়ান্ত ফলাফল) প্রকাশ পুনরায় উপস্থিত হওয়া A, যা তারপর teleported হয় itoaমাধ্যমে 8

ফিশন নম্বর গণনা করা: লুপ বডি

সুতরাং কেবলমাত্র বাকি দুটি অংশটি গণনা করা divএবং সীমাটি তৈরি করা। কম্পিউটিং divএই অংশ:

 ;    
 {+L  /$     \/\/\/\/\/   5/ @  [~ &@[S\/ \
/A@[  %5                   /; &    K  } [S/
   \  A$@S  S\/  \/\/\/   \/>\ /S]@A  /  \ 
         X  X    /> \      +\ A\ /   \ /
    /   ~A\;     +;\      /@
ZX [K    / {/  / @  @ }  \ X @
   \AS   </      \V /    }SZS S/
     X   ;;@\   /;X  /> \ ; X X
     \@+  >/ }$S SZS\+;    //\V
       / \\  /\; X X @  @  \~K{
       \0X /     /~/V\V /   0W//
\        Z      [K \  //\
           \ /\7\A  /;7/\/

কিছুটা ধৈর্য নিয়ে নিজের জন্য ধাঁধা দেওয়ার জন্য আপনি সম্ভবত এখন যথেষ্ট পরিমাণে দেখেছেন। উচ্চ-স্তরের ভাঙ্গন এটি হ'ল: প্রথম 12 টি কলাম বা এর বিভাজনকারীদের একটি স্ট্রিম তৈরি করে 2n। পরবর্তী 10 কলামগুলি সন্তুষ্ট না করে এমনগুলি ফিল্টার করে OddQ@# == IntegerQ[n/#]। পরবর্তী 8 টি কলামগুলি সন্তুষ্ট না করে এমনগুলি ফিল্টার করে n/# > (# - 1)/2)। অবশেষে আমরা সমস্ত বৈধ বিভাজকগুলিকে একটি স্ট্যাকের দিকে ঠেলে দিই এবং একবার শেষ হয়ে গেলে আমরা পুরো স্ট্যাকটি ফিউশন রিঅ্যাক্টারে খালি করে ফেললাম (শেষ / বৃহত্তম বিভাজক ব্যতীত সমস্ত ওভাররাইট করে) এবং তারপরে ফলাফলটি প্রকাশ করি, তার শক্তিটি বাদ দিয়ে (যা ছিল না -অসমান্যতা পরীক্ষা করা থেকে জেরো)।

সেখানে প্রচুর ক্রেজি পাথ রয়েছে যা আসলে কিছুই করে না। মূলত, \/\/\/\/শীর্ষে পাগলামি ( 5গুলি এছাড়াও এর অংশ) এবং নীচের চারপাশে একটি পাথ (যা 7এস এর মধ্য দিয়ে যায় )। কিছু বাজে বর্ণের শর্তাদি মোকাবেলায় আমাকে এগুলি যুক্ত করতে হয়েছিল। বিদারণ একটি বিলম্ব উপাদান ব্যবহার করতে পারে ...

কোডটি থেকে নতুন পরিসীমা উত্পন্ন nএবং divএই হল:

 /MJ $$\
4}K~@\ &]    @\  3/\
\{   }$A/1 2  }Y~K <\
 \@  /   \@<+@^   1;}++@
  2        ;   \    /

আমরা প্রথমে গণনা করব n/div - (div + 1)/2(উভয় পদ ফ্লোরড, যা একই ফলাফল দেয়) এবং পরে সংরক্ষণ করি। তারপরে আমরা divনীচে থেকে একটি সীমা তৈরি করি 1এবং সেগুলির প্রতিটিতে সঞ্চিত মান যুক্ত করি।

এই দুটি ক্ষেত্রে দুটি নতুন সাধারণ প্যাটার্ন রয়েছে, যা আমার উল্লেখ করা উচিত: একটি হ'ল SXবা ZXনীচে থেকে আঘাত (বা ঘূর্ণিত সংস্করণ)। আপনি যদি একটি অনুলিপি সরাসরি এগিয়ে যেতে চান তবে এটি একটি অণু সদৃশ করার একটি দুর্দান্ত উপায় (যেহেতু ফিউশন রিঅ্যাক্টরের আউটপুটগুলি পুনর্নির্দেশ করা কখনও কখনও জটিল হতে পারে)। Sবা Zrotates মধ্যে পরমাণু Xএবং তারপর প্রসারণ মূল দিক মধ্যে মিরর কপি ফিরে rotates।

অন্য প্যাটার্নটি হ'ল

[K
\A --> output

আমরা যদি কোনও মান সঞ্চয় Kকরি Kতবে উপরে থেকে নেতিবাচক শক্তির সাথে আঘাত করে আমরা বারবার এটি পুনরুদ্ধার করতে পারি । Aমান আমরা প্রতি আগ্রহ দেখিয়েছেন সদৃশ এবং কি পরের বার আমরা এটি প্রয়োজন জন্য স্ট্যাকের সম্মুখের অধিকার ফিরে কপি পাঠায়।

ওয়েল, এটি বেশ একটা টোম ছিল ... তবে আপনি যদি সত্যিই এটিটি পেয়ে থাকেন তবে আমি আশা করি যে আপনি এই ধারণাটি পেয়ে গেছেন যে ফিশন ͢


1
Now with 100% fewer scrollbars.সুতরাং আপনি বলছেন .. এবং এটি এখনও চালিয়ে যেতে হবে ...
অপটিমাইজার

13
আমাদের জুনিয়র ডেভস পাম্প সর্বাধিক কোডের চেয়ে এখনও বেশি পাঠযোগ্য।
কর্সিকা

ফিশনের স্রষ্টা হিসাবে, এমনকি আমি এখনও এত বড় কোনও প্রোগ্রাম লিখিনি! আমি অভিভূত! আপনার ব্যাখ্যা দর্শনীয় এবং স্পষ্টভাবে ভাষার টিউটোরিয়াল হিসাবে পরিবেশন করতে পারে।
C0deH4cker

এছাড়াও, আপনার উত্তর
কান্ডার

12

সিজেম, 42 41 বাইট

ri]{_{:X,:)_few:+W%{1bX=}=}%{,(},e_}h]e_,

একটি সাধারণ প্রস্থ প্রথম ট্র্যাভারসাল এবং খালি পরের স্তরের স্থির শর্ত।

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

ri]                                       e# This represents the root of the fissile tree
   {                               }h     e# Now we run a do-while loop
    _{                    }%              e# Copy the nodes at the current level and map them
                                          e# via this code block to get next level nodes
      :X,:)                               e# Store the node value in X and get array [1..X]
           _few                           e# Copy the array and get continuous slices of
                                          e# length 1 through X from the array [1..X]
               :+W%                       e# Right now, we have an array of array with each
                                          e# array containing slice of same length. We join
                                          e# those arrays and reverse them to get slices of
                                          e# higher length in front of lower lengths
                   {1bX=}=                e# Choose the first slice whose sum is same as X
                                          e# The reversal above makes sure that we give
                                          e# preference to slice of higher length in case of
                                          e# multiple slices add up to X
                            {,(},         e# Filter out slices of length 1 which basically
                                          e# mean that the current node cannot be split up
                                 e_       e# Join all slices in a single array. This is our
                                          e# next level in the Fissile tree. If this is empty
                                          e# it means that all no further node can be
                                          e# decomposed. In an {}h do-while loop, this fact
                                          e# itself becomes the stopping condition for the
                                          e# loop
                                     ]e_, e# Wrap all levels in an array. Flatten the array
                                          e# and take its length

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


এটি সম্ভবত প্রায় 35 বাইটে গল্ফ করা যেতে পারে। আমি কীভাবে তা বের করার চেষ্টা করছি ...
অপ্টিমাইজার

10

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

def f(n,c=0):
 d=n-c;s=(n-d*~-d/2)/d
 return(s%1or s<1)and f(n,c+1)or+(d<2)or-~sum(f(int(s)+i)for i in range(d))

4 বাইট সংরক্ষণ করেছেন @ ফ্রাইআমডেজিগম্যানকে ধন্যবাদ।

ব্যাখ্যা পরে আসছে ...

বোনাস ফ্যাক্ট: 2 এর প্রতিটি পাওয়ারের বিভাজন সংখ্যা থাকে 1 । বিজোড় দৈর্ঘ্যের ক্রমের যোগফলটি ক্রম দৈর্ঘ্যের দ্বারা গুণিত মধ্যবর্তী সংখ্যা, যা বিজোড়। সুতরাং 2 এর শক্তির বিজোড় বিভাজক না থাকায় এটি কেবল নিজের যোগফল হিসাবে প্রকাশ করা যেতে পারে।


2 + 3 + 4 + 5 = 14 যা বিজোড় নয়। এমনকি দৈর্ঘ্যের সিকোয়েন্সগুলির জন্য আপনার যুক্তিটি "এমনকি দৈর্ঘ্যের ক্রমের যোগফল দুটি মাঝারি সংখ্যার যোগফল, যা বিজোড়, অর্ধ দৈর্ঘ্যের দ্বারা গুণিত হওয়া উচিত" to আপনার বাকী বাক্যটি প্রভাবিত হয়ে গেছে through
ব্রুনো লে ফ্ল্যাচ

@ ব্রুনোফ্ল্যাচ ধন্যবাদ! সংশোধন।
এলোমেলো

আপনার শিরোনাম উন্নতি প্রতিফলিত করা উচিত নয়? অর্থাত <strike> 117 </strike> <strike> 113 </strike> 112
corsiKa

@ কর্সিকা আমি সাধারণত বড় উন্নতির জন্য তা করি। অন্যথায় প্রচুর স্ট্রাইকযুক্ত সংখ্যা থাকবে।
এলোমেলো

8

পাইথন 2, 111 102 97 বাইট

কিছুটা পঠনযোগ্য:

def f(n,c=0):a=n-c;b=n-a*~-a/2;return 1/a or-~sum(map(f,range(b/a,b/a+a)))if b>b%a<1else f(n,c+1)

না তাই পাঠযোগ্য:

def f(n,a=0):b=n-a*~-a/2;return b>0and(f(n,a+1)or b%a<1and(1/a or-~sum(map(f,range(b/a,b/a+a)))))

উভয় 97 বাইট।

bnবিয়োগ (a-1)thত্রিভুজাকার সংখ্যা is যদি b % a == 0, তবে শুরু থেকে পরপর সংখ্যার nযোগফল ।ab


8
আমি পিপিসি-তে যোগদান না করা পর্যন্ত আমি পাইথনকে একটি সাধারণ পাঠযোগ্য ভাষা হিসাবে বিবেচনা করতাম।
অ্যালেক্স এ।

আমি মনে করি আপনার পঠনযোগ্য আপনার সংজ্ঞাটি উন্নত করা দরকার ..: পি
অপটিমাইজার

পাইথন 2 অনুমতি দেয় না 1else। শুধুমাত্র ২ য় সমাধান কাজ করে। পাইথন 3 অবধি elseতাৎক্ষণিকভাবে কোনও সংখ্যা অনুসরণ করতে পারে।
mbomb007

@ mbomb007 আমার জ্ঞানের ভিত্তিতে এটি 2.7.8 থেকে সূক্ষ্মভাবে কাজ করে
Sp3000

ঠিক আছে, আমি 2.7.2 ব্যবহার করছিলাম।
mbomb007

7

পাইথন 2, 86

f=lambda n,R={1}:n-sum(R)and f(n,R^{[min(R),max(R)+1][n>sum(R)]})or-~sum(map(f,R-{n}))

কম গল্ফড:

def f(n,R={1}):
    d=sum(R)-n
    if d==0:return (sum(map(f,R-{n}))
    if d<0:return f(n,R|{max(R)+1})
    if d>0:return f(n,R-{min(R)})

ধারণাটি হ'ল একটানা সংখ্যার সংখ্যার সম্ভাব্য রানগুলি পরীক্ষা করা n। রানটি Rএর শেষ পয়েন্টগুলির চেয়ে সরাসরি সেট হিসাবে সরাসরি সঞ্চয় করা হয় ।

বর্তমান রানের যোগফলটি কীভাবে nতাদের পার্থক্যের মাধ্যমে কাঙ্ক্ষিত সমষ্টিটির সাথে তুলনা করে তা আমরা পরীক্ষা করি ।

  • যদি যোগফলটি খুব বড় হয় তবে আমরা রানের মধ্যে সবচেয়ে ছোট উপাদানটি কাটা করি।
  • যোগফলটি যদি খুব কম হয় তবে আমরা এর সর্বোচ্চটিকে 1 দ্বারা আরও বড় করে রান প্রসারিত করব।
  • যদি যোগফলটি সঠিক হয় তবে আমরা পুনরাবৃত্তি করব, fরানকে ম্যাপিং করব, যোগফল করব এবং বর্তমান নোডের জন্য 1 যুক্ত করব। রানটি যদি হয় তবে {n}আমরা সমস্ত অ-তুচ্ছ সম্ভাব্য পরিমাণের চেষ্টা করেছি, nপ্রথমে সরিয়ে পুনরাবৃত্তি বন্ধ করুন ।

3 টি অক্ষর সংরক্ষণের জন্য Sp3000 ধন্যবাদ Thanks


7

পাইথন 2, 85

আমি এই উত্তরটির জন্য খুব গর্বিত কারণ এটি ইতিমধ্যে n = 9 এর জন্য দশক সেকেন্ড এবং n = 10 এর জন্য 5-10 মিনিট সময় নেয়। কোড গল্ফ এ এটিকে একটি প্রোগ্রামের আকাঙ্ক্ষিত বৈশিষ্ট্য হিসাবে বিবেচনা করা হয়।

f=lambda n,a=1,d=1:a/n or[f(a)+f(n-a,1+1%d*a)+1/d,f(n,a+d/n,d%n+1)][2*n!=-~d*(2*a+d)]

একটি সংক্ষিপ্ত-সার্কিট সংস্করণ রয়েছে যা এত বেশি সময় নেয় না এবং একই পরিমাণ বাইট ব্যবহার করে:

f=lambda n,a=1,d=1:a/n or~d*(2*a+d)+n*2and f(n,a+d/n,d%n+1)or f(a)+f(n-a,1+1%d*a)+1/d 

এটি দ্রুততর হতে পারে তবে কমপক্ষে এটি 40 এর উপরে কিছুটা উপরে গেলে ডিফল্ট পুনরাবৃত্তি সীমা অতিক্রম করে।

ধারণা সংখ্যার জন্য একটি পাশব বল অনুসন্ধান করতে হয় aএবং dযেমন যে a + a+1 + ... + a+d == n, 1 এবং মধ্যবর্তী মান উপর nf(n,a+d/n,d%n+1)পুনরাবৃত্তির শাখা মাধ্যমে loops (a, d)জোড়া। সাম্যটি সন্তুষ্ট হওয়ার ক্ষেত্রে, map(range(...))ক্রমটি কত দীর্ঘ হোক না কেন , আমি মাত্র দুটি শাখায় বিভক্ত হয়ে একটি ব্যয়বহুল কল এড়াতে পরিচালনা করি । এর a+1মাধ্যমে সংখ্যাগুলি প্যারামিটার সেট করে dএকটি কলে কল করে দেওয়া fহয় aযাতে ক্রমটি বিভক্ত করার আলাদা উপায় ব্যবহার করা যায় না।


কিভাবে কাজ করে?
xnor

"আমি এই উত্তরটির জন্য খুব গর্বিত কারণ এটি ইতিমধ্যে n = 9 এর জন্য দশক সেকেন্ড এবং এন = 10 এর জন্য 5-10 মিনিট সময় নেয় code কোড গল্ফে এটি একটি প্রোগ্রামের একটি পছন্দসই গুণ হিসাবে বিবেচিত হয়।" কেবল এটির জন্যই +1 করেছে।
সোহম চৌধুরী

6

হাস্কেল, 76 69 বাইট

f x=head$[1+sum(map f[y..z])|y<-[1..x-1],z<-[y..x],sum[y..z]==x]++[1]

ব্যবহার:

*Main> map f [1..40]
[1,1,3,1,5,6,5,1,6,7,12,10,12,11,12,1,8,16,14,17,18,18,23,13,21,18,22,23,24,19,14,1,22,20,23,24,31,27,25,26]

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

[  [y..z] |y<-[1..x-1],z<-[y..x],sum[y..z]==x]

           make a list of lists with all consecutive integers (at least 2 elements)
           that sum up to x, sorted by lowest number, e.g. 9 -> [[2,3,4],[4,5]].

1+sum(map f[...]) 

           recursively calculate the Fission Number for each list

[...]++[1]

           always append the 1 to the list of Fission Numbers.

head

           take the first element, which is either the Fission Number of the
           longest list or if there's no list, the 1 appended in the step before.  

3

রেটিনা , 66 বাইট

^|$
,
(`,(1+?)(?=(?<1>1\1)+\D)
$0;
+)`,(1*);1\1
,$1,1$1;
^,|1

.
1

আনারিতে ইনপুট নেয় এবং আউটপুট প্রিন্ট করে।

আপনি প্রতিটি লাইন একটি একক ফাইলে রাখতে পারেন বা -sপতাকা সহ কোডটি চালাতে পারেন । উদাহরণ:

> echo -n 1111111|retina -s fission
11111

ব্যাখ্যা:

  • আমরা বিভক্ত হওয়া সংখ্যার একটি কমা-বিস্মৃত তালিকা রাখি।
  • প্রতিটি সংখ্যার জন্য আমরা ক্ষুদ্রতম আরম্ভের মানটি গ্রহণ করি যা একটি বৈধ স্প্লিটআপকে ক্রেট করতে পারে এবং সেমিকোলনের সাহায্যে বাকী থেকে এটি সীমিত করতে পারে।
  • যদি কোনও সংখ্যার ভিতরে একটি সেমিকোলন থাকে তবে আমরা এটিকে কমাতে পরিবর্তন করি এবং পরবর্তী সঠিকভাবে আকারের (পূর্ববর্তী উপাদানটির দৈর্ঘ্য + 1) সংখ্যার অংশটি সীমিত করি।
  • পরিবর্তন না হওয়া পর্যন্ত আমরা পদক্ষেপ 2 এবং 3 পুনরাবৃত্তি করি।
  • আমরা প্রতিটি পাতার জন্য একটি কমা এবং প্রতিটি অভ্যন্তরীণ নোডের জন্য একটি অতিরিক্ত কমা পেয়েছিলাম কারণ আমরা দুটি কমা দিয়ে শুরু করেছি। সুতরাং আমরা একটি কমা এবং সংখ্যার অংশগুলি ( 1গুলি) মুছে ফেলি এবং বাকীগুলিকে 'গুলি'তে রূপান্তর করি 1

ইনপুট সহ প্রক্রিয়া জুড়ে স্ট্রিংয়ের রাজ্যগুলি 11111111111111 (unary 14):

,11111111111111,
,11;111111111111,
,11,1;11,1111,11;111;,
,11,1,11;,1111,11,1;11;;,
,11,1,11;,1111,11,1,11;;;,
,,;,,,,;;;,
11111111111

আড্ডায় সহায়তার জন্য @ মার্টিনবাটনারকে অনেক ধন্যবাদ!


3

সিজেএম (৪৩ বাইট)

qi,{):X),_m*{{_)*2/}/-X=}=~\,>0\{~$+}/)}%W=

অনলাইন ডেমো

আমি নিশ্চিত যে আমি উন্নত loops সঙ্গে কিছু কৌশল অনুপস্থিত করছি, কিন্তু এই CJam সম্পত্তি কাজে লাগান সুন্দরভাবে নেই (যা পূর্বে আমাকে বিরক্ত করেনি) যে ভিতরে %মানচিত্রে প্রাপ্ত ফলাফল স্ট্যাক থাকা, এবং সেইজন্য ব্যবহার অ্যাক্সেস করা যেতে পারে $একটি সঙ্গে নেতিবাচক অফসেট


আমি আগামীকাল ঘনিষ্ঠভাবে দেখতে পাব, তবে শুরু করার ,জন্য আপনার শুরুতে দরকার হবে না । /এবং আরও %কয়েকজন সুস্পষ্টভাবে সংখ্যাগুলিকে ব্যাপ্তিতে পরিণত করে।
মার্টিন এন্ডার

,_m*সঙ্গে প্রতিস্থাপন করা যেতে পারে 2m*। পাটিগণিতের অগ্রগতির সূত্রটি প্রতিস্থাপন ~,>:Y_,+:+এবং ~\,>0\ হয়ে যায় !Y। অবশেষে, যদি আপনি ব্যবহার {}#পরিবর্তে {}=, আপনি প্রয়োজন হবে না )পরে X। সব একসাথে রাখা:ri{):X2m*{~,>:Y_,+:+X=}#!Y{~$+}/)}%W=
ডেনিস

2

যান, 133 বাইট

func 算(n int)int{Σ:=1;for i:=0;i<n;i++{for j:=0;j<n;j++{if i*i+i-j*j-j==2*n{for k:=j+1;k<=i;k++{Σ+=算(k)};j,i=n,n}}};return Σ}

এটি আমার প্রথম কোড গল্ফ, দুঃখিত যদি আমি কোনও ভুল করে থাকি।

এটি এই ধারণাটি ব্যবহার করে যে বিস্মৃত "রচনা "টিকে আদেশযুক্ত পূর্ণসংখ্যার দুটি অনুক্রমের মধ্যে পার্থক্য হিসাবেও দেখা যায়। উদাহরণস্বরূপ 13 নম্বরটির জন্য বিস্মৃত "রচনা" নিন It এটি 6,7। তবে এটি পূর্ণসংখ্যার যোগফল 1 ... 7 বিয়োগের যোগফলের যোগফল 1 ... 5 হিসাবে দেখা যায়

  A: 1 2 3 4 5 6 7  sum = 28
  B: 1 2 3 4 5      sum = 15 
A-B:           6 7  sum = 13, which is also 28-15 = 13

গাউসের স্কুলের দিনগুলি থেকে সূত্রটি পুনরায় কল করুন, যোগফল 1 ... n = (n ^ 2 + n) / 2। সুতরাং প্রদত্ত এন এর জন্য ক্রমিক সংখ্যার সংমিশ্রণের সন্ধান করতে আমরা এটিও বলতে পারি, আমরা 'শেষ পয়েন্টগুলি' p এবং q সীমা 1 এর মধ্যে সন্ধান করছি ... n যাতে (পি ^ 2 + পি) / 2 - ( q ^ 2 + q) / 2 = n। উপরের উদাহরণে, আমরা 'শেষ পয়েন্টগুলি' 5 এবং 7 এর জন্য অনুসন্ধান করতাম কারণ 7 ^ 2 + 7 = 56/2, 5 ^ 2 + 5 = 30/2, 56 / 2-30 / 2 = 28-15 = 13।

এখন একটি সংখ্যা বিছিন্ন করার একাধিক সম্ভাব্য উপায় রয়েছে, যেমন মার্টিন উল্লেখ করেছেন যে 9 = 2 + 3 + 4 কিন্তু 4 + 5ও রয়েছে। তবে এটি "সর্বনিম্ন" সূচনাটিও দীর্ঘতম হবে বলে মনে হয়, কারণ এটি আরও বেশি লাগে এটি মাঝারি আকারের সংখ্যার চেয়ে বৃহত সংখ্যায় যোগ করতে সামান্য সংখ্যা- (দুর্ভাগ্যক্রমে আমার কাছে কোনও প্রমাণ নেই)

সুতরাং 9 এর রচনা খুঁজে পেতে, প্রতিটি 'শেষ পয়েন্টের জুটি', p এবং q পরীক্ষা করুন, উভয় পি এবং কিউকে 0 থেকে 9 থেকে পৃথক করে পুনরায় পরীক্ষা করুন এবং p ^ p + p / 2 - q ^ 2 + q / 2 = পরীক্ষা করুন 9. বা আরও সহজভাবে, সমীকরণটি 2 দ্বারা বিভক্ত করার সমস্যাটি এড়ানোর জন্য এবং সমস্ত গণিতকে পূর্ণসংখ্যায় রাখার জন্য 2 দিয়ে গুণ করুন। তারপরে আমরা p এবং q এর মতো সন্ধান করছি (p ^ p + p) - (q ^ q + q) = 9 * 2। আমরা যে প্রথম ম্যাচটি পাই তা হ'ল ফিসাইল কম্পোজিশনের শেষ পয়েন্টগুলি কারণ হিসাবে উল্লেখ করা হয়েছে, সংখ্যার সর্বনিম্ন গ্রুপটিও দীর্ঘতম হবে এবং আমরা নিম্ন থেকে উচ্চ (0 থেকে 9) অনুসন্ধান করছি। আমরা কোনও মিল খুঁজে পাওয়ার সাথে সাথে লুপটি ভেঙে ফেলেছি।

এখন পুনরাবৃত্তি ফাংশন প্রদত্ত এন এর জন্য 'বিস্ময়কর শেষের পয়েন্ট' পি এবং কি সন্ধান করে, তারপরে গাছ থেকে পি 'কিউ'র প্রতিটি' বাচ্চাদের 'মনে রাখে। 9 এর জন্য, এটি 1 এবং 4 খুঁজে পাবেন (20-2 = 18) তারপরে এটি ফলাফলগুলি সংক্ষেপ করে 2, 3 এবং 4 এ আবার কল করবে। 4 এর মতো সংখ্যার জন্য এটি কখনই কোনও মিল খুঁজে পায় না এবং তাই '1' দেয়। এটি সংক্ষিপ্ত হতে পারে তবে এটি আমার তৃতীয় গো প্রোগ্রামের মতো, এবং আমি কোনও পুনরাবৃত্তি বিশেষজ্ঞ নই।

পড়ার জন্য ধন্যবাদ.


চমৎকার কাজ! তবে কেন ইউনিকোড ফাংশন / পরিবর্তনশীল নাম names এটির জন্য অপ্রয়োজনীয় বাইট খরচ হয় এবং অবশ্যই আপনি কেবল কিছু সাধারণ অক্ষর ব্যবহার করতে পারেন?
মার্টিন ইন্ডার

আপনার মতামত মতামত জন্য ধন্যবাদ। তবে আমি নিজেকে জিজ্ঞাসা করেছি, বাইটের পরিবর্তে অক্ষরগুলি কেন গণনা করা হবে না :)
উজ্জ্বল

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

1

সিজেম, 40 35 33 বাইট

ri{__,f-_few:+{1b1$=}=|{F}*}:F~],

@ অপ্টিমাইজারকে পরামর্শ দেওয়ার জন্য ধন্যবাদ few, যা 2 বাইট সংরক্ষণ করেছে

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

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

ri      e# Read an integer from STDIN.
{       e# Define function F(X):
  _     e# Push X.
  _,    e# Push [0 ... X-1].
  f-    e# Subract each from X. Pushes Y := [X ... 1].
  _few  e# Push all overlapping slices of Y of length in Y.
  :+    e# Consolidate the slices of different lenghts in a single array.
  {     e# Find the first slice S such that...
    1b  e#   the sum of its elements...
    1$= e#   equals X.
  }=    e#   Since Y is in descending order, the first matching slice is also the longest.
  |     e# Set union with [X]. This adds X to the beginning of the S if S != [X].
  {F}*  e# Execute F for each element of S except the first (X).
}:F     e#
~       e# Execute F for the input.
],      e# Count the integers on the stack.

আপনি যদি আমার প্রথমার্ধটিকে আপনার দ্বিতীয়ার্ধের সাথে একত্রিত করেন তবে আপনি 34 পাবেন:ri{_,:)_few:+W%{1b1$=}=|{F}*}:F~],
অপটিমাইজার

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