আন্ডারলোড নম্বরটির সংক্ষিপ্ততম উপস্থাপনা


13

গন্ধ টেক্সট

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

জিনিসগুলি সহজ করার জন্য, আমরা কেবলমাত্র আন্ডারলোড কমান্ডের কেবলমাত্র নিম্নলিখিত উপসেটটি বিবেচনা করব:

  • : - এই কমান্ডটি স্ট্যাকের শীর্ষ আইটেমটিকে নকল করে।
  • * - এই আদেশটি স্ট্যাকের শীর্ষ দুটি আইটেমকে একক আইটেমের সাথে সম্মিলন করে।

আমরা একটি আন্ডারলোড সংখ্যা N কে একটি স্ট্রিং হিসাবে সংজ্ঞায়িত করি :এবং *যা কার্যকর করা হলে স্ট্যাকের উপরের আইটেমটি গ্রাস করে এবং সেই আইটেমের এন কপিগুলি একসাথে তৈরি করে। কিছু উদাহরণ:

  • আন্ডারলোড সংখ্যা 0, -1, 1/2, are নেই π
  • খালি স্ট্রিংটি আন্ডারলোড সংখ্যা 1, কারণ এটি স্ট্যাকটি আউটচুড করে দেয়।
  • :*আন্ডারলোড সংখ্যা 2, কারণ এটি শীর্ষ আইটেমটিকে নকল করে এবং তারপরে সেই দুটি অনুলিপি একক আইটেমের সাথে একত্র করে: (A):*= (A)(A)*= (AA)
  • ::**আন্ডারলোড সংখ্যা 3: (A)::**= (A)(A):**= (A)(AA)*= (AAA)
  • :::*** আন্ডারলোড সংখ্যা 4
  • :*:*আন্ডারলোড সংখ্যা 4: (A):*:*= (AA):*= (AA)(AA)*= (AAAA)

সাধারণভাবে, আপনি দেখতে পাবেন যে, যদি Mএবং Nআন্ডারলোড অঙ্কগুলি এম এবং এন হয় তবে :N*এটি হল N + 1 এবং এটির MNসংখ্যা এম × এন।

চ্যালেঞ্জ

আপনার কাজটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লিখুন (এসটিডিআইএন-এ ইনপুট নেওয়া) বা ফাংশন (যুক্তির মাধ্যমে ইনপুট নেওয়া) যা স্ট্রিং হিসাবে তার ইনপুটটির জন্য আন্ডারলোড সংখ্যার সংক্ষিপ্ত প্রতিনিধিত্ব করে । এর অর্থ এই যে, যদি ইনপুটটি ধনাত্মক প্রাকৃতিক সংখ্যা N> 1 হয় তবে আপনাকে অবশ্যই একটি আন্ডারলোড সংখ্যা N প্রস্তুত করতে হবে যার অক্ষরগুলির দৈর্ঘ্য প্রতিটি অন্যান্য আন্ডারলোড সংখ্যা N এর চেয়ে কম বা সমান is

নমুনা ইনপুট এবং আউটপুট: ("ইনপুট - OUTPUT।")

  • 1 -
  • 2 - :*
  • 5 - ::*:**(2 × 2 + 1)।
  • 7 - ::*::***(2 × 3 + 1) বা :::**:**(3 × 2 + 1)।
  • 33 - ::*:*:*:*:**(2 × 2 × 2 × 2 × 2 + 1)।
  • 49 - ::*:*:*:*::***(16 × 3 + 1, দৈর্ঘ্য 14) তবে নয় ::*::***::*::***(7 × 7, দৈর্ঘ্য 16)।

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

স্ট্যান্ডার্ড ঘুলঘুলি নিষেধাজ্ঞা প্রযোজ্য: কোন অতিরিক্ত ইনপুট, কোন ওয়েব অনুরোধ, আউটপুট / ফেরত মান ঠিক উত্তর এবং একটি অসীম র্যান্ডম প্রবাহ হতে হবে :এবং *ইত্যাদি


@ জিওবিটস আমি মৃত্যুদন্ডের সময় সম্পর্কে কিছুই বলিনি, যতক্ষণ না আপনি প্রমাণ করতে পারবেন যতক্ষণ না শেষ পর্যন্ত সঠিক উত্তর দেওয়া যাবে, আপনি ভাল।
অ্যালগরিদমশর্ক

2
এই সমস্যাটি অতিরিক্ত শৃঙ্খলার সাথে সম্পর্কিত; বিশেষভাবে, ইনপুট জন্য সঠিক উত্তরের দৈর্ঘ্য xহয় 2*A117498(x)যেখানে A117498 একটি ছাড়াও শৃঙ্খল খোঁজার জন্য বাইনারি এবং ফ্যাক্টর পদ্ধতি অনুকূল সমন্বয় দেয়।
পিটার টেলর

উত্তর:


4

গল্ফস্ক্রিপ্ট ( 61 60 55 54 53 টি চর)

~:X'']({:A{.'.+'\*A{2$+}%~}%}*{,}${1\~X=}?{44/'*:'=}%

এটি আমার আগের সংস্করণটির চেয়ে কম জটিল এবং কিছুটা ভিন্ন পদ্ধতির গ্রহণ করে, তবে এটি এখনও শক্তিশালী। আমরা জানি যে ':'X*'*'X*+এটিই একটি প্রার্থীর সমাধান, সুতরাং আমরা যদি সেই দৈর্ঘ্য পর্যন্ত সমস্ত সুষম স্ট্রিং তৈরি করি এবং সংক্ষিপ্ততমটিকে সঠিকভাবে মূল্যায়িত করি তবে আমরা অবশ্যই এটির সন্ধান করতে পারি।

# Evaluate input and store the target number in X
~:X
# Seed the generator with the empty string
'']
# X times...
({
    # Store the array of strings so far into A
    :A
    # Generate A' by mapping each element
    {
        # Dup: this leaves an untouched copy of the current string
        .
        # Wrap the duplicate in .+
        '.+'\*
        # For each element in A, generate that element suffixed with the current string
        A{2$+}%~
    }%
}*
# Order by length
{,}$
# Find the first element which evaluates to X
{1\~X=}?
# tr .+ :*
{44/'*:'=}%

হাওয়ার্ডকে ধন্যবাদ, যার সমাধান থেকে আমি কয়েকবার 1-চর টুইটগুলি চুরি করেছি।


হাহাহা, 3 এর একটি ইনপুট ওয়েল ইন্টারপ্রেটারে কার্যকর করতে আরও তিন সেকেন্ড সময় নেয়। তার সেরা এ গল্ফিং।
অ্যালগরিদমশর্ক

@ অ্যালগরিদমশর্ক, আপনি হ্রাসের স্থান সহ এটি কিছুটা গতি বাড়িয়ে তুলতে পারেন। ঢোকান .&(অর্থাত মধ্যে মাত্র ভেতরের লুপ পর ~}%এবং }*
পিটার টেলর

4

গল্ফস্ক্রিপ্ট ( ৫৪ 53 টি অক্ষর)

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

~.''':*':s@,{):x,2>{:^~$x^/~$+{s\*}x^%*}%{,}$0=}/]((=

অনলাইন ডেমো উপলভ্য নয় কারণ এটি দোভাষীর একটি বগি সংস্করণ চালায়।

# Let <N> denote the string which evaluates to N
# We want to enter the main loop with three values on the stack: <0> <1> <2>
# However, we'll never use <0>, so we can actually replace that with any value at all.
# Getting the input from underneath 3 items would normally use two stack manipulations.
# Trick: let's use the input value for <0>! (This gives a further bonus later).
# NB We store the value of <2> in the variable s
~.''':*':s@
# for x=1 to input_value ...
,{):x
    # for ^=2 to x-1 ...
    ,2>{:^
        # Use negative stack offsets to index the stack from the start
        # I.e. -1$ gets the first item on the stack, which is <0>
        # -2$ gets the second item on the stack, which is <1>
        # In general, val~$ gets <val>
        ~$x^/~$+
        # We have the string <^><x / ^> on the stack.
        # Increment it (x % ^) times to get a candidate <x>.
        {s\*}x^%*
    }%
    # Select a shortest string.
    {,}$0=
}/
# Group the stack into one array and select the appropriate offset,
# reusing that hacky <0> substitute for the offset.
]((=

প্রতিস্থাপন পর এক শেভ আনা সম্ভব হবে 3+সঙ্গে )(সত্য যে শোষণ []0=যদি এটা যে ছিল না স্ট্যাক পাতার কিছুই না) []2>একটি ত্রুটি বাড়ে।
পিটার টেলর

[]2>[]ত্রুটি ছাড়াই ফলন ।
হাওয়ার্ড

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

যার ((=পরিবর্তে আপনি ঠিক করতে পারেন -1=
হাওয়ার্ড

এবং golfscript.apphb.com প্রকৃতপক্ষে একটি পুরানো সংস্করণ চালায়, নেস্টেড লুপগুলির উদাহরণটি কাজ করে না।
হাওয়ার্ড

4

পাইথন 2.7 - 87 84 92

u=lambda n:n>1and min([u(i)+u(n/i)for i in range(2,n)if n%i<1]+[':'+u(n-1)+'*'],key=len)or''

ব্যাখ্যা:
এটি একটি দুর্দান্ত সোজা সমাধান is এটি n এর সমস্ত সম্ভাব্য উপস্থাপনাটিকে দুটি সংখ্যার গুণফল বা হিসাবে হিসাবে :(n-1)*পুনরায় পরীক্ষা করে এবং তারপরে ন্যূনতম দৈর্ঘ্যের সমাধান খুঁজে পায়। পরিসর (2, n) প্রয়োজনীয় যাতে পুনরাবৃত্তি গভীরতার সাথে আবদ্ধ হয় এবং n <2 বেস কেস দেয়।

দ্রষ্টব্য:
i এবং n / i হ'ল এন এর দুটি কারণ। ... এবং ... বা ... এর প্রতিস্থাপন ... যদি ... অন্য ... ... কাজ করে না কারণ '' মূল্যায়নের মিথ্যা। মিনিট স্ট্রিং সংক্ষিপ্ত স্ট্রিংগুলির একটি দেয়। পাইথন 2.7 // এর পরিবর্তে / ব্যবহার করে 1 টি অক্ষর সংরক্ষণ করে।

সম্পাদনা: বেস কেসটি এক্সপ্রেশনটির পিছনে সরানো হয়েছে, আমাকে ... এবং ... বা ... ব্যবহার করার অনুমতি দেয় এবং কয়েকটি জায়গা শেভ করে।

পরীক্ষার কেস:

u(1)
''
u(5)
'::*:**'
u(49)
'::*:*:*:*::***'

1
" স্ট্রিং মিনিট কম স্ট্রিং এক দেয় " যদি না আপনি ঐচ্ছিক যুক্তি সরবরাহ সত্য নয় key=len। এটি অভিধানের প্রথম দিকের স্ট্রিং দেয়। ( উদাহরণ ) যেহেতু এর '*' < ':'অর্থ হল যে 2 টির ক্ষমতার সাথে যুক্ত সমাধানগুলির প্রতি আপনার পক্ষপাত রয়েছে, তবে সেগুলি কি সর্বদা সংক্ষিপ্ত?
পিটার টেলর

1
উত্তর: আসলে পক্ষপাতটি আরও জটিল, তবে এটি সর্বদা সঠিক উত্তর দেয় না। সবচেয়ে ছোট পাল্টা নমুনা হ'ল u(33), যার জন্য অভিধানিকভাবে বাছাই 14-চর ::**::*::*:***দেয় তবে দৈর্ঘ্য অনুসারে বাছাই 12-চর দেয়::*:*:*:*:**
পিটার টেলর

1
পাইথন স্ট্রিং তুলনা সম্পর্কে আমি কখনই জানতাম না। আমি আমার উত্তর আপডেট করেছি।
isaacg

3

গল্ফস্ক্রিপ্ট, 63 58 56 টি অক্ষর

~n./\{:v~[':*'1$*v,,2>{v,\%!},{.v=v,@/v=+}/]{,}$0=]}*-2=

কোডটি STDIN এ ইনপুট নেয় এবং ফলাফল মুদ্রণ করে।

উদাহরণ:

> 49
:::**:*:*:*:**

> 1234
::::*:*:*:**:*:*:**::**::***

আপনি অনলাইনে আপনার নিজের কেস পরীক্ষা করতে পারেন ।


বাহ, আমি ভেবেছিলাম যে একটি ফ্যাক্টরিং ভিত্তিক দৃষ্টিভঙ্গি ব্রুট ফোর্সের পদ্ধতির চেয়ে বেশ খানিকটা দীর্ঘ হবে।
পিটার টেলর

@ পিটারটেলর আমিও ভেবেছিলাম কিন্তু এটি প্রমাণিত হয়েছে যে এটি এমন নয়। তদুপরি, আমার নিষ্ঠুর শক্তি সমাধানটি আপনার চেয়ে কিছুটা দীর্ঘ ছিল ;-)
হাওয়ার্ড

আপনি প্রতিটি অংশ কি করে তা বোঝাতে আপত্তি করবেন? আমি কেবল :x(=বিট না হওয়া পর্যন্ত অনুসরণ করতে পারি । এছাড়াও, যুক্তিসঙ্গত সময়ে 49 চালাতে সক্ষম হওয়ার জন্য +1।
অ্যালগরিদমশর্ক

@ অ্যালগরিদমশর্ক আমি এখনও সমাধানটিতে কাজ করছি যাতে এটি এখনও অনেক কিছু পরিবর্তন করতে পারে (যেমনটি এটি করেছে ঠিক তেমন)। মূলত, অংশটি x,2>{x\%!},সমস্ত সত্য বিভাজক দেয় x, {.v=x@/v=+}/তারপরে dএবং x/dসমস্ত বিভাজনকারীদের জন্য এবং তার জন্য সমাধানগুলি সম্মত করে d{,}$এগুলি দৈর্ঘ্য অনুসারে বাছাই করে এবং এর 0=মধ্যে সংক্ষিপ্ততম হয় (প্লাস প্রাথমিক :(x-1)*ক্ষেত্রে)।
হাওয়ার্ড

2

ব্র্যাচল্যাগ 2 , 30 (শেষ পর্যন্ত 26) বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

এখানে একটি ফাংশন যা বর্তমান ব্র্যাচল্যাগ 2 বাস্তবায়নের সাথে কাজ করে (এবং চরিত্রের কোডগুলির একটি তালিকা ফেরত দেয় কারণ বর্তমান বাস্তবায়নে স্ট্রিং হ্যান্ডলিংয়ে কিছু সমস্যা রয়েছে):

∧.l∧?{ḋp~c×ᵐ{-₁↰₁:[42,58]c↻}ᵐc}

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

ভাষাটি এখনও খুব নতুন। এখানে প্রোগ্রামটির একটি 26 বাইট সংস্করণ রয়েছে যা স্পেসিফিকেশন অনুসারে কাজ করা উচিত, তবে কিছু অযৌক্তিক বৈশিষ্ট্য ব্যবহার করে এবং এটি এখনও কার্যকর নয়, তবে সম্ভবত ভবিষ্যতে হবে (এটি আরও কম দক্ষ):

{ḋp~c×ᵐ{-₁↰₁:"*:"c↻}ᵐc}ᶠlᵒh

ব্যাখ্যা

∧.l∧?{ḋp~c×ᵐ{-₁↰₁:[42,58]c↻}ᵐc}
∧.l∧?                            Evaluation hint: try shortest outputs first
     {                        }  Define an inner function
      ḋ                          Prime factor decomposition of the input
       p                         Find a permutation
        ~c                       Find an inverse concatenation (i.e. partition)
          ×ᵐ                     Take the product of each set inside the partition
      ḋp~c×ᵐ                     Find a decomposition into factors ≥ 2
            {              }ᵐ    For each of those factors:
             -₁                  Decrement it
               ↰₁                Call the inner function recursively
                 :[42,58]c       Append "*:" (as character codes)
                          ↻      Move the last element to the start
                             c   Append the results together

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

প্রোগ্রামটি মোটামুটি অকার্যকর, বিশেষত কারণ যে মূল্যায়ন আদেশের ইঙ্গিতটি আমি দিয়েছি (প্রশ্নের উত্তর "সবচেয়ে সংক্ষিপ্ত" সমাধান করার সময়, আমি সংক্ষিপ্ততর উত্তরগুলি সংক্ষিপ্ততর উত্তরগুলি উত্পন্ন করি) এর দিক থেকে এটি দুর্দান্ত নয় প্রকৃতপক্ষে দ্রুত প্রোগ্রামটি সম্পূর্ণ করে তোলা (আরও দরকারী ইঙ্গিতটি হ'ল "প্রতিটি পুনরাবৃত্তির পর্যায়ে কেবলমাত্র সংক্ষিপ্ত উত্তর উত্পন্ন করা যায়", তবে এতে আরও বাইট লাগে ...)। অতিরিক্তভাবে, ḋp~c×ᵐপ্রতিটি একাধিক বার গুণিত পার্টিশন উত্পন্ন করতে পারে, যাতে প্রোগ্রামটি প্রচুর অনর্থক কাজ করে।


0

জে - 81 চর

উত্তরসূরীদের জন্য, আমি জেতে এটিই সেরা করতে পারি

_2{::(0&(][,0{<@;"1@({~#(#~]-:"1<.)@(],.%)2}.i.@#)(/:#&>)@,':'<@,'*',~>@{:),~)&a:

আমরা ফলাফলগুলির একটি তালিকা তৈরি করি, যেখানে দুটি খালি স্ট্রিং (এটি এবং ,~এবং a:) 0 (কখনই ব্যবহৃত হয় না) এবং 1 টি প্রতিনিধিত্ব করে শুরু করা হয় এবং তারপরে একটি ক্রিয়াটি পুনরায় করা (হুক, ট্রেন এবং এর ছদ্মবেশ ব্যবহার &) যা পরবর্তী সংখ্যার সংক্ষিপ্ত প্রতিনিধিত্ব সংযোজন করে।

আসল ক্রিয়াটি যা আমরা পুনরাবৃত্তি করি তা তালিকার দৈর্ঘ্যকে আমরা কোন সংখ্যায় পরিচালনা করছি তার সূচক হিসাবে ব্যবহার করে। প্রথমে, আমরা এই সংখ্যাকে কয়েকটি (2 #(#~]-:"1<.)@(],.%)2}.i.@#) গুণক ( ) এর মধ্যে ফ্যাক্টর করি এবং অ্যারে ( {~) থেকে টেনে প্রতিটি জোড় উদ্ধার করি । আমরা এই জোড়গুলির প্রত্যেকটিকে (সংখ্যাটি প্রাথমিক হলে তাদের মধ্যে 0 টি থাকতে পারে) একক স্ট্রিংগুলিতে পরিণত করি ( <@;"1)।

তারপর আমরা যে লিস্টে দ্বারা বন্ধনী করা পূর্ববর্তী ফলাফলের জন্য এন্ট্রি যোগ :এবং *আর সাজানোর দৈর্ঘ্য দ্বারা এই তালিকা ( (/:#&>))। অবশেষে, আমরা এই তালিকা ( 0{) থেকে প্রথম ফলাফলটি নিয়েছি এবং এটি বেস অ্যারে ( [,) এর শেষে যুক্ত করব । যখন লুপ iterating সম্পন্ন করা হয়, আমরা দৈর্ঘ্য 2 একটি তালিকা ইনপুট চেয়ে বেশি 0. থেকে শুরু তাই আমরা ফিরে যেতে হবে পরবর্তী টু গত স্ট্রিং (আছে, _2{::)।

   un =: _2{::(0&(][,0{<@;"1@({~#(#~]-:"1<.)@(],.%)2}.i.@#)(/:#&>)@,':'<@,'*',~>@{:),~)&a:
   un 49
::*:*:*:*::***
   un 1234
:*::*:*:*::*::***::*::*:****
   un 10010
:*::*:*::***::*:*:*:*:*:*:*::***
   2 * (1 + 3 * 2^2) * (1 + 3 * 2^7)
10010
   6!:2 'un 10010'   NB. time in seconds
19.5539

0

জেলি , 33 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

ÆḌḊµ⁹÷Ñ;Ñð€
’ß”:;;”*W;ÇLÞḢµ“”>1$?

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

একটি সোজা জন্তু শক্তি সমাধান।

ব্যাখ্যা

মূল প্রোগ্রাম

’ß”:;;”*W;ÇLÞḢµ“”>1$?
              µ  >1$?  If input is greater than 1, then:
’ß                       Run recursively on the input - 1
  ”:;                    Prepend a colon
     ;”*                 Append an asterisk
        W;               Cons to:
          Ç                the result of the helper, on {the original input}
           LÞ            Sort by length
             Ḣ           Take the first (i.e. shortest) result
               “”      Otherwise, return an empty string

মূল প্রোগ্রামটি গুণকের মাধ্যমে মূল্য উত্পাদন করার সমস্ত সম্ভাব্য উপায়গুলি গণনা করার জন্য সহায়ক ফাংশনটি ব্যবহার করে, তারপরে যোগ করে মূল্য উত্পাদন করার চেষ্টা করে এবং সংক্ষিপ্ত সম্ভাবনা প্রদান করে। এটি বেস কেস (একটি ইনপুট 1) পরিচালনা করে ।

সহায়ক ফাংশন

ÆḌḊµ⁹÷Ñ;Ñð€
ÆḌ µ     ð€            For all proper factors of the input
  Ḋ                    except the first (i.e. 1):
    ⁹÷                   Divide it into the input;
      Ñ                  Run the main program on it;
       ;                 Append the result of:
        Ñ                  the main program run on {the factor}

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


0

জিএনইউ প্রোলগ, 96 বাইট

v(N)-->{N#=1};{N#=A*B,A#<B,B#<N},v(A),v(B);{N#=M+1},":",v(M),"*".
s(N,S):-length(S,_),v(N,S,[]).

প্রথম লাইনটি এমন একটি ব্যাকরণ যা আন্ডারলোড মূল্যায়ন কার্যকর করে এবং বিপরীত দিকে কাজ করে (প্রকৃতপক্ষে, A#<Bসীমাবদ্ধতার কারণে এটি সামনের দিকের দিকে বেশ কার্যকরভাবে কাজ করে না ; A#<Nধীরে ধীরে প্রোগ্রামের জন্য এটি পরিবর্তন করে যা উভয় পথেই কাজ করে)। দ্বিতীয় লাইনটি ফাংশনটির মতো প্রিকিকেট s(যা এই প্রোগ্রামটির সমাধান হিসাবে বাস্তবায়িত ফাংশন) সংজ্ঞায়িত করে যা সংক্ষিপ্ততম স্ট্রিংটি খুঁজে পায় যা ইনপুট হিসাবে প্রদত্ত সংখ্যার মূল্যায়ন করে (এটি হতাশাজনকভাবে ভার্জোজ যা তুলনামূলক সহজ কাজটির জন্য, তবে এটা আপনার জন্য প্রলজ…)।

প্রোগ্রামটি কমপক্ষে একটি ব্যাকরণে নির্দিষ্টকরণের সরাসরি অনুবাদ এবং তারপরে প্রোলোগ সিনট্যাক্সে দেওয়া হ'ল প্রোগ্রামটি বেশ স্ব-ব্যাখ্যামূলক হওয়া উচিত; সংজ্ঞা vবলছেন যে Nএকটি খালি স্ট্রিং 1, অথবা Nহয় A× B(সঙ্গে Aকম Bকম N) এবং স্ট্রিং এর সংযুক্তকরণের হয় v(A)এবং v(B), বা Nহয় M+1 এবং স্ট্রিং হয় :সঙ্গে ঘনিভূত v(M)সঙ্গে ঘনিভূত *। দ্বিতীয় লাইনটি কিছুটা সূক্ষ্ম;length(S,_) এর অর্থ "এস এর কিছু দৈর্ঘ্য আছে", তবে লাইনের প্রথম জিনিস হিসাবে এটি উল্লেখ করা প্রোলোগ বাস্তবায়নের ইঙ্গিত হিসাবে কাজ করে যে এটি প্রথমে স্বল্পতম দৈর্ঘ্য পরীক্ষা করা উচিত (যার অর্থ আমরা কোনও ফেরতের মূল্যের জন্য সংক্ষিপ্ততম দৈর্ঘ্যটি পেয়ে যাব) ।

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