মার্কভ চেইন কুইন


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

এখন, স্ট্রিংয়ের শুরু থেকে শুরু করে, পরবর্তী সেটের একটি অক্ষর থেকে এলোমেলোভাবে চয়ন করুন। এই অক্ষরটি সংযোজন করুন এবং তারপরে পরবর্তী সেটটিতে থাকা অক্ষরগুলি থেকে বেছে নিন এবং আপনার শেষ না হওয়া অবধি। এখানে কয়েকটি উদাহরণ শব্দ রয়েছে:

r
rereader
rer
readereader

যদি কোনও চরিত্র একাধিকবার অন্য চরিত্রের পরে উপস্থিত হয়, তবে এটির নির্বাচনের সম্ভাবনা বেশি। উদাহরণস্বরূপ, এ এর cocoa canপরে c, পাওয়ার সুযোগের দুই তৃতীয়াংশ এবং একটি পাওয়ার oতৃতীয়াংশ সুযোগ রয়েছে a

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

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম তৈরি করুন যা কোনও ইনপুট নেয় না এবং উপরের মতো মার্কভ চেইন ব্যবহার করে একটি এলোমেলো স্ট্রিং আউটপুট দেয় যেখানে শৃঙ্খলে ইনপুটটি প্রোগ্রামের উত্স।

  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)। এটি অনলাইন চেষ্টা করুন!

কিভাবে?

টিএল; ডিআর: পলায়ন-স্ট্রিং সিনট্যাক্স, পুনরায় এবং ইওল।

আক্ষরিক "অক্ষর থাকতে পারে এমন স্ট্রিংগুলির জন্য , পিপ সীমানা হিসাবে ব্যবহার করে স্ট্রিংগুলি\" এড়িয়ে যায়। পালানো স্ট্রিং ব্যবহার করে একটি স্ট্যান্ডার্ড কুইনটি দেখতে এরকম দেখাচ্ছে:

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

এটি হ'ল Yপিঁপড়া (হিসাবে সংরক্ষণ করা y) একটি স্ট্রিং রয়েছে "V Y".RPyএবং Vএটি সমস্ত। RPyএর রিটার নিয়ে যায় y, যার দিকে আমরা আক্ষরিক স্ট্রিং প্রিপেন্ড করি V Y। অবশেষে, ফলাফল ফলাফল আউটপুট।

মার্কভ কুইনের কাঠামো অনুরূপ, আমরা কোডটি আউটপুট না করে সংরক্ষণ করতে চাই এবং তারপরে এটির সাথে কিছু স্টাফ করতে পারি। t:V Y\"...\"এভাল ফলাফল নির্ধারণ করে 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মূল কুইনের সমতুল্য । যেহেতু এটি বড় ইভাল স্ট্রিংয়ের সর্বশেষ প্রকাশ, তাই এর মান হ'ল Vঅপারেটর কী ফিরিয়ে দেয় এবং এইভাবে যা নির্ধারিত হয় t

সুতরাং, eval এবং কার্যভার পরে, 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কেবল ম্যাচগুলিতে xxনয়, ফিরে আসবে xy। ভাগ্যক্রমে, যাইহোক, এই কোডটিতে কোনও দ্বিগুণ অক্ষর নেই, সুতরাং এটি কোনও ব্যাপার নয়।

8

জাভাস্ক্রিপ্ট, 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, যা কেবল ফায়ারফক্স দ্বারা সমর্থিত। নমুনা রান:

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

যেমন আপনি দেখতে পাচ্ছেন, এটি বেশিরভাগ জঘন্য, তবে এটি প্রত্যাশা করা উচিত;) ওপি একটি জেএসফিডাল তৈরি করেছে যা দেখায় যে আউটপুটকে সিন্টেক্সিকভাবে বৈধ জেএস হওয়ার সম্ভাবনা প্রায় 6.3%।


যদি স্ব-পঠন ফাংশনগুলির অনুমতি দেওয়া হয় তবে এটি ES6 এর 78 বাইট হতে পারে:

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

খুব, খুব কমই, এই সিন্ট্যাক্টিক্যালি বৈধ জেএস আউটপুট দেয়:

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
আমি অবাক হই যে এই বৈধ জাভাস্ক্রিপ্ট তৈরির সম্ভাবনা কী। (নীড স্নাইপ সতর্কতা)
ড্যানথম্যান

2
@ ড্যান দিম্যান অবশ্যই খুব খুব কম। সমস্ত বন্ধনী এবং বন্ধনী ভারসাম্যযুক্ত হওয়ার সম্ভাবনা কেবল অবিশ্বাস্যভাবে কম। যদিও আমি একবার পেয়েছি a.splerength.r(), যা বৈধ হতে পারে;)
ETH প্রোডাকশনগুলি

1
অবাস্তব ব্যবহারের কারণে এটি এফএফটি মনে রাখতে পারে
শন এইচ

1
@ শনহহ ধন্যবাদ, আমি ভুলে গিয়েছি যে কেবল এফএফ অসমকে সমর্থন করে।
ETH প্রোডাকশনগুলি

5
দ্বিতীয় স্ব-পঠন ফাংশনটি বৈধ নয় ( meta.codegolf.stackexchange.com/a/4878/48878 "একটি কোয়েনের প্রত্যক্ষ বা অপ্রত্যক্ষভাবে তার নিজস্ব উত্স অ্যাক্সেস করা উচিত নয়।"), এবং @ ড্যানথম্যান, জেএসফিডাল.এন.পি. / kabkfLak / 1 , সুযোগটি প্রায় 6.3% হওয়া উচিত।
আর্টিয়ার 15

5

পার্ল, 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

একইভাবে অন্যান্য প্রশ্নের মতো, কিছু ফলাফল বৈধ পার্ল তৈরি করে:

$_=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
আপনি যদি আমাকে প্রথম উদাহরণটি বৈধ পার্ল বলেছিলেন তবে আমি আপনাকে বিশ্বাস করব।
ankh-morpork

2
@ dohaqatar7 আমি প্রথমে আপনার মন্তব্যকে ভুল বুঝে ভাবেন এবং ভেবেছিলাম তুমি আমাকে বিশ্বাস করতে হবে যদি আমি বললাম প্রধান কোড ছিল বৈধ পার্ল ...: D: zoitz.com/comics/perl_small.png
ডোম হেস্টিংস

@ আনখ-মরপুরক: এটি স্পষ্টতই অবৈধ, q{একটি স্ট্রিং আক্ষরিক শুরু এবং }এটি বন্ধ করার মতো কোনও উপায় নেই । পার্টের বাইটের র্যান্ডম সিকোয়েন্স চালানোতে মোটামুটি খারাপ and

4

এমএস-ডস মেশিন কোড (.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

সি, 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 01: p[][]একের পরের একটি চরিত্রের সংখ্যা ধরে রাখে holds

Line 02: Xপ্রোগ্রামটির উত্স ধারণ করে, সাথে পালিয়ে যায় %c%s%c

Line 03: Yপ্রোগ্রামটির আক্ষরিক উত্স ধারণ করবে। c,j , *aকাউন্টিং ভেরিয়েবল।

Line 05: সেট Y কুইন ধারণ করতে ।

Line 06: চিঠির উপস্থিতি গণনা করুন p[][]

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
আপনি নিউলাইন এবং সাদা স্থান ছাড়াই কোনও সংস্করণ যুক্ত করতে পারেন যাতে আমরা বাইট সংখ্যাটি যাচাই করতে পারি?
স্টিভেন এইচ।

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=?!

কুইন্সগুলি স্ট্রিং ফর্ম্যাটিংয়ের মাধ্যমে ব্যবহার "s%s"করে এবং মার্কভ সমস্ত দ্বি-চরিত্রের টুকরোগুলি করে এলোমেলো করে এবং একটি হ্যাশ অভিধানে রূপান্তরিত করে যেখানে ডুপ্লিকেট কীগুলির জন্য সর্বশেষ উপস্থিতিটির মান নির্ধারণ করে। শুরুতে অতিরিক্ত যুক্তি যুক্ত এড়ানোর জন্য, আমি সর্বাধিক সাম্প্রতিক আউটপুট চরিত্রটি ব্যবহার করে ট্র্যাক করছি $/যা স্বয়ংক্রিয়ভাবে একটি নতুন লাইনে সূচিত হয় এবং এটি নিশ্চিত করে যে কোডগুলি সর্বদা লাইন দ্বারা অনুসরণ করা হয়, কোডটি 0একই অক্ষর দ্বারা শুরু হয়। শেষ পর্যন্ত, আমি উত্স কোডটি এমনভাবে পরিচালনা করি যাতে কেবলমাত্র একটি থাকে !তাই আমরা <<33আক্ষরিক ছাড়া এটি যুক্ত করার জন্য সর্বদা ঠুং ঠুং শব্দ পরে শেষ করি । এটি ASCII 33 এর পরিবর্তে একটি অ-প্রিন্টেবল একক-অঙ্কের অক্ষর ব্যবহার করে আরও গল্ফ করা যেতে পারে, তবে এটি খুব বিরক্তিকর বলে মনে হয়েছিল।


4
p<<<<<33সুপার-সুপার-সুপার-কনক্যাট অপারেটর? ;-)
ইটিএইচ প্রোডাকশনগুলি

3
অপারেটর এটি "ওয়ায়া কম"।
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];}}

যেহেতু আমি অন্য প্রশ্নের জন্য ইতিমধ্যে একটি সুন্দর ঝরঝরে রাস্ট কুইন লিখেছি, আমি ভেবেছিলাম এটির জন্য আমি এটি গ্রহণ করব, কারণ এটি যথেষ্ট সহজ বলে মনে হয়েছিল। যদিও মূলটি ছোট ছিল, যদিও এর জন্য আমি আকারকে হ্রাস করার খুব কম চেষ্টা করেছি। কী চলছে তা বোঝাতে এখানে একটি বিস্তৃত সংস্করণ রয়েছে:

// 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

পাইথন 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, যাতে পুরো প্রোগ্রামটি থাকবে।
  • স্ট্রিং X পুনরাবৃত্তভাবে কার্যকর করার পদ্ধতি রয়েছে।
  • পদ্ধতিটি আউটপুট স্ট্রিং তৈরি করে oযা stderrমার্কভ চেইনের শেষে পৌঁছানোর পরে মুদ্রিত হবে ।
  • চেইনের শেষটি $$দুটি অক্ষর ব্যবহার করে স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয় যাতে প্রোগ্রামটি সমস্ত স্ট্রিংয়ের জন্য কাজ করবে। আমি আমার প্রোগ্রামে এমন কোনও চরিত্র ব্যবহার করতে পারি না chr(0), তবে আমি মনে করি এটি আরও দীর্ঘ।
  • প্রতিটি মৃত্যুদন্ড কার্যকর করা চরিত্রটি স্থাপন করা হয় c, যা (পাশাপাশি)o ) প্রোগ্রামের প্রথম অক্ষরটিতে আরম্ভ করা হয়।
  • অক্ষরগুলির তালিকা cযা স্ট্রিংয়ে প্রতিটি সংঘটন পছন্দ করে t(উত্স কোডের কুইন ধারণ করে পরিবর্তনশীল) q, যা পরবর্তী নির্বাচনের জন্য বেছে নেওয়া হবে c

1

পিএইচপি, 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);

পিএইচপি প্রতারণা, 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.