ব্লকস্ক্রিপ্ট - 535
{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;
ব্লকস্ক্রিপ্ট একটি তুচ্ছ স্প্যাগেটি স্ট্যাক ভিত্তিক ভাষা যা আমি এই চ্যালেঞ্জটির জন্য বিশেষভাবে তৈরি করেছি। বেস ইন্টারপ্রেটার ব্লকসক্রিপ্ট ।
নমুনা প্রোগ্রাম (প্রথম 15 ফিবোনাচি সংখ্যা মুদ্রণ করে):
{[B?B10/A!B10%d&:0}
{[B0<?'-.0B-A!:{B?Bh!{[B?B[A]A!B[B]'0+.:}!:'0.}!10.}
{[B?Dd!DC+B1-CecA!:}
0 1 15d!
;
দোভাষী তার ক্রম অনুযায়ী স্ট্যান্ডার্ড ইনপুট থেকে উত্স কোড এবং প্রোগ্রাম ইনপুট উভয়ই পড়েন। এর অর্থ হ'ল একজন দোভাষীর মধ্যে একজন অনুবাদকের মধ্যে দোভাষী চালানো, কেবল অনুলিপি করুন এবং পেস্ট করুন:
# Level 1
{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;
# Level 2
{[B':=?0:B';=?0:B'}=?0:B'{=?,A!,A!d1c&:B'?=?,A!,A!2e&:B''=?,,A!d3c&:B{[B'0<?0:B
'9>?0:1}!?B'0-{[,g!?c'0-B10*d+A!:Bd]A!d3c&}!:B'#=?{[,10=?,]A!:A!}!:,A!Bb&}{[AC[
B]DB?[AB{[Bh&hbhn!}{[B[AB]C?1-eA!:b}&[C1=?E[C]FHc&B!:C2=?{G?D:E[C}!FHcI!:C3=?E[
C]B!:C'!=?G[ABC]Hc&dbh&D?b@I!B!:b@I!:C'&=?HB!:C'@=?FGDI!:C'[=?GF&HDI!:C']=?F[A]
HDI!:C',=?,B!:C'.=?G.FHDI!:C'a'z{[DC<?0:DB>?0:1}!?Ce-HA!B!:C'A'Ze!?F[B]Cg-dA!B!
:{C'+=?{[CB+}:C'-=?{[CB-}:C'*=?{[CB*}:C'/=?{[CB/}:C'%=?{[CB%}:C'<=?{[CB<}:C'>=?
{[CB>}:C'==?{[CB=}:0}!?H[A][B]Ge!B!:FHDI!:c},c!0ac&0&0&0bho!;
# Level 3
{[B?B10/A!B10%d&:0}
{[B0<?'-.0B-A!:{B?Bh!{[B?B[A]A!B[B]'0+.:}!:'0.}!10.}
{[B?Dd!DC+B1-CecA!:}
0 1 15d!
;
ইনসেপশন মুভিটির মতো , আপনি তিনটি স্তরের চেয়ে আরও গভীরতর কিছুতে যেতে পারবেন না। এটি সময়ের বিষয় নয়, স্থান। ব্লকস্ক্রিপ্ট মেমরিটিকে গভীরভাবে ফাঁস করে এবং এটি কীভাবে ভাষা নিজেই ডিজাইন করা হয়েছে তার সাথে সম্পর্কযুক্ত।
ভাষার উল্লেখ:
এখানে দোভাষী পান
ব্লকস্ক্রিপ্টে, "স্ট্যাক" কোনও অ্যারে নয় যা পরের ক্রিয়াকলাপগুলির দ্বারা ওভাররাইট করা হয় যেমন আপনার ব্যবহৃত হতে পারে। এটি আসলে অপরিবর্তনীয় লিঙ্ক তালিকা হিসাবে প্রয়োগ করা হয় এবং প্রোগ্রামের সময়কালের জন্য একটি স্ট্যাক স্থির থাকে। এছাড়াও, কোনও অপারেটর (বাদে @
) স্ট্যাক থেকে মানগুলি সরায় না। তবে, স্ট্যাক পরিবর্তনগুলি কেবল যে ব্লকটিতে ঘটে সেগুলি প্রভাবিত করে।
মান নির্বাচন
a
মাধ্যমে z
স্ট্যাক থেকে 0-25 তম আইটেমটি আনুন এবং স্ট্যাকের দিকে চাপ দিন। a
স্ট্যাকের মাথা, বা সর্বাধিক ধাক্কা দেওয়া আইটেমকে বোঝায়।
A
মাধ্যমে Z
বর্তমান ফ্রেমের 0-25 তম আইটেমটি আনুন এবং স্ট্যাকের দিকে চাপ দিন।
[
স্ট্যাকের মাথায় স্ট্যাক রেফারেন্স (নীচে দেখুন) থেকে আইটেম নির্বাচন করতে একটি "ফ্রেম" খুলুন। [
কোনও মিলের প্রয়োজন হয় না ]
, তবে ফ্রেমগুলিকে লেক্সিকালি স্কোপ করা হয়। ব্লকস্ক্রিপ্টে, "সুযোগ" নির্ধারণ করা হয় বন্ধনীগুলি ( {
... }
) যা ব্লক তৈরি করে by সুতরাং, কোনও ব্লকের ভিতরে ফ্রেম খোলার ফলে ব্লকের বাইরের কোডের কোনও প্রভাব পড়বে না।
]
পূর্ববর্তী ফ্রেমে ফিরে (বর্তমান যদি থাকে) বর্তমান ফ্রেমটি বন্ধ করুন।
ব্লক
{
... }
একটি "ব্লক" তৈরি করুন, এবং এটি স্ট্যাকের দিকে ঠেলাও। একটি ব্লকের অভ্যন্তরে, স্ট্যাকটি ব্লকের আগে যা শুরু হয়েছিল তার থেকে শুরু হবে, কলারের স্ট্যাকটি বাদ দিয়ে উপরে চাপ দেওয়া হবে। ব্লকস্ক্রিপ্টে স্ট্যাকগুলি স্থির এবং অপরিবর্তনীয়, তাই ব্লকগুলি ক্লোজার ures আইডিয়ামটির {[
অর্থ একটি ব্লক খুলুন, তারপরে আর্গুমেন্টগুলি নির্বাচন করার জন্য একটি ফ্রেম খুলুন ( A
মাধ্যমে ব্যবহার করা Z
)। একটি ব্লক ফেরত মান স্ট্যাক প্রধান যখন }
উপনিত।
উদাহরণ:
'3 '2 '1 {[ b. d. f. B. C. D. A! } 'D 'C 'B d!;
এই মুদ্রণ 123BCD123DCB123BCD123DCB…
। ছোট হাতের অক্ষরগুলি স্ট্যাকের মানগুলিকে বোঝায়, যখন বড় হাতের অক্ষরগুলি আর্গুমেন্টগুলিকে উল্লেখ করে (কারণ ফ্রেমটি কলারের স্ট্যাকের সাথে সেট করা থাকে)। A!
কলারের শিরোনাম নেয় (যেটিকে ব্লক বলা হচ্ছে তার নিশ্চয়তা) এবং এটি কল করে। আপনি যদি ভাবছেন যে এটি প্রতিবার কেন বিপরীত BCD
হয়, কারণ এটি B. C. D.
যুক্তিগুলি ব্লকটি কল করার ঠিক আগে বিপরীত ক্রমে চাপ দেয়।
!
একটি ব্লক কল করুন। স্ট্যাকের জন্য রিটার্ন মানটি পুশ করুন।
স্ট্যাক রেফারেন্স
&
একটি স্ট্যাকের রেফারেন্স তৈরি করুন এবং এটিকে স্ট্যাকের দিকে ঠেলে দিন। এটিকে "সুপার-কনস" হিসাবে ভাবুন, কারণ এটি স্ট্যাকের প্রতিটি আইটেমকে কার্যকরভাবে গ্রহণ করে এবং এর মধ্যে একটি "টিপল" গঠন করে। বাগ্ধারা &[
মানে যে যাই হোক না কেন a
, b
, c
উল্লেখ করার আগে এখন অ্যাক্সেস করতে A
, B
, C
(অবরোধ বাকি জন্য অথবা পর্যন্ত ]
সম্মুখীন হয় না)।
অংশ হিসাবে কারণ &
এটি সাধারণত প্রয়োজনের চেয়ে বেশি মান ক্যাপচার করে, ব্লকস্ক্রিপ্ট ডিজাইনের মাধ্যমে মেমরি ফাঁস করে।
@
স্ট্যাক রেফারেন্স দ্বারা নির্দেশিত স্ট্যাকের দিকে স্যুইচ করুন a
। এই অপারেটরটি বরং অদ্ভুত, তবে একই আর্গুমেন্টটিকে দু'বার ধাক্কা না দেওয়ার জন্য ব্লকস্ক্রিপ্ট স্ব-অনুবাদক এটি কয়েকবার ব্যবহার করেন। @
(বা কোনও স্ট্যাক অপারেশন, সেই বিষয়ে) এর প্রভাবগুলি কেবল সেই ব্লকটিতে সীমাবদ্ধ থাকে যেখানে এটি আহ্বান করা হয়। এছাড়াও, ফ্রেম দ্বারা প্রভাবিত হয় না @
, তাই ফ্রেমগুলি স্ট্যাকগুলি স্যুইচ করার পরে আপনার প্রয়োজনীয় মানগুলি দখল করতে ব্যবহার করা যেতে পারে।
শর্তাধীন অভিব্যক্তি
?
<সত্যে> :
<মিথ্যে>
শর্তসাপেক্ষ অভিব্যক্তি, ঠিক যেমন সি এর তিনটি অপারেটরের মতো, এটি যদি a
"সত্য" হয় (এটি হল পূর্ণসংখ্যার শূন্যের সমান নয়), তবে <সত্য>> করুন , অন্যথায় <মিথ্যে> করুন ।
ইনপুট / আউটপুট
দ্রষ্টব্য: ইনপুট এবং আউটপুট ইউটিএফ -8 এ সম্পন্ন হয়। একটি "চরিত্র" হ'ল একটি ইউনিকোড সূচকের সাথে সম্পর্কিত একটি পূর্ণসংখ্যা।
,
ইনপুট পরবর্তী অক্ষর পান, এবং এটি স্ট্যাকের দিকে ধাক্কা। যদি ইনপুটটির শেষে পৌঁছে যায়, পরিবর্তে -1 টিপুন।
.
স্ট্যাকের মাথায় চরিত্রটি আউটপুট করুন।
পূর্ণসংখ্যা / চরিত্রের আক্ষরিক
দ্রষ্টব্য: ব্লকস্ক্রিপ্টে পূর্ণসংখ্যা এবং অক্ষরগুলি একই জিনিস।
পাটীগণিত
এই অপারেটরগুলি কেবল পূর্ণসংখ্যার মানগুলিতে কাজ করে।
+
গণনা b
+ a
(ফলাফলটি ধাক্কা দিচ্ছে, তবে কোনও মানই ছাড়ছে না)।
-
গণনা b
- a
।
*
গণনা b
* a
।
/
গণনা b
/ a
(পূর্ণসংখ্যা বিভাগ; নেতিবাচক অসীমের দিকে রাউন্ড)।
%
গণনা b
% a
(পূর্ণসংখ্যা মডুলাস; নেতিবাচক অসীমের দিকে রাউন্ড)।
রিলেশনাল অপারেটর
এই অপারেটরগুলি কেবল পূর্ণসংখ্যার মানগুলিতে কাজ করে।
<
এর b
চেয়ে কম হলে a
1 টি চাপুন, অন্যথায় 0 চাপুন।
>
=
বিবিধ
#
লাইনের শেষে মন্তব্য করুন
- প্রোগ্রামটি শেষ হতে হবে
;
- অন্য সমস্ত চরিত্র উপেক্ষা করা হয়।
/usr/bin/cat
) টুরিং-সম্পূর্ণতা সম্পর্কে কী বলা যায়?