回答:
*>#:'=
グループ()の各()のカウントの*
降順要素(>
)の最初()。ステップバイステップ:#:'
=
i
4 3 1 0 6 1 6 4 4 0 3 1 7 7 3 4 1 1 2 8
=i
4 3 1 0 6 7 2 8!(0 7 8 15
1 10 14
2 5 11 16 17
3 9
4 6
12 13
,18
,19)
#:'=i
4 3 1 0 6 7 2 8!4 3 5 2 2 2 1 1
>#:'=i
1 4 3 7 6 0 8 2
*>#:'=i
1
max(d,key=d.count)
あなたのPythonの答えは印刷されないようですので、私はこれがあなたが望むものであることを期待しています。
print
通常は6バイトを追加します。
d,
との間のスペースだけですkey=
。
defaultdict(int)
またはを使用して2次ランタイムを回避しますCounter
。のようなものCounter(d).most_common()[0]
。
当然のことながら、モードを見つけるための組み込み関数があります。無名関数として:
@mode
これにより、入力ベクトルで最も一般的に発生する要素が返され、より小さな値に結び付けられます。
デニスのおかげで2バイト節約できました!
help mode
)によると:「2つ以上の値が同じ頻度である場合、「モード」は最小値を返します。」
@mode
。
eo/QNQ
のようなstdinへの入力を期待します[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
。Pythonは安定した並べ替えを実行するため、最後に出現することで関係が解決されます。
リスト内の値をカウントしてリストをソートし、リストの最後の番号を出力します。
Q
たとえば、前に値を含むd
ように初期化した場合に置き換えることができますd
=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Python風の擬似コード:
Q=eval(input());print(sorted(Q,key=Q.count)[-1])
完全な説明:
: Q=eval(input()) (implicit)
e : ... [-1]
o Q : orderby(lambda N: ...,Q)
/QN : count(Q,N)
Pythのorderby
正確Pythonのような実行sorted
してorderby
いるの最初の引数key
の引数。
Last@SortBy[d,d~Count~#&]
または
#&@@SortBy[d,-d~Count~#&]
チャレンジと同様に、これはリストがに保存されることを想定していますd
。
もちろん、組み込みのMathematicaがない場合、MathematicaはMathematicaになりません。
#&@@Commonest@d
Commonest
(タイの場合)すべての最も一般的な要素のリストを返し、#&@@
golfedありますFirst@
。
d.max_by{|i|d.count i}
基本的にはMathematicaの答えの移植版ですが、Rubyには直接的なものがあるmax_by
ため、最初にソートする必要はありません。
d.max_by d.method:count
いましたが、それは約100万(別名2でもない)バイトです。それでも、それが可能であることは注目に値します。
A{A\-,}$0=
という変数の配列を想定していますA
。これは基本的に、配列内の各数値の出現に基づいて配列をソートし、配列の最後の要素を選択します。
使用例
[1 2 3 4 4 2 6 6 6 6]:A;A{aA\/,}$W=
出力
6
デニスのおかげで1バイト節約できました!
A{A\-,}$0=
1バイト短くなります。
Ae`$e_W=
$e`$e_W=
匿名関数。リストを最も一般的なものから最も少ないものに並べ替え、最初のアイテムを取得します。
(0{~.\:#/.~)
0{
の最初の~.
ユニークなアイテム\:
によって並べ替え#/.~
周波数プリロードされた変数dを使用する1行の式。頻度で配列をソートし、最初の要素を取得します。
厄介な副作用、元の配列が変更されます
d.sort((a,b)=>d.map(w=>t+=(w==b)-(w==a),t=0)&&t)[0]
いつものように、.reduceの代わりに.mapを使用すると、全体として1文字短くなります。.reduceを使用すると、ほとんどクリーンでゴルフのないソリューションになります。
d.sort((a,b)=>d.reduce((t,w)=>t+(w==b)-(w==a),0))[0]
最後に、元の配列を変更せず、グローバル(62バイト)なしで関数を使用するソリューション:
F=d=>[...d].sort((a,b)=>d.reduce((t,w)=>t+(w==b)-(w==a),0))[0]
FireFox / FireBugコンソールでテストする
d=[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
d.sort((a,b)=>x.map(w=>t+=(w==b)-(w==a),t=0)&&t)[0]
出力 1
d配列は次のようになります。
[1, 1, 1, 1, 1, 4, 4, 4, 4, 3, 3, 3, 0, 6, 6, 0, 7, 7, 2, 8]
少し長く、たくさんゴルフできます。
f=a=>(c=b=[],a.map(x=>b[x]?b[x]++:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
これにより、のf
ように呼び出すことができf([1,1,1,2,1,2,3,4,1,5])
、を返す関数が作成されます1
。
最新のFirefoxのコンソールで試してください。
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
1バイト短くなります。
(非競合-質問は言語より前のものです)
.MJ
説明:
.M # Gets the most frequent element in the [implicit] input
J # Converts to a string, needed as the program would output "[1]" instead of "1" without this.
入力を使用する代わりに変数に配列を保存する場合は、プログラムの開始時に配列をスタックにプッシュするだけです。
sort|uniq -c|sort -nr|sed q
それを使用して:
sort|uniq -c|sort -nr|sed q
4
3
1
0
6
1
6
4
4
0
3
1
7
7
3
4
1
1
2
8
[ctrl-D]
5 1
つまり、「1」がモードであり、5回表示されます。
sort|uniq -c|sort -nr|sed q
数人のキャラクターを救う
a{a\-,}$0=
この回答から、私はGolfScriptでのゴルフのヒントを書きました。という配列の入力を予期し、a
スタックに結果を返します。(スタック上の配列から入力を読み取るには:
、11バイトを追加します。標準入力から入力を読み取るには(形式[1 2 1 3 7]
)、~
12バイトを追加します。)
このコードは、入力配列を反復処理し、元の配列から各要素を減算し、残っている要素の数をカウントすることで機能します。これは、元の配列をソートするキーとして使用され、ソートされた配列の最初の要素が返されます。
∘.=⍨d
は、と同じですがd∘.=d
、の再帰的な外積です=
。の要素のすべてのペアを比較するブール行列を作成しd
ます。
+/
軸の1つに沿ってその行列を合計し、ベクトルを生成します。
⍒
ベクトルを等級付けします。つまり、インデックスで並べ替えます。(グリフが示唆するように、⍒
降順で評価し⍋
、昇順で評価します。)
⊃
グレーディングから最初のインデックス、つまりの最大要素のインデックスを取得しますd
。
d[...]
その要素を返します。
+/∘.=⍨d
の各要素についてカウントしますd
。 ⊢∘≢⌸d
はの各要素に対してカウントする∪d
ため、インデックスはのインデックスに対応しませんd
。反例:d←1 1 2 2 2
。動作させるには:(∪d)[⊃⍒⊢∘≢⌸d]
または(⊃⍒⊢∘≢⌸d)⊃∪d
。
.Bag.invert.max.value
$_ = < 4 3 1 0 6 1 6 4 4 0 3 1 7 7 3 4 1 1 2 8 >».Int;
say .Bag.invert.max.value; # implicitly calls $_.Bag…
タイがある場合、タイの大きい方を印刷します。
.Bag
リストまたは配列のメソッドは、指定された値がその値に表示された回数の総数を関連付ける定量化されたハッシュを作成します。
bag(4(4), 3(3), 1(5), 0(2), 6(2), 7(2), 2, 8)
この.invert
メソッドは、キーと値が交換されたバッグ内のペアのリストを作成します。(これを呼び出す理由は、次のメソッドが必要なことを行うためです)
4 => 4, 3 => 3, 5 => 1, 2 => 0, 2 => 6, 2 => 7, 1 => 2, 1 => 8
.max
List of Pairs のメソッドは、最初にキーを比較し、タイが値を比較する場合、最大のペアを返します。
(これは、multi infix:<cmp>(Pair:D \a, Pair:D \b)
どちらが大きいかを決定する方法であるためです)
5 => 1
この.value
メソッドは、ペアから値を返します。(.invert
以前の呼び出しではなかった場合、それは我々が求めていたキーだったでしょう)
1
同点の場合に結びついたすべての値を返したい場合:
say @list.Bag.classify(*.value).max.value».key
この.classify
メソッドは、キーが*.value
各ペアでWhatever lambda を呼び出しているペアのリストを返します 。
1 => [2 => 1, 8 => 1],
2 => [0 => 2, 6 => 2, 7 => 2],
3 => [3 => 3],
4 => [4 => 4],
5 => [1 => 5]
次に.max
、最大のペアを取得するために呼び出します。
"5" => [1 => 5]
.value
バッグからオリジナルのペアを取得するための呼び出し(この場合は1つのみ)
1 => 5
次に、リスト内のすべてのペアでメソッド>>.key
を呼び出すために使用し.key
、最も見られた値のリストを作成します。
1
Stream.of(A).collect(Collectors.groupingBy(i -> i, Collectors.counting())).entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).findFirst().get().getKey();
入力AはtypeでなければなりませんInteger[]
。注意java.util.*
してjava.util.stream.*
、彼らは取り残されoneliner必要性はしかし精神で、インポートします。
(i->i,Collectors.counting())
。
import Data.List
import Data.Ord
g=head.maximumBy(comparing length).group.sort
インポートが無視される場合、45です。
maximumBy
代わりにを使用すると2バイト節約できますlast.sortBy
。新しいコードはになりg=head.maximumBy(comparing length).group.sort
ます。
g=
。2.)あなたは置き換えることができますmaximumBy(comparing length)
によってsnd.maximum.map((,)=<<length)
これをインポートする必要はありませんOrd
62バイトの合計:オンラインそれをお試しください!
ọtᵒth
これは実際にはスニペットではありませんが、どうなるかわかりません...
The output is
h the first element of
t the last element of
ọ a list of [value, number of occurrences] pairs corresponding to
the input,
ᵒ sorted ascending by
t their last elements (the numbers of occurrences).
int *a=std::max_element(x,x+n);int z=0,b=0,c=0;for(int i=0;i<=*a;i++){c=std::count(x,x+n,i);if(c>b){b=c;z=i;}}return z;
完全なコードとテスト:
#include <iostream>
#include <algorithm>
#include <vector>
int m(int *x,int n)
{
int *a=std::max_element(x,x+n);int z=0,b=0,c=0;for(int i=0;i<=*a;i++){c=std::count(x,x+n,i);if(c>b){b=c;z=i;}}return z;
}
int main()
{
int d[] = {4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8};
std::cout<<m(d,20);
return 0;
}