কোনও টানা সংখ্যা ছাড়াই 1 থেকে n পর্যন্ত গণনা করা হচ্ছে


19

লক্ষ্য

আপনাকে একটি পূর্ণসংখ্যা দেওয়া হবে n( n > 1)। আপনাকে পূর্ণসংখ্যার কতগুলি ক্রমবিধি সেখানে আউটপুট 1করতে nহবে যা শুরু হয় 1, শেষ হয় nএবং পরপর দুটি পূর্ণসংখ্যা থাকে না যা 1 দ্বারা পৃথক হয়।

পরিবর্তে আপনি যদি সম্পূর্ণ গ্রাফ নিতে K_nএবং পথের প্রান্ত অপসারণ 1-2-3-...-nআপনার কাছ থেকে হ্যামিল্টনিয়ান পাথ গণনা আবশ্যক 1থেকে nঅবশিষ্ট গ্রাফে।

উদাহরণগুলি f(n)কোনও ফাংশনের জন্য ব্যবহার করবে যা nবৈধ অনুমানের সংখ্যা গ্রহণ করে এবং আউটপুট করে তবে আপনার জমাটি কোনও ফাংশন বা কোনও প্রোগ্রাম হতে পারে।


উদাহরণ

কারণ n = 6, একটি সম্ভাব্য সমাধান হ'ল1-3-5-2-4-6

তবে 1-3-5-2-6-4এটি বৈধ সমাধান নয় কারণ এটি শেষ হয় না 6

প্রকৃতপক্ষে, n = 6কেবলমাত্র 2 টি সমাধান রয়েছে ( 1-4-2-5-3-6অন্যটি হ'ল)।

অত: পর f(6) = 2


জন্য n = 4শুধুমাত্র একাধিক বিন্যাসন যা শুরু 1এবং শেষ 4হয় 1-2-3-4এবং 1-3-2-4। উভয় 2ক্ষেত্রেই সংলগ্ন 3, একটানা পূর্ণসংখ্যা প্রদান করে যা 1 দ্বারা পৃথক হয়। সুতরাং f(4) = 0


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

f(6) = 2
f(4) = 0
f(8) = 68
f(13) = 4462848

বিজয়ী মানদণ্ড

এটি কোড-গল্ফ, সংক্ষিপ্ত উত্তরটি জেতে।


7
আপনি দেখতে, বাচ্চাদের, আপনি শুধু কতগুলি একাধিক বিন্যাসন পরীক্ষা করতে পারছি না [2..n-1]কোন বদ্বীপ ধারণ 1বা -1, এছাড়াও আপনি যে কেউ চেক করতে তাদের দিয়ে শুরু আছে 2বা শেষ n-1...
ETHproductions

1
তালিকাটি কি 1 দিয়ে শুরু করতে হবে এবং সংখ্যার সাথে শেষ করতে হবে?
Okx

3
হয়তো ওপি মানে "সংলগ্ন" "পরপর" নয়?
স্টাইলজ

6
উদ্ভট ক্রমটি এখানে রয়েছে: algo.inria.fr/libraries/autocomb/ographics99.ps পৃষ্ঠা on তে লেখা আছে Q_ser:=z + 2 z^6 + 10 z^7 + 68 z^8 + 500 z^9 + 4174 z^10 + 38774 z^11 + 397584z^12 + 4462848 z^13 + 54455754 z^14আমি সূত্রগুলি ব্যবহারের চেষ্টা করে এখন কিছুটা সময় ব্যয় করেছি, তবে আমি এই অনুক্রমটি তৈরি করতে পারি না। Z এর ঘনিষ্ঠটি দেখতে আশ্চর্য হ'ল সূত্রটির ইনপুট এবং ফলাফলটি হ'ল গুণ গুণক। সেখান থেকে সূত্রটি কীভাবে
ক্রিশ্চিয়ান ওয়েস্টারবিক

1
@ ক্রিশ্চিয়ান ওয়েস্টারবিইক যাকে ক্রমটির জন্য উত্পাদক ফাংশন বলা হয় । জেনারেটিং ফাংশন সহ অনেক সিকোয়েন্স রয়েছে যা সিকোয়েন্সের চেয়ে ভাল বন্ধ ফর্ম রয়েছে, এটি দুর্দান্ত জিনিস!
Carmeister

উত্তর:


6

এমএটিএল , 16 বাইট

qtq:Y@0&Yc!d|qAs

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

12এটি ছাড়িয়ে যাওয়া ইনপুটগুলির জন্য স্মৃতিশক্তি শেষ।

ব্যাখ্যা

q      % Implicitly input n. Push n-1
tq     % Duplicate and subtract 1: pushes n-2
:      % Range [1 2 ... n-2]
Y@     % Matrix with all permutations, each in a row
0      % Push 0
&Yc    % Append n-1 and predend 0 to each row
!      % Tranpose
d      % Consecutive differences along each column
|      % Absolute value
q      % Subtract 1
A      % All: true if all values in each column are non-zero
s      % Sum. Implicitly display

1
ভাল কাজ করছেন, ভাল করেছেন :)
ফিলিপ

1
যদিও এই সমস্যায় সত্যিই কিছু দুর্দান্ত অগ্রগতি হয়েছিল, তবে এখনও আপনার সমাধানটি সবচেয়ে কম or এটি জেলিটির চেয়েও দ্রুত। Congratz!
ফিলিপ

19

গণিত, 58 বাইট, বহুবর্ষ ( এন ) সময়

Abs[Sum[(k-1)Hypergeometric2F1[k,k-#,2,2](#-k)!,{k,#}]-1]&

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

নিষ্ঠুর বল দিয়ে ক্রমান্বয়ে পুনরাবৃত্তি করার পরিবর্তে, আমরা তাদের অন্তর্ভুক্তি – বর্জনীয় নীতিটি সংযুক্ত করে গণনা করি।

এস সব একাধিক বিন্যাসন সেট হতে দিন [1, ..., এন] σ সঙ্গে 1 = 1, σ এন = , এবং দিন এস আমি একাধিক বিন্যাসন সেট হতে σ ∈ এস যেমন যে | σ আমি - σ আমি +1 | = 1. তারপরে আমরা গণনাটি খুঁজছি

| এস | - | এস 1 ∪ ⋯ ∪ এস এন - 1 | = ∑ 2 ≤ কেn + 1; 1 ≤ i 2 <⋯ < i k - 1 < n (−1) কে - 2 | এস আই 2 ∩ ⋯ ∩ এস আই কে - 1 |

এখন, | এস আই 2 ∩ ⋯ ∩ এস আই কে - 1 | কেবল k এবং উপর নির্ভর করে ধারাবাহিক সূচকগুলির সংখ্যা J এর উপর [ i 1 , i 2 ,…, i k - 1 , i k ] যেখানে সুবিধার জন্য আমরা i 1 = 0 এবং i k = n স্থির করি । বিশেষ করে,

| এস আই 2 ∩ ⋯ ∩ এস আই কে - 1 | = 2 জে - 2 ( এন - কে ) !, 2 ≤ জেকেn এর জন্য ,
| এস আই 2 ∩ ⋯ ∩ এস আই কে - 1 | = 1, জে = 1, কে = এন + 1 এর জন্য।

জে রান সহ এই জাতীয় সূচী সংখ্যাগুলির [ i 1 , i 2 ,…, i k - 1 , i k ] সংখ্যা is

( কে - 1 সি জে - 1 ) ( এন - কে সি জে - 2 ), 2 ≤ জেকেএন ,
1, জে = 1, কে = এন + 1 এর জন্য।

ফলাফল তখন

(−1) এন - 1 + ∑ 2 ≤ কেএন2 ≤ জেকে (−1) কে - 2 ( কে - 1 সি জে - 1 ) ( এন - কে সি জে - 2 ) 2 জে - 2 ( এন - কে )!

হাইপারজেমেট্রিক 2 এফ 1 ফাংশনটি ব্যবহার করে j এর অভ্যন্তরীণ যোগফলটি লেখা যেতে পারে :

(−1) এন - 1 + ∑ 2 ≤ কেএন (−1) কে ( কে - 1) 2 এফ 1 (2 - কে , কে - এন ; 2; 2) ( এন - কে )!

যার কাছে আমরা একটি পিফ্যাফ রূপান্তর প্রয়োগ করি যা আমাদেরকে পরম মান ব্যবহার করে −1 এর ক্ষমতাগুলি গল্ফ করতে দেয়:

(−1) এন - 1 + ∑ 2 ≤ কেএন (−1) এন ( কে - 1) 2 এফ 1 ( কে , কে - এন ; 2; 2) ( এন - কে )!
= | −1 + ∑ 1 ≤ কেn ( কে - 1) 2 এফ 1 ( কে , কে - এন ; 2; 2) ( এন - কে )! |।

ডেমো

In[1]:= Table[Abs[Sum[(k-1)Hypergeometric2F1[k,k-#,2,2](#-k)!,{k,#}]-1]&[n],{n,50}]

Out[1]= {1, 0, 0, 0, 0, 2, 10, 68, 500, 4174, 38774, 397584, 4462848, 

>    54455754, 717909202, 10171232060, 154142811052, 2488421201446, 

>    42636471916622, 772807552752712, 14774586965277816, 297138592463202402, 

>    6271277634164008170, 138596853553771517492, 3200958202120445923684, 

>    77114612783976599209598, 1934583996316791634828454, 

>    50460687385591722097602304, 1366482059862153751146376304, 

>    38366771565392871446940748410, 1115482364570332601576605376898, 

>    33544252621178275692411892779180, 1042188051349139920383738392594332, 

>    33419576037745472521641814354312790, 

>    1105004411146009553865786545464526206, 

>    37639281863619947475378460886135133496, 

>    1319658179153254337635342434408766065896, 

>    47585390139805782930448514259179162696722, 

>    1763380871412273296449902785237054760438426, 

>    67106516021125545469475040472412706780911268, 

>    2620784212531087457316728120883870079549134420, 

>    104969402113244439880057492782663678669089779118, 

>    4309132147486627708154774750891684285077633835734, 

>    181199144276064794296827392186304334716629346180848, 

>    7800407552443042507640613928796820288452902805286368, 

>    343589595090843265591418718266306051705639884996218154, 

>    15477521503994968035062094274002250590013877419466108978, 

>    712669883315580566495978374316773450341097231239406211100, 

>    33527174671849317156037438120623503416356879769273672584588, 

>    1610762789255012501855846297689494046193178343355755998487686}

3
আমার মন ফুঁকছে, ভাল কাজ
ফিলিপ

6

জেলি , 17 16 বাইট

ṖḊŒ!ð1;;⁹IỊṀðÐḟL

একটি monadic লিঙ্ক।

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

কিভাবে?

ṖḊŒ!ð1;;⁹IỊṀðÐḟL - Link: number n
Ṗ                - pop (implicit range build) -> [1,n-1]
 Ḋ               - dequeue -> [2,n-1]
  Œ!             - all permutations of [2,n-1]
    ð       ðÐḟ  - filter discard those entries for which this is truthy:
     1;          -   1 concatenated with the entry
       ;⁹        -   ...concatenated with right (n)
         I       -   incremental differences
          Ị      -   is insignificant (absolute value <=1)
           Ṁ     -   maximum
               L - length (the number of valid arrangements)

দুঃখিত তবে এটি পরীক্ষার কেসগুলি পূরণ করে না
ফিলিপ

1
হ্যাঁ, আপনি ও্যাক্স একই ভুল করেছেন এবং আমি প্রথমে করেছি। আপনাকে এই হিসাব করতে হবে যে দ্বিতীয় সংখ্যাটি 2 হতে পারে না এবং দ্বিতীয় থেকে শেষ সংখ্যাটি এন -1 হতে পারে না
ETH প্রোডাকশনগুলি

@ ফিলিপ এটি ঠিক করে দিয়েছে।
জোনাথন অ্যালান

আমি IỊṀব্যবহারটি বৈধ বলে মনে করি না । বিশেষত, -2উদাহরণস্বরূপ যদি সেখানে একটি ব-দ্বীপ হয়? আপনি IAỊṀ+1 এর সাথে এটি ঠিক করতে পারেন ।
এরিক আউটগল্ফার

1
@ জোনাথান অ্যালান ওহ আমি ভেবেছিলাম এটি ফিরে এসেছে x <= 1
এরিক দি আউটগল্ফার

5

জাপট , 19 18 বাইট

o2 á è_pU äÉ m²e>1

এটি অনলাইন পরীক্ষা! আমি এর চেয়ে বড় কোনও বিষয়ে পরীক্ষা করার পরামর্শ দেব না 10

ব্যাখ্যা

o2 á è_  pU äÉ  m²  e>1
o2 á èZ{ZpU ä-1 mp2 e>1}
                          : Implicit: U = input integer
o2                        : Create the range [2..U-1].
   á                      : Generate all permutations of this range.
     èZ{               }  : Check how many permutations Z return a truthy value:
        ZpU               :   Push U to the end of Z.
            ä-1           :   Push 1 to the beginning of Z, then take the difference
                          :   of each pair of items.
                m         :   Map each item X to
                 p2       :     X ** 2. This gives a number greater than 1 unless the
                          :     item is 1 or -1.
                    e>1   :   Return whether every item in this list is greater than 1.
                          :   This returns `true` iff the permutation contains no
                          :   consecutive pairs of numbers.
                          : Implicit: output result of last expression

সাবাশ! মজার বিষয় কীভাবে আমার ব্রুট ফোর্স কোডটি এন = ১৩-এর চেয়ে বেশি পাবে না আহা
ফিলিপ

@ ফিলিপি আমি এত তাড়াতাড়ি গ্রহণের প্রস্তাব দিচ্ছি না, আমি নিশ্চিত যে এই 05AB1E বা জেলি ;-) -র মধ্যে আরও কম হবে
ETH প্রোডাকশনগুলি

টেস্টকেসে ব্যর্থ 1
Okx

2
@ অকক্স ওপি নির্দিষ্ট করে দিয়েছে যে আমরা ধরে নিতে পারি n > 1
ইটিএইচ প্রোডাকশনস


5

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

@ এক্সনোরকে ধন্যবাদ 11 বাইট সংরক্ষণ করা হয়েছে।

Q_rec@ ChristiaanWesterbeek এর সন্ধানের 7 পৃষ্ঠায় ফলাফল ব্যবহার করে আমরা পেয়েছি

f 1=1
f n|n<6=0
f n=sum$zipWith((*).f)[n-5..][n-4,1,10-2*n,4,n-2]

তাদের পরবর্তী ফলাফল এর haসাথে কীভাবে সম্পর্কিত তা আমি বুঝতে পারি না , তবে গতি বাড়ানোর পরে (প্রথমে স্মৃতিচারণের মাধ্যমে পূর্ববর্তী সংস্করণগুলি দেখুন, তারপরে নীচের মত) আমি তাদের নম্বর পেয়েছি।

যদিও উপরেরটি ঠিক আছে তবে n=20এটি কীভাবে পুনরাবৃত্তি করবেন না তা উদাহরণস্বরূপ। এখানে একটি দ্রুত সংস্করণ রয়েছে (কেবলমাত্র এর জন্য n>=6) এছাড়াও কেবল ধ্রুবক মেমরির প্রয়োজন হবে - যদি কেবল সংখ্যা বৃদ্ধি না রাখে ...

f n=last$foldl(#)[1,0,0,0,0][6..n]
l#n=tail l++[sum$zipWith(*)l[n-4,1,10-2*n,4,n-2]]

যে দেয়

Prelude> f 50
1610762789255012501855846297689494046193178343355755998487686
Prelude> f 500
659178618863924802757920269977240274180092211041657762693634630044383805576666007245903670780603497370173231423527767109899936008034229541700392144282505597945561328426013937966521561345817045884498867592832897938083071843810602104434376305964577943025310184523643816782047883794585616331928324460394146825636085453532404319881264974005968087265587062691285454120911586459406436421191277596121471930913837355151842093002557978076653884610826296845041929616496533544124347765641367732716560025553179112645454078955409181466212732427071306363820080109636358537270466838558068527692374178581063316309789026101221004745226182671038004326069705775312654329754698423385241664984156235692539255677944294995403233446243315371404887473868003155621849544566385172835597260848972758443874423271017007843907015007416644383573987606586308556317833384896267539628278571497402655322562624217658332870157802254043614726316296058329670971054977099155788604175817828380564156329839201579006169173002756295957371639199917376529472990059986681882194726437566769717959443857298155265292535858523609764515938314672724480762724541633037484152303637096

এটি পেতে কোনও সমস্যা নেই f 5000তবে আমি ফলাফলটি আটকাতে চাই না ...


বিটিডাব্লু, অভিনব গণিত ব্যবহার করা এবং এখনও (অতি) ব্রুট ফোর্স ব্যবহার করা সম্ভব নয়। প্রথমত, সমস্ত অনুমতিগুলি দেখার পরিবর্তে আংশিক অনুমতিগুলি দেখুন এবং কেবলমাত্র তারা অবৈধ না হলে সেগুলি প্রসারিত করুন। এটি দিয়ে শুরু করা সমস্ত অনুমতি দেখতে কোনও লাভ নেই 1 6 5। দ্বিতীয়ত, কিছু আংশিক ক্রিয়াকলাপ পছন্দ করে 1 3 5 7এবং 1 5 3 7ঠিক একই বৈধ ধারাবাহিকতা থাকে, তাই তাদের একসাথে পরিচালনা করুন। এই ধারণাগুলি ব্যবহার করে, আমি n=16 0.3s পর্যন্ত মানগুলি গণনা করতে পারি ।


আপনি কোফিসিয়েন্টস আউট প্যাক করে একটি ডট মত রিকার্সিভ অভিব্যক্তি খাটো লিখতে পারেন: f n=sum$zipWith((*).f)[n-5..][n-4,1,10-2*n,4,n-2]
xnor

@ এক্সনর ঠিক আছে, ধন্যবাদ!
খ্রিস্টান সিভার্স

এটি কিছু ভাল কাজ, আমি এই সম্প্রদায়টির যে ফলাফল নিয়ে এসেছি তাতে আমি অবাক! খুব খারাপ এটি একটি গল্ফ ^^
ফিলিপ


3

গণিত, 66 বাইট

Count[Permutations@Range@#,x:{1,__,#}/;FreeQ[Differences@x,1|-1]]&

ব্যাখ্যা

Functionপ্রথম যুক্তি দিয়ে #

Count[                                                             (* Count the number of *)
      Permutations@                                                (* permutations of *)
                   Range@#,                                        (* the list {1, ..., #} *)
                           x:{1,__,#}                              (* of the form {1, __, #} *)
                                     /;                            (* such that *)
                                             Differences@x,        (* the list of differences of consecutive elements *)
                                       FreeQ[                      (* is free of elements of the form *)
                                                           1|-1    (* 1 or -1 *)
                                                               ]]&

3

জাভাস্ক্রিপ্ট (ES6), 100 74 72 60 বাইট

f=n=>n--<6?!n|0:f(n)*--n+4*f(n--)-2*f(n--)*--n+f(n)*++n+f(n)

নীচে @ পিটারটেলারের গল্ফ-মাস্টারির আগে সংস্করণ দেওয়া আছে

f=n=>n<6?n==1|0:(n-4)*f(n-5)+f(n-4)-2*(n-5)*f(n-3)+4*f(n-2)+(n-2)*f(n-1)

@ ক্রিশ্চিয়ানসিভারের জবাবের জন্য ধন্যবাদ যে '0, 2, 10, 68, 500, 4174, 38774, 397584' গুগল করার পরে আমি একটি কাগজ থেকে একটি হাস্কেল সমাধানটি খসড়া করতে পেরেছি, এখানে একটি জাভাস্ক্রিপ্ট সংস্করণ রয়েছে যা ছাড়াই দেয় না।

ব্যবহার

for (i=1; i<=20; i++) {
  console.log(i, f(i))
}

1 1 
2 0 
3 0 
4 0 
5 0 
6 2 
7 10 
8 68 
9 500 
10 4174 
11 38774 
12 397584 
13 4462848 
14 54455754 
15 717909202 
16 10171232060 
17 154142811052 
18 2488421201446 
19 42636471916622 
20 772807552752712

1
কার্য বিবরণ কেবল f(n)কখন জন্য জিজ্ঞাসা করে n>1, তাই আপনি কী ফিরে আসবেন তা বিবেচ্য নয় n=1। এছাড়াও আমি f(1)=1সঠিক মনে করি ।
খ্রিস্টান সিভর্স

আপনি n<6?n==1|0:আরও দ্বি-চর সাশ্রয় হিসাবে বিশেষ ক্ষেত্রে একত্রিত করতে পারেন ।
পিটার টেলর

গ্রেট। আমি এই 2 টি মন্তব্যের জন্য সামঞ্জস্য করেছি।
ক্রিশ্চিয়ান ওয়েস্টারবিক

1
এবং শর্তাবলী পুনরায় সাজিয়ে এবং মূল্যায়নের আদেশের উপর নির্ভর করে 60 এ নেমে আসা সম্ভব:f=n=>n--<6?!n|0:f(n)*--n+4*f(n--)-2*f(n--)*--n+f(n)*++n+f(n)
পিটার টেলর

1

ব্র্যাচল্যাগ , 26 বাইট

{⟦₁pLh1&~tLs₂ᶠ{-ȧ>1}ᵐ}ᶜ|∧0

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

ব্যাখ্যা

{                    }ᶜ       Output = count the number of outputs of:
 ⟦₁pL                           L is a permutation of [1, …, Input]
    Lh1                         The head of L is 1
       &~tL                     The tail of L is the Input
          Ls₂ᶠ                  Find all sublists of length 2 of L
              {    }ᵐ           Map on each sublist:
               -ȧ>1               The elements are separated by strictly more than 1
                       |      Else (no outputs to the count)
                        ∧0    Output = 0

1

পাইথন 3 , 109 107 102 বাইট

q=lambda s,x,n:sum(q(s-{v},v,n)for v in s if(v-x)**2>1)if s else x<n;f=lambda n:q({*range(2,n)},1,n-1)

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

ফাংশনটি এক-লাইনে না করার চেষ্টা করে চারটি বাইট অপসারণ করা হয়েছে (@ শুকির পরামর্শ অনুসারে) এবং absস্কোয়ারের পরিবর্তে আরেকটি বাইট । (পাইথন 3.5++ প্রয়োজন)




0

গণিত, 134 বাইট

(s=Permutations@Range[2,#-1];g=Table[Join[Prepend[s[[i]],1],{#}],{i,Length@s}];Length@Select[Union@*Abs@*Differences/@g,FreeQ[#,1]&])&


পরীক্ষার কেস n: 2 থেকে 12

{0, 0, 0, 0, 2, 10, 68, 500, 4174, 38774, 397584}


0

পাইথন 2 , 105 বাইট

lambda n:reduce(lambda a,i:a+[i*a[-5]+a[-4]+2*(1-i)*a[-3]+4*a[-2]+(i+2)*a[-1]],range(2,n),[0,1]+4*[0])[n]

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

এটি ফিলিপ ফ্ল্যাওলেট পত্রিকার @ ক্রিশ্চিয়ান ওয়েস্টারবিেক আবিষ্কার করা কাগজের উপর ভিত্তি করে ; এটি আমার পাইথন 3 সমাধানের চেয়ে আরও দ্রুত এবং দুটি বাইট সংক্ষিপ্ত যা সম্ভাব্য ক্রমশক্তি গণনা করে। (পাইথন 3 এ, reduceবিরক্তিকরভাবে সরানো হয়েছে functools))

নম্পির ডট পণ্য ব্যবহার করে একটি আরও সংক্ষিপ্ত সংস্করণ রয়েছে তবে এটি ওভারফ্লো খুব দ্রুত প্রবাহিত হয় এবং আমদানি করাতে নিম্পির প্রয়োজন হয়। তবে এর মূল্য কী:

lambda n:reduce(lambda a,i:a+[dot([i,1,2-2*i,4,i+2],a[-5:])],range(2,n),[0,1]+4*[0])[n]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.