คะแนน
ส่วนนี้จะถูกกรอกเมื่อมีการส่งผลงาน
ปกติ
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
รอบโบนัส
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
พื้นหลัง
หลักสูตรเบื้องต้นยอดนิยมสำหรับ Java คือKarel J. Robot (ฉันใช้เอง) หุ่นยนต์โต้ตอบกับตารางของถนน (จำนวนเต็มบวก y- พิกัด) และลู่ทาง (บวก x จำนวนเต็มพิกัด) พร้อมกับบี๊บซึ่งสามารถวางและเก็บไว้ในตารางได้ (โปรดทราบว่าคาเรลและบี๊บใด ๆ สามารถอยู่บนตาข่ายได้เท่านั้น คะแนน) Karel (หุ่นยนต์) เพียงเพื่อดำเนินการห้าประการ: เดินหน้าต่อไป 1 เลี้ยวซ้ายเข้าที่วาง beeper หยิบ beeper แล้วปิดตัวเอง
ในวิชาวิทยาการคอมพิวเตอร์หนึ่งในงานมอบหมายชิ้นแรกของเราคือการเขียนโปรแกรมให้คาเรลเพื่อเรียนรู้วิธีเลี้ยวขวาเลี้ยวไปรอบ ๆ และปฏิบัติงานร่วมกันของการก้าวไปข้างหน้าโดย 1 และวางบี๊บลง การมอบหมายไม่กี่วันต่อมาคือการใช้วิธีการเหล่านี้และเขียนวิธีการใหม่เพื่อผลิตตัวอักษรของตัวอักษร
เมื่อฉันทำภารกิจนี้เสร็จฉันก็เขียนวิธีการเพิ่มเติมเพื่อทำตัวอักษรทุกตัวรวมถึงตัวเลขสิบหลักและฉันวางแผนที่จะหาวิธีสร้างตัวประมวลผลคำจากหุ่นยนต์โดยที่สตริง จะถูกป้อนไปยัง STDIN และหุ่นยนต์จะส่งเสียงบี๊บบนกริดในลักษณะที่คล้ายกับตัวอักษร
ทุกครั้งที่ฉันเขียนprivate void draw#ให้กับตัวละครแต่ละตัว#ฉันเพิ่มความคิดเห็นหลังจากนั้นมันจะบอกตัวย่อสำหรับลำดับของคำสั่งที่ฉันต้องการ
ฉันมีคำสั่งต่อไปนี้ (เขียนเป็น pseudocode) ตามคำสั่งของฉัน (ชี้แจง - นี่เป็นคำสั่งที่มีประโยชน์เท่านั้น)
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
เงื่อนไข
หุ่นยนต์จะต้องดำเนินการตามลำดับต่อไปนี้
- หุ่นยนต์เริ่มที่มุมซ้ายล่างของรูปสี่เหลี่ยมผืนผ้าขนาด 5xN ของพื้นที่ขนาดเล็กที่ตัวอักษรจะถูกวาด
- หุ่นยนต์ดึงตัวอักษร
- หุ่นยนต์เคลื่อนที่ไปที่มุมขวาล่างของสี่เหลี่ยม
- หุ่นยนต์เคลื่อนที่สองช่องว่างไปทางขวาและจะต้องหันไปทางทิศเหนือ / ขึ้น
ลองทำตัวอย่าง Aสมมติว่าเราต้องการที่จะดึง ตำแหน่งของหุ่นยนต์คือตัวอักษรที่บอกทิศทางของมัน (เหนือ, ใต้, ตะวันออก, ตะวันตก) ตัวอักษรจะเป็นตัวพิมพ์ใหญ่หากหุ่นยนต์อยู่ในตำแหน่งที่มีเสียงบี๊บและตัวพิมพ์เล็กหากหุ่นยนต์อยู่ในตำแหน่งที่ไม่มีเสียงบี๊บ oแสดงถึงจุดที่มี beepers และ.เป็นจุดที่ไม่มี beepers
อย่างที่เราจะเห็นในภายหลังAนี่คือ
.ooo.
o...o
ooooo
o...o
o...o
นี่คือทางออกหนึ่งที่เป็นไปได้
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
mmlกระสุนนัดสุดท้ายที่จะทำให้กระสุนนัดที่สี่สมบูรณ์นั้นเกิดขึ้นเพราะมันปรากฏในจดหมายทุกฉบับและเพราะฉันไม่ต้องการกลับไปและเพิ่มอีกสองคอลัมน์ลงในทุกสิ่งในโซลูชันที่เสนอข้างต้น
ดังนั้นวิธีการแก้ปัญหาหนึ่งที่จะทำให้เป็นApddrdddammmrdmrdddmrddddlmml
โปรดทราบว่านี่ไม่จำเป็นต้องเป็นทางออกของคุณ อัลกอริทึมของคุณสามารถผ่านทุกคอลัมน์วาง beepers ในตำแหน่งที่เหมาะสมและไม่พึ่งพาที่ beepers อื่น ๆ ถูกวางหรือจะวาง ไม่ว่าอัลกอริทึมของคุณจะเป็นอะไรหุ่นยนต์สามารถส่งเสียงบี๊บเดียวต่อหนึ่งช่องว่างบนกริด
โปรแกรม
โปรแกรมของคุณจะใช้เป็นอินพุทของกริด 5xN ของตารางสำหรับตัวอักษรคืออะไร โปรดทราบว่าไม่มีหุ่นยนต์ในอินพุต; หุ่นยนต์จะอยู่ที่มุมซ้ายล่าง (ตะวันตกเฉียงใต้) หันหน้าไปทางทิศเหนือ
เอาท์พุทจะเป็นลำดับของตัวอักษรที่เป็นชวเลขสำหรับลำดับ
อินพุตตัวอย่าง
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
ตัวอย่างผลลัพธ์
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
นี่คือรหัสกอล์ฟ, fellas ใช้กฎ CG มาตรฐาน รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
รอบโบนัส
กฎระเบียบ
หากคุณต้องการมีส่วนร่วมในรอบโบนัสอย่าลืมทำรหัสให้มีประสิทธิภาพ! ด้านล่างเป็นไลบรารีของตัวอักษร 5x5 ทั้งหมดที่โปรแกรมของฉันสร้างขึ้นเมื่อทำงาน วัตถุประสงค์ของรอบโบนัสคือการเขียนโปรแกรมที่พิมพ์ลำดับของABCDEFGHIJKLMNOPQRSTUVWXYZสิ่งนั้นที่มีการเคลื่อนไหวน้อยที่สุดเท่าที่จะทำได้ ไม่มีอินพุตให้กับ STDIN รหัสจะถูกให้คะแนนไม่ใช่ความยาวของรหัส แต่ใช้กับ "คะแนนการเคลื่อนที่" คะแนนย้ายถูกออกแบบมาเพื่อกีดกันอัลกอริธึมตัวกวาดที่เยี่ยมชมทุกจุดในสี่เหลี่ยมผืนผ้า
d: 1
l: 1
m: 4
p: 1
r: 1
จดหมาย
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
ต้องปฏิบัติตามขั้นตอนเดียวกันกับความท้าทายดั้งเดิม: ตัวอักษรจะต้องวาดทีละตัวโดยมีการเว้นวรรคระหว่างตัวอักษรแต่ละตัว
ใช้กฎ CG มาตรฐาน รายการที่มีคะแนนการย้ายต่ำที่สุดชนะ
เพื่อสรุปรหัสทั้งสองจะทำสิ่งเดียวกัน รหัสแรกควรมีจำนวนไบต์น้อยที่สุดในรหัสและรหัสที่สองควรใช้จำนวนการเคลื่อนไหวน้อยที่สุด