টুমেগা ব্যাখ্যা করুন


9

এই চ্যালেঞ্জটিতে আপনি 2 Ω ( টুমেগা হিসাবে অনুলিপি করা ) জন্য একটি দোভাষী লিখবেন , একটি ভাষা অসীম-মাত্রিক স্টোরেজ স্পেস সহ ব্রেনফাকের উপর looseিলে .ালা ভিত্তিক একটি ভাষা ।

ভাষা

2 Ω রাষ্ট্রের তিনটি টুকরা রয়েছে:

  • টেপ , যা বিট অসীম তালিকা, সব 0 সক্রিয়া একটি বামদিকের উপাদান, কিন্তু কোন ডানদিকের উপাদান রয়েছে।

  • স্মৃতি পয়েন্টার , যা একটি নন-নেগেটিভ পূর্ণসংখ্যা টেপ একটি উপাদান একটি সূচক হয় না। একটি উচ্চতর মেমরি পয়েন্টারটি ডানদিকে আরও একটি টেপ সেলকে বোঝায়; 0 এর একটি মেমরি পয়েন্টার বামতম উপাদানকে বোঝায়। মেমরি পয়েন্টারটি 0 থেকে শুরু করা হয়।

  • Hypercube , যা একটি ধারণার দিক হল -dimensional কোষের "বাক্সটি", যা প্রতিটি একটু 0 সক্রিয়া রয়েছে hypercube প্রস্থ শুধুমাত্র 2 কোষ যে মাত্রা বাঁধা হয়, কিন্তু মাত্রার অনন্ত সংখ্যা মানে কোষগুলি অগণনীয়

হাইপারকিউবে একটি সূচি হ'ল বিটের একটি অসীম তালিকা যা হাইপারকিউবের কোনও সেলকে বোঝায় (একইভাবে বিটের একটি সীমাবদ্ধ তালিকা সীমাবদ্ধ মাত্রার হাইপারক्यूबকে বোঝাতে ব্যবহার করা যেতে পারে)। যেহেতু টেপ বিটের একটি অসীম তালিকা, পুরো টেপটি সর্বদা হাইপারকিউবের কোনও উপাদানকে বোঝায়; এই উপাদানটিকে রেফারেন্ট বলা হয় ।

2 Ω 7 বিভিন্ন অক্ষরের মধ্যে অর্থ দেয়:

  • < 1. দ্বারা মেমোরি পয়েন্টার হ্রাস করে এটি 0 এর নীচে হ্রাস হ'ল সংজ্ঞায়িত আচরণ, সুতরাং আপনার এটি পরিচালনা করার দরকার নেই।
  • > 1 দ্বারা মেমরি পয়েন্টার বৃদ্ধি করে।
  • ! রিটার্ন এ বিট ফ্লিপ।
  • . বিপরীতে বিট আউটপুট।
  • ^সেল সঙ্গে টেপ মেমরির পয়েন্টার দ্বারা প্রতি ইঙ্গিত এ বিট প্রতিস্থাপন বিপরীত প্রসঙ্গ এ বিট।
  • [x]কোডটি চালান xযতক্ষণ না রেটরেটে বিট 1 হয়।

চ্যালেঞ্জ

আপনার কাজটি এমন একটি প্রোগ্রাম লেখা যা ইনপুট হিসাবে স্ট্রিং নেয় এবং সেই ইনপুটটিকে 2 Ω প্রোগ্রাম হিসাবে চালিত করে

এই , সুতরাং সংক্ষিপ্ততম বৈধ উত্তর (বাইটগুলিতে পরিমাপ করা) জিতেছে।

মন্তব্য

  • আপনি ধরে নিতে পারেন যে প্রোগ্রামটি কেবলমাত্র অক্ষরগুলি <>!.^[]নিয়ে গঠিত এবং এটি []সঠিকভাবে নেস্ট করা হবে।
  • আপনার দোভাষী কেবলমাত্র সিস্টেমে উপলব্ধ মেমরির দ্বারা সীমাবদ্ধ হওয়া উচিত। এটি একটি যুক্তিসঙ্গত সময়ে নমুনা প্রোগ্রামগুলি চালাতে সক্ষম হওয়া উচিত।

নমুনা প্রোগ্রাম

মুদ্রণ 1:

!.

010 মুদ্রণ করুন:

.!.!.

চিরকাল মুদ্রণ করুন:

![!.!]

চিরকাল 0 টি মুদ্রণ করুন, বা চিরকাল 1 টি চাপ দেওয়া থাকলে !:

[.]![!.!]

2
একটি ছোট নোট: স্টোরেজ সেলগুলির সংখ্যা প্রকৃতপক্ষে অগণিত নয়, কারণ টেপটিতে 1s এর সংখ্যা সর্বদা সীমাবদ্ধ থাকে। প্রকৃতপক্ষে, প্রাকৃতিক সংখ্যা এবং টেপ রাজ্যগুলির মধ্যে একটি মোটামুটি সহজ দ্বিধা রয়েছে (টেপ বিষয়বস্তুটিকে পিছনের দিকে বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করুন), যা দেখায় যে হাইপারকিউব মূলত একটি অসীম 1D অ্যারে, একটি পূর্ণসংখ্যার পয়েন্টার মানটিতে বিট ফ্লিপ করে অ্যাক্সেস করা হয় পরিবর্তে, ব্রেইনফাকের মতো / কমতে থাকে।
লিন

এছাড়াও, পুনরায়: আপনার একটি catপ্রোগ্রাম লেখার আমন্ত্রণ : ইনপুট নেওয়ার কোনও নির্দেশ বলে মনে হচ্ছে না।
লিন

2
আমি মনে করি আরও বেশি নির্দেশাবলী সেট ব্যবহার করে নমুনা প্রোগ্রাম থাকা উচিত wo দুটি সহজ সাধারণ: .- একটি একক শূন্য প্রিন্ট করে এবং তারপরে বিদ্যমান; !^!.- একক মুদ্রণ পরে প্রস্থান। আরও ভাল হবে যদিও। এই মুহুর্তে তাদের অবশ্যই যাচাই করতে অবশ্যই সাবমিশনগুলি বুঝতে হবে (এবং সেজন্য তাদের উজ্জীবিত করুন!)
জোনাথন অ্যালান

@ লিন ইনপুটটি সেলটিতে একটি 1 বা 0 রাখার মাধ্যমে দেওয়া হবে [0,0,0,0,0,0,0...](যেমন !প্রোগ্রামের শুরুতে উপস্থিতির উপস্থিতি )।
ফল এশোলং ফল

তারপরে আপনি [.]![!.!]সেই কক্ষটির মূল্য চিরকালের জন্য মুদ্রণ করতে পারেন
লিও

উত্তর:


2

পাইথন 2 , 167 বাইট

t=h=I=0
m=1
E=''
for c in input():i='[<>!.^]'.find(c);E+=' '*I+'while+2**t&h: m/=2 m*=2 h^=2**t print+(2**t&h>0) t=t&~m|m*(2**t&h<1) #'.split()[i]+'\n';I-=~-i/5
exec E

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

t হ'ল টেপ। t = 6 মানে টেপটি হল [0 1 1 0 0 0…]

মেমরি পয়েন্টারটির শক্তি 2 মি । সুতরাং মি = 8 এর অর্থ আমরা টেপ বিট 3 এ নির্দেশ করছি।

h হল হাইপারকিউব। এইচ = 80 (বিট 4 এবং 6 সেট) এর অর্থ [0 0 1 0…] এবং [0 1 1 0…] এ বিটগুলি সেট করা আছে।

রেফারেন্সিতে বিটটি পড়তে, আমরা 2 টি ও এইচ পরীক্ষা করি । এটি উল্টাতে, আমরা h ^ = 2 টি সঞ্চালন করি ।

আমরা পাইথন কোডে নির্দেশাবলীটি অনুবাদ করি এবং ফলাফলটি কার্যকর করি। আমি লুপগুলির ইন্ডেন্টেশন স্তরটি সঞ্চয় করি


হয় আপনার প্রোগ্রাম বা দ্বিতীয় পরীক্ষার কেস ভুল
wastl

@ ওয়াস্টল দ্বিতীয় পরীক্ষার মামলাটি ভুল ছিল। ;)
DLosc


2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 148 বাইট

x=>eval(x.replace(e=/./g,c=>({'<':'u/=2','>':'u*=2','!':'e[v]^=1','.':'alert(+!!e[v])','^':'v=(v|u)^u*e[v]','[':'while(e[v]){'}[c]||'}')+';',v=u=1))

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

এটি টুরিং সম্পূর্ণ

BoolFuck TwoMega
< >^>^>[!]^<<<<[!]^>>[!]!^>[!]!^>[!]!^<<<<(>^>^>1<<<<1>>0>0>0<<<<)
> ^<^<[!]^>>>>[!]^<<[!]!^<[!]!^<[!]!^>>>(^<^<1>>>>1<<0<0<0>>>)

ডান সংখ্যক স্থানে চলতে চলতে এবং ঠিকানাটির বর্তমান এবং ডান এক বিটটিকে 1 ( >>>>>>>>^>^<) হিসাবে সূচনা করতে হবে

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

nBoolFuck এ স্থান হিসাবে লেখা হয় (0, 0, ..., 0(n*0), [1], 1, 0, 0, ...)

জন্য >, এটি n=>n+1

     0 0 0 0 0[1]1 0 0 0 0
^    0 0 0 0 0[x]1 0 0 0 0
<    0 0 0 0[0]x 1 0 0 0 0
^    0 0 0 0[y]x 1 0 0 0 0, yx != 01
<    0 0 0[0]y x 1 0 0 0 0
[!]^ 0 0 0[1]y x 1 0 0 0 0, (0yx10) = 0
>>>> 0 0 0 1 y x 1[0]0 0 0
[!]^ 0 0 0 1 y x 1[1]0 0 0, (1yx10) = 0
<<   0 0 0 1 y[x]1 1 0 0 0
[!]! 0 0 0 1 y[x]1 1 0 0 0, (1yx11) = 1
^    0 0 0 1 y[0]1 1 0 0 0
<    0 0 0 1[y]0 1 1 0 0 0
[!]! 0 0 0 1[y]0 1 1 0 0 0, (1y011) = 1
^    0 0 0 1[0]0 1 1 0 0 0
<    0 0 0[1]0 0 1 1 0 0 0
[!]! 0 0 0[1]0 0 1 1 0 0 0, (10011) = 1
^    0 0 0[0]0 0 1 1 0 0 0
>>>  0 0 0 0 0 0[1]1 0 0 0

একই <কাজ কিভাবে


আপনি কি নিশ্চিত যে এই অনুবাদটি বৈধ? !>.কপি করে প্রিন্ট 1boolfuck কিন্তু অনুবাদ করতে !>^.যা TwoMega 1 ছাপে ( >টেপ প্রভাবিত করে না; ^টেপ প্রভাবিত করে না যেহেতু প্রসঙ্গ 1)
Esolanging ফলের

@EsolangingFruit +>;না [1]00... 1[0]0...(আউটপুট 0), !>^.না (0,0,...)=1, ptr=([0],0,...) (0,0,...)=1, ptr=(0,[0],...) (0,0,...)=1, ptr=(0,[1],...)(আউটপুট 0), কী হয়েছে?
l4m2

এর জন্য এলোসিংফ্রুট !>., কেবল >বুলফাকের মধ্যে একটি বৈধ কমান্ড ...
এএসসিআইআই-

1
@ l4m2 টুমেগায়, !টেপ ঘরটি নয় , বিপরীতকে উল্টে দেয়।
এএসওলিংয়ে ফল

পছন্দ করুন
l4m2

1

ব্রেন-ফ্লাক ক্লাসিক , 816 বাইট

<>(((<(())>)))<>{(([][][])(((({}){}[])({}))({})[]([][](({})(({}())(({}){}{}({}(<()>))<{<>({}<>)}{}>))))))(([]{()(<{}>)}{}){<((<{}>))<>(()(){[](<{}>)}{}<{({}[]<({}<>)<>>)}{}{}>)<>({()<({}<>)<>>}<<>{<>(({}){}<>({}<>)[])<>}{}<>({()<({}[]<<>({}<>)>)>}{})<>(({})<<>{({}[]<({}<>)<>>)}({}<>)<>{({}<>)<>}>)<>>)<>({}<>)<>>}{}([]{()(<{}>)}{}){{}<>({})(<>)}{}([]{()(<{}>)}{}){(<{}<>({}<{((<({}[])>))}{}{((<(())>))}{}>)<>>)}{}([]{()(<{}>)}{}){(<{}<>({}<({}())>)<>>)}{}([]{()(<{}>)}{}){(<{}<>[({})]<>>)}{}([]{()(<{}>)}{})<{((<{}>))<>{}({}<{<>(({}){}<>({}<>)[])<>}{}<>({()<({}[]<<>({}<>)>)>}{})<>(((){[](<{}>)}{})<<>{({}[]<({}<>)<>>)}{}(<>)<>{({}<>)<>}>)<>>)<>({}<>)<>}{}(<>)<>{({}<>)<>}{}>()){((({}[]<>){(<{}({}<>)>)}{}())<{({}<({}<>)<>((((((([][][]){}){}){}()){}){}({})())[][])>{[](<{}>)}{}{()(<{}>)}{})}{}({}<>)>[]){{}(<>)}}{}}

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

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

টুরিং-সম্পূর্ণতার প্রমাণ

আমরা বুলফাক থেকে টুমেগায় হ্রাস দেখাই:

Boolfuck   TwoMega
>          >>
<          <<
.          !^!.!^!
[          !^![!^!
]          !^!]!^!
+          !^[!]^[>!^<[!]!^>[!]!^<]

এই অনুবাদটি টুমেগায় সমান সংখ্যাযুক্ত টেপ কোষগুলিতে বুলফাক স্টেট সংরক্ষণ করে। সমস্ত অনূদিত কমান্ড নিম্নলিখিত আক্রমণকারীদের সংরক্ষণ করবে:

  • মেমরি পয়েন্টারটি একটি সমান সংখ্যাযুক্ত ঘরে রয়েছে।
  • সমস্ত বিজোড়-সংখ্যাযুক্ত টেপ কোষগুলি শূন্য।
  • সমস্ত বিজোড়-সংখ্যাযুক্ত কক্ষগুলি শূন্য সহ যে কোনও সম্ভাব্য টেপের জন্য হাইপারকিউবে সংশ্লিষ্ট মানটি শূন্য।

স্নিপেট !^!রাখা হবে [0]0মধ্যে ধ্রুবক এবং swap 'র 0[0]এবং [1]1(যেখানে মনোযোগ মেমরির পয়েন্টার চলন্ত ছাড়া hypercube পৌঁছানো লাইনে সীমাবদ্ধ)। যেমন, এটি বুলফাক কমান্ডগুলির জন্য সামঞ্জস্যভাবে বর্তমান টেপ মানটি রিটারেন্টে রাখার জন্য ব্যবহৃত হয় যা এটি যত্ন করে।

যদি টুমেগাকে ,প্রত্যাশিত শব্দার্থবিজ্ঞানের সাথে একটি ইনপুট কমান্ড দেওয়া হয়, তবে বুলফাক কমান্ডটি ,অনুবাদ করবে >^<,!^>[!]!^<। যেহেতু ,বুলফাক টিউরিং-সম্পূর্ণ তা প্রমাণ করার প্রয়োজন নেই, সুতরাং ইনপুট কমান্ডের অভাব এই প্রমাণকে প্রভাবিত করে না।


এটি মূলত কিউবের পরিবর্তে হাইপারকিউবে অবস্থানে তথ্য সংরক্ষণ করে?
l4m2

@ l4m2 BoolFuck থেকে আমার হ্রাস কিউবে কোনও ডেটা সংরক্ষণ করে না।
হাইপারকিউবে

0

পাইথন 3 , 297 284 274 বাইট

-10 বাইটস ওভস এবং জোনাথন অ্যালানকে ধন্যবাদ

C=input()
h={}
t=set()
def f(C,p):
 c=C[0];r=hash(frozenset(t));v=h.get(r,0)
 p={"<":p-1,">":p+1}.get(c,p)
 if'"'>c:h[r]=not v
 if"."==c:print(int(v))
 if"]"<c:t.discard(p)if v else t.add(p)
 if"["==c:
  while f(C[1:],p):1
 else:return c=="]"and v or C and f(C[1:],p)
f(C,0)

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


t.discard(p)->t-={p}
shooqie

@shooqie এতে কাজ না হলে যদি না tহয় global
ফার্গুসক

@fergusq যদিও আমি নিশ্চিত যে আপনি যদি এটি fহিসাবে ঘোষণা করেন তবে এটি কার্যকর হবেf(C,p,t=set())
shooqie

0

পিপ , 75 71 বাইট

lPB0aR:^"!><[].^_""!:_
--viPU0
++v
W_{
}
O_
i@v:!_LFBilPB0
l@FBi"^n;Vau

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

2 Ω কোডটিকে সমান পাইপ কোডে অনুবাদ করে এবং এটি মূল্যায়ন করে।

আমরা iটেপ, vটেপ পয়েন্টার * এবং lহাইপারকিউবের জন্য প্রতিনিধিত্ব করি। প্রথম দুটি কার্যকর মূল্যবোধের পূর্বরূপে আসে; lসূচনা -খালি-তালিকা সমস্যাগুলি এড়ানোর জন্য []আমরা একটি 0( lPU0) চাপি যা হিসাবে শুরু হয় ।

* প্রকৃতপক্ষে, এটি টেপ পয়েন্টারটির বিটওয়াইজ অবহেলা, কারণ আমরা দশকে আরও সহজে রূপান্তর করার জন্য টেপটি পিছনের দিকে সংরক্ষণ করি।

কোডটির বাকী অংশটি হ'ল:

aR:...;     Do a bunch of replacements in a, translating it into Pip code
       Va   Evaluate a
         u  Suppress output of the final expression that was evaluated

অনুবাদ টেবিল:

!  !:_
>  --viPU0
<  ++v
[  W_{
]  }
.  O_
^  i@v:!_LFBilPB0
_  l@FBi

l@FBiহ'ল রেফারেন্স: lসূচকে হাইপারকিউবের উপাদান ( iবাইনারি থেকে রূপান্তর )। এটি প্রায়শই উপস্থিত হয়, তাই আমরা এটিকে কল করি _এবং _শেষে আসল কোড দিয়ে প্রতিস্থাপন করি ।

  • !:_ যুক্তিযুক্তভাবে জায়গায় references অবহেলা।

  • --viPU0হ্রাস v(টেপ পয়েন্টারটি ডানদিকে সরানো); এটি টেপ পয়েন্টারটি সীমানায় থাকে কিনা তা নিশ্চিত করার জন্য এটির 0বাম দিকে অন্যটিকে ধাক্কা দেয় i

  • ++vইনক্রিমেন্ট v(ওপি প্রতি সীমা পরীক্ষা করার প্রয়োজন নেই)।

  • W_{প্রতিচ্ছবি সত্যবাদী (যেমন ননজারো, অর্থাত্ 1) যখন একটি লুপ চালায় runs

  • } লুপ বন্ধ।

  • O_ নিউলাইন ছাড়াই রেফারি আউটপুট করে।

অবশেষে, এর জন্য ^:

i@v:            Set the current tape cell to
    !_          The logical negation of the referent
                Now, make sure the list representing the hypercube is long enough:
      LFBi      Loop frombinary(i) times:
          lPB0  Push another 0 to the end of l
                This ensures that FBi will always be a valid index into l
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.