গ্রিডকে ত্রিভুজগুলিতে ভাগ করা


18

লক্ষ্য

এই চ্যালেঞ্জের লক্ষ্যটি এমন একটি ক্রিয়াকলাপ তৈরি করা nযা n X 1গ্রিডকে ত্রিভুজগুলিতে বিভক্ত করার কয়েকটি সংখ্যাকে গণনা করে যেখানে ত্রিভুজের সমস্ত উল্লম্ব সমস্ত গ্রিড পয়েন্টে রয়েছে।

উদাহরণ

উদাহরণস্বরূপ, 2 x 1 গ্রিডকে বিভাজন করার জন্য 14 টি উপায় রয়েছে, সুতরাং f(2) = 14নিম্নলিখিত পার্টিশনের মাধ্যমে 2 এক্স 1 এর পার্টিশন যেখানে পার্টিশনগুলিতে যথাক্রমে 2, 2, 2, 2, 4 এবং 2 স্বতন্ত্র অবস্থান রয়েছে।

স্কোরিং

এটি , তাই সংক্ষিপ্ততম কোড জিততে পারে।


10
কিছু অতিরিক্ত পরীক্ষার কেসগুলি উপকারী হবে, সুতরাং আমরা আমাদের জমাটি সঠিক কিনা তা যাচাই করতে পারি।
অ্যাডমবর্কবার্ক

8
আপনি অবনতিহীন ত্রিভুজগুলি নির্দিষ্ট করতে চাইতে পারেন ।
আর্নৌল্ড

1
এই ব্যাখ্যাটি প্রতিবিম্বিত করতে আমি OEIS ক্রম A051708 এ সম্পাদনা করেছি ।
পিটার কেজে

উত্তর:


2

05 এ বি 1 ই , 13 বাইট

·LÉœÙεÅγo;P}O

@ বুবলারের জেলি উত্তরটির পোর্ট ।

অন্তর্নির্মিত অন্তর্নির্মিত কারণে খুব ধীর।

এটি অনলাইনে চেষ্টা করুন বা প্রথম চারটি ইনপুট যাচাই করুন

ব্যাখ্যা:

·                # Double the (implicit) input
 L               # Create a list in the range [1, doubled_input]
  É              # Check for each if they're odd (1 if truthy, 0 is falsey)
                 # We now have a list of n 0s and n 1s (n being the input)
   œ             # Get all permutations of that list
    Ù            # Only leave the unique permutations
     ε     }     # Map each permutation to:
      Åγ         #  Run-length encode the current value (short for `γ€g`)
        o        #  Take 2 to the power for each
         ;       #  Halve each
          P      #  Take the product of the mapped permutation
            O    # Sum all mapped values together (and output implicitly)

19

হাস্কেল , 60 55 54 52 বাইট

অনেকগুলি উদাহরণ আঁকার এবং প্রোগ্রামিংয়ের পরে, আমার কাছে মনে হয়েছিল যে এটি দুর্বৃত্তদের সমস্যাটির মতোই:

(এন+ +1)×(এন+ +1)(0,0)(এন,এন)+ +(1,0)+ +(0,1)

1×এন

-২ বাইটের জন্য @ পিটারটেলর এবং -২ বাইটের জন্য @ পোষ্ট লেফটগারফহান্টারকে ধন্যবাদ!

b 0=1
b 1=2
b n=div((10*n-6)*b(n-1)-9*(n-2)*b(n-2))n

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


আমি প্রথম কয়েকটি মান দিয়ে অনুসন্ধান করে OEIS ক্রমটি পেয়েছি। কেন এটি মেলে তার জন্য দুর্দান্ত ব্যাখ্যা। আপনি কি এই বিকল্প সমন্বয়মূলক ব্যাখ্যা সম্পর্কে একটি মন্তব্য যুক্ত করতে এটি সম্পাদনা করতে চান? যদি না হয়, আমি সম্ভবত।
পিটার টেলর

বিটিডাব্লু আপনার সূচকটি সামঞ্জস্য করতে হবে, কারণ এখানে সঠিক উত্তর A051708(n+1)। সুতরাং আমি প্রথম সঠিক উত্তর পোস্ট করেছি :
পি

আমি এটিকে উপরে এবং নীচের প্রান্তগুলির সাথে ত্রিভুজগুলি তৈরি করে উপরের এবং নীচের প্রান্তের সাথে সামঞ্জস্য করে রুক ম্যাপগুলি ত্রিভুজগুলিতে নিয়েছি?
নিল

@ পিটারটেলর ধিক্কার, আমার ভুলটি নির্দেশ করার জন্য ধন্যবাদ :)
flawr

5
@ নীল আমি একটি গ্রাফিকাল ব্যাখ্যা যুক্ত করেছি।
flawr

8

হাস্কেল , 42 বাইট

0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n

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

মোটামুটি প্রত্যক্ষ বাস্তবায়ন যা 2 টির বেশি ভেরিয়েবলের পুনরাবৃত্তি করে।

আমরা কীভাবে এই সমাধানটি পেতে পারি তা এখানে। সরাসরি পুনরাবৃত্ত সূত্র প্রয়োগকারী কোড দিয়ে শুরু করুন:

54 বাইট

0%0=1
a%b=sum$map(a%)[0..b-1]++map(b%)[0..a-1]
f n=n%n

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

ব্যবহার flawr এর দাড়কাক পদক্ষেপ ব্যাখ্যা , a%bপাথ থেকে দাড়কাক পেতে সংখ্যা (a,b)থেকে (0,0), ব্যবহার করে শুধুমাত্র হ্রাস একটি তুল্য চলে আসে। প্রথম পদক্ষেপটি হ্রাস aবা হ্রাস হ্রাস করে b, অন্যটিকে একই রাখে, তাই পুনরাবৃত্তির সূত্র।

49 বাইট

a?b=sum$map(a%)[0..b-1]
0%0=1
a%b=a?b+b?a
f n=n%n

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

map(a%)[0..b-1]++map(b%)[0..a-1]দু'টি অর্ধেক একই aএবং bঅদলবদল হয়ে গেছে তা উল্লেখ করে আমরা পুনরাবৃত্তি এড়াতে পারি । সহায়ক কলটি a?bপ্রথম চলনটি যেখানে কমে যায় সেই রাস্তাগুলি গণনা করে aএবং তাই b?aযেখানে প্রথম পদক্ষেপটি হ্রাস পায় তাদের সংখ্যা গণনা করে b। এগুলি সাধারণভাবে পৃথক এবং এগুলি যুক্ত হয় a%b

সংশ্লেষটি a?bতালিকা অনুধাবন হিসাবেও লেখা যেতে পারে a?b=sum[a%i|i<-[0..b-1]]

42 বাইট

0?0=1
a?b=sum[a?i+i?a|i<-[0..b-1]]
f n=n?n

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

পরিশেষে, আমরা পরিত্রাণ পেতে %এবং মাত্র পরিপ্রেক্ষিতে পুনরাবৃত্তির লিখতে ?প্রতিস্থাপন a%iসঙ্গে a?i+i?arecursive কল হবে।

নতুন বেস কেস এই ঘটায় ?আউটপুট দিতে ডবল যে ?49-বাইট সংস্করণে, সঙ্গে যেহেতু 0?0=1, আমরা হবে 0%0=0?0+0?0=2f n=n?nআমাদের অন্যান্য করণীয়টি অর্ধেক ছাড়াই এটি সংজ্ঞায়িত করতে দেয় ।


আপনার 49-বাইট সমাধানটি আমার উত্তর হিসাবে একই পুনরাবৃত্তি ব্যবহার করে, তবে আমি এখনও 42-বাইটটি খুঁজে পাইনি। একটি ব্যাখ্যা ভাল হবে।
পিটার টেলর

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

অপারেটর উপরের লাইনের a%bনোড 0,1,...,aএবং 0,1,..,bনীচের লাইনের নোড ব্যবহার করে পার্টিশনের সংখ্যা গণনা করে । অপারেটর নীচের নোডটি ইতিমধ্যে ব্যবহৃত হলে আপনি a?bউপরের নোড থেকে একটি নতুন লাইন যুক্ত করতে পারেন তার সংখ্যা গণনা করে । (আপনি সমস্ত নোডের সাথে সংযোগ করতে পারেন তবে আপনাকে সেগুলির প্রত্যেকটির জন্য aba[0,1,...,b-1]
পুনরাবৃত্তি করতে হবে

@ ফ্লোয়ার, এটি 49-বাইট, যা আমি বুঝতে পারি। এটি ?42-বাইটের মধ্যে একটি যা আমি করি না এবং বিশেষত কৌতূহলীটি হ'ল এটি প্রতিসম নয়।
পিটার টেলর

@ পিটারটেলর এই বিভ্রান্তির জন্য দুঃখিত, আমি কোনওভাবে দুটি সমাধান মিশ্রিত করেছিলাম। আমি মনে করি আমরা দুটি সমাধানকে খুব সহজেই প্রতিটিের মধ্যে রূপান্তর করতে পারি: প্রথম ধাপে আমরা map...একটি তালিকা বোঝার সাথে প্রতিস্থাপন করতে পারি , দ্বিতীয় ধাপে আমরা কেবল সংজ্ঞাটি সংযুক্ত করি %:a?b=sum$map(a%)[0..b-1], a%b=a?b+b?a a?b=sum[a%i|i<-[0..b-1]], a%b=a?b+b?a a?b=sum[a?i+i?a|i<-[0..b-1]]
flawr

7

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

{2,*e!{e`0f=:(1b2\#}%1b}

অনলাইন ডেমো

এটি 0 ও 1 এর সমাপ্তির উপর বাবলারের সামিটের পদ্ধতির ব্যবহার করে ।nn

ব্যবচ্ছেদ

{         e# Define a block
  2,*     e#   Given input n, create an array of n 0s and n 1s
  e!      e#   Generate all permutations of that array
  {       e#   Map:
    e`    e#     Run-length encode
    0f=:( e#     Extract just the lengths and decrement them
    1b    e#     Sum
    2\#   e#     Raise 2 to the power of that sum
  }%
  1b      e#  Sum the mapped values
}

বিকল্প পদ্ধতি (২৮ বাইট)

{_1aa{_2$,f{j}@@,f{j}+1b}2j}

অনলাইন ডেমো

ব্যবচ্ছেদ

ত্রিভুজগুলির একটিতে একটি অনুভূমিক প্রান্ত এবং দুটি প্রান্ত রয়েছে যা অনুভূমিক রেখাগুলি লিঙ্ক করে। আনুভূমিক প্রান্তগুলিকে তাদের দুটি এক্স-কোর্ডের একটি দ্বিগুণ করে লেবেল করুন এবং অভিধানিকভাবে সাজান। তারপরে প্রথম প্রান্তটি হ'ল (0,0), শেষ প্রান্তটি হ'ল (n,n)এবং দুটি পর পর দুটি প্রান্ত দুটি অবস্থানের মধ্যে একটির সাথে অবশ্যই আলাদা fer এটি একটি সাধারণ পুনরাবৃত্তির জন্য তৈরি করে, যা আমি স্মৃতিকৃত পুনরাবৃত্তি অপারেটরটি ব্যবহার করে প্রয়োগ করেছি j:

{            e# Define a block
  _          e#   Duplicate the argument to get n n
  1aa        e#   Base case for recursion: 0 0 => 1
  {          e#   Recursive body taking args a b
    _2$,f{j} e#     Recurse on 0 b up to a-1 b
    @@,f{j}  e#     Recurse on a 0 up to a b-1
    +1b      e#     Combine and sum
  }2j        e#   Memoised recursion with 2 args
}

বিঃদ্রঃ

আমি প্রথমবারের মতো fjসিজেএমে সমর্থিত হতে চাইনি। এখানে এটি স্কোরটি 24 বাইটেও নামিয়ে আনবে। সম্ভবত আমার একটি প্যাচ লেখার চেষ্টা করা উচিত ...


হ্যাঁ, আমি আপনাকে 10 সেকেন্ডের ব্যবধানে পরাজিত করেছি, আমি মনে করি না যে আমি কখনই এর কাছাকাছি ছিলাম :)
flawr

@ ফ্লোয়ার, আমি একটি বিচ্ছিন্নতা লেখার আগে পোস্টিং বিবেচনা করেছি, কিন্তু আমি ভেবেছিলাম যে আমার এটি দ্রুত ছুঁড়ে ফেলার সময় হয়েছে। তারপরে আমি "নতুন উত্তর" দেখেছি, তাই আমি আমার খণ্ড-লিখিত বিচ্ছিন্নতা মোছা, পোস্ট এবং সম্পাদনা করেছি।
পিটার টেলর


4

জেলি , 15 14 বাইট

Ø.xŒ!QŒɠ€’§2*S

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

-1 পিটার টেলরের মন্তব্যের ভিত্তিতে বাইট।

ফলাফল সূত্রের পরিবর্তে flawr এর চিত্র ব্যবহার করুন ।

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

Ø.xŒ!QŒɠ€’§2*S    Main link (monad). Input: positive integer N.
Ø.x               Make an array containing N zeros and ones
   Œ!Q            All unique permutations
      Œɠ€         Run-length encode on each permutation
         ’§       Decrement and sum each
           2*S    Raise to power of 2 and sum

বর্গাকার গ্রিডে প্রতিটি সম্ভাব্য রুট নিন। একটি ইউনিট হিসাবে একটি একদিকে L ইউনিটগুলি সরানোর উপায়গুলির সংখ্যা 2**(L-1)। এটি প্রতিটি রুটে প্রয়োগ করুন এবং প্রতিটি রুটকে অতিক্রম করার উপায়গুলির সংখ্যার যোগ করুন।


চমৎকার পন্থা। আমি যখন সিজেমে পোর্ট করেছিলাম তখন এটি দৈর্ঘ্য, যোগফল হ্রাস করার চেয়ে সংক্ষিপ্ত ছিল এবং তারপরে যোগফলকে 2 বাড়াতে হয়; দৈর্ঘ্যে 2 বাড়াতে, অর্ধনমিতকরণ এবং তারপরে গুন করা। এটি আপনাকে বাইট বাঁচাতে পারে কিনা জানেন না।
পিটার টেলর

3

কাঠকয়লা , 44 31 বাইট

ক্রস আউট 44 এখনও নিয়মিত 44

F⊕θ«≔⟦⟧ηF⊕θ⊞ηΣ∨⁺ηEυ§λκ¹⊞υη»I⊟⊟υ

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: বিপরীত দিকের দৈর্ঘ্যের ট্র্যাপিজিয়ামকে m,nত্রিভুজগুলিতে বিভাজন করার জন্য কতগুলি উপায় গণনা করে তা কাজ করে যা সমস্ত ইন্টিজার অফসেটে থাকে। এটি কেবল nপ্রশ্নের আকারের আয়তক্ষেত্রের একটি সাধারণ ঘটনা । সমস্ত পক্ষের m,0..n-1এবং পার্টিশনের সংখ্যার যোগফল হিসাবে পার্টিশনের সংখ্যা পুনরাবৃত্তভাবে দেওয়া হয় n,0..m-1। এটি দুর্বৃত্তদের সাধারণীকরণের সমস্যার সমান, ওইআইএস এ 035002 । কোডটি আগে থেকে গণনা করা মানগুলি ব্যবহার করার সময় 0,0অবধি n,nব্যবহার করে পার্টিশনের সংখ্যা গণনা করে ।

F⊕θ«

সারিগুলির উপর লুপ করুন 0..n

≔⟦⟧η

খালি সারি দিয়ে শুরু করুন।

F⊕θ

সারিতে থাকা কলামগুলিতে লুপ করুন 0..n

⊞ηΣ∨⁺ηEυ§λκ¹

বর্তমান কলামে আগের সারিগুলিতে এখন পর্যন্ত সারি এবং মানগুলি নিন এবং বর্তমান সারিতে যোগফলটি যোগ করুন। যাইহোক, যদি কোনও মানই না থাকে তবে 1যোগফলের জায়গায় বিকল্প দিন ।

⊞υη»

এখন পর্যন্ত সারিগুলির তালিকাতে সমাপ্ত সারি যুক্ত করুন।

I⊟⊟υ

চূড়ান্ত মান গণনা আউটপুট।




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