লিডারবোর্ড - জেআইটি সংকলিত (নিম্নে ভাল)
- es1024 - 81.2 পয়েন্ট (একটি ওয়ার্কিং সংকলক সহ!)
- কিথ র্যান্ডাল - 116 পয়েন্ট
- Ell - 121 পয়েন্ট
লিডারবোর্ড - ব্যাখ্যা করা (নিম্নতর ভাল)
- মার্টিন বাটনার - 706654 পয়েন্ট (কোথাও প্রায় 2 ঘন্টা)
- ক্রিপটাইচ - 30379 পয়েন্ট (97 সেকেন্ড)
আপনার মিশনটি, আপনি যদি এটি গ্রহণ করা পছন্দ করেন তবে হ'ল ছোট্ট সম্ভাব্যতম বাইটকোড দোভাষী / ভিএম লিখুন। নীচে বর্ণিত ভাষাটি সহ ভিএম / ইন্টারপ্রেটার একটি ছোট সিআইএসসি আর্কিটেকচার (ক্রিয়াকলাপ আকারে পৃথক হতে পারে) ব্যবহার করে। সমাপ্তির পরে, আপনাকে অবশ্যই সঠিক সিপিটি (3,126,900,366) মুদ্রিত হয়েছে তা প্রমাণ করতে 3 সিপিইউ নিবন্ধকের মান মুদ্রণ করতে হবে।
সংকলনকারী
আপনি যদি নিজের পরীক্ষা করতে চান তবে নীচে একটি সংকলক পোস্ট করা হয়েছে। আপনার উত্তর দিয়ে আপনার পরীক্ষা পোস্ট করতে নির্দ্বিধায়।
"ভিএম" বিশেষ উল্লেখ
ভিএম-তে 3 32 বিট স্বাক্ষরবিহীন ইন্টিগ্রাল রেজিস্টার রয়েছে: আর 0, আর 1, আর 2। এগুলি 0x00, 0x01 এবং 0x02 হিসাবে হেক্সে উপস্থাপন করা হয়।
নিম্নলিখিত ক্রিয়াকলাপগুলি সমর্থন করা আবশ্যক:
ফর্ম্যাটটি হ'ল [নাম] [... অপারেশনস ...], [হেক্সাডেসিমাল অপ-কোড] [... অপারেশনগুলি পুনরাবৃত্তি করা হয়েছে ...]
- লোড করুন [নিবন্ধ করুন] [4 বাইট মান], 0x00 [নিবন্ধন করুন] [4 বাইট মান]
- পুশ [রেজিস্টার], 0x02 [রেজিস্টার]
- পপ [রেজিস্টার], 0x03 [রেজিস্টার]
- যোগ করুন [রেজিস্টার, 1 বাইট] [নিবন্ধন, 1 বাইট], 0x04 [নিবন্ধন] [নিবন্ধ]
- এসইউবি [রেজিস্টার, 1 বাইট] [রেজিস্টার, 1 বাইট], 0x05 [রেজিস্টার] [রেজিস্টার]
- মুল [রেজিস্টার, 1 বাইট] [রেজিস্টার, 1 বাইট], 0x06 [রেজিস্টার] [রেজিস্টার]
- ডিআইভি [রেজিস্টার, 1 বাইট] [রেজিস্টার, 1 বাইট], 0x07 [রেজিস্টার] [রেজিস্টার]
- জেএমপি [কোড লাইন, 4 বাইট], 0x08 [4 বাইট কোড লাইন নম্বর]
- সিএমপি [রেজিস্টার, 1 বাইট] [রেজিস্টার, 1 বাইট], 0x09 [রেজিস্টার] [রেজিস্টার]
- ব্রাঞ্চল্ট [কোড লাইন, 4 বাইট], 0x0a [4 বাইট কোড লাইন নম্বর]
কিছু নোট:
- উপরের গণিত ক্রিয়াকলাপগুলি প্রথম নিবন্ধে আউটপুট রেখে একসাথে 2 টি নিবন্ধকের মান যুক্ত করে।
- সিএমপি, তুলনা অপারেটর, 2 টি নিবন্ধকের মানগুলির তুলনা করে এবং শাখা নির্দেশাবলীতে ভবিষ্যতের ব্যবহারের জন্য কিছু অভ্যন্তরীণ পতাকায় আউটপুট সংরক্ষণ করতে পারে (এটি বাস্তবায়নের জন্য নির্দিষ্ট হতে পারে)।
- যদি ব্রাঞ্চকে সিএমপির আগে ডাকা হয়, যদি না ব্রাঞ্চেক বলা হয়, "ভিএম" শাখা করা উচিত নয়।
- পুশ / পিওপি আশ্চর্যজনকভাবে স্ট্যাক থেকে ধাক্কা বা পপ সংখ্যা।
- জাম্প এবং ব্রাঞ্চ অপারেটররা বাইনারি ঠিকানা নয়, নির্দিষ্ট ক্রিয়ায় (কোড লাইন) ঝাঁপিয়ে পড়ে।
- শাখা অপারেশন তুলনা না। বরং তারা নির্বাহের শেষ তুলনা থেকে আউটপুট নেয়।
- শাখা এবং জাম্প অপারেটরগুলি শূন্য ভিত্তিক লাইন নম্বর সূচক সিস্টেম ব্যবহার করে। (যেমন জেএমপি 0 প্রথম লাইনে ঝাঁপ দেয়)
- সমস্ত ক্রিয়াকলাপ স্বাক্ষরিত সংখ্যাগুলিতে করা হবে যা ওভারফ্লো শূন্যে চলে যায় এবং পূর্ণসংখ্যার ওভারফ্লোতে কোনও ব্যতিক্রম ছুঁড়ে না।
- শূন্য দ্বারা বিভাগ অনুমোদিত নয় এবং যেমন, প্রোগ্রামটির আচরণটি সংজ্ঞায়িত হয় না। আপনি (উদাহরণস্বরূপ) ...
- প্রোগ্রাম ক্রাশ।
- ভিএম এর কার্যকরকরণের সমাপ্তি এবং এটি বর্তমান অবস্থানে ফিরে আসে।
- একটি "ERR: বিভাগ দ্বারা 0" বার্তাটি দেখান।
- প্রোগ্রামের সমাপ্তিটি সংজ্ঞায়িত করা হয় যখন নির্দেশ পয়েন্টারটি প্রোগ্রামের শেষের দিকে পৌঁছায় (একটি ফাঁকা প্রোগ্রাম অনুমান করা যায়)।
আউটপুট আউটপুট অবশ্যই এটি হতে হবে (নতুন লাইনে অন্তর্ভুক্ত)
R0 3126900366
R1 0
R2 10000
পয়েন্ট
পয়েন্টগুলি নিম্নলিখিত সূত্রের ভিত্তিতে গণনা করা হয়:Number Of Characters * (Seconds Needed To Run / 2)
হার্ডওয়্যার পার্থক্যের কারণে বিভিন্ন সময় এড়াতে প্রতিটি পরীক্ষা আমার কম্পিউটারে (i5-4210u, 8 গিগাবাইট র্যাম) উবুন্টু সার্ভার বা উইন্ডোজ 8-তে চালানো হবে, সুতরাং কিছু উন্মাদ-বহিরাগত-রেনটাইম ব্যবহার না করার চেষ্টা করুন যা কেবলমাত্র একটি দ্বৈত জি 5 তে সংকলন করে নিখরচায় 762.66 এমবি ফ্রি র্যাম সহ ম্যাক প্রো।
যদি আপনি কোনও বিশেষ রানটাইম / ভাষা ব্যবহার করেন তবে দয়া করে এটির একটি লিঙ্ক পোস্ট করুন।
- আগ্রহী পক্ষের জন্য, আমি এখানে টেস্টিং কোড পোস্ট করেছি (সি # তে লিখিত): http://pastebin.com/WYCG5Uqu
পরীক্ষা প্রোগ্রাম
ধারণা থেকে এসেছিলেন এখানে , তাই আমরা তাদের প্রোগ্রামের একটি কিছুটা পরিমার্জিত সংস্করণ ব্যবহার করব।
প্রোগ্রামটির সঠিক আউটপুট: 3,126,900,366
সি তে:
int s, i, j;
for (s = 0, i = 0; i < 10000; i++) {
for (j = 0; j < 10000; j++)
s += (i * j) / 3;
}
কোডে: [R0 টি s এর প্রতিনিধি, i এর R1, i এর R2]
LOAD R0 0
LOAD R2 0 <--outer loop value
LOAD R1 0 <--inner loop value
--Begin inner loop--
PUSH R1 <--push inner loop value to the stack
MUL R1 R2 <--(i*j)
PUSH R2
LOAD R2 3
DIV R1 R2 <-- / 3
POP R2
ADD R0 R1 <-- s+=
POP R1
PUSH R2
LOAD R2 1
ADD R1 R2 <--j++
POP R2
PUSH R2
LOAD R2 10000
CMP R1 R2 <-- j < 10000
POP R2
BRANCHLT 3 <--Go back to beginning inner loop
--Drop To outer loop--
LOAD R1 1
ADD R2 R1 <--i++
LOAD R1 10000
CMP R2 R1 <-- i < 10000
LOAD R1 0 <--Reset inner loop
BRANCHLT 2
বাইনারি / হেক্সে:
0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x02 0x00 0x00 0x00 0x00
0x00 0x01 0x00 0x00 0x00 0x00
0x02 0x01
0x06 0x01 0x02
0x02 0x02
0x00 0x02 0x00 0x00 0x00 0x03
0x07 0x01 0x02
0x03 0x02
0x04 0x00 0x01
0x03 0x01
0x02 0x02
0x00 0x02 0x00 0x00 0x00 0x01
0x04 0x01 0x02
0x03 0x02
0x02 0x02
0x00 0x02 0x00 0x00 0x27 0x10
0x09 0x01 0x02
0x03 0x02
0x0a 0x00 0x00 0x00 0x03
0x00 0x01 0x00 0x00 0x00 0x01
0x04 0x02 0x01
0x00 0x01 0x00 0x00 0x27 0x10
0x09 0x02 0x01
0x00 0x01 0x00 0x00 0x00 0x00
0x0a 0x00 0x00 0x00 0x02
বোনাস পয়েন্ট (প্রভাবগুলি বহু গুণে প্রয়োগ করা হয়) উদাহরণস্বরূপ আপনি যদি তিনটি ক্ষেত্রেই যোগ্যতা অর্জন করেন তবে এটি ((অক্ষর * 0.50) * 0.75) * 0.90 হবে
- 50% হ্রাস যদি দোভাষা প্রকৃতপক্ষে একটি JIT সংকলক হয়
- 25% হ্রাস যদি এটি কোনও ধরণের লুপ আনরোলিং / অর্থপূর্ণ অপ্টিমাইজেশান প্রয়োগ করে।
- 10% হ্রাস যদি আপনি ভিএম এর সাথে প্রসারিত করেন
- ব্রাঞ্চিউকিউ [কোড লাইন, 4 বাইট] (শাখা সমান হলে - অপকোড 0x0 বি)
- ব্রাঞ্চজিটি [কোড লাইন, 4 বাইট] [শাখা বৃহত্তর হলে - অপকড 0x0 সি)
- ব্রাঞ্চে [কোড লাইন, 4 বাইট] (শাখা সমান না হলে - অপকোড 0x0 ডি)
- চালাও [রেজিস্টার 1] [রেজিস্টার 2] (রেজিস্টার 2 এর মান 1 - opcode 0x01 রেজিস্টার করতে সরান)।
প্রত্যাখ্যাত
- প্রোগ্রামে পরীক্ষার কেস কম্পম্পিলিং নিষিদ্ধ। আপনাকে অবশ্যই এসটিডিইএন বা একটি ফাইল (বাইরের কোডটি গ্রহণ করতে হবে) যা কোনও ব্যাপার নয়।
- প্রোগ্রামটি না চালিয়ে আউটপুট ফেরত।
- অন্য কোনও উপায়ে ভিএম প্রয়োজনীয়তা প্রতারণা করার কথা ভাবতে পারেন।
CMP
এর চেয়ে বড় বা সমতা কম জন্য দেখতে চান? এবং এর ফলাফল কি ঘটে?
MUL
এবং DIV
অপ্রকাশিত হয়। সেগুলি স্বাক্ষরিত বা স্বাক্ষরিত হওয়া উচিত? গুণের ওভারফ্লোতে কী ঘটে?