একটি শব্দে সমস্ত সম্ভাব্য অনন্য সংমিশ্রণগুলি গণনা করুন


12

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

তবে, সম্ভাব্য সংমিশ্রণগুলি গণনা করতে সদৃশ অক্ষরগুলিকে উপেক্ষা করা যেতে পারে। অন্য কথায়, প্রদত্ত স্ট্রিংটি যদি "হ্যালো" হয়, তবে কেবল দুটি lএর অবস্থানগুলি স্যুইচ করা কোনও অনন্য বাক্য হিসাবে গণ্য হয় না এবং তাই মোটের দিকে গণনা করা যায় না।

স্বল্পতম বাইট গণনা জিতেছে, নন-গল্ফিং ভাষায় কিছু সৃজনশীল সমাধান দেখার প্রত্যাশায়!

উদাহরণ:

hello -> 60
aaaaa -> 1
abcde -> 120


4
@ জিউসেপ্পে আমি মনে করি না এটি এটির একটি অর্থ! এই প্রশ্নের সুনির্দিষ্ট
বিবরণগুলি

4
কিছু টেস্টকেস যুক্ত করা সাহায্য করতে পারে।
tsh

1
@ জোনাথন অ্যালান ভাল পরামর্শ! শিরোনাম অনুসারে পরিবর্তন হয়েছে।
সিম্পলজিক

উত্তর:


29

পাইথন 2 , 50 48 বাইট

f=lambda s:s==''or len(s)*f(s[1:])/s.count(s[0])

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

কোনও বিরক্তিকর বিল্ট-ইন নেই! আমার অবাক করার বিষয়, এটি ব্রুট ফোর্সের পদ্ধতির চেয়ে আরও ছোট, এটির সাথে itertoolsঅনুমতি দেওয়া সমস্ত দৈর্ঘ্য গণনা করে এবং দৈর্ঘ্য গ্রহণ করে।

এই ফাংশনটি সূত্র ব্যবহার করে

# of unique permutations=(# of elements)!unique elements(# of occurences of that element)!

এবং উড়ে এটি গণনা। অংকটির ফ্যাক্টরিয়াল len(s)প্রতিটি ফাংশন কলে কল করে গুণিত করা হয়। ডিনোমিনেটরটি আরও কিছুটা সূক্ষ্ম; প্রতিটি কলে, আমরা স্ট্রিংয়ের বাকী কী রয়েছে সেই উপাদানটির উপস্থিতিগুলির সংখ্যার দ্বারা বিভাজন করি এবং প্রতিটি অক্ষরের জন্য c, 1 এর মধ্যে সমস্ত সংখ্যার c(অন্তর্ভুক্ত) উপস্থিতির পরিমাণ ঠিক একবারে ভাগ হয়ে যায় তা নিশ্চিত করে। যেহেতু আমরা কেবল একেবারে শেষে বিভক্ত, তাই পাইথন 2 এর ডিফল্ট তল বিভাগে কোনও সমস্যা না হওয়ার নিশ্চয়তা আমরা পেয়েছি।


itertools এর ফাংশন নামগুলিতে খুব
ভার্জোজ


7

সিজেম , 4 বাইট

le!,

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

ব্যাখ্যা

স্ট্রিং হিসাবে একটি লাইন পড়ুন ( l), স্ট্রিংগুলির অ্যারে হিসাবে অনন্য ক্রম ( e!), দৈর্ঘ্য ( ,), অন্তর্নিহিত প্রদর্শন।


4
দেখে মনে হচ্ছে "লেল", +1! : ডি
কীউইউএসআর

5

আর , 69 65 বাইট

function(s,`!`=factorial)(!nchar(s))/prod(!table(strsplit(s,"")))

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

উভয় উত্তরে 4 বাইট জহিরো মোড়কে ধন্যবাদ রক্ষা করেছে ।

সরাসরি বহুজাতিক গুণফল গণনা করে e

আর , 72 68 বাইট

function(s,x=table(strsplit(s,"")))dmultinom(x,,!!x)*sum(1|x)^sum(x)

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

মাল্টিনোমিয়াল সহগটি dmultinomনিষ্কাশনের জন্য প্রদত্ত বহুজাতিক বিতরণ ফাংশন ব্যবহার করে ।

নোট করুন যে স্বাভাবিক (গল্ফায়ার) x<-table(strsplit(s,""))কোনও dmultinomঅজানা কারণে কলের অভ্যন্তরে কাজ করে না ।


2
function(s,! =factorial)(!nchar(s))/prod(!table(strsplit(s,""))) কাজ করবে. এল () হ্রাসকারী - টেবিল উপাদানগুলির সন্ধান করতে জানে ....
জহিরো মোড়

1
অবশ্যই জাহিরোমোর আহ, অবশ্যই। আমি এটি পরীক্ষা করার ইচ্ছা নিয়েছিলাম কিন্তু কখনই এটির কাছে যাইনি।
জিউসেপ

5

জাভাস্ক্রিপ্ট (নোড.জেএস) , 49 বাইট

t=t*t*=রাউন্ডিং ত্রুটি ( |tসংখ্যার নিচে রাউন্ডগুলি) এড়াতে পরিবর্তে ব্যবহৃত হয় t=t*গ্যারান্টি হিসাবে যে সমস্ত মধ্যবর্তী (অপারেটর-ভিত্তিক) ফলাফলগুলি পুরো সংখ্যা।

a=>[...a].map(g=x=>t=t*y++/(g[x]=-~g[x]),t=y=1)|t

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

a=>
 [...a].map(        // Loop over the characters
  g=x=>
   t=t*             // using t*= instead may result in rounding error 
    y++             // (Length of string)!
    /(g[x]=-~g[x])  // divided by product of (Count of character)!
  ,t=y=1            // Initialization
 )
 |t

2
(সম্ভাব্য ভাসমান-পয়েন্ট গোলাকার ত্রুটি; t=t*যদি আপনি এড়াতে চান তবে ব্যবহার করুন ))
নীল

@ নীল হ্যাঁ এটি ব্যর্থ হয়েছে যখন ইনপুটটি aaadegfbbbcccঠিক ভাসমান-পয়েন্ট গোলাকার ত্রুটির কারণে ঘটে
শিয়ারু আসাকোটো

হুহ, আপনি কিভাবে এই পরীক্ষার কেসটি পেলেন?
নিল

@ নীল এই জাতীয় গোলাকার ত্রুটি না হওয়া পর্যন্ত স্ট্রিংয়ের সাথে অক্ষরগুলি যুক্ত রাখুন
শিয়ারু আসাকোটো

@ শিরুআসাকোটোর শিরোনাম পরিবর্তন করা হয়েছে; গণনা অনেক ভাল। ধন্যবাদ, এবং সুন্দর উত্তর!
সিম্পলজিক

4

এপিএল (ডায়ালগ ইউনিকোড) , 14 বাইট

!∘⍴÷⊂×.(!∘⍴∩)∪

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

সিঙ্গলটন হিসাবে ফলাফল প্রদান করে।


-> এটিকে সাধারণ স্কেলারগুলি ফিরিয়ে আনতে, ÷⍨/g⌸,g←!⊢∘≢-2
এনজিএন

4

জাপট , 5 3 বাইট

-২ বাইট @ শ্যাগি ধন্যবাদ

á l

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


টিআইও আপনাকে জাপটটির একটি পুরানো সংস্করণ ব্যবহার করছে বলে মনে হচ্ছে, আপনাকে খাঁজতে দেবে â
শেগি

@ শেগি লোল, আমি এটি লক্ষ্য করিনি। ধন্যবাদ!
লুইস ফেলিপ দে জেসুস মুনোজ





2

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

lambda s:len(set(permutations(s)))
from itertools import*

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

স্ব-ডকুমেন্টিং: ইনপুট স্ট্রিংয়ের অনন্য অনুমতিগুলির সেটটির দৈর্ঘ্য ফিরিয়ে দিন।

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

এই একের উপর ক্রেডিট আরবোর কাছে যায় :

lambda s:len({*permutations(s)})
from itertools import*

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


2

এপিএল (ডায়ালগ ইউনিকোড) , 24 বাইট

CY'dfns'
{≢∪↓⍵[pmat≢⍵]}

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

সাধারণ ডিফএন, যুক্তি হিসাবে একটি স্ট্রিং নেয়।

কিভাবে:

CY'dfns'       Copies the 'dfns' namespace.
{≢∪↓⍵[pmat≢⍵]}  Main function
          ≢⍵    Number of elements in the argument (⍵)
      pmat      Permutation Matrix of the range [1..≢⍵]
    ⍵[      ]   Index the argument with that matrix, which generates all permutations of 
               Convert the matrix into a vector of strings
               Keep only the unique elements
               Tally the number of elements

2

রুবি , 41 বাইট

f=->s{s.chars.permutation.to_a.uniq.size}

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


1
আপনার প্রয়োজন বলে আমি মনে করি নাto_a
আরবো

1
এবং বেনামে ফাংশন / ল্যাম্বডাস গ্রহণযোগ্য, যাতে আপনি f=অংশটি সরাতে পারেন । (
টিআইওতে এটি


2

পার্ল 6 , 33 30 চর ( 34 31 বাইট)

মোটামুটি সোজা ফরোয়ার্ড Whateverব্লক। combস্ট্রিংগুলিকে অক্ষরে বিভক্ত করে permutations, সমস্ত সম্ভাব্য সংমিশ্রণ পান। যেহেতু জবরদস্তিটি প্রথমে এড করা Setপ্রয়োজন join( তালিকার প্রতিটি উপাদানগুলিতে »প্রযোজ্য join)।

+*.comb.permutations».join.Set

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

(পূর্ববর্তী উত্তর ব্যবহৃত .uniqueকিন্তু Setগুলি গ্যারান্টি স্বতন্ত্রতা, এবং একই numerify, তাই এটি 3 সংরক্ষণ)।


2

কে (ওকে) , 12 বাইট

সমাধান:

#?x@prm@!#x:

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

ব্যাখ্যা:

ওকে অন্তর্নির্মিত ব্যবহার করে prm:

{[x]{[x]$[x;,/x ,''o'x ^/:x;,x]}@$[-8>@x;!x;x]}

... যা x^/:xমূলত "helo"না হওয়ার ক্রম তৈরি করে "hello", তাই আমাদের এর ক্রমজাতীয়করণ তৈরি করতে হবে 0 1 2 3 4, সেগুলি সূচকে ব্যবহার করতে হবে "hello"এবং তারপরে অনন্যটির গণনা করা উচিত।

#?x@prm@!#x: / the solution
          x: / store input as x
         #   / count (#) length
        !    / range (!) 0..n
    prm@     / apply (@) to function prm
  x@         / apply permutations to input x
 ?           / take the distinct (?)
#            / count (#)

প্রাইম কি ঠিক একটি নির্দিষ্ট অপারেটর? আমার মনে হয় না ভ্যানিলা কে আছে?
হেনরি হেনরিসন


@ হেনরিহেনারিনসন আফিক এটি কে 4 এ নেই। প্রথম দিকে কে 5 এ ছিল !-nK5 এবং K6 দেরিতে এটি হয়ে গেলprm । k7 (শক্তি) prmখুব আছে।
ngn

2

জাভা 8, 103 102 বাইট

s->{int r=1,i=s.length();for(;i>0;)r=r*i/~-s.substring(--i).split(s.charAt(i)+"",-1).length;return r;}

পোর্ট অফ @ArBo এর পাইথন 2 উত্তর
-1 বাইট ধন্যবাদ পুনরাবৃত্তির পরিবর্তে পুনরাবৃত্তি করে @ অলিভিয়ারগ্রোওয়েরকে ধন্যবাদ ।

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

প্রকৃতপক্ষে কোনও সেটে সমস্ত অনন্য অনুমতি উত্পন্ন করা এবং এর আকার পাওয়া 221 বাইট হবে :

import java.util.*;s->{Set S=new HashSet();p(s,S,0,s.length()-1);return S.size();}void p(String s,Set S,int l,int r){for(int i=l;i<=r;p(s.replaceAll("(.{"+l+"})(.)(.{"+(i++-l)+"})(.)(.*)","$1$4$3$2$5"),S,l+1,r))S.add(s);}

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


ঠিক আছে, আমি গলফ এটি তৈরি করে বাইট পরিবর্তে রিকার্সিভ পৌন পারে: s->{int r=1,i=s.length();for(;i>0;)r=r*i/~-s.substring(--i).split(s.charAt(i)+"",-1).length;return r;}
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ! বিটিডব্লিউ, আপনি কি দ্বিতীয় পন্থাটি (একটি সেটে সমস্ত অনন্য অনুক্রম তৈরি করে) ছোট করার জন্য কিছু দেখছেন? আমার বোধ হয় কিছু বাইট সংরক্ষণ করা যায়, তবে কয়েকটি জিনিস চেষ্টা করে দেখলাম এবং বেশিরভাগ ছোট হওয়ার পরিবর্তে কিছুটা দীর্ঘ ছিল .. তবে এটি এখনও অত্যধিক দীর্ঘ টিবিএইচ দেখায়।
কেভিন ক্রুইজসেন

আমি এটিতে কাজ করে চলেছি, এর মতো স্ট্রিম এবং গণনাটি ব্যবহার করার চেষ্টা করছি: s->{long r=1,i=s.length();for(;i>0;)r=r*i/(s.chars().skip(--i).filter(c -> c==s.charAt(i)).count()+1);return r;}তবে এ পর্যন্ত সফলতা না পেয়ে ...
অলিভিয়ার গ্রাগোয়ার

1

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

jY@XuZy1)

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

ব্যাখ্যা:

j input as string
Y@ get permutations
Xu unique members
Zy size matrix
1) first member of size matrix

2
আপনি উদ্ধৃতি সহ ইনপুট নিতে পারেন, তাই jহয়ে যায় i, যা অন্তর্ভুক্ত রেখে যেতে পারে। এছাড়াও, tio.run/##y00syfn/P9IholQtr@L/f/WM1JycfHUA&nxZy1)
লুইস মেন্ডো

1

অষ্টাভে / এমএটিএলবি, 35 বাইট

@(s)size(unique(perms(s),'rows'),1)

বেনামে ফাংশন যা একটি অক্ষর ভেক্টর নেয় এবং একটি সংখ্যা উত্পাদন করে।

ম্যাটল্যাবে এটি সংক্ষিপ্ত করা যেতে পারে size(unique(perms(s),'ro'),1)(৩৩ বাইট)।

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

ব্যাখ্যা

@(s)                                  % Anonymous function with input s
                perms(s)              % Permutations. Gives a char matrix
         unique(        ,'rows')      % Deduplicate rows
    size(                       ,1)   % Number of rows

1
আমি ভেবেছিলাম uniqueইতিমধ্যে অনন্য সারি ফিরে এসেছেন? নাকি এটি কেবল tableএস এর জন্য ?
জিউসেপ

@ জিউস্পেপ সংখ্যার / চর জন্য 2 ডি অ্যারে uniqueপ্রথমে রৈখিক হবে। টেবিলগুলির জন্য আমি মনে করি আপনি ঠিক বলেছেন; আমি জানতাম না!
লুইস মেন্ডো

1
আহ, আমি জানি আমি কোথায় এই ধারণা পেয়েছি - uniqueম্যাটল্যাব-এ সারি নেওয়া আছে tables; আর uniqueম্যাট্রিক্স বা ডেটা ফ্রেমের অনন্য সারি নেয়। একই কমান্ডগুলির সাথে অনেকগুলি অ্যারে ভাষা যা কিছুটা ভিন্ন কাজ করে ...
জিউসেপ

1

রেটিনা 0.8.2 , 73 বাইট

(.)(?=(.*?\1)*)
/1$#2$*1x1$.'$*
^
1
+`1(?=1*/(1+)x(\1)+$)|/1+x1+$
$#2$*
1

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

(.)(?=(.*?\1)*)
/1$#2$*1x1$.'$*

প্রতিটি চরিত্রের জন্য, অবশিষ্ট ডুপ্লিকেটগুলি রয়েছে এবং আরও কতগুলি অক্ষর রয়েছে তা গণনা করুন, বর্তমান চরিত্রটি অ্যাকাউন্টে নেওয়ার জন্য প্রত্যেকটিতে একটি করে যুক্ত করুন এবং মানগুলি পৃথক করুন যাতে আমরা জানতে পারি কোনটি ভাগ করতে হবে এবং কোনগুলি গুণিত করতে হবে ।

^
1

একটি সম্পূর্ণ এক্সপ্রেশন উত্পাদন উপসর্গ 1।

+`1(?=1*/(1+)x(\1)+$)|/1+x1+$
$#2$*

দ্বিতীয় সর্বশেষ সংখ্যা দ্বারা বিভাজক হয়ে বারবার সর্বশেষ এবং তৃতীয় শেষ সংখ্যাগুলিকে বার করুন। এটি শেষ তিনটি সংখ্যা প্রতিস্থাপন করে।

1

দশমিক রূপান্তর করুন।


1

কে, 27 বাইট

*/[1+!#:x]%*/{*/1+!x}'#:'x:

কে, 16 বাইট - আসল উত্তর নয়

#?(999999#0N)?\:

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

@ সেলটচিলিজম ও'জাইক, @ সেলকুকের উন্নত ধন্যবাদ


2
সাইটে স্বাগতম! এটি অবৈধ হওয়ার কারণে আসলেই কিছু আসে যায় না তবে আপনি কী তার 999999পরিবর্তে অবৈধ উত্তরটি আরও সঠিক করে তুলতে পারেন 100000?
অ্যাডহক গার্ফ হান্টার

হ্যাঁ, ভাল ধারণা, ধন্যবাদ।
হেনরি হেনরিসন

1
এবং সম্ভবত পরিবর্তনটিও প্রতিবিম্বিত করতে ব্যাখ্যা সম্পাদনা করবেন?
সেলকুক

1

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

Characters/*Permutations/*Length

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

ব্যাখ্যা: ডান-রচনাটি /*এই তিনটি অপারেটরকে একের পর এক ফাংশন আর্গুমেন্টে বাম থেকে ডানে প্রয়োগ করে:

  • Characters ইনপুট স্ট্রিংকে অক্ষরের তালিকায় রূপান্তর করে।

  • Permutations এই অক্ষর তালিকার সমস্ত অনন্য অনুক্রমের একটি তালিকা তৈরি করে।

  • Length অনন্য অনুক্রমের এই তালিকার দৈর্ঘ্য প্রদান করে।

দীর্ঘতর স্ট্রিংয়ের জন্য এই পদ্ধতিটি অত্যন্ত অপব্যয়কারী: অনন্য অনুমানগুলি তালিকাভুক্ত না করে Multinomialতাদের সংখ্যা গণনা করার পরিবর্তে প্রকৃত তালিকাবদ্ধ এবং গণনা করা হয়।



1

পাইথ , 5 4 বাইট

l{.p

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

এটি ধরে নেয় ইনপুটটি একটি পাইথন স্ট্রিং আক্ষরিক। যদি ইনপুট অবশ্যই কাঁচা পাঠ্য হতে পারে তবে এই 5-বাইট সংস্করণটি কাজ করবে:

l{.pz

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

-1 বাইট ধন্যবাদ @ হ্যাকআর 14


{এর চেয়ে কম বাইটের জন্য তালিকাটি নকল করে .{
hakr14


1

পিএইচপি , 77 বাইট

function f($s){return!$s?:strlen($s)*f(substr($s,1))/substr_count($s,$s[0]);}

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

এটি মূলত @ আরবোর বিজয়ী পাইথন উত্তরের একটি পিএইচপি বন্দর যা মূলত আমার কাছে থাকা পুনরাবৃত্ত উত্তরের চেয়ে হাস্যকর cle বলিহারি!



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