배열의 최소값 계산


19

배열 고려 x[1 5 3 4]및 숫자 n, 예를 들어, 2. 모든 길이 - 쓰기 n슬라이딩 하위 어레이를 : [1 5], [5 3], [3 4]. 송출 MINIMAX 어레이의 슬라이딩 블록의 최대 값의 최소값으로 정의 될 수있다. 따라서이 경우 최소값은 5, 5, 4입니다 4.

도전

배열 x과 양의 정수가 주어지면 n위에서 정의한대로 미니 맥스를 출력합니다.

배열 x에는 양의 정수만 포함됩니다. 의 길이 n는 항상 1최대 길이입니다 x.

계산은 반드시 위에서 정의 된 바와 같지 않은 임의의 절차에 의해 수행 될 수있다.

코드 골프, 가장 적은 바이트가 이깁니다.

테스트 사례

x, n, 결과

[1 5 3 4], 2                    4
[1 2 3 4 5], 3                  3
[1 1 1 1 5], 4                  1
[5 42 3 23], 3                 42

답변:


19

Dyalog APL, 4 바이트

⌊/⌈/

이것은 오른쪽과 왼쪽 인수로 배열과 정수를 기대하는 모나 딕 함수 트레인입니다.

TryAPL로 사용해보십시오 .

작동 원리

두 함수의 기차는 꼭대기 에 있습니다. 즉, 오른쪽 함수가 먼저 호출되고 (두 인수 모두), 왼쪽 함수가 그 위에 호출됩니다 (결과는 단독 인수로 나타남).

monadic은 f/단순히 인수를로 줄 f입니다. 그러나 dyadically 호출하면 f/n-wise 감소하고 슬라이스 크기를 왼쪽 인수로 사용합니다.

⌊/⌈/    Monadic function. Right argument: A (array). Left argument: n (list)

  ⌈/    N-wise reduce A by maximum, using slices of length n.
⌊/      Reduce the maxima by minimum.

잠깐만 ... 이미 줄어든 것을 어떻게 줄이나요? 단순한 요소가 아닙니까?
Cyoce

@Cyoce N-wise 감소는 최대 값의 배열을 산출합니다. 예를 들어 2 ⌈/ 1 2 3 4의 최대 값을 계산 (1 2) (2 3) (3 4)하므로를 반환합니다 2 3 4.
Dennis

확인. 나는 N-wise 감소가 첫 번째 N 요소를 가져 와서 기능으로 감소시키는 것을 의미한다고 생각했습니다. 예를 들어 2-wise 감소는 정상적인 감소입니다
Cyoce

몇 바이트를 계산 해야 합니까? 1 또는 2?
njpipeorgan

1
@njpipeorgan 인코딩에 따라 다릅니다. APL은 (수십 년에서 유니 코드를 선행) 자신의 기존 코드 페이지를 가지고 있으며, 그것은 인코딩 단일 바이트 각있다.
Dennis


5

루비 39 바이트

->(x,n){x.each_slice(n).map(&:max).min}

여기서 x는 배열이고 n은 배열을 청크 할 숫자입니다.


당신은 의미하지 each_cons않습니까?
찰스

3

Pyth, 10 바이트

hSmeSd.:QE

설명:

           - autoassign Q = eval(input())
      .:QE -   sublists(Q, eval(input())) - all sublists of Q of length num
  meSd     -  [sorted(d)[-1] for d in ^]
hS         - sorted(^)[0]

형태로 입력을받습니다 list newline int

여기 사용해보십시오!

또는 테스트 스위트를 실행하십시오!

또는 10 바이트

hSeCSR.:EE

설명:

      .:EE -    sublists(Q, eval(input())) - all sublists of Q of length num 
    SR     -   map(sorted, ^)
  eC       -  transpose(^)[-1]
hS         - sorted(^)[0]

여기서 테스트 스위트


3

Oracle SQL 11.2, 261 바이트

SELECT MIN(m)FROM(SELECT MAX(a)OVER(ORDER BY i ROWS BETWEEN CURRENT ROW AND :2-1 FOLLOWING)m,SUM(1)OVER(ORDER BY i ROWS BETWEEN CURRENT ROW AND:2-1 FOLLOWING)c FROM(SELECT TRIM(COLUMN_VALUE)a,rownum i FROM XMLTABLE(('"'||REPLACE(:1,' ','","')||'"'))))WHERE:2=c;

언 골프

SELECT MIN(m)
FROM   (
         SELECT MAX(a)OVER(ORDER BY i ROWS BETWEEN CURRENT ROW AND :2-1 FOLLOWING)m,
                SUM(1)OVER(ORDER BY i ROWS BETWEEN CURRENT ROW AND :2-1 FOLLOWING)c
         FROM   (
                  SELECT TRIM(COLUMN_VALUE)a,rownum i 
                  FROM XMLTABLE(('"'||REPLACE(:1,' ','","')||'"'))
                )
       )
WHERE :2=c;


2

젤리, 6 바이트

ṡ»/€«/

온라인으로 사용해보십시오!

작동 원리

ṡ»/€«/  Main link. Left input: A (list). Right input: n (integer)

ṡ       Split A into overlapping slices of length n.
 »/€    Reduce each slice by maximum.
    «/  Reduce the maxima by minimum.

2

자바 스크립트 (ES6), 84 83 72 바이트

(x,y)=>Math.min(...x.slice(y-1).map((a,i)=>Math.max(...x.slice(i,i+y))))

11 바이트를 줄여주는 user81655에게 감사합니다.


모두 긍정적 인 것 :(x,y,M=Math.max)=>-M(...x.slice(y-1).map((a,i)=>-M(...x.slice(i,i+y))))
edc65

2

줄리아, 51 바이트

f(x,n)=min([max(x[i-n+1:i]...)for i=m:endof(x)]...)

획기적인 것은 없습니다. 이것은 배열과 정수를 받아들이고 정수를 반환하는 함수입니다. 기본 알고리즘 만 사용합니다. 경우는 훨씬 짧아 질 것입니다 minmax인수에 스플래 배열을 필요로하지 않았다.

각각의 겹치는 부분 배열을 얻고 최대 값을 취하고 결과의 최소값을 취합니다.


2

펄 6 , 32 바이트

{@^a.rotor($^b=>1-$b)».max.min}

용법:

my &minimax = {@^a.rotor($^b=>1-$b)».max.min}

say minimax [1,5,3,4], 2;    # 4
say minimax [1,2,3,4,5], 3;  # 3
say minimax [1,1,1,1,5], 4;  # 1
say minimax [5,42,3,23], 3;  # 42

2

R, 41 35 바이트

동물원을 설치해야합니다.

function(x,n)min(zoo::rollmax(x,n))

편집 - zoo::rollmax존재 를 실현하여 6 바이트 !


2

J, 9 바이트

[:<./>./\

APL 답변과 유사합니다. 오른쪽 arg의 (left arg) -subsets에 (최대) >./\적용 >./합니다. 그런 다음로 <./제한되어 있으므로 최소값을 찾습니다 [:.

테스트 사례

   f =: [:<./>./\
   2 f 1 5 3 4
4
   3 f 1 2 3 4 5
3
   3 f 1 1 1 1 5
1
   3 f 5 42 3 23
42

1

파이썬 3, 55 바이트

lambda x,n:min(max(x[b:b+n])for b in range(len(x)-n+1))

테스트 사례 :

assert f([1, 5, 3, 4], 2) == 4
assert f([1, 2, 3, 4, 5], 3) == 3
assert f([1, 1, 1, 1, 5], 4) == 1
assert f([5, 42, 3, 23], 3 ) == 42

1

파이썬 2, 50 바이트

f=lambda l,n:l[n-1:]and min(max(l[:n]),f(l[1:],n))

첫 번째 n항목 의 최대 값 과 첫 번째 요소가 제거 된 목록의 재귀 함수 중 최소 두 가지를 재귀 적으로 계산합니다 . n요소 보다 적은 수의 목록을 가진 기본 사례의 경우 빈 목록을 제공합니다. 빈 목록은 Python 2가 목록을 숫자보다 큰 수로두기 때문에 무한대로 사용됩니다.


1

자바 스크립트 (ES6), 70 바이트

x=>n=>-M(...x.slice(n-1).map((_,i)=>-M(...x.slice(i,i+n)))),M=Math.max

currying을 사용하면 이 함수는 이전 답변에서 2 바이트를 절약합니다.

데모

f=x=>n=>-M(...x.slice(n-1).map((_,i)=>-M(...x.slice(i,i+n)))),M=Math.max
a=[[[1,5,3,4],2,4],[[1,2,3,4,5],3,3],[[1,1,1,1,5],4,1],[[5,42,3,23],3,42]]
document.write(`<pre>${a.map(r=>`${f(r[0])(r[1])==r[2]?'PASS':'FAIL'} ${r[1]}=>${r[2]}`).join`\n`}`)


1

매스 매 티카, 23 바이트

Min@BlockMap[Max,##,1]&

테스트 사례

%[{1,2,3,4,5},3]
(* 3 *)

1

자바 7 128 126 124 바이트

int c(int[]x,int n){int i=-1,j,q,m=0;for(;i++<x.length-n;m=m<1|q<m?q:m)for(q=x[i],j=1;j<n;j++)q=x[i+j]>q?x[i+j]:q;return m;}

언 골프 및 테스트 코드 :

여기에서 시도하십시오.

class M{
  static int c(int[] x, int n){
    int i = -1,
        j,
        q,
        m = 0;
    for(; i++ < x.length - n; m = m < 1 | q < m
                                           ? q
                                           : m){
      for(q = x[i], j = 1; j < n; j++){
        q = x[i+j] > q
             ? x[i+j]
             : q;
      }
    }
    return m;
  }

  public static void main(String[] a){
    System.out.println(c(new int[]{ 1, 5, 3, 4 }, 2));
    System.out.println(c(new int[]{ 1, 2, 3, 4, 5 }, 3));
    System.out.println(c(new int[]{ 1, 1, 1, 1, 5 }, 4));
    System.out.println(c(new int[]{ 5, 42, 3, 23 }, 3));
  }
}

산출:

4
3
1
42

1

라켓 84 바이트

(λ(l i)(apply min(for/list((j(-(length l)(- i 1))))(apply max(take(drop l j) i)))))

언 골프 드 :

(define f
  (λ (l i)
    (apply min (for/list ((j (- (length l)
                                (- i 1))))
                 (apply max (take (drop l j) i))
                 ))))

테스트 :

(f '[1 5 3 4]  2)
(f '[1 2 3 4 5] 3)
(f '[5 42 3 23] 3)

산출:

4
3
42


1

SmileBASIC, 68 바이트

M=MAX(X)DIM T[N]FOR I=.TO LEN(X)-N-1COPY T,X,I,N
M=MIN(M,MAX(T))NEXT

여기서 특별한 것은 없습니다. 입력이 X[]N

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.