도전
비어 있지 않은 실수 목록이 주어지면 중앙값을 계산하십시오.
정의
중앙값은 다음과 같이 계산됩니다. 먼저 목록을 정렬하고
- 항목 수가 홀수 인 경우 중앙값은 정렬 된 목록의 중앙에있는 값입니다.
- 그렇지 않으면 중앙값은 정렬 된 목록의 중심에 가장 가까운 두 값의 산술 평균입니다.
예
[1,2,3,4,5,6,7,8,9] -> 5
[1,4,3,2] -> 2.5
[1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,-5,100000,1.3,1.4] -> 1.5
[1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,1.5,-5,100000,1.3,1.4] -> 1.5
답변
파이썬 2 , 48 바이트
결과를 반환하는 명명되지 않은 함수입니다. xnor 덕분에 -1 바이트
lambda l:l.sort()or(l[len(l)/2]+l[~len(l)/2])/2.
첫 단계는를 사용하여 배열을 정렬하는 것 l.sort()
입니다. 그러나 우리는 람다에 하나의 문장 만 가질 수 있으므로 파이썬에서 거짓을 -를 None
추가 하여 정렬 함수가 반환한다는 사실을 활용 하여 명령문의 다음 부분을 평가하고 반환하도록 지시합니다.or
None
이제 우리는 정렬 된리스트를 가지게됩니다. 중간 또는 중간 2 값을 찾아야합니다.
조건을 사용하여 그래서 대신에 우리가 인덱스를 얻을 길이의 패리티가 너무 자세한 것 확인 len(l)/2
하고 ~len(l)/2
:
- 첫 번째는 floor (length / 2) 이며, 길이가 홀수 인 경우 중간 요소를 가져 오거나 길이가 짝수 인 경우 중앙 쌍의 왼쪽 항목을 가져옵니다.
- 두 번째는 목록 길이의 이진 반전으로 -1-floor (length / 2)로 평가됩니다 . 파이썬의 네거티브 인덱싱으로 인해 이것은 기본적으로 첫 번째 인덱스와 동일하지만 배열 끝에서 거꾸로 수행됩니다.
목록의 길이가 홀수 인 경우 이러한 인덱스는 동일한 값을 가리 킵니다. 길이가 짝수이면 중앙 두 항목을 가리 킵니다.
이제이 두 인덱스가 있으므로 목록에서이 값을 찾아 합산 한 다음 2로 나눕니다. 소수점 이하 자릿수 /2.
는 정수 나누기보다는 부동 나누기입니다.
람다 함수이므로 결과가 암시 적으로 반환됩니다.
답변
Python3 – 31 30 바이트
@Dennis 덕분에 바이트를 절약했습니다!
나는 기본 답변을 계획하지 않았지만 이 모듈을 발견 하고 그것이 정말 멋진 cuz라고 생각했습니다.
from statistics import*;median
답변
답변
젤리 , 9 바이트
L‘HịṢµ÷LS
설명
나는 아직도 Jelly를 중단하고 있습니다 … 중간 값이나 목록의 평균을위한 내장 기능을 찾을 수 없었지만 Jelly가 정수가 아닌 인덱스를 목록으로 허용하는 것은이 도전에 매우 편리합니다. 이 경우 가장 가까운 두 값의 쌍을 반환합니다. 즉, 입력 길이의 절반을 인덱스로 사용하여 평균을 구할 때 한 쌍의 값을 얻을 수 있습니다.
L Get the length of the input.
‘ Increment it.
H Halve it. This gives us the index of the median for an odd-length list
(Jelly uses 1-based indexing), and a half-integer between the two indices
we need to average for even-length lists.
ịṢ Use this as an index into the sorted input. As explained above this will
either give us the median (in case of an odd-length list) or a pair of
values we'll now need to average.
µ Starts a monadic chain which is then applied to this median or pair...
÷L Divide by the length. L treats atomic values like singleton lists.
S Sum. This also treats atomic values like singleton lists. Hence this
monadic chain leaves a single value unchanged but will return the
mean of a pair.
답변
Brain-Flak , 914 + 1 = 915 바이트
([]){({}[()]<(([])<{({}[()]<([([({}<(({})<>)<>>)<><({}<>)>]{}<(())>)](<>)){({}())<>}{}({}<><{}{}>){{}<>(<({}<({}<>)<>>)<>({}<>)>)}{}({}<>)<>>)}{}<>{}>[()]){({}[()]<({}<>)<>>)}{}<>>)}{}([]<(()())>(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{}<(())>){((<{}{}([[]]()){({}()()<{}>)}{}(({}){}<([]){{}{}([])}{}>)>))}{}{(<{}([[]]()()){({}()()<{}>)}{}({}{}<([]){{}{}([])}{}>)>)}{}([(({}<((((((()()()){}){}){}()){})[()()()])>)<(())>)](<>)){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}(({}<>)<{(<{}([{}])>)}{}{(({})<((()()()()()){})>)({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})({}<({}<>)<>>((((()()()){}){}){}){})((()()()()()){})<>({}<>)(()()){({}[()]<([([({})](<()>))](<>())){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}(({})<>)<>{(<{}([{}])>)}{}({}<>)<>({}<><({}<>)>)>)}{}({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)<>(({}{}[(())])){{}{}(((<{}>)))}{}{}{(<{}<>([{}])><>)}{}<>}{}>){(<{}(((((()()()()())){}{})){}{})>)}{}
필요 -A
실행 플래그를.
설명
이 알고리즘의 중추는 얼마 전에 쓴 버블입니다.
([]){({}[()]<(([])<{({}[()]<([([({}<(({})<>)<>>)<><({}<>)>]{}<(())>)](<>)){({}())<>}{}({}<><{}{}>){{}<>(<({}<({}<>)<>>)<>({}<>)>)}{}({}<>)<>>)}{}<>{}>[()]){({}[()]<({}<>)<>>)}{}<>>)}{}
나는 이것이 어떻게 작동하는지 기억하지 못하므로 나에게 묻지 마십시오. 하지만 스택을 정렬하고 네거티브에 대해서도 작동한다는 것을 알고 있습니다.
모든 것이 정렬 된 후 다음 청크가있는 중앙값의 2 배를 찾습니다.
([]<(()())>(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{}<(())>) #Stack height modulo 2
{((<{}{} #If odd
([[]]()) #Push negative stack height +1
{ #Until zero
({}()()<{}>) #add 2 to the stack height and pop one
}{} #Get rid of garbage
(({}){}< #Pickup and double the top value
([]){{}{}([])}{} #Remove everything on the stack
>) #Put it back down
>))}{} #End if
{(<{} #If even
([[]]()()) #Push -sh + 2
{({}()()<{}>)}{} #Remove one value for every 2 in that value
({}{}<([]){{}{}([])}{}>)#Add the top two and remove everything under them
>)}{} #End if
이제 남은 것은 ASCII로 변환하는 것입니다
([(({}<((((((()()()){}){}){}()){})[()()()])>)<(())>)](<>)){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}(({}<>)<
{(<{}([{}])>)}{} #Absolute value (put "/2" beneath everything)
{ #Until the residue is zero
(({})< #|Convert to base 10
((()()()()()){}) #|
>) #|...
({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})
({}<({}<>)<>>((((()()()){}){}){}){})((()()()()()){})<>({}<>)
#|
(()()){({}[()]<([([({})](<()>))](<>())){({}())<>}{}<>{}{}<>(({})){{}{}<>(<(())>)}{}(({})<>)<>{(<{}([{}])>)}{}({}<>)<>({}<><({}<>)>)>)}{}({}(<>))<>([()]{()<(({})){({}[()])<>}{}>}{}<><{}{}>)<>(({}{}[(())])){{}{}(((<{}>)))}{}{}{(<{}<>([{}])><>)}{}<>
}{} #|
>)
{(<{}(((((()()()()())){}{})){}{})>)}{} #If it was negative put a minus sign
답변
R, 6 바이트
median
통계 프로그래밍 언어 인 R에이 기능이 내장되어 있다는 것은 놀라운 일이 아닙니다.