আমাকে মেরু করুন


22

বলুন আপনার কাজটি খুঁটি আঁকার কাজ, এবং একজন ক্লায়েন্ট আপনাকে 4 টি লাল বিভাগ এবং 3 টি হলুদ বিভাগযুক্ত একটি পোল আঁকতে বলে। আপনি নীচে খুব সহজে এটি করতে পারেন:

r y r y r y r

কেবল হলুদ এবং লাল ফিতে দিয়ে। এখন বলি যে আপনার ক্লায়েন্ট আপনাকে 2 টি লাল বিভাগ, 2 টি হলুদ বিভাগ এবং 1 সবুজ বিভাগযুক্ত একটি খুঁটি আঁকতে বলে । আপনি আপনার খুঁটি আঁকতে পারেন এমন বেশ কয়েকটি উপায় রয়েছে

g y r y r
y g r y r
y r g y r
y r y g r
y r y r g
g r y r y
r g y r y
r y g r y
r y r g y
r y r y g
y r g r y
r y g y r

মেরুটি আঁকার জন্য 12 টি আরও সঠিকভাবে উল্লেখ করা যায়। এতে জড়িত আরও রঙ এবং বিভাগগুলি উড়িয়ে দেয়

এখন আপনার ক্লায়েন্ট যদি বলেন যে তারা 3 টি লাল বিভাগ এবং 1 টি হলুদ বিভাগ চান তবে তার মতো পোল আঁকার কোনও উপায় নেই। কারণ আপনি বিভাগগুলি কীভাবে সাজানোর চেষ্টা করবেন তা বিবেচনা করেই দুটি লাল বিভাগ স্পর্শ করবে এবং দুটি লাল বিভাগ স্পর্শ করলে সেগুলি একটি একক লাল বিভাগে পরিণত হয়।

এবং এটি খুঁটির চিত্র আঁকার জন্য আমাদের এক নিয়ম pretty

সংলগ্ন বিভাগগুলি একই রঙের নাও হতে পারে

কার্য

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

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

এগুলি হাত দ্বারা গণনা করা বরং শক্ত, বিশেষত তারা বড় হওয়ার সাথে সাথে। কারও কাছে প্রস্তাবিত পরীক্ষার মামলা থাকলে আমি এটি যুক্ত করব।

[4,3]    -> 1
[2,2,1]  -> 12
[3,1]    -> 0
[8,3,2]  -> 0
[2,2,1,1]-> 84

আমরা কি ইনপুট গ্রহণ করতে পারি, উদাহরণস্বরূপ, [4,3] এর জন্য "rrrryyy"?
লিও

@Loo নিশ্চিত করুন এটি পুরোপুরি যুক্তিসঙ্গত।
গম উইজার্ড 14

আমি কি ইনপুট হিসাবে পেতে পারি [1, 1, 1, 1, 2, 2, 2]? আমারও তাই মনে হচ্ছে.
এরিক আউটগল্ফার


4
খুব গুরুত্বপূর্ণ নয়, তবে পোল শব্দের মূলধনটি এটির মতো মনে হচ্ছে যে আপনি পোল্যান্ডের কোনও ব্যক্তির কথা বলছেন।
এনএইচ।

উত্তর:


9

গণিত, 37 44 48 60 62 বাইট

পূর্ণসংখ্যার একটি তালিকা হিসাবে ইনপুট নিন {1, 1, 1, 2, 2}ওল্ফ্রাম স্যান্ডবক্সে চেষ্টা করে দেখুন ।

প্যাটার্ন-ম্যাচিং পদ্ধতি, ধন্যবাদ @ একটি গাছ নেই!

Count[Split/@Permutations@#,{{_}..}]&

Splitপরপর উপাদান, যেমন এর sublists মধ্যে একটি একক তালিকা splits {1, 1, 2, 3, 4, 4}মধ্যে{{1, 1}, {2}, {3}, {4, 4}}

{{_}..}হয়, যথা {{_}, {_}, {_}, ...},। প্যাটার্নটি অ্যানারি সাবলিস্টগুলির তালিকার সাথে মেলে।

Differences পদ্ধতি, 48 বাইট:

Tr@Abs@Clip[1##&@@@Differences/@Permutations@#]&

Differencesসংলগ্ন উপাদানগুলি একই কিনা তা নির্ধারণ করতে কোড ব্যবহার করে।

ধাপে ধাপে:

  1. Permutations@# একটি এন! * এন তালিকায় ইনপুট তালিকার সমস্ত ক্রিয়াকলাপ উত্পন্ন করে।
  2. Differences/@ এন উপাদানগুলির মধ্যে পার্থক্য গণনা করে এবং একটি এন! * (এন -1) তালিকা দেয়।
  3. 1##&@@@সমস্ত তালিকার গুণনের গণনা করে। যদি একটি তালিকায় থাকে 0(দুটি সংলগ্ন উপাদান একই হয়), ফলাফলটি হবে 0, অন্যথায় শূন্য নয়, একটি এন এর! তালিকা।
  4. Clip[]এর মতো কাজ করে Sign[], (-inf, inf) থেকে তালিকাটিকে [-1, 1] এ রূপান্তর করুন
  5. Tr@Absসব সক্রিয় -1মধ্যে 1এবং এখন এন! -length তালিকা শুধুমাত্র রয়েছে 0(অবৈধ) এবং 1(সেটি এখন বৈধ)। সুতরাং আমরা শুধু তালিকা যোগ।

4
আপনি কিছু প্যাটার্ন ম্যাচিং সঙ্গে 4 বাইট সংরক্ষণ করতে পারেন: Permutations@#~Count~Except@{___,x_,x_,___}&
একটি গাছ নয়

2
আমার আর একটি আছে Count[Split/@Permutations@#,{{_}..}]&:, 37 বাইট!
একটি গাছ নয়

7

জেলি , 7 বাইট

Œ!QIẠ€S

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

যেমন যেমন ইনপুট লাগে [1,1,1,1,2,2,2]জন্য [4,3][8,3,2]Testcase Tio চালানোর অত্যন্ত দীর্ঘ সময় লাগে।

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

Œ!QIẠ€S - main link, input as a list
Œ!      - all permutations
  Q     - remove duplicates
   I    - take increments (returns a 0 for two adjacent identical numbers)
    Ạ€  - apply “all” atom to each: 0 for containing 0 and 1 otherwise
      S - sum

আপনি অনুগ্রহকালীন সময়টিকে অপব্যবহার করেছেন ...;)
এরিক আউটগলফার


@ nmjcman101 এটি কার্যকর হয় বলে মনে হচ্ছে। ভাল লাগছে! আমি Pএর সরলতার জন্য যেকোন এবং সমস্ত পরমাণুকে বেশি পছন্দ করলাম ।
ফায়ার ফ্লেম 241

@ ফায়ার ফ্লেম ২৪১ টেকনিক্যালি এটি কোনও একমাত্র এবং পরমাণু নয়, এটি সমস্ত পরমাণু।
এরিক আউটগল্ফার

এর P€পরিবর্তে বিটিডব্লিউ Ạ€এখনও কাজ করবে।
এরিক আউটগল্ফার 15


5

গণিত, 50 বাইট

Expand[1##&@@(LaguerreL[#,-1,x](-1)^#)]/._^i_:>i!&

ম্যাথিক্সে বা ওল্ফ্রামের স্যান্ডবক্সে এটি ব্যবহার করে দেখুন !

পরীক্ষার ক্ষেত্রে যেমন ইনপুট নেয় - উদাহরণস্বরূপ {4,3}"4 লাল ফিতে, 3 টি হলুদ ফিতে"।

এটি এখানে পাওয়া একটি সূত্রের নির্বুদ্ধ বাস্তবায়ন । "নাভ" এর অর্থ "গণিতগুলি কীভাবে কাজ করে সে সম্পর্কে আমার কোনও ধারণা নেই তাই দয়া করে আমাকে কোনও ব্যাখ্যা জিজ্ঞাসা করবেন না ..."


1
আমরা কি এই উত্তরটিতে গণিতের ব্যাখ্যা দিতে পারি?
TheLethalCoder

@ লেথলকোডার সেকেন্ডেড, কেউ দয়া করে আমাকে গণিতের ব্যাখ্যা দিতে পারেন?
একটি গাছ নয়


3

রুবি 2.4, 47 বাইট

ইনপুট অক্ষর একটি তালিকা রয়েছে: পরীক্ষা ক্ষেত্রে জন্য [4,3], ইনপুট হতে পারে %w[a a a a b b b], "1111222".charsবা অন্য অ্যারের বিন্যাস পদ্ধতি যা রুবি মধ্যে বৈধ নয়।

->x{x.permutation.uniq.count{|a|a*''!~/(.)\1/}}

২.৪ এর জন্য প্রয়োজন Enumerator#uniq(পূর্ববর্তী সংস্করণগুলিতে এটি কেবল Arrayক্লাসে উপলব্ধ ছিল )। যেমনটি হিসাবে, টিআইও লিঙ্কটি প্রথমে অ্যারেতে ক্রমুষ্টিকরণের এনুমিরেটরকে রূপান্তর করতে 5 বাইট যুক্ত করে to_a, কারণ এতে উপরের কাজটি নেই।

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


3

আর, 72 বাইট

pryr::f(sum(sapply(unique(combinat::permn(x)),pryr::f(!sum(!diff(x))))))

ফাংশন তৈরি করে

function (x) 
{
    sum(sapply(unique(combinat::permn(x)), pryr::f(!sum(!diff(x)))))
}

[1,1,1,1,2,2,2]এরিক আউটগলফারের মন্তব্য অনুসারে ফর্মটিতে ইনপুট নেয় । ব্যবহার combinatএর permnফাংশন সব একাধিক বিন্যাসন একটি তালিকা তৈরি করুন এবং তারপর থেকে uniqueসব স্বতন্ত্র এন্ট্রি জন্য। sapplyতারপরে সমস্ত এন্ট্রিগুলিতে নিম্নলিখিত ফাংশনটি প্রয়োগ করে:

pryr::f(!sum(!diff(x)))

যা মূল্যায়ন

function (x) 
!sum(!diff(x))

মনে রাখবেন যে বড় ফাংশনের ইনপুটটিতে xএটি একই রকম নয় x। এই ফাংশনটিতে অন্য একটি চরিত্র ব্যবহার pryr::fকরা বড় ফাংশনটিকে বিশ্বাস করতে বোকা বানাবে অন্য যুক্তির প্রয়োজন।

যাইহোক, যখন একটি বিন্যাস দেওয়া এই ফাংশন ভেক্টর মধ্যে পার্থক্য লাগে: 2 1 3 4 2 1 -> -1 2 1 -2 -1!ননজারোগুলিকে FALSEএবং জিরোগুলিকে রূপান্তর করে TRUE, তাই ভেক্টর হয়ে যায় FALSE FALSE FALSE FALSE FALSE। কোনও সংযুক্ত রয়েছে কিনা তা পরীক্ষা করে নেওয়ার জন্য সংমিশ্রণ করা হবে TRUE( TRUEবোঝাবেন diff=0-> দুটি একই ধারাবাহিক সংখ্যা)। !পরবর্তীতে ক্রমাগত মান আছে কি না তা নিয়ে আমরা বুলিয়ান পেতে আবার এটিকে উল্টাতে পারি।

এই বুলিয়ানগুলির সংক্ষিপ্তসার আমাদের মোট ক্রমান্বয়ে সংখ্যা দেয় যেখানে এটি হয় না।

[8,3,2]টেস্টকেসের জন্য কাজ করে না কারণ এই অনুমতিগুলি সংরক্ষণের জন্য এটি 46 গিগাবাইটের একটি ভেক্টর প্রয়োজন।




2

কাস্তে , 8 বাইট

#ȯ¬ṁtguP

এটি অনলাইন চেষ্টা করুন! বিন্যাসে ইনপুট লাগে "aaabb"জন্য [3,2]। দীর্ঘতম পরীক্ষার মামলায় টাইমস আউট।

ব্যাখ্যা

এখানে অভিনব কিছুই নয়, কেবল সংলগ্ন উপাদানগুলির সমস্ত গোষ্ঠীর দৈর্ঘ্য 1 যেখানে অনন্য ক্রমশক্তি গণনা করছে।

#ȯ¬ṁtguP
       P  Permutations.
      u   Remove duplicates.
#ȯ        Count how many satisfy the following condition:
     g    group adjacent elements,
   ṁt     concatenate tails of groups
  ¬       and negate.

2

রুবি, 84 76 বাইট

f=->a,x=p{i=s=0;a.map{a[i-=1]-=1;a[i]<0||i!=x&&s+=f[a,i];a[i]+=1}.max>0?s:1}

একটি পুনরাবৃত্ত ল্যাম্বদা ফাংশন। প্রতিটি সম্ভাব্য রঙ দেখে এবং একটি পুনরাবৃত্ত গাছের সন্ধান ডোজ করে, এটি সমস্ত স্ট্রাইপগুলি কতবার ব্যবহার করে তা গণনা করে।

ব্যাখ্যা (পুরানো সংস্করণের জন্য):

f=->
  a, # a is the input array in [3,3,4] form
  x = -1 # x is the last color placed (-1 when run normaly, used in recursive calls)
{
  j = i = s = 0;
  # i is the index
  # s is the sum of valid final patterns (the answer)
  # j is used to count the total stripes

  a.map{|e| # Iterate over array of colors

    a[i] -= 1; # remove a stripe of current color (the array will be used in recursive call)

    s += f[a,i] if i!=x && e>0;
      # add to sum recursively if:
        # we are not using the same color as the last color AND
        # we have stripes of the current color left to paint

    a[i] += 1; # replace the stripe we removed above 

    j += a[i]; # add stripes to j

    i+=1 # increment the index

  }; # End loop

  j == 0 ? 1 : s
  # if we had stripes, give the recursive sum, otherwise return 1 
}

x=pপ্রাথমিক অবস্থা হিসাবে? এই ক্ষেত্রে pএকটি উপাধিকার হিসাবে কাজ করে nilএবং এটি যে চেক ব্যবহার করা হচ্ছে তা সন্তুষ্ট করা উচিত।
মূল্য কালি

1

এমএটিএল , 11 8 বাইট

Y@Xu!dAs

ইনপুট ফরম্যাট [1 1 1 1 2 2 2]জন্য [4 3], ইত্যাদি

শেষ পরীক্ষার মামলার স্মৃতিশক্তি শেষ of

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

ব্যাখ্যা

Y@    % Implicit input. Matrix of all permutations. Each row is a permutation
Xu    % Unique rows
!     % Transpose
d     % Consecutive differences along each column
A     % All: true for columns such that all its entries are nonzero
s     % Sum. Implicitly display
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.