입방체 큐브 구현


10

큐빅 (Cubically) 은 매우 특정한 문제의 부분에 대해 골프 같은 짧은 답변을 만들 수있는 상당히 새로운 난해한 언어입니다. 메모리는 3x3 Rubik의 큐브 형태로 메모리를 저장하여 대부분의 언어보다 계산이 덜 사소하다는 점에서 독특합니다. 입방체에서 프로그래머는면에 저장된 값을 조작하기 위해 내부 큐브를 회전 한 다음 해당 값을 계산에 사용해야합니다. 계산은 "메모장"으로 알려진 가상의 얼굴에 저장된 단일 32 비트 정수에서 수행됩니다. 또한 Cubically는 사용자 입력을 요청하여 단일 정수 값으로 만 구성된 입력 버퍼에 저장할 수 있습니다.

큐브

큐브의면은 U의 P, D는 자신의, L의 송금, 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을 메모리에 로드 한 다음 argument 1로 호출 한 다음 argument 로 호출하십시오 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 시간 이상 샌드 박스에 두는 것이 좋습니다. (어려운 방법을 배워야했습니다. 첫 번째 도전 과제는 전혀받지 못했습니다. 아직 닫히거나 하향 조정되지 않았기 때문에 나쁘지 않지만 샌드 박스에 오랫동안 남아 있으면 다른 사용자가 그렇지 않은 결함을 발견했습니다.)
MD XF

@MDXF 다음에 염두에 두겠습니다. 감사!
TehPers

예제에서 와 4사이 의 배수를 놓치셨습니까 ? RDRD3F2%5 -> 30
Jonathan Allan

답변:


8

파이썬 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])])

온라인으로 사용해보십시오!

Simulate A Rubik 's Cube 의 포트입니다 . 다시 방문한 결과 47 바이트 씩 골프를 쳤다.


0

입방체 , 1 바이트

경쟁적이지 않아서 절름발이입니다. 이것을 받아들이지 마십시오.

¶  Read a line from stdin and evaluate

오늘 오후에 추가했습니다 : P


2
글쎄, 나는 당신이 가장 짧은 코드를 가지고 있다고 생각합니다.
TehPers December

2
나는 @TehPers하지만 내가 말했듯이, 그것은 절름발이입니다. 이 내장으로 다른 루빅스 큐브 도전에서 입방체를 이길 수 있습니다 .
MD XF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.