ক্রয়ের ফ্রিকোয়েন্সি অনুসারে একটি উত্থাপিত ক্রমের তালিকার স্বতন্ত্র উপাদানগুলি সাজান


12

একটি ক্রিয়া লিখুন যা একটি তালিকা বা অ্যারে নেয় এবং ফ্রিকোয়েন্সি অনুসারে অবতরণ অনুসারে বাছাই করা স্বতন্ত্র উপাদানগুলির একটি তালিকা দেয়।

উদাহরণ:

প্রদত্ত:

["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]

প্রত্যাশিত প্রত্যাবর্তনের মান:

["Doe","Harry","John","Dick"]

কোড-গল্ফ বা কোড-চ্যালেঞ্জ?
মেরিনাস

কোড-গলফ। এটা ভুল ছিল। কেবল এটি সংশোধন করুন
বেলভি

উত্তর:


13

এপিএল (14)

{∪⍵[⍒+⌿∘.≡⍨⍵]}

এটি একটি ফাংশন যা একটি তালিকা গ্রহণ করে, যেমন:

      names
 John  Doe  Dick  Harry  Harry  Doe  Doe  Harry  Doe  John 
      {∪⍵[⍒+⌿∘.≡⍨⍵]} names
 Doe  Harry  John  Dick

ব্যাখ্যা:

  • ∘.≡⍨⍵: অ্যারের প্রতিটি উপাদানকে অ্যারের একে অপরের সাথে তুলনা করুন, একটি ম্যাট্রিক্স প্রদান করুন
  • +⌿: ম্যাট্রিক্সের কলামগুলি যোগ করে প্রতিটি উপাদানকে কতবার ঘটবে তা প্রদান করে
  • : নিম্নমুখী সাজানোর সূচক দিন
  • ⍵[... ]: প্রদত্ত সূচকগুলি দ্বারা পুনঃক্রম করুন
  • : অনন্য উপাদান পান

3
এবং তবুও তারা কোনওভাবে এই সংক্ষিপ্ত বিদ্বেষপূর্ণ ভাষা থেকে জাভাতে "অগ্রগতি" করার জন্য ডাকে? (-:
হিপ্পিট্রেইল

8

পাইথন 3 - 47 43; পাইথন 2 - 40 39

পাইথন 3 এর জন্য:

f=lambda n:sorted(set(n),key=n.count)[::-1]

পাইথন 2 এর জন্য:

f=lambda n:sorted(set(n),cmp,n.count,1)

ডেমো:

>>> names = ["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
>>> f(names)
['Doe', 'Harry', 'John', 'Dick']

1
আমি একই পোস্ট করার চেষ্টা করছিলাম, তবে এখানে একটি পরিবর্তন রয়েছে। f=lambda n:sorted(set(n),cmp,n.count,1)39 টি অক্ষর
আপনি

1
হুম, আমি বুঝতে পারি নি যে আপনি অ-নন cmpফাংশন এবং একটি keyফাংশন উভয়কেই পাশ করতে পারবেন । কুল।
ব্ল্যাককিংহাত

1
কিছুটা ছোট:f=lambda n:sorted(set(n),key=n.count)[::-1]
grc

ধন্যবাদ @ জিআরসি, এলিয়েন স্মাইলি পাইথন 3 ক্ষেত্রে কিছু অক্ষর সংরক্ষণ করে।
ব্ল্যাককিংস্ট

5

গণিত, 31

Sort[GatherBy@n][[-1;;1;;-1,1]]

{"Doe", "Harry", "John", "Dick"}

(সহ n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"})


ডার্ন, আপনি আমাকে সেখানে পেয়েছেন: ডি
ইয়ভেস ক্লেট

ধন্যবাদ YvesKlett আমি মুক্তি পাওয়ার কথা ভাবছি Reverse, তবে Sort[GatherBy@n][[-1;;1, 1]]কাজ করে না :)। কোন ধারনা?
আজাসজা 3'14


4

গণিত (26) 37)

সহ n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}:

Last/@Gather@n~SortBy~Length//Reverse

{"ডো", "হ্যারি", "জন", "ডিক"}


গাণিতিক ভি 10 + (26) :

Keys@Sort[Counts[n],#>#2&]

@garej পুরানো সংস্করণ ব্যবহার। অন্য উত্তর হিসাবে পোস্ট?
ইয়ভেস ক্লেট

আপনি কিছু মনে না করলে আমি আপনার সাথে যোগ করেছি ...
garej

@garej। ধন্যবাদ, দুর্দান্ত সমাধান!
ইয়ভেস ক্লেট

3

পার্ল 6 (36 বাইট, 35 টি অক্ষর)

»>>আপনি ইউটিএফ -8 পরিচালনা করতে না পারলে এর সাথে প্রতিস্থাপন করা যেতে পারে । আমি প্রায় নিশ্চিত যে এটি আরও সংক্ষিপ্ত হতে পারে তবে Bagশ্রেণিটি এর আচরণে (দুঃখের সাথে) তুলনামূলকভাবে অদ্ভুত এবং এটি তুলনামূলকভাবে নতুন হিসাবে এটি সম্পূর্ণরূপে সম্পূর্ণ নয় (তবে এটি যুক্তি গণনা করতে পারে)। {}একটি বেনামী ফাংশন ঘোষণা করে।

{(sort -*.value,pairs bag @_)».key}

নমুনা আউটপুট (পার্ল 6 রিপল থেকে):

> my @names = ("John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John")
John Doe Dick Harry Harry Doe Doe Harry Doe John
> {(sort -*.value,pairs bag @_)».key}(@names)
Doe Harry John Dick

3

রুবি: 34 37 চরিত্র

f=->a{a.sort_by{|z|-a.count(z)}&a}

(সম্পাদিত: আগের 30-চর সমাধানটি ফাংশনের মূল অংশ ছিল)


আপনি এর সাথে কয়েকটি অক্ষর ছাঁটাতে পারেন f=->a{a.sort_by{|z|-a.count(z)}&a}&একটি uniq আছে।
হিস্টোক্র্যাট

3

গল্ফস্ক্রিপ্ট, 14 টি অক্ষর (19 টি নামযুক্ত ফাংশন হিসাবে, সম্পূর্ণ প্রোগ্রাম হিসাবে 14)

:a.|{[.]a\-,}$

এই কোডটি স্ট্যাকের জন্য একটি অ্যারে নেয় এবং সংঘটন সংখ্যার দ্বারা ক্রমবর্ধমান ক্রমে এর অনন্য উপাদানগুলি সাজায়। উদাহরণস্বরূপ, যদি ইনপুট অ্যারে হয়:

["John" "Doe" "Dick" "Harry" "Harry" "Doe" "Doe" "Harry" "Doe" "John"]

তারপরে আউটপুট অ্যারে হবে

["Doe" "Harry" "John" "Dick"]

দ্রষ্টব্য: উপরের কোডটি বিবৃতিগুলির একটি খালি ক্রম। এটিকে একটি নামযুক্ত ফাংশনে রূপান্তর করতে, এটি ব্রেসগুলিতে মুড়িয়ে রাখুন এবং এটি একটি নাম হিসাবে নির্ধারণ করুন:

{:a.|{[.]a\-,}$}:f;

বিকল্পভাবে, কোডটিকে একটি সম্পূর্ণ প্রোগ্রামে পরিণত করতে যা স্ট্যান্ডার্ড ইনপুট থেকে একটি তালিকা পড়ে (উপরে দেখানো তালিকার নোটেশনটি ব্যবহার করে) এবং এটিকে স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করে, কোডটিকে সংশোধন ~এবং সংযোজন `করে। [. এই ক্ষেত্রে বাদ দেওয়া যেতে পারে (যেহেতু আমরা জানি স্ট্যাক অন্য কিছুই থাকবে), যাতে ফলে 14-অক্ষর প্রোগ্রাম হবে:

~:a.|{]a\-,}$`

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

  • :aaপরে ব্যবহারের জন্য ভেরিয়েবলটিতে মূল অ্যারের একটি অনুলিপি সংরক্ষণ করে ।

  • .| পার্শ্ব প্রতিক্রিয়া হিসাবে সদৃশগুলি অপসারণ করে অ্যারের সেট ইউনিয়নটি নিজের সাথে গণনা করে।

  • { }$ধনুর্বন্ধনী ভিতরে কোড গণনা কাস্টম বাছাই কী ব্যবহার করে ডি-সদৃশ অ্যারে বাছাই। এই কোডটি প্রতিটি অ্যারে উপাদান নেয়, সংরক্ষণ করা মূল ইনপুট অ্যারে থেকে এটিকে সরাতে অ্যারে বিয়োগ ব্যবহার করে aএবং অবশিষ্ট উপাদানগুলির সংখ্যা গণনা করে। সুতরাং, উপাদানগুলি ফ্রিকোয়েন্সি হ্রাস ক্রম অনুসারে বাছাই হয়।

পুনশ্চ. মূল 30-অক্ষর সংস্করণের জন্য এখানে দেখুন


আমি [a\])^এটির সমতুল্য হওয়া উচিত বলে মনে করি [.;]a\-। মিলে না যাওয়া উপাদানগুলির সংখ্যা অনুসারে বাছাই করা একটি দুর্দান্ত ধারণা।
পিটার টেলর

হায়, না: ^ডুপ্লিকেট ধসে পড়ে -না। (এবং ITYM (, না )।) [a\](\-কাজ করবে তবে কোনও অক্ষর সংরক্ষণ করবে না।
ইলমারি করোনেন

2

আর: 23 টি অক্ষর

n <- c("John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John")

names(sort(table(n),T))
## [1] "Doe"   "Harry" "John"  "Dick" 

তবে এটি এর পক্ষে এত সুন্দর নয় শর্টকাট ব্যবহার Tকরে TRUE...


1

যদি এটি এখানে ফিট করতে পারে: In sql-server

create table #t1 (name varchar(10))
insert into #t1 values ('John'),('Doe'),('Dick'),('Harry'),('Harry'),('Doe'),('Doe'),('Harry'),('Doe'),('John')


select name from #t1 group by name order by count(*) desc

অথবা

with cte as
(

select name,count(name) as x from #t1 group by name
)

select name from cte order by x desc

কর্মে এটি দেখুন


1
সিটিই কেন? select name from #t1 group by name order by count(*) desc
manatwork

1

পিএইচপি, 63 62 61 অক্ষর

function R($a){foreach($a as$v)$b[$v]++;arsort($b);return$b;}

ডেমো:

$c = array("John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John");
$d = print_r(R($c));

Array ( [Doe] => 4 [Harry] => 3 [John] => 2 [Dick] => 1 )

এক array_count_values()arsort()
নজরে

array_count_values()সদৃশ মানগুলি মুছে দেয় না বা আদেশ দেয় না, যেমনটি আমি দেখতে পাচ্ছি।
ভেরিওস

এটি সদৃশগুলি মুছে ফেলে ... এটি কেবল তাদের অর্ডার দেয় না ... =>
আর্সোর্ট

আপনি ঠিক বলেছেন দুর্ভাগ্যক্রমে এটি লেখার জন্য এই উত্তরটির চেয়ে 1 অক্ষর দীর্ঘ।
টিম সেগুইন

array_count_valuesদীর্ঘ পথ দিয়ে কেন ? <?$u=array_count_values($_GET);arsort($u);print_r($u);আমার মতামত 54 বাইট হয়
জার্গ হালসারম্যান

1

রুবি: 59 টি অক্ষর

f=->n{n.group_by{|i|i}.sort_by{|i|-i[1].size}.map{|i|i[0]}}

নমুনা রান:

irb(main):001:0> f=->n{n.group_by{|i|i}.sort_by{|i|-i[1].size}.map{|i|i[0]}}
=> #<Proc:0x93b2e10@(irb):2 (lambda)>

irb(main):004:0> f[["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]]
=> ["Doe", "Harry", "John", "Dick"]

1

গণিত, 39 টি অক্ষর

f = Reverse[First /@ SortBy[Tally@#, Last]] &

names = {"John", "Doe", "Dick", "Harry", "Harry",
         "Doe", "Doe", "Harry", "Doe", "John"};

f@names

{ডো, হ্যারি, জন, ডিক}


1

জাভাস্ক্রিপ্ট (ECMAScript5): 118 টি অক্ষর

function f(n){m={}
for(i in n){m[n[i]]=m[n[i]]+1||1}
return Object.keys(m).sort(function(a,b){return m[b]-m[a]})}

http://jsfiddle.net/mblase75/crg5B/


হারমনি এর সাথে চর্বি তীর ফাংশন : f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}। (বর্তমানে শুধুমাত্র Firefox এ।)
manatwork

আপনি m[n[i]]=-~m[n[i]]ইনক্রিমেন্ট ব্যবহার করতে পারেন , এবং আপনার লুপটির চারপাশে {। গুলি লাগবে না।
নীল

1

হাস্কেল - 53 টি চরিত্র

import Data.List
import Data.Ord

f :: (Eq a, Ord a) => [a] -> [a]
f=map head.(sortBy$flip$comparing length).group.sort

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

আমদানি সহ মোট দৈর্ঘ্য: 120

ডাব্লু / ও আমদানি করুন তবে স্বাক্ষরের সাথে: 86

ফাংশন নিজেই: 53


1

ক্লোজার: 43 টি অক্ষর

ফাংশন:

#(keys(sort-by(comp - val)(frequencies %)))

ডেমো (প্রত্যুত্তরে):

user=> (def names ["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"])
#'user/names
user=> (#(keys(sort-by(comp - val)(frequencies %))) names)
("Doe" "Harry" "John" "Dick")

0

পার্ল

প্রদত্ত i / o স্পেস পূরণের জন্য আমার 120 টি অক্ষর দরকার

s!"([^"]+)"[],]!$a{$1}++!e while(<>);print 'MostOccuring = [',join(',',map{qq("$_")}sort{$a{$a}<=>$a{$b}}keys %a),"]\n"

প্রতি লাইনে একটি আইটেম নিয়ে এবং লাইন প্রতি একটি আইটেম মুদ্রণ করে খাঁটি সংক্ষিপ্ততম কোডটি আমার কেবল 55 টি অক্ষর দরকার

$a{$_}++ while(<>);print sort{$a{$a}<=>$a{$b}}keys %a)

0

সি #: 111 টি অক্ষর

List<string>M(List<string>l){return l.GroupBy(q=>q).OrderByDescending(g=>g.Count()).Select(g=>g.Key).ToList();}

(একটি শ্রেণীর ভিতরে)

var names = new List<string> {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"};
foreach(var s in M(names))
{
    Console.WriteLine(s);
}

হরিণী

লুণ্ঠন করা

জন

শিশ্ন

লিনকিউ ব্যবহার করে একটি সহজ সমাধান।


এছাড়াও আপনি দূর করতে পারবে? .ToList () , যেহেতু ক্রম মাধ্যমে গণিত পেতে foreach
আদম Speight

এটি সত্য, তবে তারপরে আমাকে রিটার্নের ধরণ আইইনুমেবল <স্ট্রিং> এ পরিবর্তন করতে হবে ।
প্যাভোহটল

0

আর (22)

names(sort(-table(x)))

একটি ফাংশন হিসাবে এটি আরও 11 টি অক্ষর লাগবে।

ব্যবহার:

> x = c("John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John")
> names(sort(-table(x)))
[1] "Doe"   "Harry" "John"  "Dick"

এটি একটি পরিবর্তনশীল থেকে ইনপুট নেয়, যা সম্প্রদায়ের sensকমত্য দ্বারা অনুমোদিত নয়
ফলমূল Esolanging

0

স্কালা (71)

(x.groupBy(a=>a)map(t=>(t._1,t._2.length))toList)sortBy(-_._2)map(_._1)

Ungolfed:

def f(x:Array[String]) =
  (x.groupBy(a => a) map (t => (t._1, t._2.length)) toList) 
    sortBy(-_._2) map(_._1)

0

জে, 8 বাইট

~.\:#/.~

ব্যবহার

নামগুলি বাক্সযুক্ত স্ট্রিংগুলির একটি অ্যারে হিসাবে সংরক্ষণ করা হয়।

   'John';'Doe';'Dick';'Harry';'Harry';'Doe';'Doe';'Harry';'Doe';'John'
┌────┬───┬────┬─────┬─────┬───┬───┬─────┬───┬────┐
│John│Doe│Dick│Harry│Harry│Doe│Doe│Harry│Doe│John│
└────┴───┴────┴─────┴─────┴───┴───┴─────┴───┴────┘
   f =: ~.\:#/.~
   f 'John';'Doe';'Dick';'Harry';'Harry';'Doe';'Doe';'Harry';'Doe';'John'
┌───┬─────┬────┬────┐
│Doe│Harry│John│Dick│
└───┴─────┴────┴────┘

ব্যাখ্যা

~.\:#/.~   Input: A
    #/.~   Finds the size of each set of identical items (Frequencies)
~.         List the distinct values in A
           Note: the distinct values and frequencies will be in the same order
  \:       Sort the distinct values in decreasing order according to the frequencies
           Return the sorted list implicitly

0

সিজেএম, 15 বাইট (সম্ভবত অ-প্রতিযোগী)

q~$e`{0=W*}$1f=

এই চ্যালেঞ্জ পোস্ট হওয়ার পরে এটি সিজেএম বৈশিষ্ট্যগুলি ব্যবহার করতে পারে। আমি চেক করতে খুব অলস।

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