স্টেনরোড বীজগণিতের ভিত্তি উপাদান তৈরি করুন


16

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

ধনাত্মক পূর্ণসংখ্যার একটি সিক্যুয়েন্সকে বলা হয় যদি প্রতিটি পূর্ণসংখ্যার পরেরটির থেকে কমপক্ষে দ্বিগুণ হয়। সুতরাং উদাহরণস্বরূপ [7,2,1]গ্রহণযোগ্য কারণ 722 এবং 221 । অন্যদিকে, [3,2]এটি গ্রহণযোগ্য নয় কারণ 3<22 । (টপোলজিতে আমরা সিকোয়েন্সের জন্য Sq7Sq2Sq1 লিখব [7,2,1])।

ডিগ্রী একটি ক্রম এটা এন্ট্রির মোট নয়। উদাহরণস্বরূপ, ডিগ্রি [7,2,1]হ'ল 7+2+1=10বাড়তি একটি গ্রাহ্য ক্রম, প্রথম উপাদান বিয়োগ অবশিষ্ট উপাদানের মোট তাই [7,2,1]বাড়তি হয়েছে 721=4

কার্য

এমন একটি প্রোগ্রাম লিখুন যা এক জোড়া ধনাত্মক পূর্ণসংখ্যার সাথে নেয় (d,e)এবং ডিগ্রির সমস্ত গ্রহণযোগ্য ক্রমের সেট dএবং তার চেয়ে কম বা সমান পরিমাণে আউটপুট দেয় e। আউটপুট একটি সেট তাই গ্রহণযোগ্য ক্রমগুলির ক্রমটি বিবেচনা করে না।

উদাহরণ:

 Input: 3,1
 Output: [[2,1]]

এখানে আমরা মোট 3 সহ গ্রহণযোগ্য ক্রমগুলি সন্ধান করছি two দুটি বিকল্প রয়েছে [3]এবং [2,1]। ( [1,1,1]এবং [1,2]যোগফল 3 তবে এটি গ্রহণযোগ্য নয়)। অতিরিক্ত [3]3 এবং বাড়তি [2,1]হয় 21=1 । সুতরাং, সঙ্গে বাড়তি শুধুমাত্র ক্রম 1 হয় [2,1]

Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])

যেহেতু অতিরিক্ত সর্বদা ডিগ্রির চেয়ে কম বা সমান, তাই আমাদের কোনও অতিরিক্ত শর্ত নেই। সুতরাং, আমরা শুধু ডিগ্রী 6. সব গ্রাহ্য সিকোয়েন্স অপশন আছে খুঁজে বের করার চেষ্টা করছি [6], [5, 1]এবং [4, 2]। (এগুলির অতিরিক্ত 6 , 51=4 এবং 42=2 ))

Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]

10 ডিগ্রির গ্রহণযোগ্য ক্রমগুলি হ'ল:

[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]

এর অতিরিক্ত 10 , 91=8 , 82=6 , 73=4 ,721=4 , এবং6-3-1=2 যথাক্রমে তাই গত তিন সমস্ত কাজ।

স্কোরিং

এটি কোড গল্ফ: বাইট জেতে সংক্ষিপ্ততম সমাধান।

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

আউটপুটটির যে কোনও পুনরায় ক্রম সমানভাবে ভাল, সুতরাং ইনপুট (3, 3), আউটপুট [[3],[2,1]]বা [[2,1],[3]]সমানভাবে গ্রহণযোগ্য (তবে [[1,2],[3]]তা নয়)।

Input: 1, 1
Output: [[1]]

Input: 3, 3
Output: [[2,1], [3]]

Input: 3, 1
Output: [[2,1]]

Input: 6, 6
Output: [[6], [5, 1], [4, 2]]

Input: 6, 4
Output: [[5,1], [4,2]]

Input: 6, 1
Output: []

Input: 7, 7
Output: [[7], [6,1], [4,2,1], [5,2]]

Input: 7,1
Output: [[4,2,1]]

Input: 10, 10
Output: [[10], [9,1], [7,2,1], [6,3,1], [8,2], [7,3]]

Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]

Input: 26, 4
Output: [15, 7, 3, 1]

Input: 26, 6
Output: [[16, 7, 2, 1], [16, 6, 3, 1], [15, 7, 3, 1], [16, 8, 2], [16, 7, 3]]

1
ঠিক আছে, আমি একটি সংক্ষিপ্ত বিবরণ প্রদান করব।
হুড

উত্তর:


6

05 এ বি 1 ই , 16 12 বাইট

গ্রিমে ধন্যবাদ 4 বাইট সংরক্ষণ করা

Åœíʒx¦@P}ʒÆ@

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

ব্যাখ্যা

Ŝ              # integer partitions
  í             # reverse each
   ʒ    }       # filter, keep only elements true under:
    x           # each element doubled
     ¦          # remove the first element in the doubled list
      @         # compare with greater than or equal with the non-doubled
       P        # product
         ʒ      # filter, keep only elements true under:
          Æ     # reduce by subtraction
           @    # compare with greater than or equal to second input

ćsO-অন্তর্নির্মিত হয় Æ
গ্রিমি

এছাড়াও À@¨হতে পারে ¦@
গ্রিমি

1
@ গ্রিমি: ওহ বাহ, আমি কীভাবে মিস করেছি :) আপনাকে ধন্যবাদ!
Emigna

5

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

Cases[IntegerPartitions@#,a_/;2a[[1]]-#<=#2>Max@Ratios@a<=.5]&

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

-উইটিন্যাট বাইট বাইট

  • IntegerPartitions@d : সংখ্যার যোগফলগুলির সমস্ত তালিকা পান d
  • Cases[,...]: নিম্নলিখিত শর্তে ফিল্টার করুন:
    • 2#& @@# - d <= e &&: দু'বার প্রথম উপাদানটি বিয়োগের যোগফলের চেয়ে কম হয় e , এবং ...
    • Max@Ratios@#<=.5: তালিকার ক্রমাগত উপাদানগুলির অনুপাতগুলি সমস্ত 1/2 এর চেয়ে কম।

কারণ e .5 এর চেয়ে কম, আমরা এটিকে একটি শৃঙ্খলিত অসমতায় পরিণত করতে পারি।

কয়েকটি অতিরিক্ত বাইটের জন্য, এটি উল্লেখযোগ্যভাবে দ্রুত: অনলাইনে চেষ্টা করে দেখুন!



5

জেলি ,  16  15 বাইট

-১ এরিক দ্য আউটগল্ফারকে ধন্যবাদ (একক ফিল্টারকে অনুমতি দেওয়ার জন্য চেকিংয়ের একটি স্মার্ট সমন্বয়)

:Ɲ;_/>¥’Ạ
ŒṗUçƇ

একটি ডায়াডিক লিঙ্ক d, ডানদিকে একটি বাম এবং একটি ধনাত্মক পূর্ণসংখ্যা গ্রহণ করে, eযা ইতিবাচক পূর্ণসংখ্যার তালিকার একটি তালিকা দেয়।

এটি অনলাইন চেষ্টা করুন! (পাদলেখ জেলি সম্পূর্ণ প্রোগ্রাম হিসাবে অন্তর্ভুক্ত তালিকা বিন্যাসের তালিকাটি এড়াতে ফলাফলগুলি বিন্যাস করে)

কিভাবে?

:Ɲ;_/>¥’Ạ - Link 1: admissible and within excess limit? descending list, L; excess limit, e
 Ɲ        - neighbour-wise:
:         -   integer division  -- admissible if all these are >1
      ¥   - last two links as a dyad - i.e. f(L,e):
    /     -   reduce (L) by:
   _      -     subtraction
     >    -   greater than (e)? (vectorises)  -- within excess if all these are ==0
  ;       - concatenate
       ’  - decrement (vectorises)
        Ạ - all (non-zero)?

ŒṗUçƇ - Main link: integer, d; integer, e
Œṗ    - partitions (of d)
  U   - reverse each
    Ƈ - filter keep those (v in that) for which:
   ç  -   call last Link (1) as a dyad - i.e. f(v, e)

আপনি একটি চালাক কৌতুক সহ একটি বাইট সংরক্ষণ করতে পারেন । এটি কেন কাজ করে তা বুঝতে একটু সময় নিতে পারে। : পি
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার দুর্দান্ত, আমি দুটি ফিল্টার (কনটেন্টেশন সহ) ইনলাইন করার জন্য কিছু অনুরূপ উপায় চেষ্টা করেছি, তবে সবকিছুই 16 হিসাবে প্রকাশিত হচ্ছিল যেহেতু আমি একই সময়ে হ্রাস কৌশলটি ব্যবহার করার কথা ভাবি নি।
জোনাথন অ্যালান

4

হাস্কেল , 59 58 54 বাইট

নিমিকে ধন্যবাদ 1 বাইট সংরক্ষণ করা হয়েছে

Xnor এর জন্য 4 বাইট সংরক্ষণ করা হয়েছে

0#_=[[]]
d#m=do i<-[1..div(m+d)2];(i:)<$>(d-i)#(2*i-d)

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


1
আপনি #সরাসরি সংজ্ঞা দিয়ে কিছু বাইট সংরক্ষণ করতে পারেন : এটি অনলাইনে চেষ্টা করুন!
এক্সএনওর

3

জাভাস্ক্রিপ্ট (ভি 8) ,  88 87  81 বাইট

হিসাবে ইনপুট লাগে (e)(d)। সিকোয়েন্সগুলি STDOUT এ মুদ্রণ করে।

e=>g=(d,s=x=d,a=[])=>s>0?d&&g(d-1,s,a,g(d>>1,s-d,[...a,d])):a[s]*2-x<=e&&print(a)

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

মন্তব্য

e =>                  // e = maximum excess
  g = (               // g is a recursive function taking:
    d,                //   d   = expected degree; actually used as the next candidate
                      //         term of the sequence in the code below
    s =               //   s   = current sum, initialized to d; we want it to be equal
                      //         to 0 when a sequence is complete
    x = d,            //   x   = copy of the expected degree
    a = []            //   a[] = current sequence
  ) =>                //
    s > 0 ?           // if s is positive:
      d &&            //   if d is not equal to 0:
        g(            //     outer recursive call:
          d - 1,      //       decrement d
          s,          //       leave s unchanged
          a,          //       leave a[] unchanged
          g(          //       inner recursive call:
            d >> 1,   //         update d to floor(d / 2)
            s - d,    //         subtract d from s
            [...a, d] //         append d to a[]
          )           //       end of inner recursive call
        )             //     end of outer recursive call
    :                 //   else:
      a[s] * 2 - x    //     s if either 0 (success) or negative (failure)
                      //     if s is negative, a[s] is undefined and this expression
                      //     evaluates to NaN, forcing the test to fail
      <= e            //     otherwise, we test whether the excess is valid
      && print(a)     //     and we print a[] if it is

3

পাইথ , 23 বাইট

f!>-FTvzf!<#2/MCtBT_M./

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

f!>-FTvzf!<#2/MCtBT_M./Q   Implicit: Q=input 1, vz=input 2
                           Trailing Q inferred
                     ./Q   Generate partitions of Q (ordered lists of integers which sum to Q)
                   _M      Reverse each
        f                  Filter keep elements of the above, as T, where:
               CtBT          Pair the set with itself without the first element and transpose
                             This yields all adjacent pairs of values
             /M              Integer divide each pair
           #                 Filter keep elements...
          < 2                ... less than 2
                             For admissible sequences this will be empty
         !                   Logical NOT - maps [] to true, populated lists to false
                           Result of filter are all admissible sequences
f                          Filter keep the above, as T, where:
   -FT                       Reduce T by subtraction to get degree
 !>   vz                     Is the above not greater than vz?
                           Implicit print

3

পাইথন ঘ , 213 বাইট

দৈত্য তালিকা বোধগম্যতা। সম্ভবত এটি করার সর্বোত্তম উপায় নয় তবে আমি যদি বিবৃতিগুলি এড়িয়ে যায় তবে আমি তা বুঝতে পারি না

import itertools as z
f=lambda d,e:[c for c in [[b for b in list(z.permutations(range(1,d+1),i)) if sum(b)==d and b[0]-sum(b[1:i])<=e and all([b[i]>=b[i+1]*2 for i in range(len(b)-1)])] for i in range(1,5)] if c]

পাইথন ঘ , 172 বাইট

from itertools import*
r=range
f=lambda d,e:filter(len,[[b for b in permutations(r(1,d+1),i)if d==sum(b)and~e<d-2*b[0]and all(i>=j*2for i,j in zip(b,b[1:]))]for i in r(5)])

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

@ জোনাস অউসেভিচিয়াসের সম্পাদনা অনুসারে


2
সাইটে স্বাগতম। কয়েকটি টিপস: আমি দেখতে পাই আপনি পাইথন যেখানে ফাঁকা স্থান প্রয়োজন সেখানে আপনি খুব বেশি পরিচিত নন। আপনার কাছে এমন বেশ কয়েকটি জায়গা রয়েছে যে স্থানগুলি ঠিক জরিমানা সরানো যেতে পারে, তাই আমি এটি সন্ধান করব। allজেনারেটর নিতে পারে এর মতো ফাংশনগুলি যাতে আপনি কেবল all(...)পরিবর্তে করতে পারেন all([...])। অবশেষে যেহেতু আপনার জমাটি সম্পূর্ণ বেনামে ফাংশন তাই আপনি অ্যাসাইনমেন্টের জন্য দণ্ডিত হন না ( f=) এবং সুতরাং এটি আপনার স্কোর (-2 বাইট) থেকে বাদ দিতে পারে।
পোস্ট রক গার্ফ হান্টার


ওহ এবং পাইথন 3 এও আপনি সাধারণত একটি বাইট সংরক্ষণ করেন এর [*(...)]পরিবর্তে আপনার সাথে তালিকায় কাস্ট করতে পারেন list(...)তবে আপনার ক্ষেত্রে 2 টি সংরক্ষণ করে কারণ এটি আপনাকে কোনও স্থান সরিয়ে ফেলতেও সহায়তা করে।
পোস্ট রক গার্ফ হান্টার

2
ফিল্টার অবজেক্টটি ফিরিয়ে দেওয়া ঠিক আছে কিনা 189 বাইট , অন্যথায় 192 দিয়ে [*filter(...)]। এছাড়াও স্বাগতম :)
মনিকা পুনরায়


2

কাঠকয়লা , 42 বাইট

Fθ⊞υ⟦⊕ι⟧FυF…·⊗§ι⁰θ⊞υ⁺⟦κ⟧ιIΦυ›⁼Σιθ‹η⁻⊗§ι⁰Σι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Fθ⊞υ⟦⊕ι⟧

প্রথমে থেকে তালিকাগুলির তালিকা তৈরি করুন [1]..[d]

FυF…·⊗§ι⁰θ⊞υ⁺⟦κ⟧ι

প্রতিটি তালিকার জন্য দ্বিগুণ প্রথম সংখ্যা থেকে সমস্ত সংখ্যা উপসর্গ করে নতুন তালিকা তৈরি dকরুন এবং সেই তালিকাটি প্রক্রিয়া করার জন্য তালিকার তালিকায় যুক্ত করুন। এটি নিশ্চিত করে যে সংখ্যাগুলি dতৈরি করা তার চেয়ে বেশি নয় এমন সমস্ত গ্রহণযোগ্য ক্রমগুলি ।

IΦυ›⁼Σιθ‹η⁻⊗§ι⁰Σι

কেবলমাত্র সেই তালিকাগুলি আউটপুট করুন যাদের ডিগ্রি dবেশি এবং এর চেয়ে বেশি নয় e। (ডিগ্রি এবং অতিরিক্তের যোগফল তালিকার প্রথম সংখ্যার দ্বিগুণ))


2

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

lambda d,e:[x for y in range(5)for x in permutations(range(1,d+1),y)if all(i>=j*2for i,j in zip(x,x[1:]))and d==sum(x)and~e<d-2*x[0]]
from itertools import*

d,eইনপুট হিসাবে গ্রহণ ; tuples আউটপুট তালিকা

@ ওরেঞ্জচেরির মত উত্তর এবং মন্তব্যগুলি থেকে সহায়তা; তবে আরও বাইট সংরক্ষিত

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



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