偽のソースコード


23

ソースコードの各文字に対して1つのランダムな文字を出力します(下図を参照)。各文字の確率は、元のソースコードでの頻度です。したがって、出力はクインに似た偽のソースコードになります。

仕様

  • 制限事項
    • 標準の制約が適用されます。空のプログラムや機能はありません。また、あなた自身のソースを読むこともありません。
  • 出力
    • 出力される文字数は、ソースコードの文字数と正確に一致する必要があります
    • 出力文字はランダムに選択する必要があります
    • 任意の文字を選択する確率は等しい (occurrences in source) / (length of source)
    • これは、単項解でさえ1確率で「ランダムに」選択する必要があることを意味します1。つまり、出力をハードコーディングすることはできません。
  • 勝ち
    • これはコードゴルフであるため、最少バイトが勝ちます

Program           Frequency           Probability           Possible Output
-------           ---------           -----------           ---------------           
 a@!@              a - 1               a - 25%               @@a@
                   ! - 1               ! - 25%
                   @ - 2               @ - 50%
Program           Frequency           Probability           Possible Output
-------           ---------           -----------           ---------------
caBaDBcDaBDB       a - 3               a - 25%               aaaBBBBccDDD
                   B - 4               B - 33%
                   c - 2               c - 17%
                   D - 3               D - 25%

単一文字のクインは許可されますか?
ネイサンメリル

@NathanMerrillはい、単一文字(および他の単項)ソリューションが許可されます。ただし、それらの出力はランダムに選択する必要があります。
NonlinearFruit

ファイルの読み取りが許可されていない場合、ファイル内の文字の出現をどのように見つけることができますか?
タイタス

1
これはコードゴルフですか?
OldBunny2800

1
@VolAndいいえ。各文字が表示される確率は、文字の頻度に基づいています。あなたが二回コインを投げると、それは一度頭の上に着地した場合、それはありません持っている尾に手に二度目を。
wizzwizz4

回答:


8

CJam、14バイト

{{E*`mR}`mR}E*

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

説明

各文字は正確に2回出現するため、文字の確率はすべて同じである必要があります。

{           e# Repeat this block 14 times.
  {E*`mR}   e# Push this (nonsensical) block.
  `         e# Stringify it, giving the string "{E*`mR}", which contains each of the
            e# seven characters once.
  mR        e# Select one of the characters at random.
}E*

7

ゼリー、13 バイト

“;⁾vṾWṁ$X€”vṾ

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

使い方

“;⁾vṾWṁ$X€”vṾ  Main link. No arguments.

“;⁾vṾWṁ$X€”    Set the argument and return value to the string s := ';⁾vṾWṁ$X€'.
            Ṿ  Uneval; construct a string representation of s.
               This yields r := '“;⁾vṾWṁ$X€”'.
           v   Dyadic eval; evaluate s with argument r.


 ;⁾vṾWṁ$X€     Evaluated link (s). Argument: r

  ⁾vṾ          Yield 'vṾ'.
 ;             Concatenate r with 'vṾ'.
               This yields t := '“;⁾vṾWṁ$X€”vṾ', i.e., the original source code.
       $       Combine the previous two links into a monadic chain.
     W           Wrap; yield ['“;⁾vṾWṁ$X€”vṾ'].
      ṁ          Mold; repeat ['“;⁾vṾWṁ$X€”vṾ'] once for each charcter in t.
        X€     Random each; select a character, uniformly at random, of each
               of the 13 repetitions of t.

6

Perl、59バイト

$_=q{$_.='$_=q{};eval';@a=/./g;s/./$a[rand@a]/g;print};eval

既存のクインをベースとして使用し、ソースコンテンツからランダムな文字を印刷するように変更しました。

使用法

名前を付けて保存しfaux-source-code.plて実行:

perl faux-source-code.pl

次のようなものを生成します。

$d='=a{f.gng$d._{{{ag{ed{aa;ae/r$no{a]_q}/$;_}lrq=r_=;_;=$'
vptr.q'ap.vaa@}@{iel];na;f.o/qon/fa}ie;=e{/a}/ag.$vaiqa_gv'
$_..'daq;.;/./.@._ogd;@aapqirv/;nrp=}@$}a/i;vq;.l.l@i}g]qq'
va==/t@dl.fe'}ar.l@n;_tve@=n$;$}$.l'p{a@qv._qag@dgr_$/.$/;v
q{/@d;@a;a_=g_r$r/.qar{=[gnr';@;$qgvad;$===/$//i]}g[tr@@.q}

簡単なテストでは、プログラムの結果の約3%がeval正常に実行されました。Perlについて何と言っているのかわかりません...


アハ、成功の3%についてのコメントeval!良いですね!;-)
ダダ

@ダダ真剣に!回答の提出物は本当に機能します!私は...かなり感銘を受けました
ドムヘイスティングス

うまくいけば、私が見たものから、それは出力が単一引用符で囲まれた文字列全体である('またはq//q{}などで)だけです!
ダダ

@Dada Yeah、または正規表現の一致。私を笑わせた!:)
ドムヘイスティングス

1
あなたが再びゴルフをするのを見て幸せです!:)
ダダ

4

Japt、22バイト

"+Q ²£ZgMqB"+Q ²£ZgMqB

オンラインでテストしてください!

使い方

"+Q ²£ZgMqB"+Q ²£ZgMqB  // Implicit: B = 11
"+Q ²£ZgMqB"            // Take this string.
            +Q          // Append a quotation mark.
               ²        // Double the result.
                £       // Replace each char in the result Z with
                 Zg     //  the char in Z at index
                   MqB  //   random integer in the range [0, 11).
                        // Implicit: output last expression


3

PHP、71の 140 110 124 140 120バイト

for($i=2*$n=strlen($s='for($i=2*$n=strlen($s=.chr(39));$i--;)echo$s[rand(0,$n-1)];'.chr(39));$i--;)echo$s[rand(0,$n-1)];

と走る php -d

  1. 引用符なしでコードを含む文字列を作成します
  2. を使用して引用符を1回連結しますord
    (文字列を2倍にして引用符を2つ追加する場合と同じ確率)。
  3. 次に、文字列の長さの2倍をループして、文字列からランダムな文字を取得します。

おそらくさらにゴルフをすることができますが、これまでのところ無駄に私の評価の試み。
私はおそらくここまで深く入りません。


1
The probability of each character is its frequency in the original source code.私は間違っているかもしれませんが、このエントリがこの要件を満たしているようには見えません。
-ETHproductions

ああ、私はその点を逃しました。エディターに戻ります。コードを読み取らずにこれを行うにはどうすればよいですか?
タイタス

これを使用し、私はsyntax error, unexpected '<'。しかし、私はPHPに精通していません。どうすればこれをテストできますか?
NonlinearFruit

@NonlinearFruit:-dフラグを使用しましたか?これはファイルに保存され、フラグ付きphpまたはphp-cgiフラグなしで呼び出されることになっています。たぶん、ヒアドキュメントを使用できます。
タイタス

@NonlinearFruit:...または単に<?使用するための先頭を削除し-dます。
タイタス

3

Python 2、88バイト

s='''from random import*; print "".join(choice(s) for c in "s='"+s+"';exec s")''';exec s

ここまで到達する実際のメリットはすべてmbomb007にあります-あなたの助けに感謝します(そしてバックスラッシュについてのポインタ)


1
これは馬のような挑戦であり、入力やソースコードの読み取りなし(n文字長であると仮定)、nランダムな文字を印刷する必要があります。シンボルcが選択される確率はに等しくなり(number of times c occurs in your solution) / nます。
NonlinearFruit

こんな感じ? exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
user59421

単一引用符はまだ含まれておらず、内に角括弧は必要ありませんjoin
mbomb007

おかげで-と、右、私は少し近いソリューションへナッジのラッシュに巻き込まれた
user59421

1
ここに行きます:s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s。私はそれについて考えたかったのに。
mbomb007

3

ルビー、47バイト

eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"

これは標準のevalクインに基づいています:

eval r="$><<'eval r=%p'%r"

最短のクインよりも1バイト長くなりますが、通常、ソースコード文字列で実行される計算を複製する必要がないため、一般化されたクインにはより良い選択です。通常のクインでは、追加の計算はすべてメインストリングの内側と外側の両方で行う必要がありますが、この種のクインではメインストリングの内側でのみ必要です。

コードが実際に行うことについては、ソースコード全体を表す文字列を取得した後、ランダムな文字を(ランダムインデックスを選択して)47回選択し、各文字を個別に印刷します。


3

Wolfram言語/ Mathematica、109バイト

Function[Print[StringJoin[RandomChoice[StringSplit[StringJoin[ToString[FullForm[Slot[0]]],"[]"],""],109]]]][]

サンプル出力:

niPi[no,ili[Siu[,Sdoio9nthg"t ginuu[1[o]"i,icgi[0TncrS"[ln"o0]r,i][Jon[[et]0"]m [ri"a[]motrin,iFoFnultnnno,Jl

角かっこ。


2

ゼリー、44バイト

私は(私はないんだけど、私は正確にすべてのルールを解釈している願って、非常に必ず「キャリーペイロード」事がメタにあるものか、それはこの挑戦にしても、関連の場合)。

“ẋ2;8220Ọ;8221ỌXµ44СḊ”ẋ2;8220Ọ;8221ỌXµ44СḊ

TryItOnline試してみる

これにより、文字を選択するための文字列が作成されます。初期文字列には、引用符を除くすべての文字が使用されいます。次に、その文字列を2倍にし、序数の開始引用符と終了引用符のそれぞれを連結します(したがって、他の文字を2倍にする必要があります)。最後に、構成された文字列からプログラムの長さまでランダムな文字を繰り返し選択します。


1
@NonlinearFruit Oops-文字列から逃した文字を追加するように更新しましたが、44に更新しませんでした-ありがとう!
ジョナサンアラン

2

パイク、35バイト

35F\";"\\+3322 5**F;H)s"\"2*+2* H)s

ここで試してみてください!

確認するには:最終H文字列を削除し、結果の文字列に各文字の正しい数が含まれます(余分なH

これは、一般化されたクインまたは実際にはクインをまったく使用しません。ソース内のすべての文字を含む文字列を作成できることに依存しています。必要がある任意のコードのためにそれを行うことができるが、各文字は、対数コードサイズが増加します。ソースで文字が許可される唯一の回数は2または7です


2

Ruby、81 67バイト

マーティンのソリューションからいくつかのトリックを盗むことにより、大量のバイトを節約しました

s="s=%p;67.times{$><<(s%%s)[rand 67]}";67.times{$><<(s%s)[rand 67]}

毎回ランダムに選択する必要があることに気づきませんでした。シャッフルがうまくいくと思いました。これはおそらくゴルフができますが、それは私がそれを得ることができる最短です。

標準のルビークインシャッフルされた文字列を出力するように、いくつかの変更を加えた。とにかく無意識のうちにそれを盗んでいることに気づくまでにフォーマットの癖を理解するのに15分ほどかかったので悲しいです。

文字列のシャッフルは短縮できると思いますが、どうすればいいのかわかりません。考えを入れたら、フォーマットを短くすることもできるかもしれません。ヘルプをいただければ幸いです。

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


(私のCJamと同様に)答えは、標準のクインをベースとして使用する必要はないと思います。:私のCJamソリューションは、64のバイトを与えるの直接ポート64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
マーティン・エンダー

ネヴァーマインド、標準QUINEにそれを基づかことは短いですが、evalをベースQUINE使用する必要があります:eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
マーティン・エンダー

@MartinEnderそれはそれ自身の答えに値するほど十分に違うと思います。同意できない場合は、自由に編集して私のものに変えてください。その間、私はあなたからいくつかのトリックを盗み、私のバイトを数バイト節約します。
ファンドモニカの訴訟

2

C、125バイト

char*s="char*s;l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}";l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}

C、ゴルファーでは60バイト、ただし文字列を取得するクインコードではない

l,i;f(char*s){l=i=strlen(s);while(i--)putchar(s[rand()%l]);}

文字を数えるために、私のソリューションには86が必要でした。

c[256];i;f(char*s){i=256;while(*s)c[*s++]++;while(--i)while(c[i]?c[i]--:0)putchar(i);}

すべきではない?おそらく、このクイズのルールを理解していないでしょう。私fは文字列を取り、標準出力に出力します。文字列は任意の文字列にできます。
VolAnd

@NonlinearFruit確率は計算されませんが、式rand()%LENGTH_OF_STRINGはによって提供される正規分布でその文字の確率に従って文字を取得しrand()ます。おそらく、私はquineCのアプローチを理解していません
。...-VolAnd

+1新しいソリューションはほぼ正しいです。sを含める必要がありますchar*s="";。私はこのような何かchar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'がそれをするだろうと思う(しかし私はCに精通していない)。
NonlinearFruit

回答が現在の状態で有効でない場合は、削除する必要があります。
mbomb007

@ mbomb007あなたの判断を説明し、可能性のあるアドバイスを提供してもらえますか?
VolAnd

2

JavaScript、128バイト

a=";a+=uneval(a);alert(a.replace(/./g,_=>a[Math.random()*64|0]))a=";a+=uneval(a);alert(a.replace(/./g,_=>a[Math.random()*64|0]))

注:を使用しているため、Firefoxでのみ機能しunevalます。

サンプルの実行:

)a(rgc=d6m_a4uar=hp(lll(,d=m=dee(M(gtraoan0)(M(aaaa(M]c)e)/M()/u//M6_n/a"*unea(/>atugrn(a=nav"|;)|=)/,ataa,aaangtue;am)t0;|ctoa/
=lvct;eee,,a.e=6r0;);Mtaaoa.aeea4)a[r.6]e/ll+l.)=)|a[(c"rao4ea/=_acaMh=veerva"a(_(d(l)lgn.;rM">=ea40a*).e(h(laa6r)4a)rhlar=t(ta[
[rt]ll]n))aota.e)g;>ae*;..4tt];l[;].*lnr4(mnM|alg(a.ag(.=e(a>>aa>.hga;a/pat+elc];apc=(ag)tao.).ll4u)dah]r(ul)>lr;,)ret(e/g(=_c*r
M.r)_;.a(lraalg("mac>dmrlr"0/ah(a()ead|/0a(m.|u0)(a(0_[dn)a]/raal;eata)a.ataeaa*l)=ra()la=(a)*aaea>n;.a.)ca)orM(tm*a,a=)p;(>r)aa

これにより、JSで見られるよりもPerlでより有効なコードが生成されたことに本当に驚きました!ここにいない多くの楽しい言葉として、除いてgtraoan、私は推測ほぼうめき声である...
ドムヘイスティングス

1
@DomHastingsまあ、PerlはJSよりも句読点のマッシュです;)
ETHproductions

間違いなく!句読点工場の爆発というよりは、句読点の混乱です!しかし、私はそれがとても好きです!
ドムヘイスティングス

現れる"可能性はありますか?
NonlinearFruit

1
@NonlinearFruitうん。最初、2番目、最後の出力例には少なくとも1つあります。
ETHproductions

1

Python 3、134 132バイト

文字列内のソースコード内のすべての文字を正しい回数使用し、文字列に2を掛けて自分自身を含めます。プログラムは、コード内の文字ごとにその文字列からランダムな文字を出力します(長さはハードコードされています)。

from random import*
for i in[0]*134:print(choice("""from random import*
for i in[0]*134:print(choice(""*""2""),end='')"""*2),end='')

オンラインで試す

ペストのようなバックスラッシュを避けました。コードに\nまたはが含まれるとすぐに\"、問題が発生します。これは、文字列にまだバックスラッシュが含まれていないためです。 (\\)。

出力例:

i(tc*"3]i o''r=,,,h34t"r
ri"](fco t)niap)t "it2nc0o  npoi3'"nto(*4 i(ido' r*4f"oi]d rm ,i"eif)m"d
m emi
dfr n*p 3*(i""r1d"dr menc hio'

FlogScriptを思い出させると言わざるを得ません。


1

PowerShell v2 +、175バイト

$d='$d={0}{1}{0}{2}-join(0..174|%{3}[char[]]($d-f [char]39,$d,"`n",[char]123,[char]125)|Random{4})'
-join(0..174|%{[char[]]($d-f [char]39,$d,"`n",[char]123,[char]125)|Random})

PowerShellのQuinesは、文字列の置換の区切りので、吸う{}あなたが使用する必要があるので、また意味のループやその他もろもろたくさんのをchar-f、ひどいです。したがって、演算子 sの、コードが肥大化します。

私のQuine on Every Lineの答えに似ている。基本的に0to からループし174、各反復でquineを再計算し、-array $dとしてキャストし、入力から均一に選択charされたRandom要素を引き出します。定義により、これは確率を与えます(occurrences in source) / (length of source)必要に応じてをます。これらの文字は括弧にカプセル化され、-joinれ、文字列にまとめられます。

PS C:\Tools\Scripts\golfing> .\faux-souce-code.ps1
}}[${hr[`ini}}] [5i,=[]0,j2($=n4(dm]jh]jc]]7
}..j"rnj9|fn,4r]{9]('["jdh0}$rd,-f,a.c"}{h1 ]5d,),0n5|nh(]73a9da4aRi[5}a}430}}rd$,$r)-hhr%or79-R.R-`'r'aa|=1f0][|[{7}do1]$ja0 rd{h

改行文字を含む文字列がされたとき- (はい、それは出力に改行だchar-array'd、`n以降、文字として扱われchar、それはまた、1/175を有しているので-arrayは、バイトコードのちょうどアレイであります選択される可能性。)


1

Dyalog APL、20 バイト

f←{(,⎕CR'f')[?⍴⍨20]}

f←{... fを次のように}定義します

(,⎕CR'f')listified(,C haracter(table)R表現(⎕CR)of f'f'

[?⍴⍨20][... ])random-up-to(?)repeat-itself-times(⍴⍨)20のインデックス付き

(ダミー引数を使用して)数回実行してみましょう。

      f
)0'0](⍨(([],}⎕))⎕'f2
      f
{'['}f[←R[)2←?}⍨]}C2
      f
,,⍨←?2}⍴?'⍨}C,'{⎕(C0

結構ですが、分布は正しいですか?10,000個の仮引数で実行し、各文字の出現回数を確認します。

      {⍺ , 1E¯4× ⍴⍵}⌸  f¨ 1E4
C 0.9952
 0.9996
' 1.9777
f 2.004 
← 1.0018
⍨ 1.0173
0 1.0213
] 1.0049
[ 0.9988
2 0.9943
{ 0.9895
) 1.0093
R 1.0054
, 1.0029
? 0.9943
} 0.9861
⍴ 1.0032
( 0.9944

明らかに、fそして'ちょうど元のソースコードのように、他の文字と2倍の頻度で起こります。

どうやってやったの?

{⍺ , 1E¯4× ⍴⍵}⌸  f¨ 1E4`

⍳1E4 最初の10,000個の整数を生成します

走る fこれらの各番号でをます

すべての擬似クインを単一の200,000文字の文字列にフラット化します

は、右側のデータの一意の文字ごとに、左側の関数に一意の要素を左引数として送り、その文字が右引数として出現するインデックスを渡す高階関数です。左側の関数は

{⍺ , 1E¯4× ⍴⍵}

左引数、つまりユニークなキャラクター

, に続く

1E¯4× 1×10⁻⁴回

⍴⍵ 右引数の形(オカレンスインデックス)、つまり何回出現するか

最後に、すべてをテーブルにまとめます。


1

C#、277 280 268バイト。

using System;class a{static void Main(){var s="using System;class a{static void Main(){var s=\"x5Cx5C\x5C\x5C\";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}

ゴルフをしていない:

using System;
class a
{
    static void Main()
    {
        var s="using System;class a{static void Main(){var s=\"x5Cx5C\x5C\x5C\";Random d=new Random();for(int i=0;i++<268;)Console.Write(s[d.Next(0,134)]);}}";
        Random d=new Random();
        for(int i=0;i++<268;)
            Console.Write(s[d.Next(0,134)]);
    }
}

これが正しく機能することを確認してください。

サンプル出力:

    fn;i)(]ns;<ftt08et]i+ii8]m[W}dr{rmte,)t edayid 2s cmsee\;ta["e n;o}]iolys;t sftoR{.=g vs8;(sd isWrecn++iia]iuf"avs\i<{ee vfs[ensin\s i]0a(We.0ns R(2roo=ldxil\{t(o"aistt.;.  r w"m1];idi}Ctitiindnn;M[,[+0(,o"]mca[rmnm)<;n"8ReaystinRsanr([(d,n\.ateiR sd.=[=;ttn.;wna)cCt[=+t{Wxs(\}rg

@NonlinearFruitありがとう、そのスペースを逃しました。また、私は数バイトを追加するforeachループを使用できないことを意味します:(。しかし、私は「 mがどこか他の場所で使用されていない
Yodle

ああ、私は彼らが弦の中にいれば彼らは数えないと思った。少し修正されます。
Yodle

さて、\が表示されるようになりました!
ヨドル

1
うーん、興味深い問題です。\\を追加し続けることはできません。さもないと、私は常に1つだけになります。代わりに\のasciiコードを使用します。
Yodle

DOESの(new Random()).Next(0,134)]作品?数バイト節約できます。
NonlinearFruit

1

C、136バイト

main(a){for(a=136;a--;)rand()%68?putchar("main(a){for(a=136;a--;)rand()%68?putchar([rand()%67]):putchar(34);}"[rand()%67]):putchar(34);}

出力例:

;%7c(u)"r4-hd)nnr-%n6;6(4or(n4(6(a:=a3r-:()hp(:aa%;4rru}h;(a()3mh3rdi7));a-u36:r3on[4?p((]6n6?()-6t736unhr%:[%[[d(p:[ru)-n(6r=:](p-})8"]

このプログラムは、136文字をランダムに出力します。

ソースコード全体(「引用符」を除く)が文字列に含まれます。プログラムは、引用符を出力する確率を2/136として決定します。

プログラムの文字列には、各文字が2回出現します。文字列から文字が出力される確率は134/136です。文字列内の特定の文字を選択する確率は1/67です。そのため、文字列に文字を出力する可能性は134/136 * 1/67 = 2/136です。プログラムには各文字列文字が2回出現するため、プログラム内の出現ごとに文字を出力する確率は1/136です。

文字列内のシンボルの順序は重要ではありません。

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