단조 함수 생성


12

개요

이 도전에서, 당신의 임무는 무작위로 두 세트 사이 의 단조 수학 함수를 생성하는 것 입니다.

입력

입력은 두 개의 양의 정수 sn입니다.

이러한 입력을 얻은 후 프로그램은에서에서 임의의 수학 함수 f를 생성해야 합니다 . 다시 말해, 와 사이의 정수-튜플 을 취하고 그러한 정수 중 하나를 반환 하는 "규칙"입니다 . 또한 다음과 같은 의미에서 단조로운 것이어야합니다 . 만약 하고 있는 두 사람은 그러한 -tuples 모든 좌표에 대한 보유 후 .{0,1,...,s-1}n{0,1,...,s-1}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)

단조 함수의 정확한 분포는 f각 함수가 생성 될 가능성이있는 한 (완벽한 RNG를 가정 할 때) 중요하지 않습니다.

산출

귀하의 출력은의 입력과 출력을 열거해야합니다 f. 여기에는 순서 와 순서에 n관계없이 모든 튜플의 튜플이 포함되어야하며 , 각 튜플 에는 . 정확한 출력 형식은 유연합니다 (이유 내에서).0s-1f

입력 s = 3n = 2출력을 생성 할 수 있습니다

(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 0
(1, 1) 1
(1, 2) 2
(2, 0) 1
(2, 1) 1
(2, 2) 2

세트에 대한 모든 쌍을 {0, 1, 2}정확히 한 번 포함하며 각 쌍 뒤에는 f-value 가옵니다 . 단 조성 조건도 만족됩니다. 튜플은 여기에서 사전 식 순서로 제공되지만 반드시 그럴 필요는 없습니다.

또 다른 예로서, s = 2그리고 n = 4힘 생산

(0, 0, 0, 0) 0
(0, 0, 0, 1) 0
(0, 0, 1, 0) 0
(0, 0, 1, 1) 0
(0, 1, 0, 0) 1
(0, 1, 0, 1) 1
(0, 1, 1, 0) 1
(0, 1, 1, 1) 1
(1, 0, 0, 0) 0
(1, 0, 0, 1) 1
(1, 0, 1, 0) 0
(1, 0, 1, 1) 1
(1, 1, 0, 0) 1
(1, 1, 0, 1) 1
(1, 1, 1, 0) 1
(1, 1, 1, 1) 1

다음은 가능한 모든 출력 s = 2n = 2튜플 순서 변경입니다. 프로그램은 다음 중 하나를 무작위로 출력해야합니다.

(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 0
-------
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 0
(1,0) 1
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 1
(1,1) 1
-------
(0,0) 1
(0,1) 1
(1,0) 1
(1,1) 1

규칙과 채점

전체 프로그램 또는 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점 이 허용되지 않습니다. 설명이있는 코드가 선호됩니다.

시간 복잡성에 대한 제한은 없지만 솔루션이 항상 일정 시간 내에 완료되도록 보장하면 (입력에 따라 일정한 시간에 실행되는 완벽한 RNG를 가정 할 경우) -15 %보너스를 제공합니다 .


s = 2 n = 2와 같은 작은 경우에 가능한 모든 기능을 완전히 열거하면 도움이 될 수 있습니다. 무작위성이 어떻게 나오는지 파악하기 위해 설명을 몇 번 읽어야했습니다.
Sparr

@Sparr 좋은 생각; 편집했습니다.
Zgarb

바운드 런타임이 요구 사항입니까? 단조로운 함수를 찾을 때까지 임의의 함수를 생성하는 솔루션을 고려하고 있습니다.
Sparr

@Sparr 나는 제한된 런타임에 대한 보너스를 추가 할 것이라고 생각하므로 그러한 솔루션은 실격되지 않습니다.
Zgarb

@ Zgarb-아마도 한 시간 안에 끝날 가능성이 큰 솔루션에 큰 보너스를 제공해야 할 것입니다.
Glen O

답변:


4

Pyth, 35 바이트 (38-15 % = 31.45 더 먼)

#I!sm><FhMds<MCeMd^JC,mOQK^UQvzK2JB

데모

입력 형식은 다음과 같습니다.

n
s

출력 형식은 다음과 같습니다.

[[value, tuple], [value, tuple], ...]

임의의 가능성을 생성하고 테스트하기 만하면됩니다.


보너스를받을 자격이 있다고 생각되는 대체 37 바이트 버전 :

Of!sm><FhMds<MCeMd^T2mC,d^UQvz^UQ^Qvz

데모

가능한 모든 단조 함수를 생성 한 다음 무작위로 하나씩 출력합니다. 속도가 훨씬 느리고에서 끝납니다 2,2.


input 좋은 예입니다 3, 2. 불행히도 3, 3온라인 pyth executor에서 응답을 얻지 못했습니다 . 이 조합에 무한 루프가 있습니까?!
bobbel

@bobbel 온라인 executor에 시간 초과가 있다고 생각합니다. 로컬로 시도합니다.
isaacg 2016 년

@bobbel 인피 티 루프는 그다지 느리지 않습니다. 또한 작동 2, 4하지만 다른 것은 아닙니다.
isaacg 2016 년

@bobbel 나는 더 느린 것을 추가했습니다.
isaacg

1

CJam, 40 바이트-15 % = 34 바이트

q~1$\m*\1$,m*{W$\.+2m*{:.<2b}%1&!},mR]zp

이 방법은 모든 유효한 기능을 생성 한 다음 임의로 선택합니다. 실행 시간은 O (s 2s n ) 이상 이지만 주어진 입력에 대해 일정합니다.

나는 이것이 OP가 염두에 두었던 것을 의심하지만 , 일정 시간 (입력에 따라 [...]에 따라) 끝나는 것이 보장되어 보너스를받을 자격이 있습니다.

CJam 통역사 에서 온라인으로 사용해보십시오 .


1

Julia, 64 바이트 (-15 % = 54.4)

g(s,n)=(K=rand(0:s-1,ntuple(n,i->s));for i=1:n K=sort(K,i)end;K)

언 골프 드 :

function g(s,n)
  # Generates a random n-dimensional array with s per dimension
  # and all values being integers between 0 and s-1
  K=rand(0:s-1,ntuple(n,i->s))
  # Loop over the various dimensions
  for i=1:n
    # Sort in the current dimension
    K=sort(K,i)
  end
  return K
end

이것은 충분히 큰 s 및 n (g (10,10)은 10 ^ 10 배열을 생성해야하므로 메모리가 부족한 유일한 문제입니다. 따라서 각 숫자가 1 바이트, 즉 10 기가 바이트의 데이터).

출력은 1 기반 인덱싱이므로 지정된 입력에 대한 결과를 확인하려면 각 입력 값에 하나씩 추가해야합니다. 예를 들어 f (1,2,6,0,3)을 찾으려면을 검사해야합니다 K[2,3,7,1,4].

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