시리즈 정보
우선, 이것을 다른 코드 골프 도전과 같이 취급하고 시리즈에 대해 전혀 걱정하지 않고 대답 할 수 있습니다. 그러나 모든 과제에는 리더 보드가 있습니다. 첫 번째 게시물에서 시리즈 에 대한 추가 정보와 함께 리더 보드를 찾을 수 있습니다 .
홀 8 : 무한리스트 셔플
무한 목록을 입력으로 받아서 그 목록의 뒤섞인 버전을 반환하는 함수 나 프로그램을 작성해야합니다.
무한 I / O에 대하여
이 챌린지를 위해 입력을 생성하고 출력을 생성 할 수있는 몇 가지 방법이 있습니다.
- 양의 정수 목록 또는 문자열 표현 또는 인쇄 가능한 ASCII 문자 목록 (0x20 ~ 0x7E 포함)을 사용할 수 있습니다. 출력 형식은 입력 형식과 일치해야합니다. 선택한 옵션에 관계없이 지금부터 데이터를 "목록"이라고합니다.
- 무한 표준 입력 스트림에서 목록을 읽고 무한 표준 출력 스트림에 지속적으로 출력을 쓸 수 있습니다. 솔루션은 출력 스트림이 정기적으로 기록되고 플러시되도록 특정 값이나 일련의 값에 의존해서는 안됩니다 (예 :
5
입력 목록에 a 가 있을 때마다 출력을 쓸 수는 없음 ). 물론,리스트의 문자열 표현을 읽는다면리스트 분리자가 나타날 때까지 기다리는 것이 좋습니다. - 이를 지원하는 언어에서 지연 무한 목록 또는 문자열을 가져 와서 반환하는 함수를 작성할 수 있습니다.
- 이를 지원하는 언어에서는 다른 생성기를 입력으로 사용하는 무한 생성기를 구현할 수 있습니다.
- 또는 인수를 취하지 않고 호출 될 때마다 하나의 출력 값을 반환하는 함수를 작성할 수 있습니다. 이 경우, 인수를 취하지 않고 함수가 호출 될 때마다 다음 입력 값을 리턴하는 함수가 정의되었다고 가정 할 수 있습니다. 해당 기능의 이름을 자유롭게 선택할 수 있습니다.
프로그램이 영원히 실행되고 무한 메모리를 사용할 수 있다고 가정 할 수 있습니다. (이것은 유한 한 양의 메모리로 해결할 수 있지만 이것이 의미하는 것은 메모리 누수가 허용된다는 것입니다.)
무작위성에 대하여
무한 입력 의 위치 i 에서 판독되는 임의의 값 v 에 대해, 무한 출력의 위치 i-9 내지 i + 9 중 임의의 위치에서 종료 될 수있는 양의 확률이 있어야한다 (그 위치가 음수가 아닌 한) ). 이러한 확률은 다른 출력 위치 또는 다른 입력 위치에 대해 동일 할 필요는 없습니다. 솔루션이 더 멀리 떨어진 다른 위치로 값을 섞을 수 있다면 괜찮습니다.
따라서 솔루션이 목록의 맨 아래에서 첫 번째 값을 셔플하거나 첫 번째 위치까지 매우 늦은 값을 셔플 할 필요는 없습니다. 그렇다면 모든 위치가 9 단계에서 시작하는 한 괜찮습니다. 입력이 가능합니다.
예를 들어 다음 문자열을 입력 으로 사용하면 출력에서 끝나야 할 ___
모든 위치를 나타냅니다 X
.
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
언어에 내장 난수 생성기가 없거나 언어를 사용하지 않으려면 추가 시드 값을 입력으로 사용하고 시드를 사용하여 적절한 RNG 를 구현할 수 있습니다 . 이 페이지 가 도움 이 될 수 있습니다.
에 관계없이 솔루션을 사용하는 실제 분포, 그것은해야한다 거의 확실 유한 (그러나 임의의) 시간이 지나면 다음 값을 생성합니다.
구현이 이러한 요구 사항을 충족시키는 방법에 대한 간단한 설명을 포함하십시오.
채점
이것은 code-golf 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.
리더 보드
답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 모든 답변을 헤드 라인으로 시작하십시오.
# Language Name, N bytes
N
제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :
# Ruby, <s>104</s> <s>101</s> 96 bytes
(언어는 현재 표시되어 있지 않지만 스 니펫은이를 요구하고 구문 분석하며 향후 언어 별 리더 보드를 추가 할 수 있습니다.)