র্যান্ডম কুইন


15

এমন একটি প্রোগ্রাম লিখুন যা এলোমেলোভাবে নিজেকে তৈরি করতে সক্ষম।

এটি অবশ্যই এর উত্স কোডে ব্যবহৃত টোকেনের ভিত্তিতে এটি করতে হবে । যদি আপনার প্রোগ্রামের সোর্স কোডটি 50 টি অনন্য টোকেন নিয়ে গঠিত এবং 60 টোকেন দীর্ঘ হয় তবে প্রোগ্রামটি 60 টি টোকেন আউটপুট করে যেখানে প্রতিটি টোকেন 50 টি অনন্য টোকেনের মধ্যে একটি থেকে এলোমেলোভাবে বেছে নেওয়া হয়।

উদাহরণস্বরূপ, এই প্রোগ্রামটির নিজেকে পুনরায় উত্পাদনের 50 ^ 60 এর মধ্যে একটি সুযোগ থাকবে।

টোকেন কী? এটি ভাষার উপর নির্ভর করে। উদাহরণস্বরূপ, সনাক্তকারী ( foo_bar), কীওয়ার্ডস ( while) এবং সংখ্যা ( 42) বেশিরভাগ ভাষায় টোকেন হিসাবে গণনা করবে। হোয়াইটস্পেস বেশিরভাগ ভাষায় গণনা করা হবে না।

অতিরিক্ত নিয়ম:

  • আউটপুটে কেবল প্রোগ্রামগুলির উত্স কোডে পাওয়া টোকেন থাকতে পারে, উপযুক্ত ডিলিমিটার দ্বারা পৃথক
  • টোকেন দ্বারা গণনা করা আউটপুট অবশ্যই প্রোগ্রামের উত্স কোডের সমান দৈর্ঘ্য হতে হবে
  • শুধুমাত্র একটি প্রোগ্রামিং ভাষা ব্যবহার করা যেতে পারে
  • উত্স কোডটিতে কমপক্ষে 3 টি অনন্য টোকেন থাকতে হবে
  • উত্স কোড থেকে মন্তব্যগুলি বাদ দিন
  • প্রোগ্রামটির নিজস্ব প্রজনন করার একমাত্র ইউ.এল. এর সুযোগ থাকা উচিত

স্কোরিং: যে প্রোগ্রামটিতে নিজেকে পুনরুত্পাদন করার সবচেয়ে ভাল সুযোগ রয়েছে, তা জিতেছে।


@ ম্যাথিউরডিক: আপনি ধরে নিচ্ছেন যে প্রোগ্রামটি পুনরাবৃত্তি ছাড়াই টোকেনগুলি আঁকবে।
ব্যবহারকারী 2357112

@ ম্যাথিউরডিক: আমাকে পুনরায় চাপ দিন। আপনি ধরে নিচ্ছেন যে প্রোগ্রামটি এলোমেলোভাবে তার উত্সে ব্যবহৃত ইউ টোকেনের সেট থেকে পুনরাবৃত্তি নিয়ে এল টোকেনগুলি আঁকানোর পরিবর্তে তার টোকেনগুলির মাল্টিসেটকে স্ক্র্যাবল করে।
ব্যবহারকারী 2357112

@ ব্যবহারকারী 2357112: আমি দেখছি। আমার ভুলটি ছিল প্রতিস্থাপন ছাড়াই এই সমস্যাটিকে ড্র হিসাবে বিবেচনা করা।
ম্যাথিউ রডিক

1
# 1 এবং # 5 বিধিটি আমার বিপরীতে উপস্থিত বলে মনে হচ্ছে।
ক্রুঙ্কার

4
আপনি কি ধরে নিতে পারেন যে এলোমেলো ফাংশনগুলিতে নির্মিত টিআরএনজি? সাধারণ প্রয়োগগুলি সমস্ত আউটপুট উত্পাদন করার জন্য খুব ছোট বীজ থাকে এবং ফলস্বরূপ এগুলি নিজেকে পুনরায় তৈরি করতে অক্ষম হতে পারে।
কোডসইনচায়োস

উত্তর:


11

পাইথন 2, 3 ^ -3 = 0.037

execটোকেন গণনা হ্রাস করার জন্য অপব্যবহার বেশ কার্যকর। সোর্স ফাইলটি না পড়ার জন্য এখন আপডেট!

exec '' """
s = '''{a}
s = {b}
s = s.format(a='"'*3, b="'"*3+s+"'"*3)
import random
tokens = ['exec', "''", s]
print random.choice(tokens), random.choice(tokens), random.choice(tokens),
{a}'''
s = s.format(a='"'*3, b="'"*3+s+"'"*3)
import random
tokens = ['exec', "''", s]
print random.choice(tokens), random.choice(tokens), random.choice(tokens),
"""

''মধ্যে অতিরিক্তexecদৈত্যাকার ট্রিপল-কোটযুক্ত স্ট্রিংয়ের কেবলমাত্র সর্বনিম্ন 3 এ টোকেন গণনাটি প্যাড করার জন্য যা অন্তর্নিহিত স্ট্রিং আক্ষরিক অবতারণার কারণে এটি দ্বিতীয় স্ট্রিংয়ে মার্জ হয়ে যায় gets

মূল, উত্স-ফাইল সংস্করণ খোলার:

exec '''
# String literals are one token!
import random
import tokenize

with open(__file__) as f:
    tokens = [x[1] for x in tokenize.generate_tokens(f.readline)][:-1]

''' '''
# Splitting the string into two strings pads the token count to the minimum of 3.

print random.choice(tokens), random.choice(tokens), random.choice(tokens),
'''

কড়া কথায় বলতে গেলে পাইথন ব্যাকরণ উত্স ফাইলটির শেষে একটি এন্ডমার্কার টোকেন রাখে এবং আমরা এন্ডমার্কারগুলি এলোমেলোভাবে প্রসারিত কোনও উত্স ফাইল তৈরি করতে পারি না। আমরা ভান করি এটির অস্তিত্ব নেই।


পছন্দ করুন 3 ^ -3 == 1/3 ^ 3
অস্টিন হেনলি

2
নিয়মের উজ্জ্বল হ্যাকের জন্য +1। একই ধারণা জে বাস্তবায়িত: ".]';(?3 3 3){]`".;~({:,],{:,],6#{:)'';(?3 3 3){]`".;~({:,],{:,],6#{:)'''''''
অ্যালগরিদমশর্ক

5

জাভাস্ক্রিপ্ট, 102 টোকেন, 33 অনন্য, 7.73 × 10 -154

দ্রষ্টব্য, এটি একটি সত্য কুইন। ফাইল বা ব্যবহারের পড়া নেই evalবাFunction.toString

meta = "meta = ; out = '' ; tokens = meta . split ( '\\u0020' ) ; tokens . push ( '\"' + meta + '\"' ) ; length = tokens . length ; tmp = length ; unique = { } ; while ( tmp -- ) unique [ tokens [ tmp ] ] = unique ; unique = Object . keys ( unique ) ; tmp = unique . length ; while ( length -- ) out += tokens [ ~~ ( Math . random ( ) * tmp ) ] + '\\u0020' ; console . log ( out )"; 
out = '';
tokens = meta.split('\u0020');
tokens.push('"' + meta + '"');
//console.log(tokens);
length = tokens.length;
tmp = length;
unique = { };
while(tmp--) unique[tokens[tmp]] = unique;
unique = Object.keys(unique);
//console.log(unique);
tmp = unique.length;
while(length--)
    out += unique[~~(Math.random() * tmp)] + '\u0020';
console.log(out)

4

পাইথন: পি (1 টি পরীক্ষায় উত্পন্ন প্রোগ্রাম) = 3.0317 * 10 ^ -123

34 টি অনন্য টোকেন, 80 টি টোকেন। নোট করুন যে প্রতিটি লাইনের শেষে একটি স্থান রয়েছে।

import tokenize , random 
tokens = [ x [ 1 ] for x in tokenize . generate_tokens ( open ( __file__ , 'r' ) . readline ) ] [ : -1 ] 
s = '' 
for x in tokens : s += random . choice ( list ( set ( tokens ) ) ) ; s += [ ' ' , '' ] [ s [ -1 ] == '\n' ] 
print s 

নমুনা আউটপুট:

' ' random len set 'r' , for ( list , import ] ] tokens : random [ for '\n' import readline readline 'r' tokens [ len 'r' import '' choice '' '' for in ( readline ( = open readline , list 1 list s += for s 1 , '' : 1 += list len - __file__ ; open __file__ print . - ] 'r' for import [ print . , 

; . [ [ print print __file__ generate_tokens ] ; open ] , readline 

ইউজার 2357112 দ্বারা অন্য পাইথন সমাধানের জন্য আপনাকে সর্বশেষ টোকেনটি বাতিল করতে এবং মনে করিয়ে দেওয়ার জন্য ধন্যবাদ __file__যা আমি আগে অবজ্ঞ ছিলাম।


3

জে - 1 এ 11 17 = 1.978 x 10 -18

;(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)'''

এই ধরণের কাজ করার জন্য জেয়ের কাছে অনেকগুলি সামান্য সরঞ্জাম রয়েছে।

  • প্রথমত, সংখ্যার যে কোনও স্থান পৃথক করা স্ট্রিং হ'ল একটি টোকেন । এর অর্থ এই সংখ্যার এক-মাত্রিক অ্যারে। জে এর লেক্সার এইভাবে কাজ করে। যাইহোক, এটি সতেরজন 11, কেউ যদি কৌতূহলী হয়।

  • (,,,{:,{:)'QUINE'''জেতে একটি সাধারণ কুইন ট্রিক, যতটা সম্ভব কম কয়েকটি টোকেন ব্যবহার করার জন্য তৈরি করা হয়েছে: টেইল{: মানে , এটি স্ট্রিংটি নিজের মধ্যে সংযোজন করে এবং এর শেষে শেষ চরিত্রের দুটি অনুলিপি যুক্ত করে। যেহেতু শেষ অক্ষর একটি একক উদ্ধৃতি (জে পাসকাল-শৈলী স্ট্রিং ব্যবহার করে), ফল ।QUINE'QUINE'''

  • ;:একটি টোকেনাইজার, এবং বাক্সগুলির একটি তালিকা ফিরিয়ে দেওয়া এমন একটি ইনপুট স্ট্রিংটিকে জে কোডের মতো ভেঙে দেয়। এই ফলাফল দৈর্ঘ্য 17।

  • ~.এই অ্যারের সমস্ত অনন্য উপাদান গ্রহণ করে। এই ফলাফল দৈর্ঘ্য 11।

  • ?রোল বলা হয় । তার যুক্তিতে প্রতিটি পূর্ণসংখ্যার জন্য, এটি শূন্যের চেয়ে বড় বা সমান, এ সংখ্যার চেয়ে কম এলোমেলো ধনাত্মক সংখ্যা নির্বাচন করে। সুতরাং এখানে জে 0 থেকে 10 সহ 17 সংখ্যা তৈরি করবে।

  • { আমাদের অনন্য-টোকেন-ইন-বাক্সগুলির তালিকা থেকে আইটেম নির্বাচন করতে এলোমেলো সূচকগুলি ব্যবহার করে।

  • ; এই সমস্ত বাক্স খুলবে এবং একসাথে ফলাফল চালায়।

কিছু উদাহরণ অনুসরণ। ইনডেন্টেড রেখাগুলি হ'ল ইনপুট প্রম্পটস এবং বাম পাশ দিয়ে লাইনগুলি ফ্লাশ করা হ'ল ইন্টারপ্রেটারের আউটপুট।

   ;(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)'''
~.~.(?;;:11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)'''(){11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){(;:;
   ;(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)'''
{';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)''',?{:;:{:';(?11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11){~.;:(,,,{:,{:)'''11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11{:{;(;:{:,~.

2

পুনশ্চ

এটি একটি মজার এক

/cvx /cvx cvx /exec /exec cvx /dup /rand /mod /get /== /array /astore /realtime
/srand /repeat 6 17 54 17 /array cvx exec /astore cvx exec 54 /dup cvx /rand
cvx 17 /mod cvx /get cvx /== cvx 6 /array cvx exec /astore cvx exec cvx /realtime
cvx exec /srand cvx exec /repeat cvx exec

3.6e-67 চান্সে প্রায় 1 টির জন্য মোট 17 টি অনন্য টোকেন এবং 54 টি টোকেন রয়েছে।


2

হোয়াইটস্পেস , 3 ^ -205 3 ^ -189 3 18 -181 3 ^ -132 ~ = 10 ^ -63

এটি একটি হোয়াইটস্পেস প্রোগ্রাম যা এলোমেলো অক্ষরের সাথে বীজযুক্ত হয়ে থাকে, তখন নিজের মধ্যে পুনরায় উত্পাদনের 3 1 ^ 132 এর সম্ভাবনা থাকে (3 টি স্বতন্ত্র টোকেন, 132 বার পুনরাবৃত্তি হয়)। এটি চলাকালীন কমপক্ষে ১৩২ টি এলোমেলো অক্ষর সহ বদ্ধ করা আবশ্যক, (হোয়াইটস্পেসের সাথে বীজের কোনও বিল্ট-ইন র্যান্ডম বা তারিখ ফাংশন নেই) উদাহরণস্বরূপsome_whitespace_interpreter my_quine.ws <some_random_source >quine_output.ws । স্কোরটি আরও উন্নত হবে যদি প্রোগ্রামটি আর কোনও গল্ফ করা যায় তবে এটি আমার প্রথম "আসল" হোয়াইটস্পেস প্রোগ্রাম, তাই আমি কেবল আমার স্বল্প পরিমাণে গল্ফ দিয়ে রেখে দেব।

সরল হোয়াইটস্পেস কোড, বা এটি চালিত দেখুন : (এটি চেষ্টা করার জন্য, "সম্পাদনা" এ ক্লিক করুন, <প্রাক> ট্যাগগুলির মধ্যে থাকা সামগ্রীটি অনুলিপি করুন; ইউনিক্স-স্টাইল EOL সহ 132 টি অক্ষর হওয়া উচিত)

    

























কোন আদেশটি কী কোড দ্বারা টীকায়িত হয়েছে (প্রযুক্তিগতভাবে কোনও কুইন নয়, কারণ এটি মন্তব্যগুলির পুনরায় উত্পাদন করবে না):

স্ট্যাক পুশ_নিম্বার + 0 শেষ
স্ট্যাক পুশ_নিম্বার + 1 0 0 1 শেষ
হিপ স্টোর স্ট্যাক পুশ_নিম্বার +1 শেষ
স্ট্যাক পুশ_নিম্বার + 1 0 0 0 0 0 শেষ
হিপ স্টোর স্ট্যাক পুশ_নিম্বার + 1 0 শেষ
স্ট্যাক পুশ_নিম্বার + 1 0 1 0 শেষ
হিপ স্টোর স্ট্যাক পুশ_ নাম্বার + 1 0 0 0 0 0 1 1 শেষ
প্রবাহ
Make_label লুপ_বেগিন  
স্ট্যাক পুশ_নিম্বার +1 1 শেষ
আই  
অক্ষর স্ট্যাক পুশ_ সংখ্যা পড়ুন + 1 1 প্রান্ত
গাদা পুনরুদ্ধার স্ট্যাক পুশ_নিম্বার + 1 1 প্রান্ত
গাণিতিক মডুলো গাদা আইও পুনরুদ্ধার করুন  
প্রিন্ট করুন চার স্ট্যাক পুশ_নিম্বার + 1 প্রান্ত
পাটিগণিত বিয়োগফল স্ট্যাক সদৃশ
 প্রবাহ
jump_if_zero শেষ_প্রোগ p
প্রবাহ
লাফ দাও 
loop_begin  
প্রবাহ
Make_label end_prog
প্রবাহ
end_program

যদি বীজটিকে ঠিক এটির সমতুল্য হয়ে থাকে (অক্ষরগুলিকে টোকেনে রূপান্তর করতে 3 ধরণের মডেল নেওয়া হয়), এটি সফল হবে:

CCCCACCCBCCBABBCCCCBACCCBCCCCCABBCCCCBCACCCBCBCABBCCCCBCCCCCBBAACCBACCCBBABABCCCCBBABBBCCCBBABCBBBBBBACCCCCBABCCBCACABBAACABAACCAAAA

এটি একটি খুব সাধারণ প্রোগ্রাম, প্রায় এই রুবি প্রোগ্রামের সমান:

i = 131
while true
    print '\t \n'[STDIN.getc.ord % 3]
    i = i - 1
    break if i < 0
end

1

পার্ল, 27 টোকেন, পি = 1.4779 এক্স 10 -34

@ARGV=$0;print$W[rand@W]for@W=split/(\W)/,readline

শেষ সম্পাদনা: একটি টোকেন সংরক্ষণ করার @ARGV=$0পরিবর্তে ব্যবহার করুন open*ARGV,$0

  • 15 অনন্য টোকেন
  • 4 টোকেন প্রদর্শিত 2 বার ( =, /, @, $)
  • 1 টোকেন 4 বার উপস্থিত হয় ( W)

সুতরাং আমি মনে করি এটি প্রায় 1.48E-34 এর প্রায়শই (পাউ (2,2 * 4) * পাউ (4,4)) / পাউ (27,27) করে।

যদি উত্স কোডটি কল করা কোনও ফাইলে থাকে ARGV, তবে আপনি এই 26 টোকেন সমাধানটি পি = ~ 2.193 x 10 -31 দিয়ে ব্যবহার করতে পারেন :

@ARGV=ARGV;print$ARGV[rand@ARGV]for@ARGV=split/(\W)/,readline

আসলে, P = (4 * 2! + 4!) / 27!যা প্রায় 1.7632684538487448 x 10 ^ -26
ম্যাথিউ রডিক

0

পার্ল 6 ,1 ভিতরে 33 = 0.037037 ...

(আমি জানি এটি কোড-গল্ফ নয়, তবে ...)

q[say |roll <<~~"q[$_]".EVAL>>: 3]~~.EVAL

এটি অনলাইন চেষ্টা করুন!

পাইথন উত্তরের মতোই একই, যেখানে প্রথম টোকেনটি স্ট্রিং আক্ষরিক যা মূল্যায়ন করা হয়। টোকেন হয়

q[say |roll <<~~"q[$_]".EVAL>>: 3]   String literal
~~                                   Smartmatch operator
.EVAL                                Function call

ব্যাখ্যা:

q[say |roll <<~~"q[$_]".EVAL>>: 3]         # Push as string literal
                                  ~~       # Smartmatch by setting $_ to the string literal
                                    .EVAL  # Eval the string
            <<~~"q[$_]".EVAL>>             # From the list of tokens
       roll                   : 3          # Pick 3 times with replacement
  say |                                    # Join and print
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.