回答:
{∪⍵[⍒+⌿∘.≡⍨⍵]}
これは、リストを受け取る関数です。例:
names
John Doe Dick Harry Harry Doe Doe Harry Doe John
{∪⍵[⍒+⌿∘.≡⍨⍵]} names
Doe Harry John Dick
説明:
∘.≡⍨⍵:配列内の各要素を配列内の他の各要素と比較し、行列を生成します+⌿:行列の列を合計し、各要素の出現回数を与える⍒:下向きのソートのインデックスを与える⍵[... ]:⍵指定されたインデックスで並べ替え∪:一意の要素を取得するPython 3の場合:
f=lambda n:sorted(set(n),key=n.count)[::-1]
Python 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']
f=lambda n:sorted(set(n),cmp,n.count,1)39の文字
cmp関数と関数の両方を渡すことができるとは知りませんでしたkey。涼しい。
f=lambda n:sorted(set(n),key=n.count)[::-1]
でn = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry",
"Doe", "John"}:
Last/@Gather@n~SortBy~Length//Reverse
{「Doe」、「Harry」、「John」、「Dick」}
Mathematica V10 +(26):
Keys@Sort[Counts[n],#>#2&]
»>>UTF-8を処理できない場合は、に置き換えることができます。これはもっと短くなると確信していますが、Bagクラスの動作は(奇妙なことに)比較的奇妙であり、比較的新しい(引数をカウントできる)ため、実際には完全ではありません。{}無名関数を宣言します。
{(sort -*.value,pairs bag @_)».key}
サンプル出力(Perl 6 REPLから):
> 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
:a.|{[.]a\-,}$
このコードは、スタック上の配列を取得し、その一意の要素を出現回数の降順に並べ替えます。たとえば、入力配列が次の場合:
["John" "Doe" "Dick" "Harry" "Harry" "Doe" "Doe" "Harry" "Doe" "John"]
出力配列は次のようになります
["Doe" "Harry" "John" "Dick"]
注:上記のコードは、一連のステートメントです。名前付き関数に変換するには、次のように中括弧で囲み、名前に割り当てます。
{:a.|{[.]a\-,}$}:f;
または、コードを(上記のリスト表記を使用して)標準入力からリストを読み取り、それを標準出力に出力する完全なプログラムに変換し、コードに~追加`して追加します。[. この場合には省略することができるので、結果として14文字のプログラムが可能になること、(私たちは、スタック上の他に何もないだろう知っているので):
~:a.|{]a\-,}$`
:aa後で使用するために、元の配列のコピーを変数に保存します。
.| 副作用としての重複を排除して、配列とそれ自体の集合和集合を計算します。
{ }$中括弧内のコードによって計算されたカスタムソートキーを使用して、重複排除された配列をソートします。このコードは、各配列要素を取得し、配列減算を使用してa、に保存されている元の入力配列から削除し、残りの要素の数をカウントします。したがって、要素は頻度の降順でソートされます。
[a\])^はに等しいはずだと思います[.;]a\-。一致しない要素の数でソートするのは良い考えです。
^重複を折りたたみますが、-しません。(およびITYM (ではなく)。)[a\](\-は機能しますが、文字は保存されません。
これがここに収まる場合: 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
select name from #t1 group by name order by count(*) desc
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()私が見ることができるように、重複した値を削除したり、それらを順序付けたりしません。
array_count_values長くなるのですか?<?$u=array_count_values($_GET);arsort($u);print_r($u);私の意見では54バイトです
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"]
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]})}
m[n[i]]=-~m[n[i]]してインクリメントでき、ループ本体の周りに{}は必要ありません。
Haskell-53キャラクター
import Data.List
import Data.Ord
f :: (Eq a, Ord a) => [a] -> [a]
f=map head.(sortBy$flip$comparing length).group.sort
説明:最初の2行は必要なインポートであり、コードの次の行は型シグネチャ(通常は不要)、実際の関数は最後の行です。この関数は、リストを自然な順序で並べ替え、等しい要素をリストにグループ化し、サイズの降順でリストのリストを並べ替え、各リストの最初の要素を取得します。
輸入を含む全長:120
インポートなし、タイプ署名付き:86
関数自体:53
関数:
#(keys(sort-by(comp - val)(frequencies %)))
デモ(repl):
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")
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);
}
ドウ
ハリー
ジョン
ディック
LINQを使用したシンプルなソリューション。
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"
~.\:#/.~
名前は、ボックス化された文字列の配列として保存されます。
'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
q~$e`{0=W*}$1f=
これは、このチャレンジが投稿された後のCJam機能を使用する場合があります。私はチェックするのが面倒です。