Sheesh นี่คือสิ่งที่ 4 จริงเหรอ? สำหรับผู้ใช้งานเก่าทุกคนความท้าทายหลักเหมือนกัน แต่เรากำลังใช้ Java แทนภาษาที่กำหนดเอง นี่คือความท้าทายสาม CodeBot ที่ ผ่านมาในกรณีที่คุณมีความสนใจ
เป้าหมายของ CodeBots คือการทำให้บอทของคุณเป็นไวรัสที่เป็นไปได้ แต่ละบอถือธงและคุณต้องให้แน่ใจว่าสถานะของคุณได้ทุกที่
API
บอตจะเป็นไปตาม "โปรโตคอล" ที่เป็นมาตรฐานและบอตจะดำเนินการผ่านขั้นตอนต่อไปนี้พร้อมกัน:
IPAddress selectMessageRecipient()
อนุญาตให้บอทเลือกคนที่เขาต้องการส่งข้อความ "เป็นมิตร" ถึงMessage sendMessage()
อนุญาตให้บอทเลือกเนื้อหาของข้อความที่เขาจะส่งออกไปprocessMessage(IPAddress, Message)
ถูกเรียกสำหรับแต่ละข้อความที่บอทได้รับFunctionType selectFunctionToBlock()
บล็อกฟังก์ชั่นจากการเขียนทับสำหรับเทิร์นปัจจุบัน ดูขั้นตอนที่ 7IPAddress selectAttackTarget()
อนุญาตให้บอทเลือกคนที่เขาต้องการ DDOS การโจมตี DDOS นั้นสำเร็จถ้าบอตถูกโจมตี 3 บอตในเวลาเดียวกัน หากการโจมตีสำเร็จผู้โจมตีแต่ละคนสามารถทำขั้นตอนที่ 6 และ 7 ได้readData(ReadonlyBot)
อนุญาตให้บอทอ่านข้อมูลที่เก็บไว้ในบอทที่มีช่องโหว่FunctionType selectFunctionToReplace()
คือปมของความท้าทายนี้ คุณได้รับอนุญาตให้เลือก 1 ฟังก์ชั่น (จาก 8 รายการที่นี่) เพื่อคัดลอกจากบอทของคุณไปยังบ็อตของพวกเขา จากนั้นการทำงานของคุณจะถูกเรียกแทนพวกเขา หากหลายบอทเลือกฟังก์ชั่นเดียวกันการสุ่มจะทำได้สำเร็จString getFlag()
ถูกเรียกใช้เมื่อสิ้นสุดเกมและควรส่งคืนสตริงที่ไม่ซ้ำกับการส่งของคุณ ฟังก์ชั่นของคุณควรกลับสตริงเดิมเสมอ การส่งด้วยธงมากที่สุดในตอนท้ายของเกมชนะ
การเก็บรักษา
คุณมี 3 รูปแบบของการจัดเก็บเป็นสมุดที่เข้าสู่ระบบและตัวแปร ที่เก็บข้อมูลรูปแบบเหล่านี้อยู่ในบ็อตที่ฟังก์ชันของคุณใช้งานอยู่ (ดังนั้นหากฟังก์ชันของคุณถูกคัดลอกเนื้อหาของแต่ละวัตถุเหล่านี้จะแตกต่างกัน) วัตถุทั้งหมดเหล่านี้สามารถแก้ไขหรือล้างด้วยตนเอง ในการรับวัตถุเหล่านี้คุณมีผู้ทะเยอทะยานในชั้นเรียนของคุณ (เช่นgetLog()
)
สมุดเก็บรายการIPAddressแต่ละคนมีAddressTypeซึ่งช่วยให้คุณในการจำแนกประเภทที่แตกต่างกันอยู่ AddressBookจะมีที่อยู่อย่างน้อย 1 แห่งเสมอ (หากถูกล้างจะมีการเพิ่มที่อยู่แบบสุ่ม) การล้าง AddressBook ของคุณเพื่อรับIPAddressesหลายรายการไม่ได้รับอนุญาต
เข้าสู่ระบบจัดเก็บรายการของการกระทำทั้งหมดที่นำมาตลอดจนข้อมูลเกี่ยวกับการดำเนินการ นอกจากนี้ยังมีประวัติของการโจมตีที่ประสบความสำเร็จทั้งหมด (แม้ว่าคุณจะไม่รู้ว่าฟังก์ชั่นใดที่พวกเขาเขียนทับ)
ตัวแปรวัตถุช่วยให้คุณสามารถจัดเก็บตัวแปรสตริงที่แนบมากับชื่อสตริง เมื่อเริ่มเกมตัวแปรจะมีตัวแปรเดียวID
ซึ่งมี ID ที่สร้างแบบสุ่มซึ่งไม่ซ้ำกับประเภทบ็อตของคุณ
คุณยังมีฟังก์ชั่นการเข้าถึงอื่น ๆ :
int getTurnNumber()
ส่งคืนจำนวนเต็มด้วยเทิร์นปัจจุบันbool functionsMatch(ReadonlyBot, FunctionType)
ทดสอบเพื่อดูว่าฟังก์ชั่น ReadonlyBot ตรงกับคุณหรือไม่IPAddress personalAddress()
ส่งคืน IPAddress ของคุณ
วิธีการใช้งาน
- คุณสามารถรับรหัสได้จากGithub
- เพิ่มบ็อตของคุณไปยัง
\bots
โฟลเดอร์จากนั้นเพิ่มการอ้างอิงถึงบ็อตของคุณcontroller\CodeBotFactory.java
- บอทของคุณจะต้องขยาย
codebots.bot.CodeBot
หรือcodebots.bots.DefaultCodeBot
- คุณต้องการ Java 8 หากคุณต้องการเรียกใช้คอนโทรลเลอร์
- คุณสามารถเรียกใช้รหัส (สมมติว่าคุณอยู่ใน
/src
โฟลเดอร์) โดยใช้javac codebots\*.java
การรวบรวมแล้วjava codebots.Main
เรียกใช้ - คุณอาจจะไม่ต้องใด ๆตัวแปรสมาชิกที่ไม่คงที่ในชั้นเรียนของคุณ
- ไม่อนุญาตการสะท้อนกลับ
- ไม่อนุญาตให้ใช้รูปแบบการสื่อสารระหว่างบ็อต (ที่เป็นประเภทเดียวกันหรือแตกต่างกัน) นอกเมธอดด้านบน
- อนุญาตให้ใช้บอทแบบใบ้และ / หรือฆ่าตัวตายได้ แต่บอตทั้งหมดควรทำงานแตกต่างจากรายการที่มีอยู่
- หากคุณต้องการความสุ่มในบอทของคุณให้ใช้
getRandom()
- โปรดพยายามรักษารหัสของคุณให้มีประสิทธิภาพ ฉันใช้เวลาในการทำโปรไฟล์และทำให้คอนโทรลเลอร์นั้นรวดเร็ว
คะแนน
105.2501 Expelliarmus!
104.5803 ฉันกำลังช่วย!
104.2746 ฉันเป็นใคร
103.8529 Dumb Bot
103.2028 Replacer
102.7045 Chaos
102.4046 Hermit Bot
102.2849 Swarmer
100.5598 บ็อตสุ่มรักคุณ
99.966 วางใจใน Trust!
99.0185 codebots.bots.DefaultCodeBot
91.2942 codebots.bots.MarkedBot
91.1423 เพียงแค่ส่งเมลที่เป็นมิตรของคุณ
89.4645 null