একটি সাইক্লিক ট্যাগ সিস্টেম অনুকরণ করুন


14

একটি চক্রাকার ট্যাগ সিস্টেম একটি ক্ষুদ্র, টিউরিং-সম্পূর্ণ গণনীয় মডেল যা একটি দুটি প্রতীক বর্ণমালা (আমি ব্যবহার করব {0,1}), একটি সীমাবদ্ধ, দু'টি চিহ্নের সমন্বয়ে নির্মিত প্রোডাকশনগুলির একটি চূড়ান্ত চক্রীয় তালিকা এবং একটি সীমাহীন শব্দ যা এতেও অন্তর্ভুক্ত এই দুটি প্রতীক।

প্রতিটি পদক্ষেপে:

  • শব্দের প্রথম উপাদানটি সরানো হবে
  • এটি ছিল যদি 0বর্তমান উত্পাদন এড়ানো হয়
  • যদি এটি ছিল 1তবে বর্তমান উত্পাদনটি শব্দের শেষে যুক্ত হয় ।
  • পরবর্তী উত্পাদন সক্রিয় হয়ে ওঠে। এটি যদি শেষ উত্পাদন হয় তবে প্রথমটিতে ফিরে যান।

শব্দটি খালি হয়ে গেলে সিস্টেমটি বন্ধ হয়ে যায়।

একটি উদাহরণ (উইকিপিডিয়া থেকে):

Productions: (010, 000, 1111)
Initial word: 11001

Generation  Production   Word (before)            Word (after)
   0           010           11001             →     1001010       
   1           000            1001010          →      001010000
   2           1111            001010000       →       01010000
   3           010              01010000       →        1010000
   4           000               1010000       →         010000000
   5           1111               010000000    →          10000000
   6           010                 10000000    →           0000000010
   7           000                  0000000010 →            000000010
   8           1111                  000000010 →             00000010
   9           010                    00000010 →              0000010

আপনার কাজটি, যদি আপনি এটি গ্রহণ করতে চান, তবে কোনও প্রোগ্রাম বা ফাংশন লিখতে হবে:

  • উত্পাদনের একটি তালিকা,
  • প্রাথমিক শব্দ, এবং
  • একটি প্রজন্ম,

এবং প্রজন্মের মধ্যে শব্দটি মুদ্রণ করে বা প্রদান করে ।

উদাহরণ স্বরূপ,

cyclic_tag(
      prod=[[0,1,0],[0,0,0],[1,1,1,1]], 
      word=[1,1,0,0,1], 
      gen=4) => [1,0,1,0,0,0,0]

বাস্তবায়নের বিশদ:

  • বর্ণমালা কিছু যায় আসে না। আপনি যতক্ষণ না সামঞ্জস্য থাকেন ততক্ষণ আপনি এবং 0এবং 1, Trueএবং False, Tএবং NIL, Aএবং Bএমনকি 1এবং এবং 0যা কিছু সামনে আসতে পারেন ব্যবহার করতে পারেন । সমস্ত ইনপুট এবং আউটপুট অবশ্যই একই বর্ণমালা ব্যবহার করা উচিত এবং আপনি কী 0এবং কী ব্যবহার করছেন তা আপনাকে অবশ্যই নির্দেশ করতে হবে 1

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

  • প্রদত্ত সিস্টেমটি যদি প্রদত্ত প্রজন্মের পৌঁছানোর আগে থামে, আপনাকে অবশ্যই খালি শব্দটি ফিরে আসতে হবে বা মুদ্রণ করতে হবে।

  • খালি উত্পাদন বিদ্যমান, এবং আপনি অবশ্যই এটি পরিচালনা করতে সক্ষম হবেন। আপনি যদি একটি পূর্ণ প্রোগ্রাম লিখেন তবে আপনার আই / ও অবশ্যই এটি পরিচালনা করতে সক্ষম হবে।

সম্পাদনা করুন : আমি মূলত প্রজন্মকে 0নিজেই ইনপুট শব্দ হিসাবে তৈরি 1করা এবং প্রজন্মকে প্রথম পদক্ষেপের ফলস্বরূপ করতে চেয়েছিলাম। অর্থাৎ, আমি আপনার পূর্ববর্তী কলামটি ফিরে আসার উদ্দেশ্যে করেছিলাম । তবে , যেহেতু আমি এটি উল্লেখ করার ক্ষেত্রে যথেষ্ট পরিষ্কার ছিলাম না, তাই আমি উভয় বিকল্প গ্রহণ করব ; প্রতিটি প্রজন্মের জন্য আপনি কলামের আগের বা তার পরে মানটি দিতে পারেন । আপনি রাষ্ট্র হবে যে আপনি অনুসরণ করছেন পরে কলাম, যদি আপনি তা করছেন। আপনি যে কলামটি চয়ন করেছেন তা আপনাকে অবশ্যই সামঞ্জস্য রাখতে হবে।

আমি এখন থেকে এক সপ্তাহের মধ্যে সবচেয়ে ছোট কোডটি প্রদান করব (10/27/2014)।


ওম, আপনি কি নিশ্চিত যে উদাহরণটিতে আপনার আউটপুটটি সঠিক? আপনি যে অন্য উদাহরণ দিয়েছিলেন তার উপর ভিত্তি করে, আমি মনে করি এটি 5
বছরের

আমরা কি ইনপুটটি অন্য কোনও ক্রমে নিতে পারি?
মার্টিন ইন্ডার

1
@ ফ্রাইআম দ্য এজিগম্যান: এটি সঠিক, আমি "পূর্বে" কলামটি বোঝাতে চাইছিলাম। যদি আরও লোকেরা এই ভুল করে থাকে তবে আমি আমার প্রশ্নটি মেনে নিতে পরিবর্তন করব। আমি স্বীকার করি আমি খুব পরিষ্কার ছিল না।
মেরিনাস

@ মার্টিনব্যাটনার: যতক্ষণ আপনি আদেশটি নির্দিষ্ট করেন, ততক্ষণ তাতে কিছু আসে যায় না।
মেরিনাস

উত্তর:


4

গল্ফস্ক্রিপ্ট (ইনপুট ফর্ম্যাট এবং স্বীকৃত আউটপুট ফর্ম্যাটের উপর নির্ভর করে 17 থেকে 19 বাইট)

18 বাইট:

~.@*<{\1,or(@*+}/`

ফর্ম ইনপুট লাগে এবং ফর্ম [1 1 0 0 1] [[0 1 0] [0 0 0] [1 1 1 1]] 4আউটপুট দেয় [1 0 1 0 0 0 0]। ( যদি আউটপুট গ্রহণযোগ্য হয় তবে শেষ ব্যতীত 17 বাইট হতে পারে )।`1010000

অনলাইন ডেমো

19 বাইট:

~.@*<{\0`or(1&@*+}/

ফর্ম ইনপুট লাগে "11001" ["010" "000" "1111"] 4

অনলাইন ডেমো

ব্যবচ্ছেদ

~        # Evaluate input: stack: word productions gen
.@*<     # Produce a list of the right number of productions with suitable repetition
{        # For each of those productions:
  \      #   Bring the word to the top
  0`or   #   Ensure that we don't get an error if the word is empty
  (1&    #   Pop the first char from the word and evaluate it
  @*     #   Repeat the production that many times
  +      #   Concatenate 0 or 1 copies of the production to the rest of the word
}/       # Endforeach

ক্রেডিট মার্টিন Büttner এর CJam সমাধান পুনরাবৃত্তি এবং ছাঁটাই দ্বারা প্রযোজনার তালিকা উৎপাদিত ধারণা জন্য।


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

@ মারিনাস, আমার উত্তরটির লেখায় আমি যে 17 বাইট সংস্করণটি উল্লেখ করেছি তা কি আপনি গ্রহণ করেন?
পিটার টেলর

এটি দেখেনি, তবে এটি বৈধ বলে মনে হচ্ছে। আপনার সম্ভবত এটি আরও কিছুটা স্পষ্টভাবে চিহ্নিত করা উচিত।
মেরিনাস

5

হাস্কেল, 55 53 51

(t:w)%p|t=w++p|0<1=w
x%_=x
e w=(!!).scanl(%)w.cycle

এই Trueহিসাবে 1এবং Falseহিসাবে ব্যবহার করে 0। উদাহরণ রান:

*Main> let t=True ; f=False
*Main> e [t,f,t] [[f,f,f],[t,t,t]] 4
[False,False,False,False,False]

3

সিজেম, 31 30 28 27 24 18 বাইট

{_@*<{\_0a?(@*+}/}

এটি একটি ব্লক (ফানসিটিওএনের নিকটতম জিনিস) সংজ্ঞায়িত করে, যা ইনপুটটিকে এই জাতীয় স্ট্যাকের মধ্যে থাকতে পারে বলে প্রত্যাশা করে

[1 1 0 0 1] [[0 1 0] [0 0 0] [1 1 1 1]] 9

এটি একইভাবে স্ট্যাকের উপর একটি 0গুলি এবং 1গুলি এর অ্যারে ছেড়ে দেবে ।

এটি এখানে পরীক্ষা করুন। ইনপুটটিকে প্রথম লাইনটি, তৃতীয় লাইনে কোডটি আটকান এবং ~প্রকৃতপক্ষে ব্লকটি মূল্যায়নের জন্য একটি সংযুক্ত করুন । যেমন

[1 1 0 0 1] [[0 1 0] [0 0 0] [1 1 1 1]] 9
{_@*<{\_0a?(@*+}/}~

যদি আউটপুটটির ইনপুট হিসাবে একই ফর্মটি না থাকে

ব্যাখ্যা:

_@*<{\_0a?(@*+}/
_@               "Duplicate the generation and pull the productions to the top.";
  *<             "Repeat the productions N times and take the first N elements.";
    {         }/ "For each element in that list, run this block.";
     \           "Swap production and current word W.";
      _0a?       "W = (W != []) ? W : [0]. This is to ensure we can unshift an element.";
          (      "Unshift the first 0 or 1 from the word.";
           @     "Rotate the stack, pulling the production to the top.";
            *    "Repeat it 0 or 1 times.";
             +   "Append to the word.";

শব্দের চূড়ান্ত অবস্থা স্ট্যাকের উপরে রেখে গেছে।

পিটার টেলরকে এটি পুনরায় দর্শন করানোর জন্য ধন্যবাদ।


1
l~{_,g{('1=@(:Pa+@@P*+}*}*\;28 এবং এখনও উন্নতির সুযোগ (বিশেষত (:Pঅংশ), তবে মধ্যাহ্নভোজনের সময়
অপ্টিমাইজারটি

@ অপ্টিমাইজার আহ, ভাল ধারণা। ধন্যবাদ. এবং হ্যাঁ, :Pতিনিও আমাকে বিরক্ত করছেন: ডি
মার্টিন ইন্ডার

l~{_,g{(si@(:Pa+@@P*+}*}*\;: 27 এবং এটি :P
অপ্টিমাইজারটি

_,gএছাড়াও _!!একই বাইট সঙ্গে প্রতিস্থাপন করা যেতে পারে ।
অপ্টিমাইজারটি

@ অপ্টিমাইজার আমি _{...}{}?তখন ব্যবহার করতে পারে ।
মার্টিন ইন্ডার

2

গণিত, 84 80 77 অক্ষর

f[_,w_,_]=w;f[p_,{x_,y___},n_/;n>0]:=f[RotateLeft@p,Flatten@{y,p~Take~x},n-1]

উদাহরণ:

f[{{0, 1, 0}, {0, 0, 0}, {1, 1, 1, 1}}, {1, 1, 0, 0, 1}, 4]

{1, 0, 1, 0, 0, 0, 0}


2

পাইথ 22

পৃথক ইনপুট হিসাবে সমস্ত 3 টি আর্গুমেন্ট প্রয়োজন।

#Vvw=z+tz*@Q%NlQshz)zq

যুক্তি গ্রহণ করে:

11001
["010","000","1111"]
4

ব্যাখ্যা:

                        : Implicit: z = input(); Q=eval(input())
#                       : Loop until an exception is thrown
 Vvw               )    : for N in range(eval(input()))
    =z                  : assign to z
      +tz               : the sum of the tail of z and
         *@Q%NlQ        : Q[N%len(Q)] times
                shz     : the numeric value of the first character in z
                    zq  : print z then throw exception

পাইথন 2 - 61 67 91 105 124

c=lambda p,w,g:g*w and c(p[1:]+p[:1],w[1:]+w[0]*p[0],g-1)or w

সুন্দর জো-বেসিক উত্তর। ধরে নিলাম খালি উত্পাদন হচ্ছে [[]]

@ এক্সনোরকে ধন্যবাদ জানাই, কারণ সকাল 2 টায় গল্ফ করা একটি দুর্বল সিদ্ধান্ত।

@ এক্সনোরকে অতিরিক্ত ধন্যবাদ, যার কাছে আমি আমার স্কোরের 50% eণী বলে মনে করি।

নমুনা:

>>> c([[0,1,0],[0,0,0],[1,1,1,1]],[1,1,0,0,1],4)
[1, 0, 1, 0, 0, 0, 0]

1
অবশ্যই এটি ল্যাম্বডা ব্যবহার করা এবং কেবল লেখার g and wজন্য খাটো x? এছাড়াও, আমি মনে করি যে g*wউভয়ই gননজারো এবং wঅকার্যকর হলে সত্যের মান দেওয়ার জন্য কাজ করা উচিত ।
xnor

এছাড়াও, আমি অন্তর্গত বুঝতে পারি না if x else w। হবে না xসবসময় সত্য হতে কারণ এই কোড শুধুমাত্র চালানো হয় if x, অথবা আমি কিছু অনুপস্থিত করছি?
xnor

@ এক্সনর অবশ্যই, আপনি সম্পূর্ণ সঠিক: :)
ফ্রাইআম দ্য এজম্যান

1
আরও কিছু and/ orকৌশল নিয়ে গল্ফ করে এবং pnc=lambda p,w,g:g*w and c(p[1:]+p[:1],w[1:]+w[0]*p[0],g-1)or w
বর্ধনের

@ এক্সনর ধন্যবাদ :) এছাড়াও, এখন আপনি এটিকে 3 টি ভেরিয়েবলের একটি ফাংশন হিসাবে তৈরি করেছেন বলে আমি মনে করি আমি এটি
পাইথের

1

জাভাস্ক্রিপ্ট ES6 - 88 বাইট

f=(p,w,g,n)=>g?w.replace(/(.)(.*)/,(_,a,b)=>f(p,a*1?b+p[(n=n||0)%p.length]:b,g-1,n+1)):w

ফ্রাইয়ের উত্তরটির সাথে নিখুঁতভাবে অনুরূপ দেখাচ্ছে যা আমার ব্রাউজারে সবেমাত্র আপ আপ হয়েছে। (অনুলিপি করা হয় না, আমি শপথ করে শপথ করি।)

তবে স্ট্রিং / রেজেক্স রুটে যাওয়ার সময় এটি অ্যারে রুটে গিয়ে উপস্থিত হবে।

সম্প্রসারিত:

f = (p,w,g,n) =>
    g ?
        w.replace( /(.)(.*)/, (_,a,b) =>
            f( p, a*1 ? b + p[(n=n||0)%p.length] : b, g-1, n+1 )
        )
    :
        w

নমুনা আউটপুট

f(['010','000','1111'],'11001',4)
"1010000"

এখন গল্ফ ভাষাগুলি আসুন এবং আমাদের দু'জনকে গণহত্যা দেখুন। : ডি


আমি আসলে আমার পোস্টটি মুছলাম কারণ আমি দুটি উদাহরণের জন্য পৃথক উত্তর পাচ্ছি getting তিনি উদাহরণস্বরূপ চেষ্টা করেছেন যেখানে তিনি প্রজন্মান্তরে চলেছেন? এটি যে সম্পূর্ণ কল উদাহরণ দিয়েছিল তার তুলনায় এটি
একদিক

এবং চিন্তা করবেন না, আমি বিশ্বাস করি আপনি আমাকে অনুলিপি করেন নি: পি
ফ্রাইআম দ্য এজম্যান

@ ফ্রাইআম দ্য এজিগম্যান: খনি ধারাবাহিকভাবে প্রজন্মের জন্য নিয়মিতভাবে "পূর্বে" কলাম তৈরি করে। এটি ওপি-র উদাহরণের সাথে সামঞ্জস্যপূর্ণ এবং এটি যৌক্তিক বলে মনে হচ্ছে যে "প্রজন্ম 0" সহজেই প্রক্রিয়াজাত না করে ইনপুটটি ফিরিয়ে দেবে, যা এই ব্যাখ্যার সাথে সামঞ্জস্যপূর্ণ। ঘটনাচক্রে, আমি "অনুলিপি" অস্বীকৃতি যুক্ত করেছি কারণ সমাধানগুলি কিছু দিক থেকে অস্বাভাবিকভাবে সমান। আমরা একই আর্গুমেন্টের নামগুলি, একই বেসিক পুনরাবৃত্তিমূলক কাঠামো ব্যবহার করেছি এবং আমরা একই ফ্যান্টম চতুর্থ যুক্তি যুক্ত করেছি n,। দারুণ মন, আহ? : ডি
COTO

ঠিক আছে, আমি অনুমান করি যদি আমাদের দুজনের মধ্যে কেউ ভুল হয় তবে আমরা দুজনেই ভুল! সংযুক্ত আমরা দাঁড়িয়েছি।
FryAmTheEggman

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