การตั้งค่า
พิจารณากล่องรูปทรงแปลก ๆ ที่มีเซลล์จำนวน 29 เซลล์ดังแสดงในรูปที่ 1 ด้านล่าง
ภายในกล่อง 2D นี้เป็นสัตว์ที่มีรูปทรงสี่เหลี่ยมสองชนิดคือฟองอากาศและสโมล รูปที่ 1 (a) แสดงฟองอากาศสีน้ำเงินและมีสีแดงบางส่วน สิ่งมีชีวิตแต่ละคนตรงหนึ่งเซลล์ตาราง กล่องอาจมีที่ใดก็ได้ระหว่าง 0 ถึง 26 ฟอง แต่จะมีสองช่องเสมอ
เมื่ออยู่ภายใต้แรงดึงดูดของโลกฟองและปล่องจะนั่งอยู่ที่ด้านล่างของกล่อง ทั้งสองสปีชีส์ขี้เกียจเป็นพิเศษและยังคงนิ่งเฉยอยู่ตลอดเวลา
กล่องยังมี stot ซึ่งแสดงเป็นสี่เหลี่ยมจัตุรัสสีดำซึ่งตรงกับเซลล์กริดหนึ่งเซลล์ จุดที่ไม่อยู่ภายใต้แรงโน้มถ่วง
กล่องมีช่องเปิดหนึ่งช่องที่ด้านล่างของเซลล์ 28 ดังแสดงในรูป
เพื่อเป็นตัวแทนของการกำหนดค่าของฟอง, Smoles และ stot ในกล่อง textually เราใช้สตริง 29 ตัวอักษรหนึ่งตัวต่อเซลล์ตารางในลำดับที่ระบุด้วยการ.
เป็นตัวแทนของเซลล์ที่ว่างเปล่าo
แทนเศษเล็กเศษน้อยx
เป็นตัวแทนของ smole และ@
เป็นตัวแทนของ stot ยกตัวอย่างเช่นการกำหนดค่าของมะเดื่อ. 1 (ก) .........@...o....ooo..xox...
เป็นตัวแทนจากสตริง
กิจวัตร
กล่องสามารถหมุนได้หลายเท่าของ 90 ° ในขณะที่กล่องกำลังถูกหมุนฟองอากาศและสไมลส์จะยังคงอยู่กับที่ภายในเซลล์กริด ทันทีที่การหมุนเสร็จสมบูรณ์พวกมันจะตกลงไปข้างล่างจนกว่าi ) พวกมันถูกบล็อกโดยกำแพงด้านล่างii ) พวกมันถูกบล็อกโดย shubble, smole หรือ stot ด้านล่างหรือiii ) มันตกลงไปในรูในเซลล์ 28 และออกจากกล่อง Stot ไม่ตก มันยังคงอยู่ในเซลล์ปัจจุบันแม้ว่าสิ่งมีชีวิตจะอยู่ด้านบน
กล่องไม่สามารถหมุนได้อีกจนกว่าสัตว์จะล้มและได้มาถึงการกำหนดค่าที่มั่นคงใหม่
โดยปกติการหมุนของกล่องจะแสดงแทนด้วย+
การหมุนตามเข็มนาฬิกา 90 ° |
สำหรับการหมุน 180 °และ-
สำหรับการหมุนทวนเข็มนาฬิกา 90 °
นอกจากนี้ stot สามารถเคลื่อนย้ายได้ในทิศทางเข็มทิศสี่ทิศทางโดยเพิ่มขึ้นทีละหนึ่งเซลล์ การเคลื่อนไหวอาจไม่: i ) ทำให้เกิดการปะทะกันระหว่าง stot และสัตว์ (เช่นเซลล์กริดปลายทางต้องว่างเปล่า) ii ) ทำให้เกิดการชนกันระหว่าง stot และ wall และiii ) ทำให้ stot ออกจากกล่องผ่าน หลุมในเซลล์ 28
นอกจากนี้ stot อาจไม่เคลื่อนไหวหากมีสิ่งมีชีวิตใด ๆ วางอยู่ด้านบนของมัน (ด้วยความเคารพต่อแรงโน้มถ่วงในปัจจุบัน)
โดยทั่วไปแล้วการเคลื่อนที่แบบสต๊อตจะถูกแทนด้วย<
สำหรับซ้าย, >
ขวา, ^
ขึ้นและv
ลง การเคลื่อนไหวแบบสต็อตมักระบุตามกรอบ "มาตรฐาน" (ไม่หมุน) ซึ่งแสดงในรูป นั่นคือถ้า stot อยู่ในเซลล์ 10 การเคลื่อนที่^
จะย้ายไปที่เซลล์ 5 เสมอและการเคลื่อนที่>
จะย้ายไปที่เซลล์ 11 เสมอการวางแนวของกล่องจะไม่ส่งผลกระทบต่อทิศทางของการเคลื่อนที่
ลำดับของการจัดการจะถูกเข้ารหัสโดยใช้สตริงอักขระจากซ้ายไปขวา ตัวอย่างเช่นสตริง+<<^-
ระบุว่ากล่องหมุนตามเข็มนาฬิกา 90 °จากนั้น stot จะถูกย้ายไปทางซ้ายสองครั้งขึ้นไปหนึ่งครั้ง (เทียบกับกรอบมาตรฐาน) จากนั้นกล่องจะหมุน 90 องศาทวนเข็มนาฬิกากลับสู่ทิศทางเดิม
ความท้าทาย
ด้วยเหตุผลที่ดีอย่างสมบูรณ์ (ที่ฉันไม่สามารถเปิดเผยได้) เราต้องการที่จะคลี่คลายฟองอากาศทั้งหมดออกจากกล่องโดยไม่ต้องคลาดเคลื่อนเพียงครั้งเดียว เพื่อให้บรรลุสิ่งนี้เราสามารถใช้กิจวัตรที่อธิบายไว้ข้างต้นโดยเฉพาะ
ก่อนที่จะแก้ปัญหานี้เราจะต้องจำลองว่าการเปลี่ยนแปลงที่หลากหลายของเราจะมีผลต่อเนื้อหาของกล่องซึ่งเป็นจุดสนใจของการท้าทายนี้อย่างไร
คุณต้องเขียนโปรแกรมที่ยอมรับสองข้อโต้แย้งจากstdin
(หรือเทียบเท่า):
- สตริงที่อธิบายถึงสถานะเริ่มต้นของกล่อง
- ลำดับของการยักย้ายถ่ายเท
คุณอาจสมมติว่าอาร์กิวเมนต์ทั้งสองนั้นมีความถูกต้องตามหลักไวยากรณ์กล่องเริ่มต้นในการวางแนวมาตรฐานและสถานะเริ่มต้นของกล่องนั้นเสถียรและถูกกฎหมาย
โปรแกรมจะต้องส่งออกไปยังstdout
(หรือเทียบเท่า) อย่างใดอย่างหนึ่ง:
( กรณีที่ 1 ) สถานะสุดท้ายของกล่องซึ่งแสดงเป็นสตริงหากลำดับของการเคลื่อนไหวนั้นถูกกฎหมาย (มันไม่ได้ละเมิดกฎการเคลื่อนที่ของสโต๊ต) และไม่ทำให้เกิดสโมลใด ๆ ที่จะออกจากกล่อง การวางแนวสุดท้ายของกล่องนั้นไม่สำคัญ
( กรณีที่ 2 ) เครื่องหมายอัศเจรีย์เดี่ยว
!
หากลำดับของการเคลื่อนไหวผิดกฎหมายหรือเป็นสาเหตุให้มีการออกจากกล่อง
เกณฑ์การให้คะแนน
โปรแกรมที่ชนะคือโปรแกรมที่สั้นที่สุดด้วยจำนวนไบต์ซึ่งขึ้นอยู่กับตัวคูณโบนัสที่มีกำไรมาก:
อ้างสิทธิ์ตัวคูณ 0.65ถ้าแทนที่จะพิมพ์ผลลัพธ์ที่เข้ารหัสสำหรับกรณีที่ 1 โปรแกรมจะแสดงรูปภาพ ASCII ของกล่องในสถานะสุดท้ายและการวางแนวโดยใช้อักขระข้อมูลจำเพาะสำหรับฟองอากาศ smoles stots และเซลล์ว่างและวาง a
*
ในเซลล์นอกรูในเซลล์ 28 ช่องว่างนำหน้าและต่อท้ายจะถูกละเว้นตัวอย่างเช่นถ้ารูปที่ 1 (a) ถูกหมุน 90 °เอาต์พุตจะเป็น
. . ..... .o... xo.@. *ooo.. x .
อ้างสิทธิ์ตัวคูณ 0.22ถ้าแทนที่จะพิมพ์ผลลัพธ์ที่เข้ารหัสสำหรับกรณีที่ 1 โปรแกรมจะส่งไฟล์ภาพหรือแสดงหน้าต่าง GUI พร้อมรูปภาพของกล่องในสถานะสุดท้ายและการวางแนว รูปภาพควรอยู่ในรูปแบบของรูปที่ 1 (a) แสดงเซลล์กริดผนังและสิ่งมีชีวิต / stot โดยใช้กล่องสี
อ้างสิทธิ์ตัวคูณ 0.15ถ้าแทนที่จะพิมพ์เอาท์พุทที่เข้ารหัสสำหรับกรณีที่ 1 โปรแกรมจะส่งออกภาพเคลื่อนไหวหน้าต่าง. gif หรือหน้าต่าง GUI แบบเคลื่อนไหวที่แสดงสถานะตัวกลางทั้งหมดในการจำลองที่ช่วงเวลา 1 วินาที ใช้กฎรูปภาพเดียวกันกับตัวคูณ 0.22 เฟรมแรกของภาพเคลื่อนไหวควรแสดงสถานะเริ่มต้นของการจำลอง นอกจากนี้ภาพเคลื่อนไหวควรแสดงสถานะสื่อกลาง "ซ่อน" ซึ่งก็คือ
shubbles / smoles ตกลงไปในการกำหนดค่าที่มั่นคงโดยหนึ่งเซลล์ต่อเฟรมภาพเคลื่อนไหวหลังจากการหมุน
ระดับกลาง 90 ° - สถานะการหมุนของกล่องในการหมุน 180 °
รับตัวคูณทวีคูณ 0.12ถ้าโปรแกรมสร้างหน้าต่าง. gif หรือภาพเคลื่อนไหว GUI เคลื่อนไหวของรูปแบบข้างต้น แต่ทำงานที่ 20 fps และแสดง
ภาพเคลื่อนไหวที่ต่อเนื่องและราบรื่นของกล่องหมุน
ภาพเคลื่อนไหวต่อเนื่องที่ราบรื่นและต่อเนื่องของการเคลื่อนที่แบบสต๊อต
ฟองอากาศที่ตกลงมาในรูในเซลล์ 28 ควรจะแสดงออกมาจากกล่องและควรหายไปทันทีนอก คุณสามารถเลือกช่วงเวลาของตัวเองสำหรับภาพเคลื่อนไหวตราบใดที่ไม่มีการจัดการมากกว่า 1 ครั้ง / วินาที
floor( base score * multiplier )
คะแนนรวม อาจมีการอ้างสิทธิ์หนึ่งตัวคูณเท่านั้น
มันเป็นโลกแห่งการซ่อนเร้น ;)