マルコフ連鎖クイン


17

この質問では、単純なマルコフモデルを使用します。マルコフ連鎖の詳細については、http: //setosa.io/ev/markov-chains/を参照してください

文字列を取ります。この例では、次の単語を使用します。

reader

次に、文字ごとに、文字列内の文字が出現するたびに表示される文字を取得します。(​`^`​文字列の開始と​`$`​終了を表します)

`^` -> {'r'}       # After the start of the string, there is an `r`.
'r' -> {'e', `$`}  # After the first `r` (*r*eader), there is an `e`
                   # after the second (reade*r*), there is the end of the string.
'e' -> {'a', 'r'}
'a' -> {'d'}
'd' -> {'e'}

次に、文字列の先頭から始めて、次のセットの文字の1つからランダムに選択します。この文字を追加し、次のセットの文字から選択し、最後まで取得するまで続けます。以下に単語の例を示します。

r
rereader
rer
readereader

文字が別の文字の後に複数回現れる場合、選択される可能性が高くなります。たとえば、ではcocoa can、の後に、cを取得する可能性が3分の2あり、を取得するo可能性が3分の1ありますaです。

'c' -> {'o', 'o', 'a'}

チャレンジ

上記のように、入力を受け取らず、マルコフ連鎖を使用して生成されたランダム文字列を出力するプログラムを作成します。ここで、連鎖への入力はプログラムのソースです。

  1. プログラムには少なくとも2つの文字が必要です。そのうちの2つは同じでなければなりません(出力が1つしかない「退屈な」チェーンを防ぐため)
  2. 必要に応じて、文字の代わりにバイトを使用するようにモデルを変更できますが、ルール1で「文字」を「バイト」に変更します
  3. プログラムは、理論的に予想される頻度で文字列をランダムに出力する必要があります

これはなので、最短のプログラムが勝ちです!


@ mbomb007すべての情報は質問にあります。興味がある場合はリンクが余分になります(これは非常に基本的な実装です)
Artyer

3
^$が引用符で囲まれているのはなぜですか?引用符から取り除いたり、逆引用符で囲んだりすることがより明確になる場合があります。
破壊可能なレモン

回答:


6

ピップ、64バイト

これは楽しかった。

t:V Y\"m:"Yt@0T9=A OyY@>RC(t(Xy).'.)"ST["t:V Y"RPy";Vm"C9]\";Vm<tab>

<tab>リテラルのタブ文字(0x09)を表します。オンラインでお試しください!

どうやって?

TL; DR:エスケープ文字列構文、repr、およびeval。

リテラル"文字を含める必要がある文字列の場合、Pipは区切り文字として使用して文字エスケープしています\"。エスケープされた文字列を使用する標準的なクインは次のようになります。

V Y\""V Y".RPy\"

つまり、Yank(として保存y"V Y".RPyVそれを含む文字列です。RPyのレプリケートを取得し、それにyリテラル文字列を追加しますV Y。最後に、評価の結果を出力します。

Markov quineの構造は似ていますが、出力するのではなくコードを保存して、後でそれを使って何かをしたいという点が異なります。t:V Y\"...\"evalの結果をに割り当てtます。評価されたコード内で、コードm:"..."の文字列をに割り当てm、最後に評価しますVm。ます。

ST["t:V Y"RPy";Vm"C9] を含むリストを作成します

"t:V Y"  Literal string
RPy      Repr(y)
";Vm"    Literal string
C9       Tab character

デフォルトですべてのアイテムを連結する文字列に変換します。このセクションは"V Y".RPy、元のクインと同等です。これは大きなeval文字列の最後の式であるため、その値はV演算子が返すものであり、したがってに割り当てられるものtです。

従って、評価および割り当てた後、t完全なコードに等しく、m含ま

Yt@0T9=A OyY@>RC(t(Xy).'.)

これVmをコードとして評価します。何が起こるかを分析しましょう。

                            We'll use y to hold the current character in the chain
Yt@0                        Yank first character of t into y (chain always starts there)
         Oy                 Output y without newline each time we...
    T9=A                    Loop till ASCII code of y equals 9 (tab)
                            Since there's only one literal tab, at the end of the program,
                              this satisfies the Markov chain ending requirement
                   Xy       Generate a regex that matches y
                  (  ).'.   Concatenate . to regex: now matches y followed by any character
                (t       )  Find all matches in t (returns a list)
              RC            Random choice from that list
           Y@>              Slice off the first character and yank the remaining one into y

いくつかのメモ:

  • リテラルタブでコードを終了することは、「次の文字または文字列の終わり」の正規表現テストを行うよりも短くなりました。
  • コードに二重文字が含まれていると、使用した正規表現が正しく機能しません。例えば、それを適用すると、マッチではなくxxyリターンのみが返されます。ただし、幸いなことに、このコードには二重の文字は含まれていないため、問題ではありません。xxxy

8

JavaScript、217 215バイト

a="a=q;a=a.replace('q',uneval(a));for(b=c='a';d=a.split(c),c=d[Math.random()*~-d.length+1|0][0];b+=c);alert(b)";a=a.replace('q',uneval(a));for(b=c='a';d=a.split(c),c=d[Math.random()*~-d.length+1|0][0];b+=c);alert(b)

これはuneval、Firefoxでのみサポートされているを使用していることに注意してください。サンプルの実行:

a=ale(a.lend[Ma=d[Macepla.ler(b+=c)b=q;fom(a=q;a=dort(b+1|0],c);a.lit(a)
at(c=c;d[0],c=q;ath+1|0][0];dorerac=ac=d[Ma),c;)*~-d[Ma=alenepl(b+=ac=c;a=c;d[2];d.re(c;fom()
a="a[0],und=d=a)
angt(b),und=d.l(b=a)
a)
ale(a.rth.revanepleplit(b)
ac);fore(b)*~-d.r(b+1|0];fora';a)*~-d.splalith+=dorth+=c=";ath+=a.length+=';ale(b)
a.r(b=c=a)b+1|0],und[0][0];d.splerath.spleneva)";ath.r(ceneplith+=d=aceple(c;)*~-d=';ala';)b='ac;fom(b=c;a.ler(b=d=d[Ma.rt(c=cendor()*~-d='a=";ac;a.spla)b=ceva=';a=d.rt(angt(alength+1|0],c;angt()
al(ac=dorth+1|0][0][0][0][Ma.split()

ご覧のとおり、ほとんど意味がありませんが、これは予想されることです;)OPは、出力が構文的に有効なJSである可能性が約6.3%であることを示すJSFiddleを作成しました。


自己読み取り機能が許可されている場合、これは78バイトのES6になります。

f=(c="f",p=("f="+f).split(c),q=p[Math.random()*~-p.length+1|0][0])=>q?c+f(q):c

非常にまれに、これは構文的に有効なJSを出力します。

f=>e?c+f():c
f=>e?c=>engt():c
f=>e?c=(e):c
f=>e?c=>e=>ength.split():c
f=p=>q?c+f():c
f(q).sp=",p[Mat(q?c=(),plith.lith.sp.sp[0]).lendom().lith+f=>q=p.lendom(",p=p=>q?c+f():c
f(q),q?c=(c=(q)*~-p[0]):c
f().random(),q?c=(c=p[0]):c
f=>q?c=(q="+f"+f).rath.split(c):c
f="+1|0])=().lith.rat()*~-p=>q?c=p[Mat(c=",q?c=p.rath.splendom()*~-plength.splith.lendom(c):c

作成される関数名の中で私のお気に入りは.splendom()split+ length+ random


3
これが有効なJavaScriptを生成する確率はどうなるのだろうか。(オタクスナイプ警告)
DanTheMan

2
@DanTheMan確かに、非常に低いです。すべての括弧と括弧のバランスが取られる確率は非常に低いです。一度は得たがa.splerength.r()、それは有効かもしれない;)
ETHproductions

1
これはunevalの使用のみに起因するFFであることに注意することがあります
ショーン・H

1
@ShaunHありがとう、私はFFだけがアンバルをサポートしていることを忘れていました。
ETHproductions

5
2番目の自己読み取り機能は無効です(meta.codegolf.stackexchange.com/a/4878/48878クインは、直接または間接的に自身のソースにアクセスしてはいけません。」)、およびjsfiddle.netによると@DanTheMan / kabkfLak / 1、可能性は約6.3%です。
アーティアー

5

Perl、103バイト

標準的なクインとこの質問に対する私の答えに基づいて:

$_=q{$_="\$_=q{$_};eval";@s='$';{push@s,(@n=/(?<=\Q$s[-1]\E)(.|$)/g)[rand@n];$s[-1]&&redo}print@s};eval

出力例

$_=q{$_=q{$_=";@sh@s=";eval
$_="\$_=q{$_='$_=q{$_}pus=\$_=";@n=";@ndo};{pus=';edo};@n]\Q$_};{$_};@s=q{$_=';@s[rand@s=/g)(@s,(@s,(@sh@s[-1];@ndo};ed@s[-1]\E)(.|$_}prevan]&ral";evan];{$_}pus='$_};ed@sh@sh@s[-1]\$_='$_};evando};eval
$_=q{$_=";ed@s[-1];evand@s="\Q$_=";@s[-1]\Q$_=q{$_=";@nd@sh@sh@s='$_=q{$_=q{$_='$_="\Q$_='$_};{pus=\$_=q{$_}pral
$_=";evando};@nd@sh@s,(@n]\$_=";@s,(@s[-1];{$_=q{$_}pral
$_=";eval
$_='$_=q{$_="\$_="\Q$_=";ed@sh@s=\E)(.|$_=q{$_=q{$_=q{$_=q{$_}pus=/(?<=q{$_};eval
$_=";ed@sh@s[-1]\Q$_=';edo};{$_=q{$_=";@nt@s,(@n]&&&&&&&ral";@nd@s,(@s[-1]\$_}pus=\E)(.|$_=';@nt@s[ral

他の質問と同様に、いくつかの結果は有効なPerlを生成します。

$_=q{$_};{$_};eval";@sh@s[-1]\$_='$_};evan]\Q$_}preval";eval
$_=q{$_};{$_=q{$_=';@nd@s=q{$_};@s[-1]\E)(@s[-1]\E)(@n=';edo};{$_}predo};eval
$_=q{$_=q{$_};edo};@n=q{$_=q{$_};@s[rin='$_=q{$_}pus=/g)(.|$_=q{$_};edo};eval
$_=q{$_};eval
$_=q{$_=";@ndo};{$_}preval

しかし、可能性はわずかに低く、2%以下です。


7
最初の例が有効なPerlであると言ったなら、あなたを信じます。
アンク-morpork

2
@私が最初にあなたのコメントを誤解し、私はメインのコードが言った場合、あなたが私を信じていないだろうと思っdohaqatar7 有効なPerlの...:D zoitz.com/comics/perl_small.png
ドムヘイスティングス

@ ankh-morpork:これq{は明らかに無効であり、文字列リテラルの始まりであり、}閉じる必要はありません。Perlは実際には、ランダムなバイトシーケンスを実行するのがかなり苦手です(実行した場合、通常は初期の文字列リテラルまたはコメントが原因です)。

4

MS-DOSマシンコード(.COMファイル)、63バイト-非競合

馬はそれ自身のソースコードにアクセスしてはならないため、競合しません。

126バイトのバリアントは、「独自のソースコードにアクセスしない」要件を満たします。

63バイトのバリアントは次のようになります。

FC BE 00 01 AC 50 88 C2 B4 02 CD 21 E8 1A 00 59
4E AC 81 FE 3F 01 7C 03 BE 00 01 38 C1 75 F2 FE
CA 75 EE 81 FE 00 01 75 DB 8A 16 00 80 31 C0 8E
D8 31 C9 AC 00 C2 E2 FB 0E 1F 88 16 00 80 C3

ランダムジェネレーターの確率分布についてもわかりません。

このプログラムは、割り込みによって変更されたクロックカウンターおよびその他の情報がセグメント0に格納されて乱数を生成するという事実を使用します。

生成される出力の例は次のとおりです。

FC BE 00 01 7C 03 BE 00 80 C3

FC BE 00 01 38 C1 75 F2 FE 00 80 31 C9 AC 81 FE 00 80 C3

FC BE 00 01 38 C1 75 EE 81 FE 00 01 38 C1 75 EE 81 FE CA
75 F2 FE 00 01 75 F2 FE 00 80 C3

FC BE 00 C2 B4 02 CD 21 E8 1A 00 01 7C 03 BE 00 59 4E AC
81 FE 3F 01 AC 81 FE 3F 01 7C 03 BE 00 01 7C 03 BE 00 01
AC 81 FE 3F 01 7C 03 BE 00 80 C3

アセンブリコードに変換すると、プログラムは次のようになります。

    cld                # Ensure SI is being incremented
    mov si, 0x100      # Move SI to the first byte of the program
nextOutput:
    lodsb              # Load one byte of the program ...
    push ax            # ... save it to the stack ...
    mov dl, al         # ... and output it!
    mov ah, 2
    int 0x21
    call pseudoRandom  # Create a random number (in DL)
    pop cx             # Take the stored byte from the stack
    dec si             # Go back to the last byte loaded
nextSearch:
    lodsb              # Load the next byte
    cmp si, programEnd # If we loaded the last byte ...
    jl notEndOfProgram # ... the next byte to be loaded ...
    mov si, 0x100      # ... is the first byte of the program.
notEndOfProgram:
    cmp cl, al         # If the byte loaded is not equal to ...
                       # ... the last byte written then ...
    jne nextSearch     # ... continue at nextSearch!
    dec dl             # Decrement the random number and ...
    jnz nextSearch     # ... continue at nextSearch until the ...
                       # ... originally random number becomes zero.
    cmp si, 0x100      # If the last byte read was not the last byte ...
    jnz nextOutput     # ... of the program then output the next ...
                       # ... byte!

    # Otherwise fall through to the random number generator
    # whose "RET" instruction will cause the program to stop.        

    # The random number generator:
pseudoRandom:
    mov dl, [0x8000]   # Load the last random number generated
                       # (Note that this is uninitialized when
                       # this function is called the first time)
    xor ax, ax         # We use segment 0 which contains the ...
    mov ax, ds         # ... clock information and other data ...
                       # ... modified by interrupts!
    xor cx, cx         # Prepare for 0x10000 loops so ...
                       # ... all bytes in the segment are processed ...
                       # ... once and the value of SI will be ...
                       # ... unchanged in the end!
randomNext:
    lodsb              # Load one byte
    add dl, al         # Add that byte to the next random number
    loop randomNext    # Iterate over all bytes
    push cs            # Restore the segment
    pop ds
    mov [0x8000], dl   # Remember the random number
    ret                # Exit sub-routine

programEnd:

非競合は、チャレンジ基準を満たしているが、チャレンジより新しい言語または機能を使用している回答用に予約されています。独自のソースを読み取らないバリアントを投稿するか、回答を削除します。
mbomb007

4

C、306 328 585 611 615 623 673 707 バイト

ソースコード:

p[256][256]={0};char*X="p[256][256]={0};char*X=%c%s%c,Y[999],c,j,*a;main(){sprintf(Y,X,34,X,34);for(a=Y;*a;a++)p[*a][*(a+1)]++;for(j=*Y;putchar(c=j);)while(p[c][++j]<<16<rand());}",Y[999],c,j,*a;main(){sprintf(Y,X,34,X,34);for(a=Y;*a;a++)p[*a][*(a+1)]++;for(j=*Y;putchar(c=j);)while(p[c][++j]<<16<rand());}

読みやすさ/説明のために改行と空白が追加されています:

01  p[256][256]={0};
02  char*X="p[256][256]={0};char*X=%c%s%c,Y[999],c,j,*a;main(){sprintf(Y,X,34,X,34);for(a=Y;*a;a++)p[*a][*(a+1)]++;for(j=*Y;putchar(c=j);)while(p[c][++j]<<16<rand());}",
03  Y[999],c,j,*a;
04  main(){
05      sprintf(Y,X,34,X,34);
06      for(a=Y;*a;a++)p[*a][*(a+1)]++;
07      for(j=*Y;putchar(c=j);)
08          while(p[c][++j]<<16<rand());
09  }

説明

Line 01p[][]別の文字に続く文字のカウントを保持します。

Line 02Xでエスケープされたプログラムのソースが含まれてい%c%s%cます。

Line 03Yプログラムのリテラルソースが含まれます。cj*a変数を数えています。

Line 05Yキインを含むように設定します。

Line 06p[][]

Line 07:現在の状態を印刷します。

Line 08:のカウントに比例して、次の文字をランダムに見つけますp[][]

サンプル出力:

p[++);p[99]=Y;putfor(aind(a++j,*a+j=j,c][c,*an(arile(pr*Y,Y[256]<<1);)][*Y,Y;)wha+++j=*aintfor*Y;prin(a+j]=j][256<1)pr(a;a;f(p[char(Y;for());};a;ma;ma=%s%chain(Y;ar(j][256<<<1)p[256<<raile(cha][9]<rin(j,34,34,Y[256]+j,Y,34,Y,c=Y,*a;*a;for(){0}


1
バイト数を確認できるように、改行や空白なしのバージョンを追加できますか?
スティーブンH.

1
はい、上部に単一行バージョンを追加しました。

3

ルビー、152バイト

0;s="0;s=%p<<33
0until putc($/=Hash[[*(s%%s).chars.each_cons(2)].shuffle][$/])==?"<<33
0until putc($/=Hash[[*(s%s).chars.each_cons(2)].shuffle][$/])==?!

サンプル出力:

0;s.c($/=Has(s).ears(2).ch[*(2)=Hacontc(2).ears.eas=Has==Hars%putc($/]).ears%sh_chuffl puns=Hachach[$/==?!

または

0;s.ch[*($/=%pufl puns($/=%s.shas($/=Harsh_chutilears)])].e]).s)=Hac($/=="<<33\ntile].chufffle][[$/=Hars%sh_c(2)=%p<<<<<33
0;s)].ears)=Hars).c(s).eacon0un0;sh_c($/][*(s.s=Hacons=?!

を介して文字列フォーマットを使用するQuines "s%s"は、すべての2文字のスライスを取得し、それらをシャッフルし、それらをハッシュ辞書に変換することによりマルコフ連鎖を実行します。先頭に余分なロジックが追加されないように、を使用して最新の出力文字を追跡します$/。これは自動的に改行に初期化され、コード内の改行0文字の後にコードが始まる同じ文字が必ず続くようにします。最後に、ソースコードを操作して、1つしかないようにします。そのため、リテラルなしで追加する!ために、常に強打の後に終了し<<33ます。これは、ASCII 33の代わりに印刷不能な1桁の文字を使用してさらにゴルフすることができますが、それは面倒です。


4
p<<<<<33スーパースーパースーパー連結演算子ですか?;-)
ETHproductions

3
それは「waaaay less than」演算子です。
mbomb007

2
これが生み出す言葉が大好きです!最初の例は、オブジェクトHas(s).ears(2)が私を笑わせているかどうかということです。
ドムヘイスティングス

2

さび、564バイト(非競合)

extern crate rand;fn main(){let t=("extern crate rand;fn main(){let t=", ";let mut s=format!(\"{}{:?}{}\",t.0,t,t.1).into_bytes();s.push(0);let mut r=rand::thread_rng();let mut c=s[0];while c!=0{print!(\"{}\",c as char);let u=s.windows(2);c=rand::sample(&mut r,u.filter(|x|x[0]==c),1)[0][1];}}");let mut s=format!("{}{:?}{}",t.0,t,t.1).into_bytes();s.push(0);let mut r=rand::thread_rng();let mut c=s[0];while c!=0{print!("{}",c as char);let u=s.windows(2);c=rand::sample(&mut r,u.filter(|x|x[0]==c),1)[0][1];}}

私はすでに別の質問のためにかなりきちんとしたRustクインを書いていたので、私はそれをこれに適応させると思った。ただし、元のサイズは小さいものでしたが、このためにサイズを最小化する試みはほとんど行いませんでした。以下は、何が起こっているかを説明するための拡張バージョンです。

// Random numbers are removed from the standard library in Rust,
// I had to make a cargo project to even compile this...
// Rust is hardly a golfing language.
extern crate rand;

fn main(){

    // The quine is fairly simple, we just make a tuple with 
    // "everything before this tuple" as first element, and
    // "everything after this tuple" with any quotes escaped 
    // as second. That makes it really easy to print.
    let t=("[...before...]", "[...after...]");

    // Instead of printing it, we save it as a byte vector
    // and append 0
    let mut s=format!("{}{:?}{}",t.0,t,t.1).into_bytes();
    s.push(0);

    // Start with the first character
    let mut c=s[0];
    let mut r=rand::thread_rng();

    while c!=0 {
        print!("{}",c as char);

        // We slide a 2 wide window over it to save a vector
        // of all bigrams. 
        let u=s.windows(2);

        // Filter it to only those which have the current character 
        // as first. Take one at random, its second is our next 
        // character.
        c=rand::sample(&mut r, u.filter(|x|x[0]==c), 1)[0][1];

        // Keep at it until the 0 byte is generated.
    }
}

サンプル出力1:

eran(),0{ller=samarin chas c).pr,teteran mut madoletet manthilaplerng().wind_byt.wit();let.u.0][*s=[*s.plleas.wshit, rnd:Vec<_byte mputextet ut t leat=r,t rant!=r().filllet rng();lar("{}{let.ind_byt.what amusarando_ramut!=st ct!(\").0]=colet!(&lec<_ret.plec=s.whrararandormpr=saile ret=r,0]=r);le(\"),t und;fint.prilt!();ler(2).forap(&ler=s(),t ut rat mu:t=ramund:Ve s.putec==[0];wst and_byt sh(\"et c s[1), munwhras[0];c=s=s="etornws(2)[0, ain(|x|x[0,0,0];fowile c ct(&l=",tes().co_byt().wrmat ash(|x|x[*s.lethrant.wrarmu.file(\"et, r==[1);uterile().0,t ando_rinwhas=[0{}"ect.wilant!("{ple mut, mut mamprmant,0];le(&lec=s.1),t co_>=fin mamustec!(\",c=[0];}}",0];leteteat.ust(",ternwhashrarmut ler("erat,0]==file and_reter==s.utet an letet.ut=", ras.1);fin("{:?}"et t letes[*sado_bytet rnd::Verain s[0];whant(){}{}\"echin s(2);lerad;wst reth(\",t u.iletermat c 1];}{}

サンプル出力2:

et!().0][0][0{}

2

Python 2、211バイト

結果をに出力しstderrます。

import random;X='q=[(list(t)+["$$"])[i+1]for i in range(len(t))if t[i]==c];c=random.choice(q)\nif c=="$$":exit(o)\no+=c\nexec X';s='import random;X=%r;s=%r;q=t=s%%(s,X);o=c="i";exec X';q=t=s%(s,X);o=c="i";exec X

オンラインで試す

サンプル出力:

i+[(s,X)));exenit(or;q=rt(t(t(t);o='ic\n(q)+1]=c\ndor randort))\ngeno));X)\nge(st))ic]=";oic=%ran(s%%(s%rt(q)\ngexe(s=st(t[(s=[if X=%(ompoiforanom;e(t X="$"$"ic="$"i";X=c rt X

簡単な説明:

  • このプログラムは、s='s=%r;print s%%s';print s%sクイン形式を使用します。sプログラム全体を含むstringを作成します。
  • 文字列にXは、再帰的に実行するプロシージャが含まれています。
  • プロシージャは、出力文字列を作成しますo。これはstderr、マルコフ連鎖の最後に到達すると出力されます。
  • チェーンの終わりは、$$プログラムがすべての文字列に対して機能するように、2文字を使用してstring で表されます。のようなプログラムにないキャラクターを使用できたかもしれませんが、chr(0)それはもっと長いと思います。
  • 各実行で選択された文字はに配置されc、(とともにo)プログラムの最初の文字に初期化されます。
  • c文字列t(ソースコードのクインを保持する変数)での選択の各出現に続く文字のリストはq、の次の選択のために選択されcます。

1

PHP、144の 135 130 120 272 220 212バイト

<?$e='$p=$n="";foreach(str_split($s)as$w)$p=$m[$p][]=$w;do echo$n=$m[$n][array_rand($m[$n])];while("\n"!=$n);
';$s='<?$e=%c%s%1$c;$s=%1$c%s%1$c;$s=sprintf($s,39,$e,$s);eval($e);';$s=sprintf($s,39,$e,$s);eval($e);

または、読みやすいようにフォーマットされています:

<?$e='$p = $n = "";
foreach (str_split($s) as $w) {
    $p = $m[$p][] = $w;
}
do {
    echo $n = $m[$n][array_rand($m[$n])];
} while ("\n" != $n);
';$s='<?$e=%c%s%1$c;$s=%1$c%s%1$c;$s=sprintf($s,39,$e,$s);eval($e);';$s=sprintf($s,39,$e,$s);eval($e);

サンプル出力:

<?p=')ay_r_gecorr_splililen]=$p=$w;

そして:

<?p=$n=$ntststs$m[$n=$m[ay_r_chondo$n=$ph(s$nt(fitstr_r_geantentr_s('m[$n=$n"!=$p etstsp][$w;d(fililile(s$w)$nt(sphor_str_getrarast(''''m[$n='m[$m';

そして:

<?p=$who eay_re($n=$n=$nt(')];d(fililileando et($m[]=$pleay_ch(')aray_ren='''))ay_st_r_s($m[$m[asp])ay_co$m[$p $phorentechitr_rean)][$n=$nd("\n"!=$n=$wh(filend('')ay_gen=$ndo$nt_rasp=$n][$p=$whp=$n='m[$n"\n)))))][$w;dorechph(';dorracho$ple_s$w;fil

そして:

<?ph($n);

PHP不正行為、117

好奇心が強い人のために、独自のソースを読んでチートをしたら、117ができます:

<?=$p=$n='';foreach(str_split(file('m')[0])as$w)$p=$m[$p][]=$w;do echo$n=$m[$n][array_rand($m[$n])];while("\n"!=$n);

サイトへようこそ!残念ながら、このような課題に対して適切なクインと見なされるものについていくつかのルールがあり、残念ながらあなた自身のソースからの読み取りは禁止されています。
ポストロックガーフハンター

ああいいですねありがとう 私はルールを探していました。これを修正する必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.