รหัสที่มามารยาท


23

เอาต์พุตอักขระสุ่มหนึ่งตัวสำหรับแต่ละอักขระของซอร์สโค้ด (ดังที่แสดงด้านล่าง) ความน่าจะเป็นของอักขระแต่ละตัวคือความถี่ในซอร์สโค้ดต้นฉบับ ดังนั้นผลลัพธ์จะเป็นซอร์สโค้ดปลอมที่คล้ายกับควิน

สเปค

  • ข้อ จำกัด
    • ใช้ข้อ จำกัดมาตรฐาน ไม่มีโปรแกรมหรือฟังก์ชั่นที่ว่างเปล่า ยังไม่มีการอ่านแหล่งข้อมูลของคุณเอง
  • เอาท์พุต
    • จำนวนตัวอักษรที่ส่งออกควรเป็นจำนวนตัวอักษรที่แน่นอนในรหัสที่มา
    • อักขระเอาต์พุตแต่ละตัวควรเลือกแบบสุ่ม
    • ความน่าจะเป็นในการเลือกตัวละครใด ๆ มีค่าเท่ากับ (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%

quines อักขระเดียวอนุญาตหรือไม่
Nathan Merrill

@NathanMerrill ใช่อนุญาตให้ใช้โซลูชันตัวเดียว (และเอกรัฐอื่น ๆ ) อย่างไรก็ตามผลลัพธ์ของพวกเขายังคงต้องเลือกแบบสุ่ม
NonlinearFruit

ฉันจะค้นหาตัวอักษรในไฟล์ได้อย่างไรหากฉันไม่ได้รับอนุญาตให้อ่าน
ติตัส

1
นี่คือรหัสกอล์ฟหรือไม่
OldBunny2800

1
@VolAnd ไม่ความน่าจะเป็นของตัวละครแต่ละตัวที่ปรากฏจะขึ้นอยู่กับความถี่ของตัวละคร หากคุณพลิกเหรียญสองครั้งและมันตกลงบนหัวหนึ่งครั้งมันไม่จำเป็นต้องก้มหางเป็นครั้งที่สอง
wizzwizz4

คำตอบ:


8

CJam , 14 ไบต์

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

ลองออนไลน์!

คำอธิบาย

ตัวละครแต่ละตัวจะปรากฏขึ้นสองครั้งดังนั้นความน่าจะเป็นของตัวละครควรจะเท่ากัน

{           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

ฉันใช้ quine ที่มีอยู่เป็นพื้นฐานและปรับเปลี่ยนเพื่อพิมพ์อักขระแบบสุ่มจากเนื้อหาต้นฉบับ

การใช้

บันทึกเป็น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 ...


Ahah แสดงความคิดเห็นเกี่ยวกับ 3% ของความสำเร็จeval! ทำได้ดีนี่! ;-)
Dada

@Dada อย่างจริงจัง! การส่งคำตอบใช้งานได้จริง! ฉันประทับใจมาก ...
Dom Hastings

หวังว่าจากสิ่งที่ผมเคยเห็นมันก็มาจากการส่งออกเป็นทั้งสายยกเดียว (มี'หรือq//, q{}ฯลฯ )!
Dada

@ Dada Yeah หรือการแข่งขัน regex ทำให้ฉันหัวเราะเบา ๆ ! :)
Dom Hastings

1
ยินดีที่ได้พบคุณเล่นกอล์ฟอีกครั้ง! :)
Dada

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

4

Pyth, 16 ไบต์

smO+N"m1NOs+6"16

ลองออนไลน์!

มีอักขระแต่ละตัวสองครั้งดังนั้นความน่าจะเป็นจะเหมือนกับว่าแต่ละครั้งมีเพียงครั้งเดียวเท่านั้น

smO+N"m1NOs+6"16     #
   +N"m1NOs+6"       # Add a quotation mark to the string: "m1NOs+6
  O                  # random choice from the string
 m            16     # do this 16 times.
s                    # join the list into a string

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. และเชื่อมเครื่องหมายคำพูดเมื่อใช้งานord
    (ความน่าจะเป็นเช่นเดียวกับฉันจะเพิ่มสตริงเป็นสองเท่าและเพิ่มเครื่องหมายคำพูดสองตัว)
  3. จากนั้นวนซ้ำสองเท่าของความยาวของสตริงเพื่อรับอักขระแบบสุ่ม

อาจจะสามารถเล่นกอล์ฟต่อไปได้
ฉันจะไม่ลงลึกที่นี่


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ไม่มีแฟล็ก บางทีคุณอาจใช้ heredoc
ติตัส

@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

ขอบคุณ - และถูกต้องฉันรู้สึก
สับสน

1
s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec sที่นี่คุณไป: ฉันหวังว่าฉันจะคิดอย่างนั้น
mbomb007

3

Ruby, 47 ไบต์

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

สิ่งนี้เป็นไปตามevalquine มาตรฐาน:

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

มันยาวกว่าไบต์ที่สั้นที่สุด แต่มักจะเป็นตัวเลือกที่ดีกว่าสำหรับการทดสอบทั่วไปเนื่องจากการคำนวณใด ๆ ที่ทำบนสตริงซอร์สโค้ดไม่จำเป็นต้องทำซ้ำ ในขณะที่ควินตามปกติการคำนวณเพิ่มเติมทุกครั้งจำเป็นต้องไปทั้งด้านในและด้านนอกของสายหลักมันจำเป็นเฉพาะในสายหลักสำหรับควินชนิดนี้เท่านั้น

สำหรับสิ่งที่รหัสทำจริง: หลังจากได้รับสตริงที่แสดงรหัสต้นฉบับทั้งหมดเราเพียงเลือกตัวอักษรแบบสุ่ม (โดยการเลือกดัชนีแบบสุ่ม) 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

สิ่งนี้จะสร้างสตริงที่ต้องเลือกอักขระ สตริงเริ่มต้นมีอักขระทั้งหมดที่ใช้ยกเว้นเครื่องหมายอัญประกาศเปิดและปิด จากนั้นคู่ที่สตริงและ concatenates หนึ่งของแต่ละส่วนของคำพูดเปิดและปิดจากเลข (จึงจำเป็นที่จะต้องเป็นสองเท่าของตัวละครอื่น ๆ ) ในที่สุดมันก็เลือกตัวอักษรสุ่มซ้ำจากสตริงที่ประกอบไปจนถึงความยาวของโปรแกรม


1
@NonlinearFruit โอ๊ะ - ฉันได้อัปเดตเพื่อเพิ่มตัวละครที่ไม่ได้รับจากสตริงของฉัน แต่ไม่ได้อัปเดตเป็น 44 - ขอบคุณ!
Jonathan Allan

2

Pyke, 35 ไบต์

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

ลองที่นี่!

ในการตรวจสอบ: ลบสุดท้ายHและสตริงผลลัพธ์ประกอบด้วยหมายเลขที่ถูกต้องของอักขระแต่ละตัว (พร้อมอักขระพิเศษH)

สิ่งนี้ไม่ได้ใช้ควินินทั่วไปหรืออันที่จริงแล้วเป็นควินเลย มันขึ้นอยู่กับความสามารถในการสร้างสตริงที่มีตัวละครทั้งหมดในแหล่งที่มา มันควรจะสามารถทำมันได้สำหรับรหัสใด ๆ แต่ตัวละครแต่ละตัวลอการิทึมเพิ่มขนาดรหัส จำนวนครั้งเท่านั้นที่อนุญาตให้ใช้อักขระในแหล่งที่มาคือ 2 หรือ 7


2

Ruby, 81 67 ไบต์

บันทึกจำนวนไบต์โดยการขโมยลูกเล่นบางส่วนจากทางออกของ Martin

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

ฉันไม่ได้ตระหนักว่าคุณต้องสุ่มเลือกทุกครั้ง ฉันคิดว่าการสลับเพลงจะทำเคล็ดลับ นี่อาจจะเป็นสนามกอล์ฟ แต่มันสั้นที่สุดที่ฉันจะได้รับ

Ruby quine มาตรฐานพร้อมการแก้ไขเล็กน้อยจึงพิมพ์สตริงที่สับได้ ฉันเสียใจเพราะมันใช้เวลาประมาณสิบห้านาทีในการหารูปแบบนิสัยใจคอก่อนที่ฉันจะรู้ว่าฉันถูกขโมยไปโดยไม่รู้ตัว

ฉันคิดว่าการสับสตริงสามารถสั้นลงได้ แต่ฉันก็ไม่รู้วิธี; ฉันอาจจะสามารถ finagle การจัดรูปแบบให้สั้นลงเมื่อฉันใส่ความคิดลงไป ความช่วยเหลือจะได้รับการชื่นชม

ลองออนไลน์!


ฉันคิดว่า (เหมือน CJam ของฉัน) คำตอบไม่จำเป็นต้องใช้ควินินมาตรฐานเป็นพื้นฐาน พอร์ตโดยตรงของโซลูชัน CJam ของฉันให้ 64 ไบต์:64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
Martin Ender

ไม่เป็นไรการพิจารณาจาก quine มาตรฐานจะสั้นกว่า แต่คุณจะต้องใช้ quine ที่อิงกับ eval:eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
Martin Ender

@ มาร์ตินเอนเดอร์ฉันคิดว่ามันแตกต่างกันพอสมควร หากคุณไม่เห็นด้วยอย่าลังเลที่จะแก้ไขลงในของฉัน แต่ในเวลาเดียวกันฉันจะขโมยเล่ห์อุบายจากคุณเพื่อบันทึกสองสามไบต์ในเหมือง
คดีฟ้องร้องกองทุนโมนิก้า

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 ไบต์สำหรับ golfed แต่ไม่ใช่ quine code ที่รับสตริงใด ๆ

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ใช้สตริงและพิมพ์ไปยังเอาต์พุตมาตรฐาน: สตริงสามารถเป็นลำดับอักขระใด ๆ ได้
ฉบับที่

@NonlinearFruit น่าจะเป็นไม่ได้คำนวณ แต่การแสดงออกใช้ตัวอักษรตามความน่าจะเป็นตัวละครที่มีการกระจายการให้บริการโดยปกติrand()%LENGTH_OF_STRING rand()บางทีฉันไม่เข้าใจquineวิธีการสำหรับ C ....
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 คุณช่วยอธิบายการตัดสินใจของคุณและให้คำแนะนำได้ไหม?
ฉบับที่

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

ตอนนี้ฉันแปลกใจจริงๆว่านี่ผลิตโค้ดที่ถูกต้องใน Perl มากกว่าที่จะปรากฏใน JS! ไม่สนุกมากที่นี่ยกเว้นgtraoanที่เกือบคร่ำครวญฉันเดา ...
Dom Hastings

1
@DomHastings ดี Perl เป็นมากกว่า mash ของเครื่องหมายวรรคตอนมากกว่า JS;)
ETHproductions

อย่างแน่นอน! มันมีความยุ่งเหยิงของเครื่องหมายวรรคตอนมากกว่าการระเบิดในโรงงานเครื่องหมายวรรคตอน! แต่ฉันก็ชอบนะ!
Dom Hastings

ไม่"ได้มีความน่าจะเป็นของการแสดงขึ้นหรือไม่?
NonlinearFruit

1
@Nonlinear ผลไม้ Yup มีตัวอย่างอย่างน้อยหนึ่งรายการในตัวอย่างที่หนึ่งที่สองและที่สุดท้าย
ETHproductions

1

Python 3, 134 132 ไบต์

ฉันใช้อักขระทุกตัวในซอร์สโค้ดของฉันภายในสตริงตามจำนวนครั้งที่ถูกต้องจากนั้นคูณสตริงด้วยสองเพื่อรวมเข้าด้วยกัน โปรแกรมจะพิมพ์อักขระสุ่มจากสตริงนั้นสำหรับแต่ละอักขระในรหัส (ความยาวมีการกำหนดรหัสแบบยาก)

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})

Quines ใน PowerShell ดูดเนื่องจากตัวคั่นการแทนที่สตริง{}ยังแสดงถึงลูปและอะไรก็ได้ดังนั้นคุณต้องใช้พวงของcharตัว-fดำเนินการในตัวดำเนินการซึ่งจะขยายโค้ด

คล้ายกันกับคำตอบของฉันในทุกบรรทัด โดยทั่วไปเราห่วงจาก0ไป174และแต่ละซ้ำอีกครั้งคำนวณควิน$dโยนเป็นchar-array และดึงออกมาเป็นRandomองค์ประกอบที่ได้รับการแต่งตั้งอย่างสม่ำเสมอจากการป้อนข้อมูล ตามคำจำกัดความสิ่งนี้จะให้ความน่าจะ(occurrences in source) / (length of source)เป็นตามที่ต้องการ ตัวอักษรเหล่านั้นถูกห่อหุ้มใน parens และนำ-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อาร์เรย์`nจะถือว่าเป็นอักขระเนื่องจากchar-array เป็นเพียงอาร์เรย์ของรหัสไบต์ดังนั้นจึงมี 1/175 โอกาสที่จะถูกเลือก)


1

Dyalog APL ขนาด 20 ไบต์

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

f←{... }กำหนดfเป็น

(,⎕CR'f')listified ( ,) C haracter (ตาราง) R epresentation ( ⎕CR) ของf ( 'f')

[?⍴⍨20]จัดทำดัชนีด้วย ( [... ]) random-up-to ( ?) ทำซ้ำตัวเองครั้ง ( ⍴⍨) ยี่สิบ

ให้เราเรียกใช้ (ด้วยอาร์กิวเมนต์ดัมมี่) สองสามครั้ง:

      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และ'เกิดขึ้นสองครั้งบ่อยเหมือนตัวละครอื่น ๆ เช่นในซอร์สโค้ดต้นฉบับ

พวกเราทำได้อย่างไร

{⍺ , 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)]);}}

Ungolfed:

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 loop ซึ่งเพิ่มไม่กี่ไบต์ :( อย่างไรก็ตามฉันคิดว่าฉันมี "รวมอย่างถูกต้องกับคำพูดทั้งสองที่หลบหนีในสตริงเพราะพวกเขาปรากฏในการส่งออกไม่กี่ครั้งเว้นแต่ฉัน ' ฉันพลาดการใช้งานที่อื่น
Yodle

อ่าฉันคิดว่าพวกเขาจะไม่นับว่าพวกเขาอยู่ในสายหรือไม่ จะแก้ไขในเวลาไม่นาน
Yodle

โอเคตอนนี้ก็ปรากฏเช่นกัน!
Yodle

1
หืมปัญหาที่น่าสนใจ ไม่สามารถเพิ่ม \\ ไปเรื่อย ๆ มิฉะนั้นฉันจะสั้น ฉันจะใช้รหัส ascii สำหรับ \ แทน
Yodle

ไม่(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 มิฉะนั้นจะส่งออกหนึ่งใน 67 อักขระอื่นโดยการสุ่ม

แต่ละอักขระในสตริงในโปรแกรมมีอยู่สองรายการ ความน่าจะเป็นในการแสดงอักขระจากสตริงคือ 134/136 ความน่าจะเป็นในการเลือกอักขระเฉพาะในสตริงคือ 1/67 ดังนั้นโอกาสของการแสดงอักขระในสตริงคือ 134/136 * 1/67 = 2/136 มีอยู่สองครั้งของอักขระสตริงแต่ละตัวในโปรแกรมดังนั้นจึงมีความน่าจะเป็น 1/136 ในการแสดงผลอักขระสำหรับแต่ละเหตุการณ์ในโปรแกรม

ลำดับของสัญลักษณ์ภายในสตริงนั้นไม่สำคัญ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.