# 8의 랜덤 골프 : 무한리스트 셔플


23

시리즈 정보

우선, 이것을 다른 코드 골프 도전과 같이 취급하고 시리즈에 대해 전혀 걱정하지 않고 대답 할 수 있습니다. 그러나 모든 과제에는 리더 보드가 있습니다. 첫 번째 게시물에서 시리즈 대한 추가 정보와 함께 리더 보드를 찾을 수 있습니다 .

홀 8 : 무한리스트 셔플

무한 목록을 입력으로 받아서 그 목록의 뒤섞인 버전을 반환하는 함수 나 프로그램을 작성해야합니다.

무한 I / O에 대하여

이 챌린지를 위해 입력을 생성하고 출력을 생성 할 수있는 몇 가지 방법이 있습니다.

  • 양의 정수 목록 또는 문자열 표현 또는 인쇄 가능한 ASCII 문자 목록 (0x20 ~ 0x7E 포함)을 사용할 수 있습니다. 출력 형식은 입력 형식과 일치해야합니다. 선택한 옵션에 관계없이 지금부터 데이터를 "목록"이라고합니다.
  • 무한 표준 입력 스트림에서 목록을 읽고 무한 표준 출력 스트림에 지속적으로 출력을 쓸 수 있습니다. 솔루션은 출력 스트림이 정기적으로 기록되고 플러시되도록 특정 값이나 일련의 값에 의존해서는 안됩니다 (예 : 5입력 목록에 a 가 있을 때마다 출력을 쓸 수는 없음 ). 물론,리스트의 문자열 표현을 읽는다면리스트 분리자가 나타날 때까지 기다리는 것이 좋습니다.
  • 이를 지원하는 언어에서 지연 무한 목록 또는 문자열을 가져 와서 반환하는 함수를 작성할 수 있습니다.
  • 이를 지원하는 언어에서는 다른 생성기를 입력으로 사용하는 무한 생성기를 구현할 수 있습니다.
  • 또는 인수를 취하지 않고 호출 될 때마다 하나의 출력 값을 반환하는 함수를 작성할 수 있습니다. 이 경우, 인수를 취하지 않고 함수가 호출 될 때마다 다음 입력 값을 리턴하는 함수가 정의되었다고 가정 할 수 있습니다. 해당 기능의 이름을 자유롭게 선택할 수 있습니다.

프로그램이 영원히 실행되고 무한 메모리를 사용할 수 있다고 가정 할 수 있습니다. (이것은 유한 한 양의 메모리로 해결할 수 있지만 이것이 의미하는 것은 메모리 누수가 허용된다는 것입니다.)

무작위성에 대하여

무한 입력 의 위치 i 에서 판독되는 임의의 값 v 에 대해, 무한 출력의 위치 i-9 내지 i + 9 중 임의의 위치에서 종료 될 수있는 양의 확률이 있어야한다 (그 위치가 음수가 아닌 한) ). 이러한 확률은 다른 출력 위치 또는 다른 입력 위치에 대해 동일 할 필요는 없습니다. 솔루션이 더 멀리 떨어진 다른 위치로 값을 섞을 수 있다면 괜찮습니다.

따라서 솔루션이 목록의 맨 아래에서 첫 번째 값을 셔플하거나 첫 번째 위치까지 매우 늦은 값을 셔플 할 필요는 없습니다. 그렇다면 모든 위치가 9 단계에서 시작하는 한 괜찮습니다. 입력이 가능합니다.

예를 들어 다음 문자열을 입력 으로 사용하면 출력에서 ​​끝나야 할 ___모든 위치를 나타냅니다 X.

                  ___________________
 abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...

언어에 내장 난수 생성기가 없거나 언어를 사용하지 않으려면 추가 시드 값을 입력으로 사용하고 시드를 사용하여 적절한 RNG 를 구현할 수 있습니다 . 이 페이지 가 도움 될 수 있습니다.

에 관계없이 솔루션을 사용하는 실제 분포, 그것은해야한다 거의 확실 유한 (그러나 임의의) 시간이 지나면 다음 값을 생성합니다.

구현이 이러한 요구 사항을 충족시키는 방법에 대한 간단한 설명을 포함하십시오.

채점

이것은 이므로 바이트 단위로 측정 된 가장 짧은 유효한 답변이 이깁니다.

리더 보드

시리즈의 첫 번째 게시물은 리더 보드를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 모든 답변을 헤드 라인으로 시작하십시오.

# Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

# Ruby, <s>104</s> <s>101</s> 96 bytes

(언어는 현재 표시되어 있지 않지만 스 니펫은이를 요구하고 구문 분석하며 향후 언어 별 리더 보드를 추가 할 수 있습니다.)


2
무한 시간 / 메모리를 사용할 수 있다고 가정 할 수 있습니까?
Mego

언어에 난수 생성기라는 것이 있다면 실제로 사용해야합니까?
feersum

1
@Mego 무한한 시간. 그리고 무한 메모리, 프로그램이 데이터를 영원히 처리 해야하는 문제에 대해 평소와 같이 그렇습니다 (유한 메모리 에서이 문제를 해결할 수는 있지만 메모리 누수를 강요하는 언어는 처벌하고 싶지 않습니다).
마틴 엔더

@feersum 아마도 자체 내장 난수 생성기의 요구 사항을 좀 더 정확하게 지정해야하지만 대부분의 경우 내장 RNG보다 짧게 구현하는 것을 상상할 수 없습니까?
마틴 엔더

@feersum 나는 그 부분을 조금 명확히하고 무작위성에 대한 표준 정의에 연결했습니다.
마틴 엔더

답변:


13

파이썬 3 , 78 바이트

from random import*
l=[]
while[shuffle(l)]:l[9:]and print(l.pop());l+=input(),

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

STDIN (한 줄에 하나씩)에서 입력을 받아서 STDOUT으로 인쇄합니다.

l최대 10 개의 요소 버퍼 를 유지합니다 . 버퍼는 각 단계마다 섞입니다. 길이가 10이면 마지막 요소가 인쇄되고 제거됩니다.

요소가 삽입 되 자마자 인쇄되는 경우 버퍼에서 대기중인 9 개의 다른 요소보다 먼저 건너 뛰어 9 개의 지점이 남습니다. 요소는 버퍼에서 임의로 오래 기다릴 수 있으므로 위치가 어느 정도 오른쪽으로 이동할 수 있습니다.

목록에서 임의의 요소를 생성하고 제거하는 좋은 방법은없는 것 같습니다. 셔플 링은 과도한 것으로 보입니다. 사용 l.pop(randint(0,9))하는 데 2 바이트가 더 걸립니다 (목록에 10 개의 요소가 있음을 사용함)

from random import*
l=[]
while 1:l+=input(),;l[9:]and print(l.pop(randint(0,9)))

그것은 어떻게 더 좋은 없다 x=choice(l);l.remove(x)와 .A 언어를 poprandom같은

poprandom = lambda l:l.pop(randrange(len(l)))

매우 깨끗하게 할 수 있었다

from random import*
l=[]
while 1:l+=input(),;l[9:]and print(poprandom(l))

9

Befunge ( 쿼크 향 )

?,?~

,스트림에서 문자를 읽고 스택으로 푸시합니다. ~스택에서 맨 위 문자를 팝하고 (있는 경우) 인쇄합니다. ?다음에 실행될 명령을 무작위로 지정합니다. 그래서 여기의 알고리즘은 "무한 루프에서 같은 확률로 문자를 밀거나 문자를 터뜨립니다." 나는 이것이 요구 사항을 만족한다고 생각합니다. 캐릭터는 스택에서 임의로 많은 문자가 추가되어 오른쪽으로 움직일 수 있으며 스택이 임의로 커질 때 인쇄 할 수 있으므로 임의로 멀리 움직일 수 있습니다 왼쪽.


5
스택이 비어 있으면 null 바이트를 출력하지 않습니까?
feersum

내가 연결 한 구현은 그렇지 않습니다. Befunge 사양에 동의합니다.
histocrat

2
웃기는 브라우저는 널 바이트를 먹는다. putchar ( "\ 0") 구현을 호출하지만 FF는 HTML에서이를 제거합니다. >> document.getElementById("output").innerHTML = "a\0b" >> document.getElementById("output").innerHTML "ab"
feersum

Aha, 브라우저에서 이상한 일이 일어나고 있는지 궁금했습니다. 내 크롬도 그렇게 생각합니다. 글쎄요, 그것은 기술적 인면에서 많은 부분이지만, 일부 환경에서 실행되는 일부 통역사에서만 작동하는 솔루션을 게시하는 것이 사이트의 정신에 달려 있다고 생각합니다.
histocrat

4

C (gcc) , 94 바이트

L;i;f(s){srand(s);int B[9]={0};for(L=0;;)L>9&&putchar(B[i=rand()%10]),B[L>9?i:L++]=getchar();}

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

좋아, TIO 링크는 의미가 없습니다. 쉬운 테스트를 위해 임의의 ASCII 문자를 출력하거나 문자열을 무한대로 반복하는 다음 C 프로그램을 만들었습니다.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(int argc, char** argv){
    srand(time(NULL));
    if(argc < 1) {
        for(;;){
            printf("%c", rand() % 95 + 32);
        }
    } else {
        char* s = argv[1];
        int i = 0;
        for(;;){
            if(s[i] == 0)
                i = 0;
            printf("%c", s[i++]);
        }
    }
}

이 프로그램을이라고합니다 iro.

프로그램 정확성

내가 여기서하는 일은 9값을 버퍼로 읽는 것 입니다. 그런 다음이 배열에서 임의의 인덱스를 선택하여 출력 한 다음 스트림의 다음 문자로 바꿉니다.


3

SILOS , 149 바이트

b=1
lbla
x=15+b*15
b=1
lblb
readIO
queue 0 i
x-1
if x b
a=0
lblx
x=rand*2
queuePop 0
if x X
printInt m
a+1
b=15-a
if b x
GOTO a
lblX
queue 0 m
GOTO x

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

본질적으로 인수를 통해 온라인 통역사에 입력을 계속하지만 오프라인 공식 통역사에서는 한 번에 15 블록 (첫 번째 블록 30 개)으로 콘솔에 무한 입력 할 수 있습니다.

입력을 임시 큐에로드하고 운이 좋은 15를 선택합니다 (임의의, 그러나 확률이나 분배의 관점에서 동일하게 분배되지는 않음).

나머지는 새로운 입력이 대기열을 채울 때 남아 있으며 첫 번째 입력은 끝까지 섞일 수 있습니다 (기본적으로 문자는 정규 분포를 따른다고 생각합니다). 이 프로그램은 파이썬보다 두 배 더 장황하고 아마도 Java보다 "골 피어"라는 점에 주목하는 것이 흥미 롭습니다.


결과를 더 잘 보려면 입력을 문자열로 사용하는 비 호환 버전이 있습니다 (그러나 8,000 자 정도만 사용할 수 있음).

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

재미를 위해 여기 에이 게시물이 문자열 버전을 통해 제공됩니다.

 [.L.Ooy "9beS.IS],"14 ts b1
 nly

  = ll
   x = 1b 15 1
5b a * b = lb rd # + lb eaI O e 
 엑스
 ifquu   
1 0x b
   =

    이자형
0
   나는 lblxa -d * 2
    큐 x = rn 
   x 제아 p0
   pnInt 오라
   mf = iePit
  바 1
   GTO 1 fb x + Oa


 qe -lblX u0 m 구우  
[rlT 

 tnn5! I.STii] [S.LO 즉

htpsgthyx] : iub.om/jhujh .. tcraa.IOo /TytonieSu:wl/.L lnn! : tt / iS
[hsto.un에서 / nuslprxRUCoDsio /] : e#NzZn6j4c/2xNQFnF7y0aLzkrosd9Dov2yxJNx774HBrgPUdi9CySI09sCLw5TJwB7jlB1XVeQFE7m1VMsIQvDOjBmdtME3umNzYXs9unFbqRamVDfUDw@RT3NHoL7/i04bz16DCoP4eulOU7jPD8OmYjATpynkuMDuBPYmtnIJzseyyhaNkMyQgXG2R782vqMDIiUm6Kq4Q3mJkxlUsR1rrldPw./l28Z SL.XS - IONuscOT "
senallyxMz.stiitkp ingN "
 eeInliinrprt (ee e toghr tetgpnmntuon eruEuut rh ofi off, bhenecil inretea.atr ialoks tirilw upeitfleptly ty honso (e oote cenfine iwllbc 15 atly) nitloo aim (te) nikfte3 firs bck)
hs 0It 테 
 lodshipo alauttt.mpra quuet 나는 lck eooy d randomyn p 15 (uo equl, unbtty drbutedaynistinems oftrly ordisrprob ill abition h ibttmin.Tet ri) reanicks
 당신이 queusen uwit ree nusfil th 
pte ftip, ae uldsfuesis ob hl rlel weual t tc hdyoend, f tbaaly thi an elnkhecarcthe (sc ho noreiItrolwaaldibtio lmiru.t 'iereaf) tsng tetntiottssht prasnon hogIms 만 twieatisi s vroscpythonadprs.
 tte s / "gt 
t t ke ca (ca)

[Tyauoas 그것 onine! hrhrys :.ru] p // o / lsslo # jVd (tinnexi3E @ KDpit / LrhtwXwVEUuscxPmJjFFCaNimMzlHiQEcMmdVIT7vqs8mNgxU3mD / J1AwXQ / ivbao1j @ nb4I6 / m93655bThmb4cy5TUX3xvI018cZzrXItuO5B @ NX5JD / HzyE @ G @ D5eqrGem3l0HPGRutZfpi2PzVA @ d3CVRTm4zJxnZdcFSTEO0JOT9KhDI6byjnLhS0cNmGz7hJrTdAgORT8Ndvv7DgZSbJdkp9v5al8qMyNCb9tXe0ChrShXRTOt @ 7fFgV3zTkbVbsD @ JpKina2oKgNVakjsjLCpD29u7l0XVRWalVTyArF1FqypQAxXb / BedqUqpJGOPVyxOjLj0jXup8cE277L2I6 @ lSowK5pA7nGldRBiJwyKxF6z2c3kW / sJ4EYBbbpSuBxs55nyI9sdnu @ nJJeGqtKprGEUbc6NDGMjjO2tN / KuKTWh2WWbbRRLVaq / P6KqkoMNWGRgTQZLlbXfQI050bY0rz0xmzCVZ4vowjpV0dCmkDFq0VNa5GSDzVn5Qw7idwPTxu5xTAtLQCDN / YIApfAn4dsDmYksCqUU27sRggpzRK4SmdjmPUPQO4j5FmgHMFRWS2eI1CfA2YIcf7JlylFjdZypVTH0IJu4ZJHiUviyBFKqhrkCjgXAAB8d710NhHgDwcJksuvPPprcfzHPTaJGFX8OIExW / cBZjaPiY7a4WD6rTYmOouBVucROlwvuBJiHWdJQjjbobNGTd7M1P6z8dw / A @ GU02hgjCcrjjQHkAdS6r7UjQ6wAPqB @ sIgxkKcbZDixeWS6mn160CKQpn7aUwGLK22u9I0oX6YIwPMhFVaX5uYon0AyoNTCZvnmtilVhV3 / pgTGc7r39lIS5PmqM / NGnUSLnTw9eTJ7qqrNQKsJHz @ Tt8mDZVWKCKTkBro1PuQAksDdN1yaVGiVXElRW9i5M11cINmxNGYAg9TD7sxtEDI2OkKMaBXgvO5dOplUQQIdpb2w66NePBScMmEnAX8ydGSiiHlss @ hOLZzInnIoTevRtEm / TGHWOkly5ljMK4FkgDDSWCWBW3YwmEVYCIBV @ GMIg3TZtGwMFWXVxQwBb5iD6PfS7h7Sric1ib5ZYIvW6n3tlaK7 / 6 @ 3OAHy4LjOuW @ tzaBP3 @ mFbJpHsVsQKPfeui / O1 @ aBcbZ4TK96T8tp3QjeA1vDXMKBIqdK @ HZs2vsMlQE36YmrBEnVRUvAGNuCt44e0RB0sL0MkNu1Q5wOwliTT2JQzVrOnHAmSXIU // sqjdG6jdT2r1v @@ lGjouzkGWoD4zhnzJBxo0OT6OTbBDgeDFRnY8TMXZbMPdxsCtbXeUxIBqST4VRwkpbgwChBcJxMx6hLIVZhfuylDvF1l26Nbl3xRLgQnatSCMigx @ PCT6lcG1ebdk / 86UBUFp9UkxjoCGSJnlxMtUdHf6IjkMnil5aua9L @ xXsdHEKW @ 8JpVqlgKsr12bAKG2Typfv @ Yy4CkUydETWphcdmdpWq7egtxqP8pYI2rSaSuYBwW0tNTdXn4qcjnZ9JKhuVwaWRycwCWt247LSflsCHsB3u0KoLTQJzL1uMl0duij / IF7LCc5FSpIPW7gcjOYj @ jQdpQHv0WUz / IbMhS0XmFiWm1i0cTbxXjsjLxt6nGmQNQoKfREklc8pTFyHub7jUg8TR4QrZ2w3YjaLWNi @ FFerCnNgY0LqgrA6qkWg8H / 7Pv6YhtqeZzvoB0yD5Wm1eLL1Vf / SouI0Q / fox7eQlXieZB1F1v2 / in / btqyVPtubWhDIKH8WaTlry43N6HgOEzX5HOjv1 @ lamBeZlJpqJnG3B2LZe8sXUafdAcVvVjBBlqxbEThCdjpelc7YVuYXOqM8MyVV3iPxbqYu @ nmbHnoKpK1Eww11sA9aiwN8kMe0ioVO7qnucL1A8wHJ4wTsdltrm3CC4bpCd5hMhyDGXSdGgdKvnCKUpNB9nH @ wXLgu5iUEcfJbDKZFjx6gI9i8fCcUFiQXxeSbKnwhT6 @ V / I6yS / Ew9k @ tgI68 / 10- @ 4jjx0PZBpSo5vWLCDi4zb @ TJejQQPtvlgde98MDGJ4vUW3T @ iJTA89gGhUJIgy @ MDBpaz3s7PT2ZIwStVANsxpCmhghh68huncD0VdumQt0lT / Su6HW3kMLFfo / FphQ0QhtoZ5iRN / @ HZ / DmHq8UZEgiblprekkw1I366fMhePmDclSxirOlYH2Hwe3fom3aoe1 @ yaQYwi5ZPd2FcITXO7cu9 @ 6tiHZJc7lKSB8e3 / mXx34xYH / 8F @ TUxx / 5vs5yHsYBL4ekscycqT1BnuV19 / "SFE / iRAIL.O NqUXAm. T3zDreu) .S –IOxs.d디디

2
헤더가 리더 보드를 깨뜨릴 수 있습니다. 만약 오늘의 랜덤 골프 대회에 참가하고 싶다면 표준 형식을 사용하는 것이 좋습니다.
wizzwizz4

@ wizzwizz4 고정
Rohan Jhunjhunwala

3

Aceto , 24 바이트, 비경쟁

인터프리터의 버그를 수정해야했기 때문에 비경쟁입니다.

^




OYpO
r^`!
?d0=   >

무한한 줄의 스트림을 가져 와서 임의의 순서로 생성합니다. 모든 요소는 임의의 지점에서 발생할 수 있습니다.

?왼쪽 하단에서 a 로 시작 하여 임의의 방향으로 이동합니다. 그것이 아래로 또는 왼쪽이면, 우리는 오른쪽으로 밀려납니다.

위로 이동 r하면 값 Y을 가져 와서 스택 ( )을 O섞고 다시 튀어 나옵니다.

우리가 오른쪽으로 이동 d하면 최상위 스택 값을 복제하고 a를 푸시하고 0동등성을 테스트합니다 (문자열을 읽고 있기 때문에 정수 0을 가질 수 없습니다). 값이 같으면 스택의 맨 아래 (인쇄하지 않으려는)에 도달했음을 의미합니다. 우리는 부정 비교를 ( !) 및 p전용 (경우 RINT `일들이 동일하지 않았다). 그런 다음 우리는 또한 Origin으로 돌아갑니다 .


3

루비, 43 바이트

l=[];loop{l<<gets;l[9]&&$><<l.shuffle!.pop}

내 원래의 대답은 게으른 평가 무한 목록을 사용했지만 이것은 더 짧습니다. 오 잘


2

MATL , 11 바이트

`rEkN*?D}iT

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

Histocrat의 Befunge 답변 포트 .

설명 : (1 바이트의 Luis Mendo에게 감사합니다)

`         T % Start do-while (`) .... true (T)
 rEk        % 50-50 chance of outputting or inputting:
            %   Random number between 0...1, multiplied by 2 and converted to logical. 
    N       % Check if there is anything on the stack to output
     *?     % If there is anything on the stack and (*) we want to output:
       D    % Output. Sadly, D errors when the stack is empty, requiring the N*
        }i  % Else, input.

이것은 거의 확실하게 유한 시간 내에 출력되며, 거의 확실하게 유한 메모리 만 필요합니다 .

완전성을 위해 다음은 10 요소 버퍼를 유지하고 그로부터 임의 요소를 출력하는 15 바이트 버전입니다.

`htnt9>?Yr&)wDT

나는 골프 언어가 관용적 인 경우 매우 관용적 인이 버전을 좋아 tn...Yr&)합니다. 목록에서 임의의 요소를 팝하고 해당 요소없이 목록을 반환합니다. 그러나이 챌린지의 특정 물류는 많은 바이트를 추가합니다 ( w디스플레이에 필요 t9>?하고 목록이 충분히 찼는 지 확인 하는 데 필요 합니다 ...).


2

Alice , 7 바이트

a&IdU,O

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

이것은 무한 시간과 메모리를 가진 무한 입력에서 작동해야하지만 실제로 테스트하기는 쉽지 않습니다. :)

설명

a&I         Push 10 characters from the input to the stack.
     d        Push the depth of the stack.
      U       Pop a number (d), push a random number in [0,d)
        ,       Pop a number (n), move the element which is n elements below the top to the top of the stack.
         O    Output the character on top of the stack.

                Execution loops back to the beginning of the line.

각 반복에서 입력에서 10 문자를 읽고 한 문자 만 출력으로 이동하므로 실행 중에 메모리 사용량이 선형으로 증가합니다. 유한 입력을 사용하면 EOF에 빠르게 도달하여 10 -1이 각 반복마다 스택으로 푸시됩니다. -1을 문자로 출력하는 것은 효과가 없지만 입력의 모든 문자가 적당한 시간 내에 인쇄되지는 않습니다.

출력의 위치 i 는 위치 10i 까지의 입력에서 임의의 문자에 의해 취해질 수 있으며 , 이는 적어도 i-9 내지 i + 9 의 범위를 요구하는 과제를 충족시킨다 .


2

C, 214 바이트

c;i;char B[19]={0};char*I;
S(p,q){if(B[p]-B[q])B[p]^=(B[q]^=(B[p]^=B[q]));}
R(n){while(n--)putchar(B[c]),B[c]=*I,c=++i%19,I++;}
main(c,v)char**v;{srand(time(0));I=v[1];R(19);i=9;for(;;){S(i,rand()%19);R(1);i=++i%19;}}

작동 원리

온라인 시도 (UNIX)

#include <stdio.h>
#include <unistd.h>

// animation speed
#define ANIMATION_SLOW 600000
#define ANIMATION_NORMAL 400000
#define ANIMATION_FAST 200000

c;i;char Buffer[19]={0};char*input;
Swap(p,q){if(Buffer[p]!=Buffer[q])Buffer[p]^=(Buffer[q]^=(Buffer[p]^=Buffer[q]));}
Read(n){while(n-->0)putchar(Buffer[c]),Buffer[c]=*input,c=++i%19,input++;}

main(int argc, char**argv)
{
    // initialization
    srand(time(0));
    input=argv[1];
    Read(19);i=9;

    // shuffle machine
    while(1)
    {
        usleep(ANIMATION_NORMAL);
        Swap(i,rand()%19);
        Read(1);
        i=++i%19;
    }
}

다이어그램에서 "스왑"은 무엇을 의미합니까?
Martin Ender

그 의미 @MartinEnder 그은 Vi과 교환되는 Vj경우 j = RAND [ i-9, i+9 ]질문 기준을 만족하는 v which is read at a position i of the infinite input, there must be a positive probability for it to end up in any of the positions i-9 to i+9 of the infinite output
Khaled.K

아 이해가 되네요, 고마워요
마틴 엔더

다이어그램을 만드는 데 사용한 도구를 물어볼 수 있습니까?
Dada

1
@Dada Gliffy
Khaled.K 1

2

05AB1E , 13 바이트

[I)˜¼¾T›i.rć,

온라인으로 사용해보십시오! (20 개의 요소를 갖도록 수정)

[             # Infinite loop
 I)˜          # Add the next element from input to the array
    ¼         # Increment the counter variable
     ¾T›i     # If the counter variable is greater than 10...
         .r   #   Get a random permutation of the array
           ć, #   Print and remove the first element 

1

배쉬 , 17 바이트

xargs -n9 shuf -e

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

xargs는 STDIN에서 9 글자를 계속 가져와 셔플로 보냅니다.

다음과 같은 방법으로 무한 목록을 생성 할 수 있습니다.

yes {a..z}

abcde .. z 무한 시간을 인쇄합니다.

테스트는 다음과 같이 수행 할 수 있습니다.

yes {a..z} | xargs -n9 shuf -e 

xargs shuf -e요구 사항을 충족 하는지 확실하지 않음
marcosm

1

R, 70 바이트

x=NULL;repeat{x=sample(c(x,scan()));if(sum(x|1)>9){cat(x[1]);x=x[-1]}}

빈 벡터로 시작합니다 x. 무한 루프에서는 STDIN에서 새로운 값을 얻은 다음 벡터를 섞습니다. 그런 다음 누적 목록의 길이가 10 이상인지 확인합니다. 그렇다면 인쇄를 시작할 수 있습니다. 이런 식으로 벡터에는 10 개의 입력 버퍼가 있으며 각 반복마다 셔플됩니다. 따라서 입력을 10 곳 더 일찍 인쇄하고 나중에 많은 곳을 인쇄 할 수 있습니다 (와의 기하학적 분포에 따름 p=1/10). 버퍼가 충분히 길면 첫 번째 요소가 인쇄되어 벡터에서 제거됩니다.


1

자바 스크립트, 78 바이트

for(l=[];;){l.push(prompt());l.length==10&&alert(l.splice(Math.random()*9,1))};x.sort(()=>Math.random()<0.5);alert(x)}

xnor의 답변과 동일한 방법을 사용합니다.


0

펄 5 , 39 바이트

38 바이트의 코드 + -n플래그

print splice@F,rand 10,1if 9<push@F,$_

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

을 사용하여 @F배열에 각 요소를 추가하십시오 push@F,$_. @F10 개의 요소를 포함 하면 ( push배열의 요소 수를 반환하므로 9<push...) 임의의 요소가 제거되고 인쇄됩니다 (요소를 제거하고 인쇄 splice@F,rand 10,1하려면 print).
10 번째 요소를 읽은 후에 출력이 시작됩니다. 따라서 각 요소는 원래 요소보다 9 개 이상의 위치에 나타나기 시작하여 오른쪽으로 무한대로 이동할 수 있습니다.


0

SmileBASIC, 61 58 바이트

@L
B$=B$+R()IF I>8THEN R=RND(9)?B$[R];:B$[R]="
I=I+1GOTO@L

무한리스트의 각 문자는 버퍼의 끝에 추가됩니다. 버퍼 길이가 11이면 임의의 문자가 인쇄되어 제거됩니다.

함수 R는 다음 문자를 생성합니다.


-1

프롤로그, 70 바이트

s(L):-get0(C),(length(L,9)->random_select(H,L,R),put(H);L=R),s([C|R]).

죄송합니다. 전화 방법을 말하지 않았습니다 : s ([]). 예를 들어 빈 목록이 있습니다.
피터 Reintjes

PPCG에 오신 것을 환영합니다! 이것이 어떻게 작동하는지 설명해 주시겠습니까? "예 : 빈 목록으로"라는 말의 의미가 확실하지 않습니다. 솔루션은 무한 목록으로 작동해야하며 작동해야합니다.
Martin Ender
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.