এটি কোর ওয়ারের একটি রূপান্তর, যা 20 ম শতাব্দীর শেষের একটি প্রোগ্রামিং KOTH। আরও নির্দিষ্ট করে বলার জন্য, এটি অবিশ্বাস্যরূপে সরল নির্দেশাবলী সেটটি মূলত মূল প্রস্তাবের ভিত্তিতে ব্যবহার করছে ।
পটভূমি
কোর ওয়ারে কম্পিউটারে নিয়ন্ত্রণের জন্য লড়াই করা দুটি প্রোগ্রাম রয়েছে। প্রতিটি প্রোগ্রামের লক্ষ্য হ'ল বিপরীত প্রোগ্রামটি সনাক্ত করে এবং শেষ করে জিতে।
যুদ্ধ কম্পিউটারের মূল স্মৃতিতে সংঘটিত হয়। এই স্মৃতিটিকে কোর বলা হয় এবং এতে 8192 ঠিকানা রয়েছে। যুদ্ধ শুরু হলে, প্রতিটি প্রতিযোগীর কোড (যোদ্ধাকে বলা হয়) একটি এলোমেলো স্মৃতিতে রেখে দেওয়া হয়। প্রোগ্রামের সম্পাদন যোদ্ধাদের মধ্যে বিকল্প হয়, প্রতিটির একটি করে নির্দেশনা সম্পাদন করে। প্রতিটি নির্দেশ কোরের একটি অংশকে সংশোধন করতে সক্ষম, যার ফলে স্ব-পরিবর্তনকারী প্রোগ্রামের সম্ভাবনা তৈরি হয়।
লক্ষ্যটি হচ্ছে বিরোধী প্রোগ্রামটি সমাপ্ত করা। কোনও প্রোগ্রাম যখন অবৈধ নির্দেশ কার্যকর করার চেষ্টা করে তখন এটি বন্ধ হয়, যা কোনও DAT
নির্দেশ is
নির্দেশ সেট
প্রতিটি প্রোগ্রামে নিম্ন-স্তরের নির্দেশাবলীর একটি সিরিজ থাকে, যার প্রতিটিতে দুটি এবং দুটি ক্ষেত্র লাগে যা এ এবং বি ক্ষেত্র নামে পরিচিত।
এই নির্দেশিকা সেটটি মূল অনুমান থেকে খুব বেশি আঁকবে। প্রধান পরিবর্তনগুলি হ'ল) কমান্ড যুক্ত / বিয়োগ সম্পর্কে স্পষ্টতা এবং 2) #
অ্যাড্রেসিং মোডে এটি যে কোনও জায়গায় ব্যবহার করার অনুমতি দেয়। কোর ওয়ারগুলির বেশিরভাগ সম্পূর্ণ সংস্করণে 20 টিরও বেশি অপকড, 8 টি অ্যাড্রেসিং মোড এবং "নির্দেশিকা সংশোধনকারী" এর একটি সেট রয়েছে।
Opcodes
প্রতিটি নির্দেশে সাতটি পৃথক অপকড থাকতে হবে।
DAT A B
- (ডেটা) - এটি কেবল সংখ্যাগুলি ধরে রাখেA
এবংB
। গুরুত্বপূর্ণভাবে, একটি প্রক্রিয়া মারা যায় যখন এটি একটি ড্যাট নির্দেশ কার্যকর করার চেষ্টা করে।MOV A B
- (সরান) - এটি মেমরি অবস্থানের বিষয়বস্তুগুলিকেA
মেমরি অবস্থানের দিকে নিয়ে যায়B
। এখানে আগে এবং পরে একটি প্রদর্শন রয়েছে:MOV 2 1 ADD @4 #5 JMP #1 -1
MOV 2 1 JMP #1 -1 JMP #1 -1
ADD A B
- (যোগ করুন) - এই মেমরি অবস্থানকে বিষয়বস্তু যোগA
মেমরির অবস্থানB
। উভয়ের দুটি প্রথম ক্ষেত্র যুক্ত করা হয় এবং দ্বিতীয় ক্ষেত্র যুক্ত হয়।ADD 2 1 MOV @4 #5 JMP #1 -1
ADD 2 1 MOV @5 #4 JMP #1 -1
SUB A B
- (বিয়োগ) - এটি মেমরি অবস্থানA
থেকে মেমরি অবস্থানের বিষয়বস্তুগুলি (এবং ফলাফলকে সংরক্ষণ করে) থেকে বিয়োগ করেB
।SUB 2 1 MOV @4 #5 JMP #1 -1
SUB 2 1 MOV @3 #6 JMP #1 -1
JMP A B
- (জাম্প) - অবস্থানটিতে ঝাঁপ দাওA
, যা পরের চক্রটিতে কার্যকর করা হবে।B
অবশ্যই একটি সংখ্যা হতে হবে তবে কিছুই করে না (যদিও আপনি তথ্য সংরক্ষণের জন্য এটি ব্যবহার করতে পারেন)।JMP 2 1337 ADD 1 2 ADD 2 3
জাম্পটির অর্থ
ADD 2 3
পরবর্তী চক্র কার্যকর করা হবে।JMZ A B
- (শূন্য হলে লাফ দিন) - উভয় লাইনের ক্ষেত্র যদিB
0 হয় তবে প্রোগ্রামটি লোকেশনে লাফিয়ে যায়A
।JMZ 2 1 SUB 0 @0 DAT 23 45
যেহেতু নির্দেশের দুটি ক্ষেত্র 0 হ'ল, ড্যাট কমান্ডটি পরবর্তী সময়ে কার্যকর করা হবে, যার ফলে আসন্ন মৃত্যুর দিকে পরিচালিত হবে।
CMP A B
- (তুলনা এবং যদি সমান নয় লাফালাফি) - নির্দেশাবলী ক্ষেত্র তাহলেA
এবংB
সমান নয়, পরবর্তী নির্দেশ কর।CMP #1 2 ADD 2 #3 SUB @2 3
নির্দেশাবলী 1 এবং 2 এর দুটি ক্ষেত্রের মান সমান হওয়ায়, ADD কমান্ডটি এড়ানো যায় না এবং পরবর্তী পালা কার্যকর করা হয়।
দুটি নির্দেশ যুক্ত করা / বিয়োগ করা হলে দুটি ক্ষেত্র (A এবং B) জোড় / বিয়োগযুক্ত যোগ করা হবে। ঠিকানা মোড এবং অপকোড পরিবর্তন করা হয় না।
সম্বোধন মোড
তিন ধরণের অ্যাড্রেসিং মোড রয়েছে। কোনও নির্দেশনার দুটি ক্ষেত্রের প্রত্যেকটিতে এই তিনটি ঠিকানা মোডের একটি থাকে।
তাত্ক্ষণিক
#X
-X
গণনাতে সরাসরি ব্যবহৃত লাইন utation উদাহরণস্বরূপ,#0
প্রোগ্রামটির প্রথম লাইন। Gণাত্মক রেখাগুলি প্রোগ্রাম শুরুর আগে মূল লাইনে উল্লেখ করে।... //just a space-filler ... ADD #3 #4 DAT 0 1 DAT 2 4
এটি দুটি ডিএটি লাইনের প্রথমটিকে দ্বিতীয়টিতে যুক্ত করবে, যেহেতু যথাক্রমে 3 এবং 4 লাইনে রয়েছে are তবে আপনি এই কোডটি ব্যবহার করতে চাইবেন না কারণ DAT পরবর্তী চক্রটিতে আপনার বটকে হত্যা করবে।
আপেক্ষিক
X
- সংখ্যাX
একটি টার্গেট মেমরি অ্যাড্রেস অবস্থান, বর্তমান ঠিকানা আপেক্ষিক প্রতিনিধিত্ব করে। এই অবস্থানের নম্বর গণনায় ব্যবহৃত হয়। যদি লাইনটি#35
কার্যকর করা হয় এবং এতে থাকে-5
তবে লাইনটি#30
ব্যবহৃত হয়।... //just a space-filler ... ADD 2 1 DAT 0 1 DAT 2 4
এটি প্রথমটিতে দ্বিতীয় ডিএটি লাইন যুক্ত করবে।
পরোক্ষ
@X
- নম্বরটিX
কোনও আপেক্ষিক ঠিকানার প্রতিনিধিত্ব করে। এই অবস্থানের বিষয়বস্তুগুলিকে অস্থায়ীভাবে এক্স সংখ্যাটিতে একটি নতুন আপেক্ষিক ঠিকানা তৈরি করতে যুক্ত করা হয়, যার থেকে নম্বরটি পুনরুদ্ধার করা হয়। যদি লাইনটি#35
কার্যকর করা হয় এবং এর দ্বিতীয় ক্ষেত্রটি হয়@4
এবং লাইনের দ্বিতীয় ক্ষেত্রটিতে#39
সংখ্যা থাকে-7
তবে লাইনটি#32
ব্যবহৃত হয়।... //just a space-filler ... ADD @1 @1 DAT 0 1 DAT 2 4
এটি দ্বিতীয়টিতে প্রথম ডিএটি যুক্ত করবে তবে আরও সংশ্লেষিত উপায়ে। প্রথম ক্ষেত্রটি @ 1, যা সেই আপেক্ষিক ঠিকানা থেকে ডেটা পায় যা প্রথম DAT এর প্রথম ক্ষেত্র, একটি 0 মূল নির্দেশ থেকে অফসেট। দ্বিতীয় ক্ষেত্রের জন্য, @ 1 সেই আপেক্ষিক ঠিকানায় (প্রথম DAT এর দ্বিতীয় ক্ষেত্রের 1) থেকে মানটি পেয়ে যায় এবং এটি একইভাবে নিজেকে যুক্ত করে। মোট অফসেটটি তখন 1 + 1 = 2। সুতরাং, এই নির্দেশটি একইভাবে কার্যকর করা হয়
ADD 1 2
।
প্রতিটি প্রোগ্রামে 64৪ টি নির্দেশ থাকতে পারে।
যখন একটি রাউন্ড শুরু হয়, দুটি প্রোগ্রাম 8192 অবস্থানের সাথে মেমরি ব্যাংকে এলোমেলোভাবে স্থাপন করা হয়। প্রতিটি প্রোগ্রামের নির্দেশিকা নির্দেশকটি প্রোগ্রামের শুরুতে শুরু হয় এবং প্রতিটি সম্পাদন চক্রের পরে বাড়ানো হয়। প্রোগ্রামের নির্দেশ নির্দেশক কোনও DAT
নির্দেশ কার্যকর করার চেষ্টা করার পরে এটি মারা যায় ।
কোর পরামিতি
মূল আকার 8192, 8192 * 8 = 65536 টিকের সময়সীমা সহ। মূলটি চক্রযুক্ত, সুতরাং 8195 ঠিকানায় লিখতে লেখা 3 ঠিকানার লিখনের সমান All সমস্ত অব্যবহৃত ঠিকানা সূচনা করা হয়েছে DAT #0 #0
।
প্রতিটি প্রতিযোগী 64৪ লাইনের বেশি হওয়া উচিত না। পূর্ণসংখ্যা 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হবে।
পদান্বয়
প্রতিযোগীদের পক্ষে প্রোগ্রামিংকে আরও সহজ করার জন্য, আমি পার্সারে একটি লাইন-লেবেল বৈশিষ্ট্য যুক্ত করব। কোনও অপকোডের আগে একটি লাইনে ঘটে এমন কোনও শব্দ লাইন লেবেল হিসাবে ব্যাখ্যা করা হবে। উদাহরণস্বরূপ, tree mov 4 6
লাইন লেবেল আছে tree
। যদি, প্রোগ্রামের যে কোনও জায়গায়, এমন একটি ক্ষেত্র রয়েছে যা রয়েছে tree
#tree
বা @tree
, একটি সংখ্যা প্রতিস্থাপন করা হবে। এছাড়াও, মূলধন উপেক্ষা করা হয়।
লাইন লেবেলগুলি কীভাবে প্রতিস্থাপন করা যায় তার উদাহরণ এখানে রয়েছে:
labelA add labelB @labelC
labelB add #labelC labelC
labelC sub labelA @labelB
এখানে, এ, বি এবং সি লেবেলগুলি 0, 1 এবং 2 লাইনগুলিতে রয়েছে উদাহরণস্বরূপ লেবেলের লাইন নম্বরটির #label
সাথে প্রতিস্থাপন করা হবে। উদাহরণগুলির label
বা @label
লেবেলের আপেক্ষিক অবস্থানের পরিবর্তে প্রতিস্থাপন করা হয়। ঠিকানা মোড সংরক্ষণ করা হয়।
ADD 1 @2
ADD #2 1
SUB -2 @-1
স্কোরিং
প্রতিযোগী প্রতিটি জোড়ের জন্য, প্রতিটি সম্ভাব্য যুদ্ধ করা হয়। যেহেতু যুদ্ধের ফলাফল দুটি প্রোগ্রামের আপেক্ষিক অফসেটের উপর নির্ভর করে, তাই প্রতিটি সম্ভাব্য অফসেট (এর মধ্যে প্রায় 8000) চেষ্টা করা হয়। তদ্ব্যতীত, প্রতিটি প্রোগ্রামের প্রতিটি অফসেটে প্রথমে সরানোর সুযোগ রয়েছে। এই অফসেটগুলির সিংহভাগে যে প্রোগ্রামটি জয়লাভ করে তা হ'ল এই জুটির বিজয়ী।
যোদ্ধা যে জয়ী হয় প্রতিটি জুটির জন্য এটি 2 পয়েন্ট দেওয়া হয়। প্রতিটি টাইয়ের জন্য, একজন যোদ্ধাকে 1 পয়েন্ট দেওয়া হয়।
আপনাকে একাধিক যোদ্ধা জমা দেওয়ার অনুমতি দেওয়া হয়েছে। একাধিক সাবমিশনের জন্য সাধারণ নিয়মগুলি প্রয়োগ হয়, যেমন কোনও ট্যাগ-দলবদ্ধকরণ, কোনও সহযোগিতা, কোনও রাজা-তৈরি ইত্যাদি etc.
নিয়ামক
দুটি সহজ উদাহরণ বট সহ কন্ট্রোলারের জন্য কোডটি এখানে অবস্থিত । যেহেতু এই প্রতিযোগিতাটি (অফিসিয়াল সেটিংস ব্যবহার করে চালানো হয়) সম্পূর্ণ নিরোধক, তাই আপনার তৈরি লিডারবোর্ডটি অফিশিয়াল লিডারবোর্ডের মতোই হবে।
উদাহরণ বট
ভাষাটির কয়েকটি বৈশিষ্ট্য প্রদর্শন করে এমন একটি বট এখানে দেওয়া হয়েছে।
main mov bomb #-1
add @main main
jmp #main 0
bomb dat 0 -1
এই বটটি "বোমা" দিয়ে প্রতিস্থাপন করে কোরটিতে সমস্ত অন্যান্য স্মৃতি ধীরে ধীরে মুছে ফেলে কাজ করে ope বোমা যেহেতু একটি DAT
নির্দেশনা তাই বোমাতে পৌঁছানো যে কোনও প্রোগ্রাম ধ্বংস হয়ে যাবে।
দুটি লাইন লেবেল রয়েছে, "প্রধান" এবং "বোমা" যা সংখ্যাগুলি প্রতিস্থাপন করে। প্রিপ্রোসেসিংয়ের পরে, প্রোগ্রামটি এরকম দেখাচ্ছে:
MOV 3 #-1
ADD @-1 -1
JMP #0 0
DAT 0 -1
প্রথম লাইনে বোমাটি কপিরাইটের সাথে সাথে প্রোগ্রামের উপরে aboveুকিয়ে দেয়। পরবর্তী লাইনটি বোমাটির মান ( 0 -1
) মুভ কমান্ডে যুক্ত করে এবং এটি @
অ্যাড্রেসিং মোডের ব্যবহারও প্রদর্শন করে। এই সংযোজনের ফলে মুভ কমান্ডটি একটি নতুন টার্গেটকে নির্দেশ করে। পরের কমান্ডটি শর্তহীনভাবে প্রোগ্রামটির শুরুতে ফিরে আসে।
বর্তমান লিডারবোর্ড
24 - টার্বো
22 - দ্বারভেনজিনিয়ার
20 - হ্যানশটফার্স্ট
18 - বামন
14 - স্ক্যানবম্বার
10 - প্যারানয়েড
10 - ফার্স্টটাইমার
10 - জানিটর
10 - বিবর্তিত
6 - ইস্টারবুনি
6 - কপিরপাস্ট
4 - ইমপ
2 - স্লাগ
পেয়ারওয়াইস ফলাফল:
Dwarf > Imp
CopyPasta > Imp
Evolved > Imp
FirstTimer > Imp
Imp > Janitor
Imp > ScanBomber
Slug > Imp
DwarvenEngineer > Imp
HanShotFirst > Imp
Turbo > Imp
EasterBunny > Imp
Paranoid > Imp
Dwarf > CopyPasta
Dwarf > Evolved
Dwarf > FirstTimer
Dwarf > Janitor
Dwarf > ScanBomber
Dwarf > Slug
DwarvenEngineer > Dwarf
HanShotFirst > Dwarf
Turbo > Dwarf
Dwarf > EasterBunny
Dwarf > Paranoid
Evolved > CopyPasta
FirstTimer > CopyPasta
Janitor > CopyPasta
ScanBomber > CopyPasta
CopyPasta > Slug
DwarvenEngineer > CopyPasta
HanShotFirst > CopyPasta
Turbo > CopyPasta
CopyPasta > EasterBunny
Paranoid > CopyPasta
Evolved > FirstTimer
Evolved > Janitor
ScanBomber > Evolved
Evolved > Slug
DwarvenEngineer > Evolved
HanShotFirst > Evolved
Turbo > Evolved
EasterBunny > Evolved
Paranoid > Evolved
Janitor > FirstTimer
ScanBomber > FirstTimer
FirstTimer > Slug
DwarvenEngineer > FirstTimer
HanShotFirst > FirstTimer
Turbo > FirstTimer
FirstTimer > EasterBunny
FirstTimer > Paranoid
ScanBomber > Janitor
Janitor > Slug
DwarvenEngineer > Janitor
HanShotFirst > Janitor
Turbo > Janitor
Janitor > EasterBunny
Janitor > Paranoid
ScanBomber > Slug
DwarvenEngineer > ScanBomber
HanShotFirst > ScanBomber
Turbo > ScanBomber
ScanBomber > EasterBunny
ScanBomber > Paranoid
DwarvenEngineer > Slug
HanShotFirst > Slug
Turbo > Slug
EasterBunny > Slug
Paranoid > Slug
DwarvenEngineer > HanShotFirst
Turbo > DwarvenEngineer
DwarvenEngineer > EasterBunny
DwarvenEngineer > Paranoid
Turbo > HanShotFirst
HanShotFirst > EasterBunny
HanShotFirst > Paranoid
Turbo > EasterBunny
Turbo > Paranoid
Paranoid > EasterBunny
সর্বশেষ আপডেট (টার্বো এবং প্যারানয়েডের নতুন সংস্করণ) পুরানো ল্যাপটপে চালাতে প্রায় 5 মিনিট সময় নিয়েছে। আমি তার উন্নয়নের জন্য Ilmari Karonen ধন্যবাদ জানাতে চাই নিয়ামক । আপনার কাছে যদি কন্ট্রোলারের স্থানীয় কপি থাকে তবে আপনার ফাইলগুলি আপডেট করা উচিত।