টুরিং-সম্পূর্ণ ভাষা দোভাষী


42

আমি যে চ্যালেঞ্জটি ভেবেছিলাম যে খুব শীতল হবে তা হ'ল আপনার নির্বাচনের টিউরিং-সম্পূর্ণ ভাষার জন্য দোভাষী তৈরি করা ।

নিয়মগুলি সহজ:

  1. আপনি এই চ্যালেঞ্জের চেয়েও নতুন হলেও এই অনুবাদক তৈরি করতে আপনি যে কোনও ভাষা ব্যবহার করতে পারেন।
  2. আপনি যে কোনও টিউরিং-সম্পূর্ণ ভাষা ব্যবহার করতে পারেন যতক্ষণ না আপনি এটি যেটির সাথে লিখছেন তেমন নয়।
  3. আপনি কেবল কোডগুলি মূল্যায়ন করতে পারবেন না উদাহরণস্বরূপ eval ফাংশন ব্যবহার করুন।
  4. আপনি কীভাবে এটি কাছে এসেছেন তার ব্যাখ্যাটি দুর্দান্ত তবে প্রয়োজন হবে না।
  5. এটি বাইটে স্কোর করা হবে।
  6. প্রতিটি জমা অবশ্যই সম্পূর্ণরূপে কাজ করছে যার অর্থ আপনার চয়ন করা ভাষার প্রতিটি বৈশিষ্ট্য উপস্থিত থাকতে হবে।

সহজভাবে বলতে গেলে:

আপনার কাজটি হ'ল আপনার পছন্দের যে কোনও ভাষা সহ কোনও টুরিং-সম্পূর্ণ ভাষার জন্য একটি কার্যনির্বাহী দোভাষী তৈরি করা।

শুভকামনা!


3
আমি একটি বিধিও সুপারিশ করবো যে তুচ্ছ- evalমত সমাধানগুলি প্রতিরোধ করার জন্য, আপনি এটি প্রয়োগ করার জন্য যে ভাষা ব্যবহার করেন তা অবশ্যই বাস্তবায়িত ভাষা পৃথক হতে হবে ।
ETH প্রোডাকশনগুলি

1
প্রকৃতপক্ষে, আপনি কেবল evalকমান্ড / ফাংশনগুলি নিষিদ্ধ করতে চাইতে পারেন , কারণ কিছু ভাষায় অন্য ভাষায় কোড মূল্যায়ন করার জন্য বিল্ট-ইন রয়েছে।
ETH প্রোডাকশনগুলি

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

1
ঠিক আছে, বাশ + পার্লের মতো অন্যান্য তুচ্ছ উত্তরগুলি এড়ানোর জন্য আপনার সম্ভবত কিছুটা সুনির্দিষ্ট হতে হবে এবং "আপনি কোনও কোডের মাধ্যমে কেবল কোড প্রয়োগ করতে পারবেন না" এর মতো কিছু বলতে হবে।
ETH প্রোডাকশনগুলি

উত্তর:


16

ব্র্যাচল্যাগ (2) → পোস্ট চিঠিপত্রের সমস্যা , 9 বাইট

~h=∋ᵐ\cᵐ=

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

ইনপুট স্ট্রিংগুলির তালিকার একটি তালিকা। (উইকিপিডিয়ায় সংজ্ঞায়িত পোস্ট-চিঠিপত্রের সমস্যায়, অভ্যন্তরীণ তালিকাগুলির মধ্যে দুটিতে দুটি উপাদান রয়েছে, যদিও এই প্রোগ্রামটি আসলে যে কোনও সংখ্যক উপাদানের একটি সাধারণীকরণ পরিচালনা করতে পারে program) এই প্রোগ্রামটি দৈর্ঘ্য অনুসারে সমস্যার সমাধানটিকে জোর করে তোলে forces একটি সমাধান পাওয়া যায়। পোস্ট চিঠিপত্রের সমস্যাটি একটি টুরিং-মেশিনের অনুকরণ করতে সক্ষম হিসাবে পরিচিত, এবং সুতরাং এটির জন্য জোর করে জোর দেওয়া সমাধানগুলি টুরিং সম্পূর্ণ। যদি কোনও প্রোগ্রামের পরিবর্তে কোনও ফাংশন হিসাবে চালিত হয় তবে এটি আসলে অর্থবহ আউটপুটও উত্পাদন করে।

উপরের টিআইও লিঙ্কে প্রোগ্রামটি হ'ল [["a","baa"],["ab","aa"],["bba","bb"]], যা আমি উইকিপিডিয়া থেকে অনুলিপি করেছি। সমাধান (যা প্রোগ্রামটি মোটামুটি দ্রুত আবিষ্কার করে) তা হ'ল ["bbaabbbaa","bbaabbbaa"]

ব্যাখ্যা

এটি ব্র্যাচল্যাগের পোস্ট চিঠিপত্রের সমস্যার সরাসরি অনুবাদ মাত্র।

~h=∋ᵐ\cᵐ=
~h         Find {the shortest possible} list which starts with {the input}
  =        and for which all elements are equal
   ∋ᵐ      such that taking an element of each element,
     \cᵐ   and concatenating elements in corresponding positions,
        =  produces a list all of whose elements are equal.

মূলত, আমরা একটি তালিকা তৈরি করি যা ইনপুটটির বারবার অনুলিপি করা হয় (যত কম সম্ভব, অর্থাত্ ব্রুট-জোর করার সময় আমরা কোনও সম্ভাবনা মিস করি না), প্রতিটি অনুলিপি থেকে একটি উপাদান নিই, তারপরে সংশ্লিষ্ট উপাদানগুলিকে সম্মতি জানাতে (পোস্ট চিঠিপত্রের মতো) সমস্যা)।


1
এবং সাধারনত "জিনিসগুলির রুনডাউন যা অর্থবহ এবং বাইটস সংরক্ষণ করতে পারে তবে ব্র্যাচল্যাগ ইন্টারপ্রেটার এটি পরিচালনা করতে পারে না": প্রথম পাঁচটি বাইট প্রকাশ করা যেতে পারে ~dp(যার অর্থ পুরোপুরি একই জিনিস নয় তবে এখনও যথেষ্ট পর্যায়ে রয়েছে টিউরিং-সম্পূর্ণ), ব্র্যাচিয়েলগ দোভাষী dএখনও কীভাবে বিপরীত করবেন তা জানেন না except

12

জেলি transp "স্থানান্তর করতে সর্বনিম্ন যোগ করুন", 5 4 বাইট

+"Ṃẞ

এটি অনলাইন চেষ্টা করুন! (সময়সীমা এড়াতে কেবল একটি পুনরাবৃত্তি চালায়)

একটি খুব সাধারণ টুরিং-সম্পূর্ণ নির্মাণ: আমরা একটি প্রোগ্রাম হিসাবে একটি বর্গক্ষেত্র ম্যাট্রিক্স গ্রহণ করি এবং চিরকালের জন্য লুপ করি, অভিধানের ক্ষুদ্রতর সারি চিহ্নিত করে, তারপরে প্রথম সারির প্রতিটি উপাদানকে অভিধানিকভাবে সবচেয়ে ক্ষুদ্রের প্রথম উপাদান দ্বারা বৃদ্ধি করে, দ্বিতীয় সারির প্রতিটি উপাদানকে ডিক্সোগ্রাফিক দিক থেকে ক্ষুদ্রতম এবং দ্বিতীয় জাতীয় উপাদান দ্বারা। (জেলি প্রোগ্রামটি হ'ল " +"ইনপুটটির সংশ্লিষ্ট উপাদানগুলি এবং original মূল original এর নূন্যতম {, লুপ" যুক্ত করুন; এটি আমার আগের প্রোগ্রামের তুলনায় একটি বাইট ছোট Z+ṂZß, যা ঠিক একই কাজ করেছিল Clear স্পষ্টতই আমার গল্ফ করার দিকে মনোনিবেশ করা উচিত ছিল) জেলি, শুধুমাত্র প্রয়োগকৃত ভাষাটি গল্ফ করে না))

ফলে ভাষা যতটা একই কারণে টুরিং-সম্পূর্ণ হয়েছে ক্যাঙ্গারু। প্রতিটি সারির প্রথম উপাদানটি একটি স্কিপ কাউন্টের মতো কাজ করে (যদিও প্রতিটি কমান্ড এড়িয়ে যাওয়ার সময় হ্রাস করার পরিবর্তে এটি কমানের পরিবর্তে প্রতিটি কমান্ডের চালনা করার সময় আমরা বাদ দেই, এবং সর্বনিম্ন স্কিপ গণনা সহ কমান্ডটি সন্ধান করি শূন্য এড়াতে গণনা সহ কমান্ডের চেয়ে; এটি একই জিনিস আসে)। আমরা নিশ্চিত করি যে এই প্রথম উপাদানটি অন্যান্য উপাদানগুলির চেয়ে বেশি (যা প্রতিটি কমান্ডের মাল্টিসেটে প্রতিটি কমান্ড প্রদর্শিত হওয়ার পরিমাণকে উপস্থাপন করে), যাতে প্রথম সারিটি সর্বনিম্ন হয় না তা নিশ্চিত করে; প্রথম সারির অবশিষ্ট অংশ আবর্জনা হতে পারে। কেবলমাত্র অবশিষ্ট সমস্যাটি একইভাবে মডেলিং করা হয় যেভাবে সমান স্কিপ গণনাটি ক্রমানুসারে চালিত হয়, তবে আমরা সমস্ত স্কিপ গণনাকে একটি বৃহত ধ্রুবক দ্বারা গুণিত করে তা করতে পারি, তারপরে ছোট "প্রাথমিক" টাইব্রেক হিসাবে পরিবেশন করতে প্রথম কলামে গণনা ছেড়ে যান। এটি আমাদের "প্রথম ননস্কিপড কমান্ড রান" এর টাইব্রেক দেয়, "ননস্কিপড কমান্ডগুলি সাইক্লিকালি সিক্যুয়ালিটি চালায়" না, তবে কাঙ্গারুর জন্য টুরিং-সম্পূর্ণতা নির্মাণ এই পার্থক্যের বিষয়ে চিন্তা করে না।


10

ম্যাথমেটিকা ​​কনওয়ের গেম অফ লাইফ, 64 বাইটের ব্যাখ্যা দিচ্ছে

CellularAutomaton@{224,{2,{t={2,2,2},{2,1,2},t}},{1,1}}~Nest~##&

কনওয়ের গেম অফ লাইফ টিউরিং সম্পূর্ণ হিসাবে পরিচিত; এবং সেলুলার অটোমেটা হ'ল স্টিফেন ওল্ফ্রামের সত্যিকারের আবেশ। CellularAutomaton@{224,{2,{t={2,2,2},{2,1,2},t}},{1,1}}কনওয়ের গেম অফ লাইফের এক ধাপ অনুসারে 0 এবং 1 এর দ্বিমাত্রিক অ্যারে রূপান্তর করে এমন একটি নিয়ম। (আমি মনে করি ডিফল্ট আচরণটি হ'ল এই অ্যারেটি তার প্রান্তগুলি ঘিরে রাখে, তেমনি সত্যই একটি পৃথক টরাস হয় us) ~Nest~##&এই নিয়মটিকে এমন একটি ফাংশনে পরিণত করে যা প্রাথমিক বোর্ড স্টেট (কোনও মাত্রার) এবং একটি পূর্ণসংখ্যার nযখন আর্গুমেন্ট হিসাবে দেওয়া হয়, তখন ফলাফলগুলি আউটপুট দেয় nগেম অফ লাইফ রুলের পুনরাবৃত্তির ফলাফল ।

আপনার নিজের উপভোগের জন্য, আপনি মোড়ানো সংস্করণটি ব্যবহার করতে পারেন

b = RandomInteger[1,{50,50}];
Manipulate[ArrayPlot[
  CellularAutomaton@{224,{2,{t={2,2,2},{2,1,2},t}},{1,1}}~Nest~##&
    [b, n] ]
, {{n,0}, 0, 100, 1}]

এবং 50x50 বোর্ডে 100 প্রজন্মের মাধ্যমে আপনার পথটি স্ক্রোল করুন।


আমি যদি সঠিকভাবে বুঝতে পারি তবে এটির একটি নির্দিষ্ট বোর্ডের আকার আছে? সেক্ষেত্রে, আমি মনে করি এটি টুরিং-সম্পূর্ণ হতে পারে না, তাই না?
ডিএলসাস

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

আমি যা বলছি তা হ'ল জিওএলকে টুরিং-কমপ্লিট হওয়ার জন্য এটি এমন একটি প্যাটার্নে সক্ষম হতে হবে যা অসীমভাবে বৃদ্ধি পায়। (যেমন একটি গ্লাইডার বন্দুকের মতো।) যদি এই বাস্তবায়নটি এক ধাপ থেকে অন্য ধাপে অ্যারে বাড়তে না পারে তবে পরিবর্তে এটি টরয়েডলি মোড়ানো থাকে, তবে এটি অসীম-বৃদ্ধি পরীক্ষা ব্যর্থ করে।
ডিএলসাস

এটি একটি যুক্তিসঙ্গত দৃষ্টিকোণ, এটি নিশ্চিত হওয়া। কিন্তু শারীরিক কম্পিউটারগুলিতে প্রোগ্রামিং ভাষার প্রয়োগগুলিও সেই পরীক্ষাকে সন্তুষ্ট করে না! একাধিক এবং আরও বেশি মেমরির সাথে ফিজিকাল কম্পিউটারগুলির (কল্পিত) অনুক্রমের সাথে বিষয়বস্তু হতে পারে, প্রত্যেকে সেই কম্পিউটারটি উপযুক্তভাবে ফাংশনের আরও একটি মান গণনা করতে সক্ষম; এই মুহুর্তে, যদিও এই জাতীয় প্রোগ্রামে ইনপুটগুলির (অনুমানমূলক) অনুক্রমের সাথে সমান বিষয়বস্তু হওয়া উচিত।
গ্রেগ মার্টিন

9

টার্টলিড সিটি , 49 বাইটের ব্যাখ্যা দিচ্ছেন

আমি এটি গল্ফ করতে সক্ষম হতে পারে

এছাড়াও, এটি কার্যকর কিছু আউটপুট দেয় না। এটি কেবলমাত্র প্রদত্ত সিটি প্রোগ্রামটি বন্ধ হলে এবং যদি থামে।

এটি আসলে আমি কিছুক্ষণ আগে তৈরি করেছি (তারপরে এখন কিছু লোক গল্ফ করেছে)

!-l[*+.r_]' !l[ l]r[ u.(;d' u)d(1[ r].[ l])( r)+]

কিভাবে এটা কাজ করে:

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

[ ][ ][ ][ ][ ][ ][ ]
[ ][H][E][L][L][O][ ]
[ ][ ][ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ][ ][ ]

প্রোগ্রাম সম্মুখের

ডেটা প্রথমে ইনপুট করা হয়:

!-l[*+.r_]' 

এটি মূলত একটি বিড়াল প্রোগ্রাম। এটি গ্রিডে ইনপুট লিখেছে।

তারপরে কমান্ডগুলি ইনপুট করা হয়:

!

এটি এই আদেশগুলি দিয়ে কী করে:

এই আদেশগুলি হ'ল "প্রযোজনা"। যদি বামতম ডাটা বিটটি 1 হয় তবে এটি ডেটা স্ট্রিংয়ের শেষে উত্পাদনটি অনুলিপি করে। অন্যথায় কিছুই হয় না। তারপরে বামতম ডেটা বিট সরানো হবে এবং এটি পরবর্তী বাম সর্বাধিক ডেটা বিটের সাথে পরবর্তী উত্পাদন ব্যবহার করে। ডেটা স্ট্রিংয়ে কোনও বিট না থাকাকালীন প্রোগ্রামটি থামে। এই প্রযোজনাগুলি করার একটি উপায় হ'ল বিটগুলি এবং প্রডাকশনগুলির পৃথকভাবে সমাপ্তি deal এটিই আমাদের প্রোগ্রামটি করে। এটি পৃথকভাবে কমান্ড স্ট্রিং থেকে ডেটা স্ট্রিংয়ের শেষে বিটগুলি অনুলিপি করে এবং পৃথকভাবে ডেটাস্ট্রিং থেকে বিটগুলি মুছে দেয়

কিভাবে এই প্রোগ্রাম এটি করে। কমান্ডগুলি ইনপুট করার পরে, টার্টল / গ্রিড পয়েন্টারটি ডাস্টাস্ট্রিংয়ের বামতম বিটে ফিরে যায়। এটি তখন একটি লুপে যায়

[ u.(;d' u)d(1[ r].[ l])( r)+]

এটি এই লুপটিতে কী করে, এটি কি বাম দিকের ডাস্টাস্ট্রিং থেকে উপরে উঠে বর্তমান কমান্ডের অক্ষর (ইউ।) লিখে দেয়। যদি এটি;, কোনও প্রোডাক্টের সমাপ্তি হয়, এটি নীচে সরে যায় এবং এর নীচে বামতম ডেটা বিট মুছে ফেলে এবং ব্যাক আপ ( (;d' u)) এ সরে যায় । তারপরে, যে কোনও উপায়ে এটি এক ( d) থেকে নীচে চলে যায় । যদি বিটটি মুছে ফেলা না হয়, তার অর্থ এটি অবশ্যই কমান্ডগুলি থেকে শেষে কিছুটা অনুলিপি করতে হবে কিনা তা যাচাই করা উচিত। সুতরাং, এই চরিত্রটি যা বা বামতম ডাটাবেট 1 টি হয়, এটি ডেটা স্ট্রিংয়ের ডান প্রান্তের প্রান্তে চলে যাবে, কমান্ড স্ট্রিং থেকে বিটটি অনুলিপি করবে এবং বামদিকের তথ্য বামে ফিরে যাবে বিট ( (1[ r].[ l]))। এখন, এটি হয় বামতম ডাটাবেট, যা একটি শূন্য, বা বামতম ডাটাবেটের বামে ছিল। সুতরাং, আমরা একটি স্থান যদি ডান সরান (( r))। তারপরে, কমান্ড পয়েন্টারটি বৃদ্ধি করা হয় সুতরাং আমরা লুপের পরবর্তী পুনর্বিবেচনায় পরবর্তী কমান্ডটি লিখব। যদি আর কোনও ডেটাস্ট্রিং না থাকে, এর অর্থ আমরা একটি স্পেসে থাকব এবং লুপটি শেষ হবে। অন্যথায় আমরা লুপটি পুনরায় চালু করি।


এই আরও গল্ফ চেষ্টা করুন!
arodebaugh

9

পার্লথ্রি স্টার প্রোগ্রামার বৈকল্পিক, 26 + 1 = 27 বাইট

++$a[$a[$a[$_]]]for@F;redo

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

চালান -a(1 বাইট পেনাল্টি, যেমন আপনি -M5.010উত্পাদন করার আগে এটি ফিট করতে পারেন -aM5.010)।

বিশেষত, এটি থ্রি স্টার প্রোগ্রামার প্রয়োগ করে যেখানে কমান্ডগুলি ফাঁক দিয়ে পৃথক করা হয় এবং I / O এক্সটেনশন ছাড়াই ফাইলটিতে কোনও মন্তব্যের অনুমতি দেওয়া হয় না। (এই পরিবর্তনগুলি স্পষ্টতই ভাষার টিউরিং-সম্পূর্ণতার সাথে কোনও তাত্পর্য রাখে না)) অনলাইনে থ্রি স্টার প্রোগ্রামারটির পক্ষে টুরিং-সম্পূর্ণতার প্রমাণ নেই, তবে এটি টুরিং-সম্পূর্ণ (আমি এর টিউরিংয়ের স্কেচ প্রমাণ ভাগ করে নিচ্ছি) - অন্যান্য এসোপোগ্রামারগুলির সাথে স্বতন্ত্রতা, কিন্তু যখন ভাষাটি আবিষ্কার করেছিলাম যে আপনি একবারে আসল শকটি কাটিয়ে উঠতে পেরেছিলেন তখন প্রোগ্রামটি করা মোটামুটি সহজ।

প্রোগ্রামটির আসলে খুব বেশি ব্যাখ্যা দরকার নেই; থ্রি স্টার প্রোগ্রামারটির একটি খুব সাধারণ স্পেসিফিকেশন রয়েছে এবং এটি এটির সরাসরি অনুবাদ। একমাত্র সূক্ষ্ম পয়েন্ট: @Fঅ্যারে আকারে প্রোগ্রামটির ইনপুট হ'ল (এটি এর পরিণতি -a); এবং redoপুরো প্রোগ্রামটির পুনরাবৃত্তি যেমন এটি একটি অন্তর্নিহিত লুপ (এছাড়াও একটি পরিণতি -a) হয়।


1
আমি মনে করি এটি তীরটির অর্থ "সংক্ষেপিত" থেকে "হ্রাস" হয়ে যাওয়ার অর্থ আরও বোধ করে।
কুইন্টোপিয়া

9

x86 সমাবেশ (ইনটেল সিনট্যাক্স / এমএএসএম) -ব্রেইনফাক 2127 বাইট by

এখনও গল্ফ সক্ষম

.386
.model flat,stdcall
.stack 4096
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
ExitProcess proto,dwExitCode:dword
.data
bfsrc BYTE 200 dup(0) 
bfcells BYTE 100 dup(0) 
loopStack DD 5 dup(0) 
charBuf BYTE 5 dup(0) 
newline BYTE 10,0 
prompt BYTE "$",0 
hr BYTE 50 dup('-'),0 
space BYTE ' ',0
.code
EvalBf proc
    start:
    invoke StdOut, addr prompt
    invoke StdIn, addr bfsrc,200
    cmp bfsrc,0
    je exit
    mov eax,0 
    mov ebx,0 
    mov ecx,0 
    processInstruction:
    cmp BYTE PTR bfsrc[ebx], '+'
    je plus
    cmp BYTE PTR bfsrc[ebx], '-'
    je minus
    cmp BYTE PTR bfsrc[ebx], '>'
    je fwd
    cmp BYTE PTR bfsrc[ebx], '<'
    je back
    cmp BYTE PTR bfsrc[ebx], '['
    je open
    cmp BYTE PTR bfsrc[ebx], ']'
    je close
    cmp BYTE PTR bfsrc[ebx], '.'
    je dot
    jmp processNextInstruction
    plus:
    inc BYTE PTR bfcells[eax]
    jmp processNextInstruction
    minus:
    dec BYTE PTR bfcells[eax]
    jmp processNextInstruction
    fwd:
    inc eax
    jmp processNextInstruction
    back:
    dec eax
    jmp processNextInstruction
    open:
    mov loopStack[ecx*4],ebx
    inc ecx
    jmp processNextInstruction
    close:
    dec ecx
    cmp BYTE PTR bfcells[eax], 0
    je processNextInstruction
    mov ebx,loopStack[ecx*4]
    inc ecx
    jmp processNextInstruction
    dot:
    mov dl, BYTE PTR bfcells[eax]
    mov BYTE PTR charBuf[0], dl
    mov BYTE PTR charBuf[1],0anything
    push eax
    push ecx
    invoke StdOut, addr charBuf
    pop ecx
    pop eax
    jmp processNextInstruction
    processNextInstruction:
    inc ebx
    cmp BYTE PTR bfsrc[ebx], 0
    je done
    jmp processInstruction
    done:
    invoke StdOut, addr newline
    mov eax, 0
    printNext:
    cmp eax, 100
    jge reset
    push eax
    invoke dwtoa, BYTE PTR bfcells[eax], addr charBuf
    invoke StdOut, addr charBuf
    invoke StdOut, addr space
    pop eax
    inc eax
    jmp printNext
    reset:
    invoke StdOut, addr newline
    invoke StdOut, addr hr
    invoke StdOut, addr newline
    jmp start

    exit:
    invoke ExitProcess,0
EvalBf endp
end EvalBf

3
সাধারণত সমাবেশের উত্তরগুলি ফলস্বরূপ মেশিন কোডের আকারে গণনা করা হয়, সুতরাং আপনার সমাবেশকে মোটেও গল্ফ করার প্রয়োজন হবে না, কেবল নির্দেশের সংখ্যা / আকার হ্রাস করুন।
রবার্ট ফ্রেজার

@ রবার্ট ফ্রেজার উহ, আমি এটি গণনা করতে জানি না: পি
ক্রিস্টোফার

3
আসলে, প্রথমে আমি কোনওভাবে শিরোনামটি "
ব্রেইনফাকের ক্ষেত্রে

@ কিয়েজটালকোটল এটি চিত্তাকর্ষক হবে
ক্রিস্টোফার

1
pls গল্ফ পরিবর্তনশীল / লেবেলের নাম ty
ASCII- কেবল

8

সাইক্লিক ট্যাগ সিস্টেমের ব্যাখ্যা পিপ , 16 বাইট

YqWyyPBg@++vXPOy

ট্যাগ সিস্টেমের প্রোডাকশনগুলি কমান্ড-লাইন আর্গুমেন্ট এবং স্টিডিনের প্রাথমিক ডেটা স্ট্রিং হিসাবে গ্রহণ করে।

উপরের কোডটি যাচাই করা খুব দুরূহ কারণ এটি কোনও আউটপুট উত্পাদন করে না (সুতরাং একমাত্র পর্যবেক্ষণযোগ্য আচরণ হ'ল "সমাপ্তি" বনাম "" সমাপ্ত হয় না ")। অতএব, এখানে একটি অদৃশ্য সংস্করণ রয়েছে যা প্রতিটি পদক্ষেপের পরে ডেটা স্ট্রিংকে আউটপুট করে এবং 20 টি ধাপের পরেও বন্ধ হয়ে যায় যাতে টিআইওর অসীম লুপগুলি থেকে বহু সংখ্যক আউটপুট মোকাবেলা করতে হয় না: এটি অনলাইনে চেষ্টা করুন!

চক্রীয় ট্যাগ সিস্টেম

চক্রীয় ট্যাগ সিস্টেমগুলি একটি অত্যন্ত সাধারণ তবুও ট্যুরিং-সম্পূর্ণ গণনা মডেল। এগুলিতে এমন একটি প্রোডাকশনের তালিকা রয়েছে যা ডেটা স্ট্রিংয়ের ক্রিয়াকলাপ সংজ্ঞায়িত করে । প্রোডাকশন এবং ডেটা স্ট্রিংয়ের মধ্যে 1 এবং 0 এর সমন্বয় রয়েছে।

প্রতিটি পদক্ষেপে, ডাটা স্ট্রিংয়ের বামতম অক্ষরটি সরানো হয়।

  • চরিত্রটি যদি 1 হয় তবে বর্তমান উত্পাদনটি তথ্য স্ট্রিংয়ের ডান দিকে যুক্ত করা হয়।
  • চরিত্রটি 0 হলে কিছুই সংযুক্ত থাকে না।

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

ব্যাখ্যা

                  g is list of cmdline args; v is -1 (implicit)
 q                Read a line of stdin for the data string
Y                 and yank it into the y variable
  Wy              While data string is nonempty:
       g@++v       Retrieve the next production from g (using cyclic indexing)
             POy   Pop the first character of y
            X      String-multiply: result is the production if the first character of y
                   was 1, or empty string if it was 0
    yPB            Push that string to the back end of y

আরে, আমি কেবল মনে রেখেছি যে আপনাকে ডাটা স্ট্রিং ইনপুট করতে হবে না; এটি কেবল 1উত্স হতে পারে : এই arxiv.org/abs/1312.6700 এ লিঙ্কগুলি লিঙ্ক করুন । আমি শীঘ্রই আমার উত্তরটি সম্পাদনা করব, এবং এটি যদি আপনার উত্তরটি আপনার উচিত হয় তবে (টিবিএইচএইচপি আপনার ইনপুটটি যথেষ্ট পরিমাণে গোলমাল মনে হয়)
ধ্বংসাত্মক লেবু

8

ইটারেটেড জেনারেলাইজড কোলাটজ ফাংশন -> পাইথন 2, 46 বাইট

a,b,x,m=input()
while-~x%m:x=x/m*a[x%m]+b[x%m]

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

এটি অনলাইন চেষ্টা করুন! এই টিআইও এই ভাষার সাথে কীভাবে 5 + 5 যুক্ত করবেন তা প্রদর্শন করে। প্রোগ্রাম a = [3], বি = [0], এম = 2 যোগ করে এবং 7776 = 2 ^ 5 * 3 ^ 5 দিয়ে শুরু করে অবশেষে 59049 = 3 ^ 10 দেয়।


ডাং চমৎকার কাজ। আমি
ক্রিস্টোফার

7

পুনরায় প্ল্যাটফর্ম বৈকল্পিক -> পাইথন 2, 47 বাইট

l=input()
while l:l=l[2+l[0]:]+l[2:2+l[0]]*l[1]

এই ফাংশনটি ResPlicate এর বৈকল্পিক ব্যাখ্যা করে

  • যার জন্য একটি প্রোগ্রাম এমনকি সূচকগুলিতে এমনকি উপাদানগুলির সমান দৈর্ঘ্যের একটি অজগর তালিকা।
  • কোন আই / ও নেই
  • যার জন্য কাতারের বাকী অংশে বিদ্যমান থাকা থেকে আরও মানগুলি অনুলিপি করার চেষ্টা করার সাথে কেবল কাতারের অবশিষ্ট অংশগুলি অনুলিপি করে (যেমন, অনুলিপি করা বিটটি প্রয়োজনীয় দৈর্ঘ্যে শূন্যের সাথে প্যাড করা হয়নি)।

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

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


2
কেন হবে না l=input()? একটি বাইট সংক্ষিপ্ত হবে।
ফেয়ারসাম

7

পার্ল -aআই / ডি মেশিন , 24 বাইট

$p=$a[$p]+=$_ for@F;redo

এটি অনলাইন চেষ্টা করুন! (এমন একটি শিরোনাম রয়েছে যা অভ্যন্তরীণ অবস্থা প্রিন্ট করে এবং 10 টি পুনরাবৃত্তির পরে থামে, যাতে আচরণটি পর্যবেক্ষণযোগ্য হয়)

ভাষা সম্পর্কে

আমি গত কয়েক দিন I / D মেশিনে কাজ করেছি , যা খুব সাধারণ প্রোগ্রামিং ভাষার জন্য আমার সর্বশেষতম ধারণার। এটি নিম্নলিখিত হিসাবে কাজ করে: ডেটা স্টোরেজটিতে একটি আনবাউন্ড র‌্যাম থাকে না, প্রাথমিকভাবে সমস্ত শূন্য থাকে। প্রতিটি উপাদান একটি আনবাউন্ডেড পূর্ণসংখ্যা সঞ্চয় করতে পারে (যদিও বাস্তবে, বেশিরভাগ আই / ডি মেশিন প্রোগ্রামগুলি কেবল তাদের বেশিরভাগের মধ্যেই ছোট ছোট পূর্ণসংখ্যা সংরক্ষণ করবে এবং আনবাউন্ডেড পূর্ণসংখ্যাকে কেবলমাত্র বড় ঠিকানাগুলির সাথে সম্বোধনকারী কক্ষগুলির সম্বোধন হিসাবে ব্যবহার করবে)। এখানে একটি ডেটা পয়েন্টারও রয়েছে, যা একটি ঘরে নির্দেশ করে (যেমন ঠিকানাটি একটি ঘর হিসাবে ধারণ করে); এটি প্রাথমিকভাবে শূন্য।

দুটি মাত্র আদেশ আছে:

  • I: সেল ডেটা পয়েন্টারটি পয়েন্ট বাড়িয়ে বাড়ায়। (ডেটা পয়েন্টার নিজেই অপরিবর্তিত রয়েছে))
  • D: ডেটা পয়েন্টারকে ডিফারেন্স করুন, অর্থাৎ ডাটা পয়েন্টারটি নির্দেশ করে যে কক্ষের মান পড়ুন। তারপরে ফলস্বরূপ মানটি যা আপনি আবার ডেটা পয়েন্টারটিতে পড়েছেন তা সংরক্ষণ করুন।

এক্সিকিউশন সহজেই প্রোগ্রামটি একটি লুপে বারবার চালায়, চিরকাল।

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

প্রোগ্রাম সম্পর্কে

ব্যবহার

ইনপুটটি স্ট্যান্ডার্ড ইনপুটটিতে দেওয়া উচিত এবং এটি কোনও মন্তব্য ছাড়াই এবং আরএলই / ওআইএসসি সিনট্যাক্স ব্যবহার না করে একটি আই / ডি মেশিন প্রোগ্রাম। (আই / ডি মেশিনের দুটি পৃথক, সমতুল্য বাক্য গঠন রয়েছে তবে গল্ফনেসের জন্য এই প্রোগ্রামটি কেবল তাদের মধ্যে একটিকে সমর্থন করে)) এই বাক্য গঠনতে একটি প্রোগ্রাম দশমিকের মধ্যে সংখ্যার ক্রম যা Iকমান্ডের মধ্যবর্তী Dকমান্ডের দৈর্ঘ্যের প্রতিনিধিত্ব করে । (আপনি তাদের মধ্যে " D0 টি Iকমান্ডের রান" স্থাপনের মাধ্যমে দুটি বা ততোধিক কমান্ড নির্দিষ্ট করতে পারেন , সুতরাং বাক্য গঠনটি সম্পূর্ণ সাধারণ)

ব্যাখ্যা

প্রোগ্রাম থেকে দেখা যায়, এটি স্বতন্ত্রভাবে আদেশগুলি Iএবং প্রয়োগ করে না D। প্রকৃতপক্ষে, এটি একজন (খুব সামান্য) অনুকূলকরণকারী দোভাষী (নিখুঁত কারণ এটি এভাবে লেখার চেয়ে খাটো)। কীটি দেখার জন্য এন এনক্রিমেন্টের একটি রান আদেশ পয়েন্টারের লক্ষ্য n বার বাড়িয়ে দেয়, অর্থাত্ এটিতে n যুক্ত করে; এবং 0 ইনক্রিমেন্ট কমান্ডের একটি রানও এইভাবে প্রয়োগ করা যেতে পারে, কারণ মেমরিতে 0 যুক্ত করার কোনও প্রভাব নেই। সুতরাং আমরা প্রকৃতপক্ষে যে অপারেশনটি প্রয়োগ করি তা হ'ল একটি রান-এর বাস্তবায়ন Iএবং ক D। বা অন্য কথায়, "যুক্ত এনডেটা পয়েন্টার দ্বারা নির্দেশিত মানকে (ডাটা পয়েন্টার দ্বারা নির্দেশিত মানটিতে এটি পুনরায় সংরক্ষণ করে), তারপরে ডেটা পয়েন্টার দ্বারা নির্দেশিত মানটি পড়ুন এবং এটি ডেটা পয়েন্টারে সংরক্ষণ করুন "। এটি স্পষ্টতই তার প্রয়োজনের চেয়ে আরও ভার্বোজ হতে হবে এবং আমরা এটিকে আরও " ডেটা পয়েন্টার দ্বারা নির্দেশিত মানটিতে এন যোগ করতে আরও সহজ করতে পারি , তারপরে সেই মানটি ডেটা পয়েন্টারের লক্ষ্য এবং ডেটা পয়েন্টার নিজেই সংরক্ষণ করে"।

যাতে আমাদের প্রোগ্রামের মূল জন্য তৈরি করে। আমরা $aর‌্যাম সঞ্চয় করতে একটি অ্যারে ব্যবহার করছি , এবং $pডেটা পয়েন্টার হিসাবে (অ্যারেতে সূচক):

$p=$a[$p]+=$_
         + $_  add {the run length}
   $a[$p]      to the element of $a pointed to by $p
   $a[$p] =    storing the result back into that element
$p=            and also in the pointer itself

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

পরিশেষে, আমাদের যা করতে হবে তা হ'ল এই প্রোগ্রামটি কয়েকটা লুপের মধ্যে স্থাপন করা। for@Fলুপ, সঙ্গে মিলিত -aকমান্ড লাইন বিকল্প, স্ট্যান্ডার্ড ইনপুট ক্ষেত্র উপর ইচ্ছা লুপ ( "ক্ষেত্র" ডিফল্ট সংজ্ঞা এখানে হোয়াইটস্পেস উপর বিভক্ত হবে)। redoলুপ একটি অন্তর্নিহিত লুপ সমগ্র প্রোগ্রাম (ছাড়া অন্য সুবিধামত, মানক ইনপুট পাঠ) স্থাপন করবে, যা আমি / ডি মেশিনের শব্দার্থবিদ্যা দ্বারা প্রয়োজন প্রোগ্রাম বারবার একটি লুপ চালানোর জন্য, কারণ হবে।


ফিরে আসার জন্য স্বাগতম! আমাদের আর দোভাষীদের জন্য পতাকা সংগ্রহ করার দরকার নেই, কেবলমাত্র এটি লক্ষ্য করুন যে এটি 'পার্ল উইথ -a'। কোডগলফ.মেটা.স্ট্যাকেক্সেঞ্জাওএআআআ
ডম হেস্টিংস

6

জেলি2-ট্যাগ সিস্টেম , 8 বাইট

µḢị⁴⁸;Ḋß

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

আমার কাছে ব্যবহারিক ভাষার পক্ষে একটি অনুগ্রহ রয়েছে, তবে আমি ভেবেছিলাম যে আমি যখন আসি তখন মূল কাজটিও জয়ের চেষ্টা করতে পারি (যেহেতু আমি ঠিক আমার নিজের অনুগ্রহটি জিততে পারি না)।

ট্যুরিং সম্পূর্ণতার জন্য এটির প্রয়োজন না হওয়ায় কোনও স্টল স্টেট ছাড়াই ট্যাগ সিস্টেমের বিভিন্ন রূপ প্রয়োগ করে। রাজ্যগুলি একটানা 1 থেকে গণনা করা হয় এবং প্রোগ্রামের আগে প্রাথমিক স্ট্রিং আসে।

উদাহরণ হিসেবে বলা যায়, উইকিপিডিয়া একটি ট্যাগ সিস্টেমের একটি উদাহরণ দেয় { a, b, c}, { abc, ba, caaa} প্রাথমিক স্ট্রিং সঙ্গে aaa; এই ইনপুট ফরম্যাট, যে মধ্যে [1,1,1], [[2,3],[1],[1,1,1]]। (ট্যাগ সিস্টেমে কোনও স্থির বাক্য গঠন থাকে না এবং এটি এটি করার পক্ষে যুক্তিসঙ্গত উপায় বলে মনে হয়))

টিআইও লিঙ্কটিতে একটি যুক্ত হয়েছে ("অভ্যন্তরীণ রাজ্য লিখুন এবং স্ট্যান্ডআউটে একটি নতুন লাইন") যাতে প্রোগ্রামটি বাস্তবে কাজ করছে তা দেখানোর জন্য।

ব্যাখ্যা

µḢị⁴⁸;Ḋß
           {implicit: initialise internal state from first argument}
µ          Disregard the second command-line argument by default
 Ḣ         Take the first element, removing it from the internal state
  ị⁴       Use the value to index into the second argument
    ⁸;     Prepend (the rest of) the internal state
      Ḋ    Discard the first element of the internal state
       ß   Loop forever

6

বিএফ / পি "একটি ট্যুরিং মেশিনে প্রয়োগ করা হয়েছে, 842 বাইট

রূপান্তর টেবিল (দৈর্ঘ্যের কারণে সংযুক্ত)

রূপান্তর টেবিল, কম গল্ফ সংস্করণ

ট্যুরিং মেশিন সিমুলেটর ব্যবহার করেছি

এটি অবশ্যই দৈর্ঘ্যের জন্য কোনও পুরস্কার জিততে পারে না, তবে এটি এমন কিছু যা আমি সবসময়ই করতে চাইতাম, যেহেতু বিএফ একটি ট্যুরিং মেশিনের সাথে সমান। প্রতিটি সেল থেকে একটি মান সঞ্চয় করে 0x0- 0xF। প্রস্থটি যদিও এখন পর্যন্ত টুরিং মেশিন ওয়েবসাইটটি আপনার ব্রাউজারটি ক্রাশ না করে যেতে পারে। ,এবং .ফাংশন (ইনপুট এবং আউটপুট) সংজ্ঞায়িত না হয়, তাই এটি একটি বিট আরো পি "সত্যিকারের বি এফ চেয়ে মত।

এটি চালানোর জন্য, ট্যুরিং মেশিন সিমুলেটরে রূপান্তর টেবিলটি পেস্ট করুন, কিছু বিএফ কোডে ইনপুট সেট করুন এবং রান টিপুন।

টিএম এর টেপ মাঝখানে একটি একক স্থান সহ বিএফ কোড এবং বিএফ ডেটা উভয়ই সঞ্চয় করে। এটি বর্তমানে চলমান ( [-> (ইত্যাদি) যে চরিত্রটি চালাচ্ছে ^এবং সেলটির সামনে একটি ডেটাতে এর অবস্থানের অবস্থানটি সংশোধন করে কোডটিতে তার অবস্থানের উপর নজর রাখে । কমান্ডের চরিত্রটি একবার পড়ার পরে, এটি ক্যারেটটি হিট না করা, একটি কক্ষ ডানে সরানো এবং উপযুক্ত ফাংশন সম্পাদন করা অবধি চলবে। তারপরে এটি ফিরে যায়, বিএফ কোডের একটি "সংশোধিত" কমান্ড অক্ষরের সন্ধান করে এবং পুরো প্রক্রিয়াটি পুনরাবৃত্তি করে পরবর্তী একটিতে চলে যায়। কোডটি শেষ হয়ে গেলে এটি বন্ধ হয়ে যায়।

এটি কীভাবে কাজ করে তা বোঝার সর্বোত্তম উপায় হ'ল অযুগলিত সংস্করণটি চালানো, এটিকে ধাপে মোডে রেখে এবং কোন লাইনগুলি অন্যকে এবং কীভাবে প্রতিটি রাজ্য / রেখার লাইনগুলি কাজ করে।

গল্ফযুক্ত এবং অযুগলিত সংস্করণগুলি কীভাবে কাজ করে সে ক্ষেত্রে একেবারে একরকম, তবে অসম্পূর্ণ সংস্করণটিতে আরও বেশি মানব-বান্ধব নাম রয়েছে এবং এটি বিভাগে বিভক্ত।


1
পোস্টের দৈর্ঘ্যের সীমাটি রূপান্তর টেবিলের উপযুক্ত করার জন্য যথেষ্ট
ASCII- কেবল

6

সি বাস্তবায়ন করছে (২,৩) টিউরিং মেশিন , ২৩6 ২০৫ বাইট ( 46 টি কম যদি আপনি বিশ্রী ইনপুট সম্পর্কে চিন্তা না করেন)

-11 বাইটের জন্য অ্যাপলশেলকে, -12 বাইটের জন্য ভিজ্যুয়ালমেলন এবং -7 বাইটের জন্য জোহান ডু টোইটকে ধন্যবাদ জানাই।

সিলিংগ্যাট এমন একটি সংস্করণ তৈরি করেছে যা কেবল ১৪৪ বাইট ব্যবহার করে, এখানে দেখুন

(আমি এখানে কয়েকটি লাইন বিরতি যুক্ত করেছি যাতে আপনাকে স্ক্রোল করতে না হয় তবে সাধারণত এর বেশিরভাগটি মুছে ফেলা হবে)

#define c char
j;i;k;c s,d[256];c main(){c*p=d+128;gets(d);
for(;k<256&&d[k];)d[k++]-=48;for(;++j<256;)
{c t=*p;*p=-t*t+(2-s)*t+1+s;p+=(s^t==0)*2-1;s=s?t%2:!t%3;
for(i=0;++i<256;)printf("%d",d[i]);puts("");}}

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

ব্যবহারের জন্য: টেপটি প্রারম্ভিক করতে 256 টি, জিরো এবং দ্বিগুণ পর্যন্ত একটি স্ট্রিং ইনপুট করুন। যেকোন অবিচ্ছিন্ন মান শূন্য হবে। (0, 1, এবং 2 ব্যতীত অন্যান্য মানগুলি অপরিজ্ঞাত আচরণের কারণ হতে পারে)) প্রোগ্রামটি 256 টি ধাপে পুনরাবৃত্তি করবে। কোডটি সংশোধন করে এটি ধাপে ধাপে বাড়ানো যেতে পারে তবে স্পষ্টতই এর জন্য আরও অক্ষর প্রয়োজন।

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

বাইটগুলির অনেকগুলি ইনপুট এবং আউটপুট নিয়ে কাজ করে এবং আমি NUL, SOH, STX এর পরিবর্তে 0, 1 এবং 2 গ্রহণ করে পুরো 42 বাইট হারিয়েছি। (এটি পরিবর্তন করতে, k;সামনে for(;k<256&&d[k];)d[k++]-=48;থেকে এবং দ্বিতীয় লাইন থেকে মুছুন ))

ট্রানজিশন টেবিল, বিশেষত লাইনটি *p=-t*t+(2-s)*t+1+s;(যা টেপের মান নির্ধারণ করে) সম্ভবত আরও সংকুচিত করা যেতে পারে।


1
বাহ, এবং এটি এখানে আপনার প্রথম কোড গল্ফ! চমৎকার!
জাকারি

আপনি বিশ্বব্যাপী পরিবর্তনশীল ঘোষণাগুলি এর মতো সংক্ষিপ্ত করতে পারেন: k,j;c s,d[256];( inti
সিটিতে

@ অ্যাপলশেল ধন্যবাদ, আমি এটি করব।
a52

আপনি স্ট্রিংটি নাল-টার্মিনাল চেকটি লুপের ভিতরে সরাতে পারেন। ইন-আস্তরণ k++এবং অপসারণের ফলে {}আরও কয়েকটা বাইট সাশ্রয় হয়: for(;k<256&d[k];)d[k++]-=-48;কারণ jকেবল একজন টাইমকিপার (মানটি কখনই ব্যবহৃত হয় না) আপনি এটির পিছনে পিছনে গণনা করে (এবং i) প্রতিস্থাপন করতে পারেন k: আপনি k==256প্রথম লুপের পরে জানেন , তাই দ্বিতীয়টিতে শূন্যে গুনুন for(;k>0;), যা ছেড়ে যায় k==-1, তাই শেষ লুপ হয়ে যেতে পারে for(;++k<256;)। (অস্বীকৃতি: আমি সাধারণত গল্ফ C#, তবে এটি সংকলন বলে মনে হয়েছিল)।
ভিজুয়ালমেলন

1
@ ভিজুয়ালমেলন আমি সমস্যাটি নির্ধারণ করেছি। আমার ব্যবহারের দরকার ছিল k<256&&d[k]না &, কারণ d[k]মূল্যায়ন করা হচ্ছিল k==256। এছাড়াও, যেহেতু kআর 256সেই লুপের পরে থাকার নিশ্চয়তা ছিল না , তাই 256 পদক্ষেপের গ্যারান্টি দেওয়ার জন্য আমাকে পরে এটি পুনরায় সেট করতে হয়েছিল। (আপনার যদি (এটি ভিজুয়ালমেলন) অন্য কোনও পরামর্শ থাকে তবে আমাদের সম্ভবত তাদের চ্যাটে রাখা উচিত যাতে আমরা খুব বেশি মন্তব্য না পাই)
a52

5

Roda বাস্তবায়ন Fractran , 114 112 106 বাইট

1 বাইট প্যারামিটারগুলি পুনরায় সাজিয়ে @ ফেরগাসককে ধন্যবাদ রক্ষা করেছে

f&n,a{x=1{x=0;(a/" ")()|[_/`/`]|[parseInteger(_[0],_1[1])]|{|q,w|{n*=q/w;x=1}if[n%w<1,x<1]}_,_}while[x>0]}

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

তাই মত ফাংশন কল করুন: f reference_to_input program। ফলাফলটি আউটপুট সংরক্ষণ করা হবে input


সেমিকোলন পরে e[1]অপ্রয়োজনীয়। এছাড়াও আপনি প্যারামিটার অর্ডার পরিবর্তন করে এক বাইট সংরক্ষণ করতে পারেন: f&n,a
ফার্গুসক

@fergusq কৌতুকের জন্য ধন্যবাদ f&n,a, এবং আপনি মন্তব্য করার সময় আমি কেবলমাত্র সেমি-কোলন অপসারণ করতে
যাচ্ছিলাম

5

ক্লোজার, 82 81 বাইট (ট্যুরিং মেশিন)

আপডেট: এর থেকে একটি স্থান সরিয়ে নিয়েছে t{} s

#(loop[p 0 t{}s 1](if-let[[S M N](%[(or(t p)0)s])](recur(+ p M)(assoc t p S)N)t))

টুরিং মেশিনটিকে একটি লুপ হিসাবে কার্যকর করে, যখন থামার স্থিতি পৌঁছে যায় তখন টেপটি ফিরিয়ে দেয়। রাষ্ট্রের ট্রানজিশন নিয়মে এটি রূপান্তর অবস্থা বাদ দিয়ে নির্দেশিত হয়। এটি স্থিত Nহয় nilএবং পরবর্তী if-letইনপুট হ্যাশ-ম্যাপ থেকে রাষ্ট্রের রূপান্তর পাওয়া যায়নি বলে পরবর্তীতে বাতিল হয়ে যায় %। প্রকৃতপক্ষে এই রাজ্যের যে কোনও মান এটি করবে, যেমন :abort, 0 বা -1।

উইকিপিডিয়া থেকে 3-রাষ্ট্রের 2-প্রতীকী ব্যস্ত বিভারের উদাহরণ সহকারে নিরপেক্ষ ।

(def f #(loop[pos 0 tape {} state 1]
          (if-let [[sym move next-state](%[(get tape pos 0)state])]
            (do (println [pos tape state])
                (recur(+ pos move)(assoc tape pos sym)next-state))
            tape)))

(f {[0 1] [1  1 2]
    [0 2] [1 -1 1]
    [0 3] [1 -1 2] 
    [1 1] [1 -1 3]
    [1 2] [1  1 2]
    [1 3] [1  1]})

{0 1, 1 1, -1 1, -2 1, -3 1, 2 1}

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

6700K এর একক কোর এ এটি 5-রাষ্ট্র 2-প্রতীক ব্যস্ত বিভার (47.1 মিলিয়ন পদক্ষেপ) প্রায় 29 সেকেন্ডে বা 1.6 মিলিয়ন পদক্ষেপ / সেকেন্ডে চালায়।


5

এমটিপ , 4 বাইট

Ṅ×ịß

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

টিআইও লিঙ্কটি এশোলং পৃষ্ঠায় প্রদর্শিত টিপ প্রোগ্রামের সাথে টিপ প্রোগ্রামটির সাথে ফাংশনটি কল করতে একটি পাদলেখকে যুক্ত করেছে (এম এর "স্বয়ংক্রিয় মোড়ক" ফাংশনগুলিকে কল করার জন্য যেমন তারা প্রোগ্রামগুলি যুক্তিযুক্ত বা স্থির-পয়েন্ট সংখ্যা হ্যান্ডেল করতে পারে না, বা কমপক্ষে আমার আশ্রয়স্থল নয়) এটি কীভাবে বলা যায় তা বুঝতে পারেনি, সুতরাং এটি চালাতে সক্ষম হওয়ার জন্য আমাকে ফাংশনটি একটি সম্পূর্ণ প্রোগ্রামে তৈরি করা দরকার))

এটি আসলে দরকারী ডিবাগ আউটপুট প্রিন্ট করে; এম তে 3 বাইটে প্রোগ্রামটি লেখা যায় না কারণ ঠিক তিনটি ডায়াড সমন্বিত একটি প্রোগ্রাম পার্সারে একটি বিশেষ ক্ষেত্রে ট্রিগার করে, তাই বিশেষ কেসটি এড়াতে আমাকে একটি অতিরিক্ত কমান্ড যুক্ত করতে হয়েছিল। এটি তৈরি করা (নিউলাইন দিয়ে মুদ্রণ) অন্তত এটি একটি দরকারী উদ্দেশ্য দেয়।

ıi=1

I / O (থামানো / না-থামানো ব্যতীত) প্রয়োগ করে না। আই / ও হ'ল টিপ-এর একটি এক্সটেনশন (নিজেই ভাষার অংশ নয়), এবং টুরিং-সম্পূর্ণতার জন্য প্রয়োজনীয় নয়।

ব্যাখ্যা / পটভূমি

Ṅ×ịß
Ṅ     Print {the left argument} and a newline; also resolves a parser ambiguity
  ị   {The left argument}th element of {the right argument}, wrapping on OoB
 ×    Multiply {the left argument} by {the chosen element}
   ß  Recursive call; arguments: {the product} and {the same right argument}

[1,2,3][1,2,3,1,2,3,1,2,3,…]rx+sযা একটি বহুপদী, এবং অনেকগুলি গল্ফিং ভাষাগুলির "বেস রূপান্তর" অন্তর্নির্মিত আসলে ছদ্মবেশে একটি সাধারণ-উদ্দেশ্য বহুপদী মূল্যায়নকারী। সুতরাং আমাদের যা করতে হবে তা হল অঙ্কগুলির তালিকাগুলির তালিকায় তালিকা তৈরি করা, সেগুলি বেস-রূপান্তর করা এবং আমরা ঠিক করেছি, তাই না?

xx

x(xy)xy। অবশ্যই, আমরা চাই আমরা যেকোন কিছুতে শৃঙ্খলাবদ্ধ আচরণটি ওভাররাইড করতে পারি, তবে এটির জন্য পুরো বাইট লাগবে, এবং এই প্রশ্নে গল্ফিং ভাষার এন্ট্রিগুলি এত সংক্ষিপ্ত হয়ে উঠছে যে একটি বাইট অনেক বেশি।

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

s

এবং অবশ্যই, বেস রূপান্তর ( ) এর বিপরীতে , গুণ ( ×) পরিবর্তনীয়, এবং সুতরাং এটি যুক্তিগুলিতে কী অর্ডার স্থাপন করা হয় তা বিবেচনা করে না So সুতরাং আমাদের যা লিখতে হবে তা হ'ল ×ị, এবং তারপরে প্রোগ্রামটিকে একটি অসীম পুনরাবৃত্তিতে রাখুন ß, এবং আমাদের একটি টুরিং-সম্পূর্ণ ভাষা আছে। রাইট?

(xy)(xy)¹×ịß¹¹ এটি একটি ভাল পছন্দ কারণ এটি দরকারী ডিবাগ আউটপুট উত্পাদন করে।

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


এই সম্পর্কে আরো কিছু চিন্তা করার পর, আমরা ব্যবহার তিন বাইট এই নিচে পেতে পারে এবং পরিবর্তে ×এবং ; ফলস্বরূপ ভাষা টিপ হিসাবে একেবারে একই ভাষা নয়, তবে এটি প্রায় অনুরূপ এবং প্রায় একই কারণেই টুরিং-সম্পূর্ণ। দুর্ভাগ্যক্রমে, এম তে প্রয়োগ করা হয়নি, এবং ইনপুটগুলির মধ্যে কোনওটি যদি একটি অসংখ্যার আসল সংখ্যা হয় তবে আমি জেলিকে নির্বিচারে-নির্ভুল গণনা করার কোনও উপায় খুঁজে পাই না। যদি কেউ অন্য কোনও গল্ফিংয়ের ভাষা জানেন যেখানে এই নির্মাণটি কাজ করতে পারে তবে এটি নির্দ্বিধায় জানাতে পারেন।
ais523

4

ব্রেইনফাকের ব্যাখ্যা সি, 187 বাইট

t[999],*p=t,c,i,l;f(char*t){for(i=0;c=t[i];i++){c^62?c^60?c^43?c^45?c^46?c^44?c^91:(*p=getchar()):putchar(*p):--*p:++*p:--p:++p;if(c==93&&*p)for(l=1;l>0;)c=t[--i],c==91?l--:c==93?l++:0;}}

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


3
ওয়েলপ, বিএফ ব্যবহার করে একটি উত্তর হতে বাধ্য ছিল।
জাকারি

4

লুয়া ব্রেইনফ ***, 467 বাইট ব্যাখ্যা করছে

b,r,a,i,n,s=0,io.read,{0},1,1,"><+-.,[]"c,f=r(),{function()n=n+1;a[n]=a[n]or 0;end,function()n=n-1;a[n]=a[n]or 0;end,function()a[n]=a[n]+1;end,function()a[n]=a[n]-1;end,function()io.write(string.char(a[n]))end,function()a[n]=io.read():byte()end,function()i=a[n]~=0 and i or c:find("]",i)end,function()if a[n]~=0 then b,x=1,""repeat i=i-1 x=c:sub(i,i)b=x=="["and b-1 or x=="]"and b+1 or b until b==0 and x=="["end end}repeat f[s:find(c:sub(i,i),1,1)]()i=i+1 until i>#c

আমি জানি যে এখনও কিছু করতে পারছি না যা পরে করতে পারি তবে এখানেই আমার প্রথম পাসটি শেষ হয়েছিল। স্ট্যান্ডার্ড ইনপুট থেকে ব্রেইনফ কোডটি নেয়।


2
+1 এর জন্য brains, যখন গল্ফাররা ভেরিয়েবলের একটি তালিকাতে নির্ধারিত হয় তখন এটি সর্বদা মজাদার।
জাকারি

4

সিজেএম → রেজলিপেট ভেরিয়েন্ট, 15 14 13 বাইট

-1 বাইট @ ais523 ধন্যবাদ

l~{(/((*+e_}h

বৈকল্পিক এক হিসাবে একই এই উত্তর ছাড়া কিউ নেওয়া বন্ধ আইটেম সংখ্যা এক সারিতে শীর্ষ সংখ্যার চেয়ে কম হয়।

l~{ ... }hঅংশ মাত্র ইনপুট হিসাবে একটি অ্যারের নেয় এবং যতক্ষণ না যে অ্যারের খালি পুনরাবৃত্তি।

মূল লুপের জন্য ব্যাখ্যা:

    e# Stack:             | [3 2 1 1 2 2 2 1]
(   e# Pop first element: | [2 1 1 2 2 2 1] 3
/   e# Split chunks:      | [[2 1 1] [2 2 2] [1]]
(   e# Pop first:         | [[2 2 2] [1]] [2 1 1]
(   e# Pop first:         | [[2 2 2] [1]] [1 1] 2
*   e# Repeat array:      | [[2 2 2] [1]] [1 1 1 1]
+   e# Concatenate:       | [[2 2 2] [1] 1 1 1 1]
e_  e# Flatten:           | [2 2 2 1 1 1 1 1]

আপনার এখানে সত্যিই ইনক্রিমেন্টের দরকার নেই। কেবলমাত্র নির্দিষ্ট করুন যে মূল প্রোগ্রামে ব্লকের দৈর্ঘ্য 1 দ্বারা বাড়ানো উচিত; যা রেসপ্লিকেটের টুরিং-সম্পূর্ণতার ক্ষতি করে না (এমন টিসি নির্মাণ রয়েছে যাতে ব্লকের দৈর্ঘ্য এবং পুনরাবৃত্তি গণনাগুলি একে অপরের সাথে মিশে যায় না)।

3

চিপ , 20 + 3 = 23 বাইট (বিধি 110)

AZZ
>}/a
`)\'E~Zte*f

পতাকা জন্য +3 -z

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

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

এই বাস্তবায়ন ASCII 0গুলি এবং 1এর আকারে ইনপুট এবং প্রদত্ত আউটপুট নেয় । এখানে যুক্তিটি নিম্নরূপ:

p := value of left neighbor cell    AZZ
q := value of current cell          AZ
r := value of right neighbor cell   A

q' := ((r xor q) and p) or          >}/a
      ((r or q) and ~p)             `)\'

উপাদানগুলির অবশিষ্টাংশ গৃহকর্মের জন্য রয়েছে: e*fএএসসিআইআই সংখ্যার আউটপুট সৃষ্টি করে এবং E~Ztইনপুটটি শেষ হয়ে যাওয়ার পরে দুটি বাইট কার্যকর করা বন্ধ করে দেয় (যেহেতু প্রতিটি প্রজন্মের প্রস্থ 2 দ্বারা বৃদ্ধি পায়)।


3

ক্লোজার, 75 বাইট (সাইক্লিক ট্যাগ সিস্টেম)

আপডেট 1: প্রতিস্থাপিত some?সঙ্গে nil?

আপডেট 2: একটি অনুপস্থিত ফিক্সড Sএর অন্য শাখায় if s

#(loop[[p & P](cycle %)[s & S]%2](if(nil? s)S(recur P(if s(concat S p)S))))

কার্যকরী আবর্তনশীল ট্যাগ সিস্টেম , আয় nilযদি প্রোগ্রাম স্থগিত, loops চিরকাল অন্যথায়। Clojure সত্যিই এখানে অসীম অলস সিকোয়েন্সগুলি (যেমন চক্র ) এবং ডেস্ট্রাকচারিংয়ের সাথে জ্বলজ্বল করে । ওন এবং শূন্যগুলি সত্য এবং মিথ্যা মান হিসাবে নির্দেশিত। যখন ডেটা স্ট্রিং শেষ হয়ে sযায় nil

Ungolfed:

(def f #(loop[[p & P] (cycle %) [s & S] %2 i 5]
          (do
            (pprint [p (concat [s] S)])
            (if (and (some? s) (pos? i))
              (recur P (if s (concat S p) S) (dec i))))))

উদাহরণ ফলাফল:

(f [[false]] [true true])
[[false] (true true)]
[[false] (true false)]
[[false] (false false)]
[[false] (false)]
[[false] (nil)]

(f [[false true true] [true false] [true false true]] [true])
[[false true true] (true)]
[[true false]      (false true true)]
[[true false true] (true true)]
[[false true true] (true true false true)]
[[true false]      (true false true false true true)]
[[true false true] (false true false true true true false)]

2

জাভাস্ক্রিপ্ট 110 , 131 বাইট (99 বাইট ?, 28 বাইট?) বিধিটি ব্যাখ্যা করছে

a=(p,q,r)=>q+r+q*r+p*q*r
b=l=>{r="";for(i=0;i<l.length-2;i++)r+=a(l[i],+l[i+1],+l[i+2])%2;return r}
c=(l,n)=>!n?l:c(b(0+l+0),n-1)

আপনি দেখতে পাচ্ছেন যে কোডটি 3 টি ফাংশন a, bএবং c। সম্ভবত বাইটগুলি তাদের 1 টি ফাংশনে একত্রিত করে সংরক্ষণ করা সম্ভব (আমি কীভাবে তা দেখছি না) তবে এটি আলাদা হওয়া ভাল কারণ তাদের প্রত্যেকে ইতিমধ্যে কিছুটা অর্থে এই চ্যালেঞ্জটি পূরণ করেছে।

ফাংশনটি aইনপুট হিসাবে 3 নম্বর নেয় এবং সেগুলির কয়েকটি অদ্ভুত বহুবচন গণনা করে। যখন এই 3 টি সংখ্যা হয় 0বা 1এগুলি 110 টি কোষের বিধি হিসাবে দেখা যায়। এর আউটপুটটির সামঞ্জস্যতা aপরবর্তী প্রজন্মের মাঝের ঘরের মান হিসাবে দেখা যেতে পারে। সুতরাং কিছু অর্থে, এই সাধারণ ফাংশনটি ইতিমধ্যে একটি নিয়ম 110 'ইন্টারপ্রেটার' (28 বাইট):

a=(p,q,r)=>(q+r+q*r+p*q*r)%2

এরপরে আমরা একটি নতুন ফাংশন তৈরি করতে পারি bযা aস্ট্রিংগুলির প্রতিটি এবং শূন্যের প্রতিটি চরিত্রের মূল্যায়ন করে। এটি bতখন এর চেয়ে আরও ভাল উপায়ে a, কোনও 110 টি দোভাষী। ব্র্যান্ডস সাফ (99 বাইট) মূল্যায়নের পরে মোড 2 নেওয়া:

a=(p,q,r)=>q+r+q*r+p*q*r
b=l=>{r="";for(i=0;i<l.length-2;i++)r+=a(l[i],+l[i+1],+l[i+2])%2;return r}

আসলে 110 রুলের সাথে একটি ফাংশন গণনা করতে, ব্যবহারকারীকে প্রারম্ভিক অবস্থা এবং প্রজন্মের সংখ্যা নির্দিষ্ট করতে হবে যার পরে আউটপুট 'উপস্থিত হবে'। আমরা একটি তৃতীয় ফাংশন তৈরি করতে পারি যা স্ট্রিংগুলির সময়গুলির সাথে মূল্যায়ন করে এমন cএকটি শৃঙ্খলা এবং জিরো এবং একটি ধনাত্মক পূর্ণসংখ্যার কাজ করে । এর মতো আমরা সত্যিকারের 110 টি প্রোগ্রামিং ভাষা হিসাবে দেখতে পারি, যেখানে একটি প্রোগ্রাম একটি অন্তঃসত্ত্বা রাষ্ট্র এবং একটি সংখ্যা এবং আউটপুট প্রজন্মের পরে রাষ্ট্র । ফাংশনটি এখন সেই প্রোগ্রামিং ভাষার জন্য প্রকৃত দোভাষী হয় তাই এই চ্যালেঞ্জের চূড়ান্ত কোডটি আমি উপরে উপস্থাপন করেছি।nbnnnc


সঠিক ব্যাকগ্রাউন্ডের সাথে এই 110 টি গণনা করা যায়? আমার পূর্বের উত্তর মুছে ফেলা হয়েছে কারণ এটির ব্যাকগ্রাউন্ড নেই।
গম উইজার্ড

@ ওয়েট উইজার্ড ব্যাকগ্রাউন্ডটি ইনপুটটির অংশ, আপনার উত্তরটির জন্য এটি মুছে ফেলা উচিত হয়নি
জেনস রেন্ডার্স

পটভূমিটি অসীম হওয়া উচিত, আপনি কি অসীম ইনপুট নিতে পারেন?
গম উইজার্ড 1

@ ওয়েট উইজার্ড এটি অসীম হতে হবে না, এটি নির্বিচারে বড় করতে সক্ষম হতে হবে, এবং এটি করতে পারে
জেনস রেন্ডার্স

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

2

জেএস -> নিউলাইন 854 বাইট

(function(d){var b=0;var n=!0;var c=[];var h=[];var e=0;var l=[];var m=0;var f=2;var a=0;var g=!1;var k=function(a){if(a===1)return!1;if(a%2===0&&a!==2)return!1;if(a%3===0&&a!==3)return!1;if(a%5===0&&a!==5)return!1;if(a%7===0&&a!==7)return!1;for(var b=7;b<d.round(d.sqrt(a))+1;b++)if(a%b===0)return!1;return f=a,!0;};var j=0;var i=0;var o=function(q){var o=d.__split(q,'\n');d.println(o);for(var n=0;n<o.length;n++)if(n>=f^2&&n<=f+1^2&&k(n)){f=n;for(var p=0;p<o[n].length;p++){if(o[n]==='+'&&(a+=c[b],b++),o[n]==='-')if(g===!0&&a<=0)break;else a-=c[b],b++;if(o[n]==='*'&&(a*=c[b],b++),o[n]==='/'&&(a/=c[b],b++),o[n]==='s'&&(a=d.sqrt(a)),o[n]==='%'&&(a%=c[b],b++),o[n]==='a'&&l.push(a),o[n]==='g'&&(a=c[b],b++),o[n]==='q'&&c.push(a),o[n]==='i'&&a++,o[n]==='d')if(g===!0&&a<=0)break;else a--;o[n]==='r'&&(g=!0),o[n]==='w'&&(g=!1),o[n]==='['&&(j=n),o[n]===']'&&a>0&&(n=j,h[e]--),o[n]==='{'&&(i=n),o[n]==='}'&&h[e]>0&&(n=i,h[e]--),m=a,o[n]==='k'&&e++;}}};});

গুগলকে সুপার গল্ফড ধন্যবাদ।


আমি মনে করি আপনি এই উত্তরটি ভুল চ্যালেঞ্জের জন্য পোস্ট করেছেন। আপনি কি এই চ্যালেঞ্জটিতে পোস্ট করার অর্থ দিয়েছিলেন ?

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

1
যাইহোক, যে উত্তরগুলি বিজয় শর্তটি অনুকূল করার গুরুতর চেষ্টা করে না সেগুলি বিধিগুলির বিরুদ্ধে । যতক্ষণ আপনি এটিকে নিয়ম মেনে চলতে না পারছেন ততক্ষণ এটি মুছে ফেলার পক্ষে যথেষ্ট কারণ reason

1
আপনি সমস্ত varবিবৃতি একত্রিত করতে পারেন :var b=0,n=!0,c=[],h=[],e=0,l=[],m=0,f=2,a=0,g=!1;
Esolanging ফল

1
Pls সব সরান varTY
হওয়া ASCII শুধুমাত্র

1

ক্লোজার, 87 বাইট (110 রুল)

সমতা কোডের ক্রেডিট জেনস রেন্ডারগুলিতে যায়! আমি কীভাবে এটি প্রকাশ করতে পারি সে সম্পর্কে আমি সত্যিই লড়াই করে যাচ্ছিলাম এবং আমি [p q r]বাইনারি থেকে একটি পূর্ণসংখ্যায় রূপান্তর করে একটি লুক টেবিল ব্যবহার করতে যাচ্ছিলাম ।

#(iterate(fn[S](for[[p q r](partition 3 1(concat[0]S[0]))](mod(+ q(* q(+ 1 p)r)r)2)))%)

এখানে partitionএবং ক্লোজারের ডেস্ট্রাকচারিং যুক্তি প্রয়োগকে বেশ সহজ করে তোলে। এই ফাংশনটি রাজ্যের এক অসীম অনুক্রমকে ফেরত দেয়, তাই কলার takeতাদের যতটা প্রয়োজন কেবল তার nthজন্য দায়বদ্ধ বা কেবলমাত্র একটি নির্দিষ্ট অবস্থানে যেতে পারেন। যদি শূন্যের সাথে প্যাডিংগুলি কেবল একটির পরিবর্তে দুটি উপাদান হয় তবে টেপটি ক্রমাগত বাড়ত, সীমানা সম্পর্কিত সমস্যাগুলি এড়িয়ে চলে। এখন এটি মূল প্রস্থে থাকে।

উদাহরণ:

(def f #(iterate(fn[S](for[[p q r](partition 3 1(concat[0]S[0]))](mod(+ q(* q(+ 1 p)r)r)2)))%))

(pprint (take 5 (f '(0 0 0 0 0 1 1 1 0 0 1 0 0))))
((0 0 0 0 0 1 1 1 0 0 1 0 0)
 (0 0 0 0 1 1 0 1 0 1 1 0 0)
 (0 0 0 1 1 1 1 1 1 1 1 0 0)
 (0 0 1 1 0 0 0 0 0 0 1 0 0)
 (0 1 1 1 0 0 0 0 0 1 1 0 0))

1
যদি আপনি কেবলমাত্র মূল প্রস্থের সাথে কাজ করেন তবে এটি সম্ভবত টুরিং-সম্পূর্ণ হতে পারে না কারণ এটির সীমাবদ্ধ মেমরি স্টোরেজ রয়েছে। (প্রকৃতপক্ষে, বিধি ১১০ থেকে সমস্ত পরিচিত টুরিং-সম্পূর্ণতা নির্মাণগুলিতে প্রস্থটি প্রসারিত করতে ব্যবহৃত "প্যাডিং" প্রয়োজন কারণ প্রোগ্রামটি ব্যবহারকারীর ইনপুট থেকে নির্দিষ্ট প্যাটার্নটি চালিয়ে যায়, এবং বামে এবং ডানে পৃথক, পরিবর্তে কেবল

আমি দেখতে পাচ্ছি, এটি তখন সিমুলেশনকে আরও কঠিন করে তোলে। Clojure এর cycleঅসীম প্যাডিং প্যাটার্নটি তৈরি করতে সক্ষম হবে, তবে প্রথম পদক্ষেপটি কার্যকর করতে অসীম পরিমাণ সময় লাগবে: /
নিকোনিয়ার

এটি ভেবে দেখুন, এই প্যাডিং প্যাটার্নটিকে অতিরিক্ত যুক্তি হিসাবে গ্রহণ করা এবং সিমুলেটেড টেপটি 1 টি ব্লক বাম এবং ডান দ্বারা প্রসারিত করা খুব জটিল হবে না। এখানে তথ্যের গতি 1 ব্লক / পুনরাবৃত্তি তাই আমাদের কেবলমাত্র অনন্য কাঠামোযুক্ত কেন্দ্রীয় ব্লকের চারপাশে "হালকা শঙ্কু" অনুকরণ করতে হবে। (সিএমআইআইডাব্লু)
নিকো নিরহ

1

এপিএল (ডায়ালগ)ফ্র্যাক্ট্রান বৈকল্পিক, 15 বাইট

(⊃0~⍨××0=1|×)⍣≡

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

ফাংশনটি সংখ্যার তালিকার পরিবর্তে সংখ্যার এবং ডিনোমিনেটরযুক্ত দুটি তালিকার পরিবর্তে সংখ্যার তালিকা হিসাবে গ্রহণ করে এবং প্রোগ্রামটি শেষ হলে ফলাফলটি আউটপুট করে। এটি ফ্র্যাক্ট্রানের একটি বৈকল্পিক প্রয়োগ করে যা প্রোগ্রামটির শেষে যুক্তিযুক্ত 1/1 (= 1) রয়েছে। 1 টি টিউরিং-সম্পূর্ণতার উপর প্রভাব ফেলবে (যতদূর আমি বুঝতে পেরেছি) কারণ প্রোগ্রামের ইনপুটটি কেবলমাত্র 1 এ অবতরণ করে যখন অন্য কোনও যুক্তি কাজ করে না, এবং যখন এটি হয় তখন ইনপুট পরিবর্তন হয় না। এটি কেবলমাত্র তখনই ব্যবহৃত হয় যাতে ফাংশনটি কখন শেষ হবে তা জানে।

টিআইও লিঙ্কটি প্রথম ইনপুটটিতে 2 পুনরাবৃত্তির জন্য ফাংশনটি চালায় (যাতে আপনি প্রোগ্রামটি শেষ না হওয়ায় আউটপুটটি দেখতে পাবেন) এবং শেষ না হওয়া পর্যন্ত দ্বিতীয় ইনপুট চালায়, তারপরে এটি আউটপুট ফেরত দেয়।

(⊃0~⍨××0=1|×)⍣≡ বাম আর্গুমেন্ট হিসাবে যুক্তিগুলির তালিকা গ্রহণ করে, ⊣ হিসাবে উল্লেখ করা হবে এবং ইনপুটটিকে সঠিক আর্গুমেন্ট হিসাবে ⊢ হিসাবে উল্লেখ করা হবে

(⊃0~⍨××0=1|×) ফাংশন ট্রেন

  • 1|××⊣ এবং ⊢ এর দশমিক পয়েন্ট (মডুলো 1) এর পরে অংশটি পান ⊢

  • 0= এটি 0 সমান হয়?

  • ×× এই ফলাফলটিকে ⊣ × ⊢ দিয়ে গুণ করুন, যেখানে যুক্তিযুক্ত × an পূর্ণসংখ্যা নয়, সেখানে 0 দিয়ে প্রতিস্থাপন করা হয়েছে

  • 0~⍨ সমস্ত 0 টি মুছে ফেলুন

  • প্রথম উপাদান পান

ইনপুট পরিবর্তন না হওয়া অবধি লুপটি নোট করুন যে ফলাফলটি (⊃0~⍨××0=1|×)ইনপুট হিসাবে পুনরায় ব্যবহৃত হয়েছে, সুতরাং যদি এটি পরিবর্তন করা বন্ধ করে (শেষে 1 টির ফলস্বরূপ) প্রোগ্রামটি বন্ধ হয়ে যায়


1

জাভাস্ক্রিপ্ট: ল্যাম্বদা ক্যালকুলাস ( 123 114)

ডুপলসে ডেব্রাইজন সূত্র ব্যবহার করে প্রতিনিধিত্ব করেছেন।

V=function b(c,d){if(!isNaN(c)){for(;--c;)d=d[1];return d[0]}return 0==c[0]?e=>b(c[1],[e,d]):b(c[0],d)(b(c[1],d))}

এস সংযুক্তকারী হয় [0, [0, [0, [[3, 1], [2, 1]]]]]

কে [0, [0, 2]]

আমি [0, 1]

সম্পাদনা করুন: প্রতিস্থাপন করে 9 বাইট শেভ "number"==typeof cকরা হয়েছে!isNaN(c)


0

এপিএল (ডায়ালগ ইউনিকোড) , 15 বাইট এসবিসিএস

সম্পূর্ণ প্রোগ্রাম যা সাধারণীকরণের এক-মাত্রিক সেলুলার অটোমেটন এক্সিকিউটারকে কার্যকর করে। এর মধ্যে 110 রুল রয়েছে যা টিউরিং সম্পূর্ণ। প্রাথমিক অবস্থার জন্য স্টিডিন প্রম্পট করে, পুনরাবৃত্তির সংখ্যা (বা স্থিতিশীল হওয়া অবধি অবিরত রাখতে বা স্থিতিশীল না হওয়া পর্যন্ত {⍵≡⎕←⍺}সমস্ত মধ্যবর্তী মান প্রদর্শন করতে) এবং নিয়ম- গোষ্ঠীর জন্য প্রম্পট দেয় ।

⎕∊⍨∘(⊢∘⊂⌺3)⍣⎕⊢⎕

এটি অনলাইন চেষ্টা করুন! (বিধি 110 এর 4 পুনরাবৃত্তি)

 প্রাথমিক অবস্থা এবং

 ফলন করুন (পুনরাবৃত্তির সংখ্যা থেকে রাষ্ট্রকে পৃথক করে)

⍣⎕ পুনরাবৃত্তির সংখ্যার জন্য অনুরোধ জানানো এবং নীচের ফাংশনটি প্রয়োগ করুন যা বহুবার:

() নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

  ⌺3 সমস্ত দৈর্ঘ্য -3 পাড়া (তারা প্রান্তে রয়েছে কিনা সে সম্পর্কিত তথ্যের সাথে) পান এবং প্রতিটি জোড়ের জন্য নিম্নলিখিত ট্যাসিট ফাংশনটি প্রয়োগ করুন:

    পাড়াটি বন্ধ করুন

    এবং

    ফলন করুন (প্রান্তে থাকা সম্পর্কে তথ্য বাতিল করা)

 তারপর

∊⍨ তারা সদস্য কিনা তা পরীক্ষা করে দেখুন

 পরবর্তী পুনরাবৃত্তিতে চলতে পারে এমন প্রতিবেশীদের তালিকার জন্য প্রম্পট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.