ใช้คิวบ์แบบลูกบาศก์


10

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 เสมอ

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ

%0 -> 0
%1 -> 9
%2 -> 18
%3 -> 27
%4 -> 36
%5 -> 45
R1%2 -> 27
RD3F2%5 -> 32
L1R23F1B5U9D2%3 -> 17

สำหรับกรณีการทดสอบเพิ่มเติมตรวจสอบล่าม TIO หาก TIO ไม่ทำงานคุณอาจใช้ล่าม Luaแทน


3
คำถามนี้ซ้ำกับคำถามนี้หรือไม่?
TehPers


@ TehPers ฉันคิดว่ามันคล้ายกันมาก สำหรับความท้าทายในอนาคตฉันแนะนำให้ทิ้งไว้ในกล่องทรายอย่างน้อย 24 ชั่วโมงหากคุณยังมีข้อสงสัย (ฉันต้องเรียนรู้สิ่งนี้อย่างหนักความท้าทายครั้งแรกของฉันก็ไม่ได้รับการตอบรับที่ดีนี่ยังไม่ปิดหรือ downvoted ดังนั้นมันจึงไม่เลวเลย แต่ถ้ามันถูกทิ้งไว้ในแซนด์บ็อกซ์เป็นเวลานาน สังเกตเห็นข้อบกพร่องที่ฉันไม่ได้ทำ)
MD XF

@MDXF ฉันจะจำไว้ว่าในครั้งต่อไป ขอบคุณ!
TehPers

คุณพลาดหลายตัวอย่าง4ระหว่างRและDในตัวอย่างRD3F2%5 -> 30หรือไม่?
Jonathan Allan

คำตอบ:


8

Python 2 , 476 ไบต์

import re
c=[[i]*9for i in range(6)]
r=lambda f:[f[a+b]for a in(0,1,2)for b in(6,3,0)]
U=lambda c:[r(c[0])]+[c[j+1][:3]+c[j or 4][3:]for j in(1,2,3,0)]+[c[5]]
y=lambda c:[r(c[0])]+c[2:5]+[c[1],r(r(r(c[5])))]
z=lambda c:[c[2],r(r(r(c[1]))),c[5],r(c[3]),c[0][::-1],c[4][::-1]]
s=input()
exec("c="+"(c);c=".join("".join("zzzUz U zzUzz yyyzUzzzy zUzzz yzUzzzyyy".split()[ord(t)%11%7]*sum(map(int,n))for t,n in re.findall("([BUDLFR])(\d*)",s[:-2])))+"(c)")
print sum(c[int(s[-1])])

ลองออนไลน์!

พอร์ตจากฉันคำตอบ Cube จำลองรูบิค การกลับมากระตุ้นให้ฉันตีกอล์ฟด้วยขนาด 47 ไบต์


0

ตามลำดับ 1 ไบต์

ไม่ใช่การแข่งขันเพราะมันเป็นง่อย อย่ายอมรับสิ่งนี้

¶  Read a line from stdin and evaluate

ฉันเพิ่มว่าบ่ายนี้: P


2
ฉันคิดว่าคุณมีรหัสที่สั้นที่สุด
TehPers

2
@ เทอร์สฉันทำ แต่เหมือนที่ฉันพูดมันเป็นง่อย สามารถชนะลูกบาศก์รูบิคคิวบ์ได้โดยใช้บิวด์อินนี้ไม่จำเป็นต้องชนะเกมนี้
MD XF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.