ফ্যাক্টরিং ফ্যাক্টরিয়ালস


16

আজ আমার পরিসংখ্যান শ্রেণিতে, আমি দেখতে পেয়েছি যে কিছু ফ্যাকটোরিয়ালগুলি একসাথে গুণিতকালে সরল করা যায়! উদাহরণ স্বরূপ:5! * 3! = 5! *3*2 = 5! *6 = 6!

আপনার কাজ:

কেবলমাত্র আরবি সংখ্যা এবং বিস্ময়বোধক পয়েন্ট সমন্বিত একটি স্ট্রিং দেওয়া হয়েছে, আমার ফ্যাক্টরিয়ালটিকে আপনার ভাষা, কোড গল্ফ শৈলীর জন্য কমপক্ষে বাইটের কমপক্ষে, তারতমতমতম স্ট্রিংয়ে সরল করুন l

ইনপুট

কেবল একটি আরবি সংখ্যা এবং বিস্ময়বোধক পয়েন্টযুক্ত স্ট্রিং। ইনপুটটির জন্য ফ্যাক্টরিয়ালগুলি 200 এর চেয়ে বড় হবে না। কারখানার সংখ্যাতে প্রতি একের বেশি ফ্যাক্টরিয়াল থাকবে না। সংখ্যার তালিকা হিসাবে ইনপুট নেওয়া যেতে পারে।

আউটপুট

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

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

In: 3!2!2!  
Out: 4! 

In 2!3!2!0! 
Out: 4! 

In: 7!2!2!7!2!2!2!2! 
Out: 8!8! 

In: 23!3!2!2! 
Out: 24!  
Also: 4!!

In: 23!3!2!2!2! 
Out: 24!2!

In: 127!2!2!2!2!2!2!2! 
Out: 128!

In: 32!56!29!128!  
Out: 29!32!56!128!

ভাগ্য সুপ্রসন্ন হোক


যেহেতু খালি পণ্যটি 1 এর আউটপুট তাই 1!1!কেবল একটি খালি স্ট্রিং বলুন?
জোনাথন অ্যালান

@ জোনাথন অ্যালান 1! 1! হ্রাস পেয়ে 1! বা 0!
tuskiomi

যা তখন খালি স্ট্রিংয়ে হ্রাস পায়: /
জোনাথন অ্যালান

উত্তর:


5

জেলি ,  17  18 বাইট

!P
ÇṗLÇ⁼¥ÐfÇḢḟ1ȯ0F

সংখ্যার একটি তালিকা গ্রহণ এবং ফিরিয়ে আনার এক জঘন্য লিঙ্ক (প্রতিটি সংখ্যার বিকল্পের সাথে এক ফ্যাক্টরিয়ালটি আটকে)

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

কিভাবে?

পিটু 1998 এর সমাধানটির একটি গল্ফযুক্ত (যদিও স্বতন্ত্রভাবে লিখিত) সংস্করণ।

!P - Link 1, product of factorials: list
!  - factorial (vectorises)
 P - product

ÇṗLÇ⁼¥ÐfÇḢḟ1ȯ0F - Main link: list                       e.g. [3,2,2]
Ç               - call the last link (1) as a monad           24
  L             - length                                      3
 ṗ              - Cartesian power      [[1,1,1],[1,1,2],...,[1,1,24],...,[24,24,24]]
        Ç       - call the last link (1) as a monad           24
      Ðf        - filter keep if:
     ¥          -   last two links as a dyad:
   Ç            -     call the last link (1) as a monad     [1,2,...,24!,...,24!^3]
    ⁼           -     equal?
         Ḣ      - head
          ḟ1    - filter out any ones
            ȯ0  - or with zero (for the empty list case)
              F - flatten (to cater for the fact that zero is not yet a list)

1
আমার কাছে যথেষ্ট পরিস্কার বলে মনে হচ্ছে - আমাদের এটি ব্যবহার করার দরকার নেই, তবে আমরা চাইলে এটি করতে পারি।
জোনাথন অ্যালান

1
@ টসকিওমি ফুটারটি কেবলমাত্র স্পষ্টতার জন্য তালিকার আউটপুটটিকে ফর্ম্যাট করছে ... একটি সম্পূর্ণ প্রোগ্রাম হিসাবে (কোনও ফাংশন হিসাবে নয়) কোডটি জেলির একটি তালিকার বিন্যাসটি প্রিন্ট করবে (দৈর্ঘ্যের তালিকাগুলির জন্য খালি এবং কোনও ঘেরের জন্য কিছুই নেই]) ।
জোনাথন অ্যালান

1
@ টসকিওমি টিআইওর সীমাবদ্ধতা রয়েছে ;-) তবে আমি মনে করি এটি তাত্ত্বিকভাবে কার্যকর হয়।
এরিক আউটগল্ফার

1
@ টুস্কিওমি কার্তেসিয়ান শক্তিটির ফলাফল 23! ^ 4 তালিকার একটি তালিকা তৈরি করবে। স্মৃতি না থাকলে এটি সময়ের বাইরে চলে যাবে (টিআইও-র 60s সীমা)।
জোনাথন অ্যালান

1
এন! ^ এম যেখানে এন পণ্য এবং এম পদগুলির সংখ্যা (এবং
জোনাথন অ্যালান

3

জেলি , 19 বাইট

,!P€E
SṗLçÐfµḢḟ1ȯ1F

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

দ্রুত এবং ময়লা. খুব ধীর, এমনকি 23!2!3!2!পরীক্ষার কেসটি একটি প্রসারিত। পূর্ণসংখ্যাগুলির তালিকা হিসাবে I / O।

ব্যাখ্যা

,!P€E    Helper link. Arguments: attempt, original
,        Make the array [attempt, original].
         Example: [[1,1,1,4], [2,3,2,0]]
 !       Take the factorial of each item.
         Example: [[1,1,1,24], [2,6,2,1]]
  P€     Take the product of each sublist.
         Example: [24, 24]
    E    Check if the values are equal.

SṗLçÐfµḢḟ1ȯ1F   Main link. Arguments: original
S               Find the sum S of the integers in the input.
  L             Find the number N of integers in the input.
 ṗ              Generate all lists containing N integers from 1 to S.
   çÐf          Take the lists whose factorial-product is the same as the original.
       Ḣ        Take the first match. This is the one with the most ones.
        ḟ1      Remove any ones.
          ȯ1    If there were only ones, return a one instead.
            F   Turn into a list if needed.

আমরা তালিকাগুলিকে I / O হিসাবে ব্যবহার করতে পারি
জোনাথন অ্যালান


আমার 17 আরও ধীর মনে হচ্ছে ...
জোনাথন অ্যালান

ওহ, এটি খুব অনুরূপ - tio.run/##y0rNyan8/…
জোনাথন অ্যালান

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

2

পরিষ্কার , 397 ... 317 বাইট

import StdEnv,StdLib
c=length
f c m=sortBy c o flatten o map m
%n=f(>)@[2..n]
@1=[]
@n#f=[i\\i<-[2..n]|n/i*i==n&&and[i/j*j<i\\j<-[2..i-1]]]
=f++ @(n/prod f)
?l=group(f(>)%l)
$l=hd(f(\a b=c a<c b)(~(?l))[0..sum l])
~[]_=[[]]
~i n=[[m:k]\\m<-take n[hd(i!!0++[0])..],k<- ~[drop(c a)b\\a<-group(%m)&b<-i|b>a]n|i== ?[m:k]]

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

এটি গ্রহণ করে [Int], ফলাফলের প্রধান কারণগুলি নির্ধারণ করে এবং ক্ষুদ্রতম প্রতিনিধিত্ব সন্ধানের জন্য উপাদানগুলির উপর নির্ভর করে হ্রাস করে, পরবর্তী ফ্যাক্টরিয়াল টার্মের জন্য বেসলাইন মান হিসাবে যে কোনও পর্যায়ে বৃহত্তম ফ্যাক্টরটি ব্যবহার করে। এটি টিআইওতে কিছু পরীক্ষার কেস সম্পূর্ণ করবে না, তবে এটি মোটামুটি * দ্রুত, এবং একটি মিডরেঞ্জ ল্যাপটপে 3 মিনিটের নিচে সেগুলি চালাতে পারে।

একটি O((prod(N)!)^sum(N))জটিলতা অ্যালগরিদমের জন্য


টেস্টকেস: 6, 2, 2
tsh

@tsh এখনই স্থির। এটি ক্ষুদ্রতম দৈর্ঘ্য অনুসারে বাছাই করা হয়নি, তবে একটি ভুল অনুমানের উপর ভিত্তি করে বৃহত্তম বৃহত্তম সদস্য দ্বারা।
22urous

1

> <> , 66 বাইট

1}:?\~l1=?v{!
-:?!\:{*}1
v?( 4:{/}1<o"!"n-1
{:,} :{/?%}:+1
\:1-?n;

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

দক্ষ নয়, সবচেয়ে ছোট স্ট্রিংটি খুঁজে পায় না এবং দোভাষী খুব বড় সংখ্যার সাথে খুব ভাল আচরণ করেন না। তবে কি কমপক্ষে চেষ্টা করেছি? -vপতাকাটির মাধ্যমে সংখ্যার তালিকা হিসাবে ইনপুট নেয় ।

প্রথমে প্রতিটি সংখ্যার ফ্যাকটোরিয়ালাইজ করে এবং তাদের একসাথে গুণ করে ইনপুটটির মান গণনা করে। তারপরে এটি সর্বাধিক ফ্যাক্টরিয়ালটি সন্ধান করে যা মোটের মধ্যে পরিষ্কারভাবে বিভক্ত হয় এবং ফলাফলগুলি বের করে। এটি প্রাইম, (যা এটি আউটপুট দেয়) বা একটি 1 না পেয়ে এবং প্রোগ্রামটি থেকে বের না হওয়া পর্যন্ত পুনরাবৃত্তি করুন। এ কারণে এটি কখনও কখনও সংখ্যার সংক্ষিপ্ত প্রতিনিধিত্ব খুঁজে পায় না, উদাহরণস্বরূপ, পরীক্ষার কেস পরিবর্তে 7!2!2!7!2!2!2!2!প্রত্যাবর্তন 10!224করে 8!8!কারণ এটি দেখতে পায় যে মোটটি 10 ​​দ্বারা বিভাজ্য! প্রথম।


1

রুবি , 240 237 233 বাইট

এটি অবিশ্বাস্যভাবে অক্ষম

ইনপুট হিসাবে অ্যারের একটি অ্যারে গ্রহণ করে

একটি স্ট্রিং ফিরিয়ে দেয় এবং বলুন '720!', '6!!'এবং এর মধ্যে সবচেয়ে সংক্ষিপ্ত বিকল্পটি চয়ন করে'3!!!'

->i{f=->n{n>0?n*f[n-1]:1}
s=->a{eval a.map{|i|f[i]}*?*}
r=->e,a=[2]{e==s[a]?a:s[a]<=e&&(r[e,a[0..-2]+[a[-1]+1]]||r[e,a+[2]])}
j=->v{v.join(?!)+?!}
u=r[s[i]]
while j[g=u.map{|i|i&&r[i]?[r[i],p]:i}.flatten].size<j[u].size;u=g;end
j[u]}

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

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