입방 형의 유형 결정


17

소개:

나는 구불 구불 한 퍼즐 수집가입니다. 여기에서 현재 ± 300 퍼즐 모음을 볼 수 있습니다.

나는 모든 사람들이있는 일반 루빅스 큐브 (3x3x3 큐브) 알고 생각 NxNxN 큐브. 다른 형태로 제공되는 Cuboids (블록 모양의 퍼즐)도 있습니다 .

  • 일반 도미노 입방체 (예 : 2x2x3 ; 2x3x3 ; 3x3x4 등) -NxNx (N + O) 또는 Nx (N + O) x (N + O) 형식 으로 제공되며 홀수 치수와 짝수 또는 홀수.
  • 셰이프 쉬프터 입방체 ( 2x2x4 ; 3x3x5; 3x3x9 ; 4x4x6 등)- 이름에서 알 수 있듯이 NxNx (N + P) 의 형태로 나타납니다 ( 모든 방향으로). 세 가지 차원 모두 홀수이거나 짝수입니다.
  • 플로피 입방 형 ( 1x3x3 , 2x4x4 등) -Nx (N + P) x (N + P) 의 형태로 셰이프 쉬프터 와 거의 동일하지만 소위 플로피 패리티가 있습니다.
  • Brick Cuboids ( 2x3x4 , 3x4x5 , 2x3x5 등)-Nx (N + O) x (N + P)의 형태로 제공됩니다. 이는 일반 Domino Cuboid와 마찬가지로 두 개의 홀수 크기와 짝수, 또는 두 짝수와 홀수; 그러나 같은 치수가 없습니다.
  • Ultimate Shapeshifters ( 2x4x6 ; 3x5x7; 2x4x10 등)-Nx (N + O) x (N + R)의 형태로 제공되며 어떤 방향으로도 변속됩니다. 세 가지 차원 모두 홀수이거나 짝수입니다. 그러나 같은 치수가 없습니다.

도전:

입력:

다음 제한을 갖는 양의 정수 n : 8 <= n <= 125.
n 은 각각 3과 5 사이의 3 개의 값 (치수)의 곱으로 고유하게 디코딩 될 수있다.

내가 2-5로 제한 한 이유 는 많은 하위 / 상위 Cuboid가 있지만 중복 입력 (예 : 1x2x4 = 82x2x2 = 8) 을 방지 하기 위해서 입니다. 또한 Ultimate Shapeshifter에 대한 테스트 사례가 없음을 의미합니다.

출력 / 테스트 사례 :

가능한 모든 3 차원 구성에서 가장자리 길이 2에서 5까지 프로그램 / 기능이 지원해야하는 모든 경우입니다.

Input   Cuboid/Cube   Type/Output
8       2x2x2         Cube
12      2x2x3         Regular Domino Cuboid
16      2x2x4         Shapeshifter Cuboid
20      2x2x5         Regular Domino Cuboid
18      2x3x3         Regular Domino Cuboid
24      2x3x4         Brick Cuboid
30      2x3x5         Brick Cuboid
32      2x4x4         Floppy Cuboid
40      2x4x5         Brick Cuboid
50      2x5x5         Regular Domino Cuboid
27      3x3x3         Cube
36      3x3x4         Regular Domino Cuboid
45      3x3x5         Shapeshifter Cuboid
48      3x4x4         Regular Domino Cuboid
60      3x4x5         Brick Cuboid
75      3x5x5         Floppy Cuboid
64      4x4x4         Cube
80      4x4x5         Regular Domino Cuboid
100     4x5x5         Regular Domino Cuboid
125     5x5x5         Cube

도전 규칙 :

  • 8-125 범위 내의 비 큐브 / 비큐 보이드 입력은 출력으로 '없음'이되어야합니다.
  • 출력 형식은 사용자가 선택합니다. 가장 합리적인 것은 0= 'none' 과 같은 정수라고 생각합니다 . 1= 큐브; 2= 정규 도미노 입방 형; 3= 셰이프 쉬프터 입방 형; 4= 플로피 입방 형; 5= 벽돌 입방 형. 사용한 형식을 지정하면 다른 모든 출력 형식도 좋습니다.

일반 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수가있는 기능 / 방법, 전체 프로그램을 사용할 수 있습니다. 당신의 전화.
  • 기본 허점 은 금지되어 있습니다. ( 참고 : 입력-출력 변환에 대한 스마트 수식이 있는지 모르겠으므로 입력을 기반으로 답변을 하드 코딩 할 수 있습니다. )
  • 가능하면 코드 테스트 링크를 추가하십시오.
  • 또한 필요한 경우 설명을 추가하십시오.


1
컬렉션에 헬리콥터 큐브가 없습니까?
GB

@GB 아뇨. Curvy Copter, Curvy Copter Plus, Curvy Copter III, Curvy Chop Cube, Helicopter Dodecahedron 및 맞춤형 Super Truncated Curvy Copter III는 있지만 헬리콥터 큐브는 없습니다. :) 그것은 매력적인 헬리콥터와 너무 비슷하지만 언젠가는 얻을 수 있습니다.
케빈 크루이 센

입력이 정렬되어 있습니까? 아니면 수동으로 정렬해야합니까?
Matthew Roh

@MatthewRoh 입력은 단일 정수 (즉 24)이므로 정렬하려는 항목을 모르겠습니까?
Kevin Cruijssen

답변:


6

05AB1E , 26 21 바이트

None: 0 Cube: 1 Regular Domino Cuboid: 2 Shapeshifter Cuboid: 3 Brick Cuboid: 4 Floppy Cuboid: 5

•S3X@I¨%÷'•5L¦3ãPÙIkè

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

•S3X@I¨%÷'•            # push base-214 compression of the number 123224454212324512210
           5L¦         # push the list [2,3,4,5]
              3ã       # cartesian product with repetion of size 3
                P      # product of each sublist
                 Ù     # remove duplicates
                  Ik   # get the index of input in that list (-1 if non-existant)
                    è  # get the element at this index in the above number

내가 바이트를 절약 할 수있는 유일한 장소는 숫자 123224454212324512210 을 생성하는 더 좋은 방법을 찾는 것입니다 .

소수에서 단 1 회 떨어져 있으므로 가능한 소수는 해당 소수의 인덱스를 찾아서 9 바이트 미만으로 인덱스를 생성하는 것입니다.
pi-function이 21 자리 소수에 얼마나 잘 작동하는지 모르겠지만 가능성이 있습니다.


큐브 / 큐 보이드를 결정하는 데 사용한 수식 / 쿼크 / 패턴을 확인한 설명이 궁금합니다. +1
Kevin Cruijssen

1
@ KevinCruijssen : 나는 1 ~ 2 바이트를 저장할 수 있습니다. 시도한 후에 설명을 추가하겠습니다. 나는 순서를 찾고 싶은 프라임이있다. (하지만 나는 온라인으로 어떤 것도 찾지 못했고 나는 일을하고있어서 실제로 무언가를 구현할 시간이 없다.)
Emigna

@Emigna jeebus creezy, 얼마나 오랫동안 k존재 했습니까? !! ??!?!?!?!
Magic Octopus Urn

@carusocomputing 2015 년 12 월 30 일 이후.
Adnan

3

자바 스크립트 (ES6), 97 92 86 바이트

이 함수는 먼저 입력의 유효성을 확인한 다음 조회 테이블에서 올바른 값을 선택합니다.

놀랍게도 가장 긴 부분은 유효성 검사입니다 ( [2,3,4,5] ? 에서 x , yz 와 함께 x * y * z 형식의 n 임 ). 더 짧은 방법이 있어야하지만 지금까지는 알 수 없었습니다.

n=>'NBBF..CRCC.BRR..SFRRRRR.B..C'[[34707324,0x80000800,4240,262208][n&3]>>n/4&1&&n%29]

문자를 반환합니다 :

  • N : 없음
  • C : 큐브
  • R : 일반 도미노 입방
  • S : 변신 기 입방 형
  • B : 벽돌 입방
  • F : 플로피 입방

테스트


1

루비, 106 98 96 바이트

->n{[[x=25,2421],[15,53],[9,21],[4,1232504350200510002]].any?{|a,b|n%a<1&&x="00#{b}"[n/a]}?x:?0}

왜 안돼?

지정된대로 0 = '없음'; 1 = 큐브; 2 = 정규 도미노 입방 형; 3 = 셰이프 시프터 입방 형; 4 = 플로피 입방 형; 5 = 벽돌 입방 형


1

펄 6 , 69 58 바이트

{%(unique([X*] (2..5)xx 3)Z=>:32<AM0K21IHN61H5>.comb){$_}}

유효한 큐브 / 입방체를 형성하지 않는 입력의 경우 (Any)대신 초기화되지 않은 값을 반환한다는 점을 제외하고 작업 설명에서 제안 된 정수 출력 형식을 사용합니다 0.

작동 원리

  1. unique([X*] (2..5)xx 3)

    리스트를 생성합니다 8 12 16 20 18 24 30 32 40 50 27 36 45 48 60 75 64 80 100 125.

  2. :32<AM0K21IHN61H5>.comb

    1 2 3 2 2 5 5 4 5 2 1 2 3 2 5 4 1 2 2 1base-32 리터럴에서 목록을 생성합니다 .

  3. %(   Z=>   )

    첫 번째 목록을 키로 사용하고 두 번째 목록을 값으로 사용하여 해시 (연관 맵)를 생성합니다.

  4.    {$_}

    입력 번호로 해시를 인덱싱합니다.


Heh, 이제 @Emigna의 05AB1E 답변과 동일한 접근 방식을 사용했습니다. 그러나 나는 독립적으로 정직하게 생각해 냈습니다! :)
smls

1

배치, 163 바이트

@set/as=0,c=29948521
@for /l %%i in (2,1,5)do @for /l %%j in (%%i,1,5)do @for /l %%k in (%%j,1,5)do @set/as+=c%%6*!(%%i*%%j*%%k-%1),c/=6,c+=14081593*!c
@echo %s%

제안 된 출력 형식을 사용합니다. 설명 : 기본 아이디어는 질문에 정의 된대로 큐브 목록을 반복하는 것입니다. 각 큐브에 대해 해당 볼륨이 입력 정수인지 확인하고, 그렇다면 조회 테이블에서 큐브 유형을 계산합니다.

원래 조회 테이블은 일련의 문자이지만 for루프 에서 문자열 조작을 수행하는 것은 까다로워서 산술적으로 추출 할 수있는 숫자로 전환했습니다. 슬프게도 Batch는 32 비트 정수로 제한되어 있기 때문에 모든 숫자를 단일 변수에 넣을 수 없었습니다 (기본 5에서도 13 자리 만 얻을 수 있음). 대신 변수를 두 부분으로 나눕니다. 편의상. 299485212545522321베이스 역순 10 작은 직육면체를 부호화 6; 이 자리가 부족할 때 추가 14081593되는 122145232110 가장 큰 직육면체를 인코딩 기본 6.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.