나는 문제에 대한 궁극적 인 해결책을 가지고 있다고 주장하지는 않지만 (또는이 목록이 철저하다고 주장하지만) 생각할 수있는 접근법과 왜 작동하지 않을지에 대해 간략히 설명하고 싶습니다. 또한 현재 타임 스탬프를 임의의 소스로 사용하는 것이 충분히 예측할 수 없는지 여부와 확률 분포의 특정 속성을 적용하는 방법과 같은 접선 문제를 다루지 않습니다.
해결책이 아님 : 명시 적으로 하드 코딩 금지
이것은 나쁜 생각입니다. 그것은 관찰 할 수없는 요구 사항입니다 (즉, 프로그램을 실행하여 만족하는지 여부를 결정할 수 없음을 의미합니다) .PPCG에서 권장하지 않습니다. 않으며 다른 플랫폼에서 프로그램을 실행하면 제출이 확인되는 경우 불가능할 수 있습니다 자동화 된 방식. 이와 같은 요구 사항의 문제점은 "하드 코딩"에 대한 객관적인 정의를 찾아 시작해야한다는 것입니다. 일반적으로이 방법을 사용하면 상황이 악화 될뿐입니다.
하드 코딩을 불가능하게 만들기
완전히 허용 할 수는 없지만 사람들이 그것을 사용하지 않기를 원한다면, 하드 코딩이 단순히 경쟁적인 접근 방식이 아닌 문제를 설계하려고 시도 할 수 있습니다. 생성해야 할 객체가 충분히 크고 압축되지 않으면 코드에 하나의 예제를 넣으면 유효한 솔루션을 무작위로 생성하는 알고리즘을 작성하는 것보다 더 많은 바이트가 필요합니다. 특정 예에서, 물론 ID 행렬은 유효하고 일반적으로 생성하기 쉽지만 다른 문제의 경우에는 그렇지 않기 때문에 물론 그렇지 않습니다. 대상 객체가 충분히 불규칙한 경우 큰 크기를 요구하면 실제 알고리즘의 바이트 수에는 영향을 미치지 않지만 하드 코딩 된 부분이 날아갑니다.
출력 매개 변수화
종종 이러한 문제는 예제의 매트릭스 크기와 같은 하나 이상의 자연 매개 변수와 함께 제공됩니다. 그렇다면 하드 코딩이 불가능하거나 적어도 비실용적이되도록 해당 매개 변수를 입력으로 충분할 수 있습니다. 경우에 따라 수동 또는 광범위한 검색을 통해 제공된 특정 매개 변수 값에 대해 특정 솔루션 하나를 하드 코딩하는 것이 쉽지만 일반적으로 이러한 솔루션의 인스턴스에 대한 간단한 닫힌 형태가 없기 때문에 그렇지 않습니다. 임의의 입력에 대한 기본값을 쉽게 생성 할 수 있습니다. 아이덴티티 매트릭스는 어떤 크기로든 작동하기 때문에이 예제에서는 그렇지 않습니다. 이 관련 문제에일반적으로 매우 불규칙적이므로 유효한 값을 적극적으로 검색하지 않으면 기본값을 가질 수 없습니다. 이 값을 시간 제한과 결합하여 기본값에 대한 무차별 검색을 피할 수 있습니다.
확률 분포에 약간의 제한을 두십시오
완전히 제한되지 않은 확률 분포를 기꺼이 포기하려는 경우 응답자에게 분포를 선택할 때 많은 자유를 주지만 하드 코딩을 어렵거나 불가능하게 만드는 제약 조건을 둘 수 있습니다.
- 생각할 수있는 가장 간단한 제약은 가능한 출력이 특정 임계 값 미만이되도록 최소 및 최대 확률의 차이를 요구하는 것입니다. 하드 코딩 된 접근 방식은 거의 모든 출력에 대해 확률이 거의 0이고 기본값에 대한 확률은 1에 가깝습니다. 최대 차이가 0.1 미만이어야하는 경우 접근 방식을 옵션으로 설정하려면 10 (임의로 선택) 기본값이 필요합니다. 마찬가지로 1 / (2 * N *)와 같이 가능한 각 출력에 대해 최소 확률을 요구할 수도 있습니다. 여기서 N 은 가능한 출력 수입니다.
- 대안으로, 확률에 더 높거나 낮은 확률이 존재하도록 크기 δ (선택한)의 간격이 없도록 분포에 (가능성) 격차가 없도록 요구할 수 있습니다. 즉, 하드 코딩 방식으로 생성 될 가능성이있는 특이 치가있을 수 없습니다.
이러한 접근 방식의 주된 문제는 추론하기가 훨씬 어려워서 답변의 정확성을 입증하기가 어렵고 실험적으로 큰 출력 공간에서 정확성을 검증하는 것이 불가능하다는 것입니다. 그럼에도 불구하고, 이들은 하드 코딩을 불가능하게 할 수있는 프로그램에 대해 주로 관찰 가능한 요구 사항을 제공합니다.
기본값이 아닌 값의 확률을 높이는 한 가지 방법은 기본값으로 돌아 가기 전에 임의의 foo를 여러 번 찾으려고 시도하기 때문에 이러한 방법에는 시간 제한이 필요할 수도 있습니다.