답변:
*>#:'=
그룹 ( ) 의 각 ( ) 개수의 *
내림차순 요소 ( >
)의 첫 번째 ( )입니다 . 단계별 :#:'
=
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)
파이썬 답변이 인쇄되지 않는 것 같아서 이것이 당신이 원하는 것으로 기대합니다.
print
일반적으로 6 바이트를 추가하십시오 .
d,
및 key=
.
defaultdict(int)
나 Counter
. 같은 것 Counter(d).most_common()[0]
.
당연히 모드를 찾기위한 내장 기능이 있습니다. 익명 함수로 :
@mode
입력 벡터에서 가장 흔하게 발생하는 요소를 더 작은 값으로 반환합니다.
Dennis 덕분에 2 바이트를 절약했습니다!
help mode
) 에 따르면 : "두 개 이상의 값이 같은 주파수를 갖는 경우 '모드'가 가장 작은 값을 반환합니다."
@mode
.
eo/QNQ
stdin과 같은 입력을 예상합니다 [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. 파이썬은 안정적인 정렬을 수행하기 때문에 마지막 발생으로 해결됩니다.
목록의 값을 기준으로 목록을 정렬 한 다음 목록의 마지막 번호를 인쇄합니다.
Q
예를 들어 값을 포함하도록 d
초기화 한 경우d
=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
파이썬과 같은 의사 코드 :
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가 아닙니다.
#&@@Commonest@d
Commonest
가장 일반적인 요소 (타이의 경우)의 목록을 반환하며 #&@@
golfed First@
입니다.
d.max_by{|i|d.count i}
기본적으로 Ruby가 직접 제외하고 Mathematica 답변의 포트 max_by
이므로 먼저 정렬 할 필요가 없습니다.
d.max_by d.method:count
하려고했지만 그것은 약 백만 (일명 2 개) 바이트 더 길다. 여전히 가능하다는 점은 주목할 가치가 있습니다.
A{A\-,}$0=
라는 변수의 배열을 가정합니다 A
. 이것은 기본적으로 배열의 각 숫자 발생에 따라 배열을 정렬 한 다음 배열의 마지막 요소를 선택합니다.
사용법 예
[1 2 3 4 4 2 6 6 6 6]:A;A{aA\/,}$W=
산출
6
Dennis 덕분에 1 바이트가 절약되었습니다!
A{A\-,}$0=
1 바이트 더 짧습니다.
Ae`$e_W=
$e`$e_W=
사전로드 된 변수를 사용하는 단일 행 표현식 d. 빈도를 기준으로 배열을 정렬 한 다음 첫 번째 요소를 가져옵니다.
불쾌한 부작용, 원래 배열이 변경됨
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 바이트를 앞에 추가 하고 stdin에서 입력을 읽으려면 (형식으로 [1 2 1 3 7]
)~
12 바이트를 .
이 코드는 입력 배열을 반복하고 원래 배열에서 각 요소를 빼고 남은 요소 수를 계산하여 작동합니다. 그런 다음 원래 배열을 정렬하는 키로 사용되며 정렬 된 배열의 첫 번째 요소가 반환됩니다.
∘.=⍨d
의 d∘.=d
반사 외부 제품과 동일 =
합니다. 의 모든 요소 쌍을 비교하는 부울 행렬을 만듭니다 d
.
+/
축 중 하나를 따라 해당 행렬을 합산하고 벡터를 생성합니다.
⍒
벡터의 등급을 매 깁니다 (즉, 인덱스별로 정렬). 글리프에서 알 수 있듯이 ⍒
내림차순 ⍋
으로 등급을 매기고 오름차순으로 등급을 매 깁니다.
⊃
그레이딩에서 첫 번째 인덱스 (의 가장 큰 요소의 인덱스)를 가져옵니다 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
List 또는 Array 의 메소드는 주어진 값을 몇 번 본 총 횟수를 해당 값과 연관시키는 정량화 된 해시를 작성합니다.
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
쌍의 목록에 대한 방법은 제 값을 비교하는 넥타이의 경우 키를 비교하는 가장 큰 쌍을 반환합니다.
(이것이 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 람다를 호출하여 키가있는 쌍 목록을 리턴합니다 .
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 => 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 는 유형이어야합니다 Integer[]
. 주 java.util.*
와 java.util.stream.*
그들이 밖으로 남아 있습니다 oneliner 필요는 그러나 정신으로 가져올 수 있습니다.
(i->i,Collectors.counting())
.
STDIN의 배열을 예상합니다. 숫자가 음이 아닌 정수이면 입력 형식이 계산되지 않습니다.
grep -o [0-9]\*|sort|uniq -c|sort -n|awk 'END{print $2}'
편집 : grep 인수에서 와일드 카드를 이스케이프 처리했습니다. 이제 비어 있지 않은 디렉토리에서 안전하게 실행할 수 있습니다. manatwork 덕분에.
[0-9]*
일치하는 파일 이름으로 확장 될 수 있습니다.
'
에 대한 인수를 입력하십시오 grep
.
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;
}