今日のランダムゴルフ#8:無限リストをシャッフル


23

シリーズについて

まず、これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。最初の投稿では、リーダーボードとシリーズに関する詳細情報を見つけることができます。

8番ホール:無限リストをシャッフルする

入力として無限リストを取り、そのリストのシャッフルされたバージョンを返す関数またはプログラムを作成する必要があります。

無限I / Oについて

このチャレンジの入力を取得して出力を生成する方法はいくつかあります。

  • 正の整数のリスト、またはその文字列表現、または印刷可能なASCII文字(0x20〜0x7Eを含む)の文字列またはリストを使用できます。出力形式は入力形式と一致する必要があります。選択したオプションに関係なく、今後はデータを「リスト」と呼びます。
  • 無限標準入力ストリームからリストを読み取り、無限標準出力ストリームに出力を連続的に書き込むことができます。ソリューションは、出力ストリームが定期的に書き込まれ、フラッシュされることを保証するために、特定の値または値のシーケンスに依存してはなりません(たとえば5、入力リストにaがある場合は出力を書き込むことはできません)。もちろん、リストの文字列表現を読んだ場合、リストの区切りに遭遇するまで待つのは問題ありません。
  • それらをサポートする言語では、怠zyな無限リストまたは文字列を受け取って返す関数を作成できます。
  • それらをサポートする言語では、入力として別のジェネレーターを使用する無限ジェネレーターを実装できます。
  • あるいは、引数を取らず、呼び出されるたびに1つの出力値を返す関数を作成できます。この場合、引数をとらず、呼び出されるたびに次の入力値を返す関数が定義されていると想定できます。その関数の名前は自由に選択できます。

プログラムが永久に実行され、無限のメモリが利用可能であると仮定するかもしれません。(有限のメモリ量でこれを解決することは可能ですが、これが意味することは、メモリをリークすることを許可されているということです。)

ランダム性について

無限入力の位置iで読み取られる値vについては、無限出力の位置i-9からi + 9のいずれかで終わるための正の確率がなければなりません(その位置が負でない限り) )。これらの確率は、異なる出力位置、または異なる入力位置でも同じである必要はありません。ソリューションが値をさらに離れた別の位置にシャッフルできる場合も問題ありません。

したがって、ソリューションが最初の値をリストの非常に下までシャッフルしたり、最初の位置まで非常に遅い値をシャッフルしたりする必要はありません。入力が可能です。

たとえば、次の文字列を入力として使用した場合、___X、出力で終了する必要があるすべての位置を示します。

                  ___________________
 abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...

言語に組み込みの乱数ジェネレーターがない場合、または使用したくない場合は、入力として追加のシード値を取得し、シードを使用して適切なRNGを実装できます。このページはそのために役立つかもしれません。

ソリューションが使用する実際の分布に関係なく、有限(ただし任意)の時間後にほぼ確実に次の値を生成する必要があります。

実装がこれらの要件を満たす方法についての簡単な説明を含めてください。

得点

これはであるため、バイト単位で測定された最短の有効な答えが勝ちです。

リーダーボード

シリーズの最初の投稿はリーダーボードを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、すべての回答を見出しで開始してください。

# Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

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

(言語は現在表示されていませんが、スニペットはそれを必要とし、解析します。将来、言語ごとのリーダーボードを追加するかもしれません。)


2
無限の時間/メモリが利用可能であると仮定できますか?
メゴ

言語に乱数ジェネレーターと呼ばれるものがある場合、実際に使用する必要がありますか?
-feersum

1
@Mego Infinite time、明らかに。そして、無限のメモリです。データを永久に処理するプログラムを必要とする課題の場合はいつものとおりです(有限のメモリでこれを解決することは可能ですが、メモリリークを余儀なくされる言語を罰したくありません)。
マーティンエンダー

@feersumおそらく、自己構築の乱数ジェネレーターの要件をもう少し正確に指定する必要がありますが、ほとんどの場合、独自のRNGよりも短い実装を想像することはできませんか?
マーティンエンダー

@feersumその部分を少し明確にし、ランダム性の標準定義にリンクしました。
マーティンエンダー

回答:


13

Python 3、78バイト

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

オンラインでお試しください!

STDIN(1行に1つ)から入力を受け取り、STDOUTに出力します。

l最大10個の要素のバッファーを保持します。バッファーは各ステップでシャッフルされます。長さが10の場合、最後の要素が印刷されて削除されます。

要素が挿入されるとすぐに印刷される場合、その要素はバッファで待機している他の9つの要素よりも先にスキップしているため、残り9つのスポットが表示されます。要素はバッファ内で任意に長く待機できるため、その位置は任意の量だけ右に移動できます。

リストからランダムな要素を生成して削除する良い方法はないようです。シャッフルはやり過ぎのようです。使用するには2バイト長くなりますl.pop(randint(0,9))(リストに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(quirkster flavor)、4バイト

?,?~

,ストリームから文字を読み取り、スタックにプッシュします。~スタック(存在する場合)から先頭の文字をポップし、印刷します。?次に実行されるコマンドをランダム化します。したがって、ここでのアルゴリズムは「無限ループで、等しい確率でキャラクターをプッシュするか、キャラクターをポップする」というものです。私はこれが要件を満たしていると思います:キャラクターはスタック内の任意の多くのキャラクターをスタック上で任意に見ることができるので、任意に右に移動でき、スタックが任意に大きいときに印刷できるので、任意の距離に移動できます左側。


5
スタックが空の場合、これはnullバイトを出力しませんか?
-feersum

私がリンクした実装はそうではありません。Befungeの仕様に同意する必要があります。
-histocrat

2
面白いことに、ブラウザはnullバイトを消費します。putchar( "\ 0")の実装を呼び出しますが、FFはHTMLからそれをパージします: >> document.getElementById("output").innerHTML = "a\0b" >> document.getElementById("output").innerHTML "ab"
feersum

ああ、ブラウザで何か変なことが起こっているのだろうかと思った。私のChromeもそうだと思います。まあ、それは技術的なことではありますが、環境によっては一部のインタープリターでしか動作しないソリューションを投稿することは、サイトの精神に多少なりとも関係していると思います。
-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リンクはあまり意味がありません。テストを簡単にするために、ランダムなアスキー文字を出力するか、文字列を無限に繰り返す次の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

サイロ、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を選択します(ランダムに、ただし確率または分布に関して均等に分散されません)。

残りは新しい入力がキューを埋めるまで残り、最初の入力は最後までシャッフルできます(基本的に、キャラクターは正規分布に従うと思います)。このプログラムは、Pythonの2倍の冗長性であり、おそらく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 
 バツ
 イフク   
1 0x b
   =

    e
0
   i lblxa -d * 2
    quu x = rn 
   x Xea p0
   pnInt ora
   mf = iePit
  ba 1
   GTO 1 fb x + Oa


 qe -lblX u0 m GOOue  
[rlT 

 tnn5!I.STii] [S.LO ie

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 "
 eestaint on heeInliinrprt(oe 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 0それて 
 lodshipo alauttt.mpra quuet i reanicks a lck eooy d randomyn p 15(uo equl、unbtty drbutedaynistinems oftrly ordisrprob ill abition h ibttmin.Tet ri)
 nwit u ree nusfil th queusen 
pte ftip、ae uldsfuesis ob hl rlelth weual tc hdyoend、f tbaaly thi an elnkhecarcthe(sc ho noreiItrolwaaldibtio lmiru.t 'iereaf)tsng tetntiottssht prasnon hogIms only twieatisi s vroscpythonadprs ah
 tte s / "gt 
tsvea non-omhTrehsは、rwvritcaw aa g(hoe n onl kein n00 orscat、0 cter)で計画を作成します。

[Tyauoas it 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 / 01 @ 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。 "ddd

2
ヘッダーがリーダーボードを破壊する可能性があります-ランダムゴルフオブザデイのコンテストに参加したい場合は、標準形式を使用することをお勧めします。
wizzwizz4

@ wizzwizz4固定
ロハンJhunjhunwala

3

Aceto、24バイト、非競合

インタプリタのバグを修正しなければならなかったため、競合していません。

^




OYpO
r^`!
?d0=   >

行の無限ストリームを取得し、それらをランダムな順序で生成します。すべての要素は、ランダムなポイントで発生する可能性があります。

?左下隅にあるから開始し、ランダムな方向に移動します。それが下または左の場合、右に押し戻されます。

上に移動した場合r、値をeadし、スタックをシャッフル(Y)して、O元の位置に戻ります。

右に移動した場合はd、一番上のスタック値を複製し、a 0をプッシュして、等しいかどうかをテストします(文字列を読み込んでいるので、整数0 を取得することはできません)。値が等しい場合、スタックの一番下に到達したことを意味します(そこから印刷したくない)。比較を否定します(!)、そしてp`、物が等しくない場合()のみリントします。それから、私たちはまた元にO戻ります。


3

ルビー、43バイト

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

私の元の答えは、遅延評価された無限リストを使用していましたが、これはもっと短いです。しかたがない。


2

MATL、11バイト

`rEkN*?D}iT

オンラインでお試しください!

ポートの歴史家の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

アリス、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文字が読み取られ、1文字のみが出力に送られるため、実行中にメモリ使用量が直線的に増加します。入力が有限の場合、これはすぐにEOFに達し、そこから各反復で10 -1がスタックにプッシュされます。-1を文字として出力しようとしても効果はありませんが、入力のすべての文字が妥当な時間で印刷されることはほとんどありません。

位置I出力が位置までの入力に任意の文字が取り得る10I、少なくともレンジを必要とするチャレンジこの準拠はからI-9I + 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;
    }
}

図の「スワップ」とはどういう意味ですか?
マーティンエンダー

@MartinEnderそれは質問基準を満たす場所Viと交換されることを意味します Vjj = 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

それは理にかなっている、ありがとう。
マーティンエンダー

ダイアグラムの作成に使用したツールを尋ねることはできますか?
ダダ

1
@Dada Gliffy
Khaled.K

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

Bash、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

Javascript、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

Perl 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([])。たとえば、リストが空の場合。
ピーターレインチェス

PPCGへようこそ!これがどのように機能するか説明できますか?「空のリストを使用する」などの意味がわかりません。ソリューションは無限リストで機能する必要があります(機能する必要があるだけです)。
マーティンエンダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.