Cubicallyเป็นภาษาลึกลับที่ค่อนข้างใหม่ที่สามารถสร้างคำตอบสั้น ๆ เหมือนกอล์ฟสำหรับชุดย่อยที่เฉพาะเจาะจงของปัญหา มันมีความพิเศษในการเก็บหน่วยความจำในรูปแบบของลูกบาศก์รูบิค 3x3 ทำให้การคำนวณน้อยกว่าในภาษาส่วนใหญ่ ในเชิงลูกบาศก์โปรแกรมเมอร์ต้องหมุนคิวบ์ภายในเพื่อจัดการค่าที่เก็บไว้บนใบหน้าจากนั้นใช้ค่าเหล่านั้นในการคำนวณ การคำนวณจะดำเนินการกับจำนวนเต็ม 32- บิตเดียวที่เก็บอยู่บนใบหน้าจินตภาพที่เรียกว่า "notepad" นอกจากนี้ Cubically สามารถร้องขออินพุตผู้ใช้และเก็บไว้ในบัฟเฟอร์อินพุตซึ่งประกอบด้วยค่าจำนวนเต็มเดียวเท่านั้น
Cube
ใบหน้าของคิวบ์คือU p, Dเอง, L eft, R ight, F ront, และB ack:
UUU
UUU
UUU
LLLFFFRRRBBB
LLLFFFRRRBBB
LLLFFFRRRBBB
DDD
DDD
DDD
เมื่อโปรแกรมเริ่มต้นคิวบ์จะถูกเตรียมใช้งานเพื่อให้แต่ละสแควร์บนใบหน้านั้นมีค่าเท่ากับดัชนีที่ใช้ 0 ของใบหน้า:
000
000
000
111222333444
111222333444
111222333444
555
555
555
เมื่อใดก็ตามที่ใบหน้าถูกหมุนมันจะหมุนตามเข็มนาฬิกาเสมอ:
Cubically> F1
000
000
111
115222033444
115222033444
115222033444
333
555
555
มูลค่าของใบหน้าถูกกำหนดให้เป็นผลรวมของทุกตารางในใบหน้านั้น ตัวอย่างเช่นในคิวบ์ด้านบนค่าใบหน้า0
คือ 3
วากยสัมพันธ์
คำสั่งถูกดำเนินการโดยการโหลดคำสั่งลงในหน่วยความจำก่อนจากนั้นส่งอาร์กิวเมนต์ไปยังคำสั่งเพื่อดำเนินการคำสั่ง ยกตัวอย่างเช่นคำสั่งF1
จะโหลดคำสั่งลงในหน่วยความจำแล้วเรียกมันว่ามีการโต้แย้งF
1
นอกจากนี้F13
จะโหลดคำสั่งF
ลงในหน่วยความจำแล้วเรียกมันว่าด้วยการโต้แย้งแล้วเรียกมันว่ามีการโต้แย้ง1
3
อักขระที่ไม่ใช่ตัวเลขใด ๆ จะถือว่าเป็นคำสั่งและตัวเลขใด ๆ จะถือเป็นอาร์กิวเมนต์
งานของคุณ
งานของคุณคือการใช้คิวบ์หน่วยความจำภายในของ Cubically ในภาษาที่คุณเลือก รหัสของคุณควรจะสามารถเรียกใช้ชุดย่อยของภาษาได้น้อยมาก
คำสั่ง
R
- หมุนใบหน้าขวาของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุL
- หมุนหน้าซ้ายของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุU
- หมุนด้านบนของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุD
- หมุนใบหน้าด้านล่างของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุF
- หมุนด้านหน้าของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุB
- หมุนด้านหลังของลูกบาศก์ตามเข็มนาฬิกาตามจำนวนครั้งที่ระบุ%
- ส่งออกค่าบนใบหน้าที่กำหนด มูลค่าของใบหน้าหมายถึงผลรวมของช่องสี่เหลี่ยมทั้งหมดบนใบหน้านั้น
กฎระเบียบ
- คุณสามารถใช้ภาษาใด ๆ ที่สร้างขึ้นก่อนหรือหลังวันที่ความท้าทายนี้ถูกโพสต์เพื่อเขียนโปรแกรมหรือฟังก์ชั่นที่สามารถแก้ปัญหานี้ได้
- อินพุตจะถูกส่งผ่านทั้งผ่าน STDIN เป็นสตริงหรือเป็นอาร์เรย์อักขระ (คุณเลือกโปรดระบุ)
- เอาต์พุตต้องถูกส่งผ่านไปยัง STDOUT หรือเป็นเอาต์พุตของฟังก์ชันและต้องเป็นจำนวนเต็มสตริงที่มีเฉพาะตัวเลขหรืออาร์เรย์ของตัวเลข หากภาษาของคุณต้องการให้คุณสร้างบรรทัดใหม่ที่ต่อท้ายคุณสามารถทำได้
([UDLRFB]\d*)*%[0-5]
การป้อนข้อมูลจะอยู่ในรูปแบบต่อไปนี้: จะไม่มีอักขระช่องว่างในอินพุต- อินพุตสำหรับ
%
จะใช้ดัชนีที่เป็น 0 เสมอ
นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
กรณีทดสอบ
%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17
สำหรับกรณีการทดสอบเพิ่มเติมตรวจสอบล่าม TIO หาก TIO ไม่ทำงานคุณอาจใช้ล่าม Luaแทน
4
ระหว่างR
และD
ในตัวอย่างRD3F2%5 -> 30
หรือไม่?