측면도에서 주사위 값 결정 왼쪽과 오른쪽 값을 정수 (1-6)로 가져

주사위의 왼쪽과 오른쪽 값을 정수 (1-6)로 가져 와서 맨 위에 값을 반환하는 프로그램이나 함수를 작성하십시오.

주사위 레이아웃 :

    +---+
    | 1 |
+---+---+---+---+
| 2 | 3 | 5 | 4 |
+---+---+---+---+
    | 6 |
    +---+

  ,^.
<´ 5 `>  <-- Top value
|`._,´|
.6 | 4,  <-- Side values
 `.|,´

입력 6 4하면이 반환 5됩니다.

순서가 중요합니다 :

2 3 -> 1
3 2 -> 6

프로그램이 유효하지 않은 입력 값으로 작동하지 않아도됩니다.

내장 된 텍스트 인코딩 또는 압축 풀기 루틴 또는 기본 인코딩 또는 크기 축소와 유사한 것을 사용하는 명백한 접근 방식 (모든 조합에 테이블 사용)을 권장하지 않습니다. 준비 라이브러리 기능을 사용하지 않는 한 테이블 사용은 여전히 ​​허용되며 자체 압축 해제도 허용됩니다.

참고로 다음은 모든 조합 (예 : 가능한 모든 입력 및 출력)에 대한 표입니다.

23, 35, 42, 54 -> 1
14, 31, 46, 63 -> 2
12, 26, 51, 65 -> 3
15, 21, 56, 62 -> 4
13, 36, 41, 64 -> 5
24, 32, 45, 53 -> 6

가장 짧은 코드가 승리하고 표준 허점이 적용됩니다.



답변

파이썬, 30

lambda a,b:a^b^7*(2<a*a*b%7<5)

조회가 없으며 비트 강타가 있습니다.

반대쪽면은 서로 3 비트 보완되는 쌍으로 제공되므로 7과 XOR이됩니다.

1,6
2,5
3,4

한 세트에서 두면이 주어지면 다른 세트에서면을 가져오고 싶습니다. 의 경우 (1,2,3)XOR ( ^) 로이 작업을 수행 할 수 있습니다 . 따라서 ^최대 3 비트 보수까지 올바른 답을 제공합니다 x^7. 조건부로을 보완 할 수 있습니다 x^7*_.

보수 (XOR with 7)를 취할지 여부를 결정하기 위해 삼중 항이 오른쪽 규칙을 위반하는지 확인합니다. 즉, 그 a,b순서는 역순으로 진행됩니다.

1,6
2,5
3,4

각 줄을 세 가지 범주 중 하나로 취급합니다. 각 줄의 요소는 음수 모드 7이므로를 수행하여 “해시”할 수 있습니다 x*x%7.

1,6 -> 1
2,5 -> 4
3,4 -> 2

각 라인은 4 모듈로 7을 곱하여 주기적으로 이전의 라인에서 얻습니다. 따라서이 관계가 (b,a)다음을 보완할지 여부를 결정하는지 여부를 확인할 수 있습니다 a*a%7==b*b*4%7.

이것은 모듈로 7이 a**2 * b**(-2)같은지 확인하는 것과 같습니다 4. 모듈로 6과 b**6같으 므로 1이는에 해당합니다 a**2 * b**4. 다른 가능한 값은 2 (사례 확인)이므로 3과 비교하여 값이 4인지 확인할 수 있습니다.


답변

양변 ab가 주어지면 제 3 변에 대해 좋은 다항식 모듈로 7이 있습니다.

3(a3bab3)mod7

또는 인수 분해

3ab(a2b2)mod7

모듈로 7은 {0,1,2,3,4,5,6}의 나머지에 매핑됩니다.

Math SE answer 에서 왜 작동하는지 설명 하지만 누락 된 명확한 주장이 있다고 생각합니다. 작동하는 유일한 다른 2 항 다항식은

(3a5b5a3b)mod7

원래 비트 bash 를 산술 연산 으로 변환 하여 찾은 다음 더 좋은 것을 찾기 위해이 형식의 다항식을 무차별 검색했습니다.

이 포트를 좋아하는 언어로 자유롭게 추가하십시오. 이것은 CW 게시물입니다.

Synthetica의 J, 9

7|3***+*-

게시물 보기

Dyalog APL, 9 by ngn (Adám에서 오타 수정)

7|3×××+×-

위의 답변에서 명백히 도난당했습니다.

TI-Basic, 14 팀 Timtech

7fPart((A³B-AB³)/21

Pyth, 16 by FryAmTheEggman

M%*3-*H^G3*^H3G7

g두 값 의 함수 를 정의합니다 .

Peter Taylor (구 다항식)의 Golfscript, 18

~1$*.5?3*@.*@*- 7%

Martin Büttner (Peter ‘s GolfScript에서 이식)의 18 세 CJam (구 다항식)

l~1$*_5#3*@_*@*m7%

Mathematica, Martin Büttner의 20

Mod[+##(#-#2)3##,7]&

예, 그것은 단항 플러스이며, 단항 플러스를 사용하지 않는 더 짧은 방법은 없습니다.

dc, 21by Toby Speight

sb7+d3^lb*rlb3^*-3*7%

a차이가 항상 양수인지 확인하려면 7을 추가 해야합니다 (dc에 서명 된 %연산자가 있음).

줄리아, 24 23, Martin Büttner

f(a,b)=3a*b*(a^2-b^2)%7

CoffeeScript, 28 26 rink.attendant.6

x=(a,b)->3*a*b*(a*a-b*b)%7

JavaScript (ES6), 28 26 by rink.attendant.6

x=(a,b)=>3*a*b*(a*a-b*b)%7

기본적으로 CoffeeScript와 동일합니다.

xnor의 Python 28

lambda a,b:3*a*b*(a*a-b*b)%7

배쉬, 31

특별한 것은 없습니다 :

echo $[3*($1**3*$2-$1*$2**3)%7]

또는 대안 적으로 :

echo $[3*$1*$2*($1*$1-$2*$2)%7]

더 길지만 흥미있는 또 다른 접근법 .

Nim, 36 by Sillesta

proc(x,y:int):int=3*x*y*(x*x-y*y)%%7

rink.attendant.6에 의한 Java 7, 46 44

int f(int a,int b){return(a*a-b*b)*a*b*3%7;}

Kevin Cruijssen의 Java 8, 25 23

a->b->(a*a-b*b)*a*b*3%7

rink.attendant.6에 의해 PHP, 49 47

function x($a,$b){echo($a*$a-$b*$b)*3*$a*$b%7;}

배치, unclemeat 52

set/aa=(3*(%1*%1*%1*%2-%1*%2*%2*%2)%%7+7)%%7
echo %a%

CMD는 기본적으로 실제 계수를 지원하지 않으므로 음수를 처리 할 수 ​​없습니다 %%7+7)%%7.

LESS ( 파라 메트릭 믹스 인 ), 62 60 rink.attendant.6

.x(@a,@b){@r:mod(3*@a*@b*(@a*@a-@b*@b),7);content:~"'@{r}'"}

아래 내 게시물을 참조하십시오 .

05AB1E, 10 8 Emigna (케빈 크루이 센이 2 바이트)

nÆs`3P7%

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

Haskell, 31 27 25, 일반 표시 이름

a#b=3*a*b*(a*a-b*b)`mod`7

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

Excel, 27 by Wernisch

=MOD(3*(A1^3*B1-A1*B1^3),7)

Taylor Scott의 Excel VBA, 25

?3*[A1^3*B1-A1*B1^3]Mod 7

Reffu에 의해 Forth (gforth) 41

: f 2>r 2r@ * 2r@ + 2r> - 3 * * * 7 mod ;

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

Kevin Cruijssen의 C #, 23

a=>b=>(a*a-b*b)*a*b*3%7


답변

CJam, 43 28 바이트

전체 테이블 기반 접근 방식이 더 짧을 지 모르겠지만 다음과 같습니다.

l_~^56213641532453s@S-#)g7*^

같은 입력

2 3

산출:

1

이것은 두 얼굴 중 올바른 얼굴과 xnor의 xors 접근 방식을 결정하기 위해 이전 알고리즘을 혼합 한 것입니다.

여기에서 온라인으로 사용해보십시오


답변

최소, 62 바이트

이 게시물 의 알고리즘을 사용합니다 .

.x(@a,@b){@r:mod(3*@a*@b*(@a*@a+6*@b*@b),7);content:~"'@{r}'"}

정수 값을 사용하면 더 짧을 수 있지만 표시 content하려면 변수 interpolation 이 필요한 CSS 속성 을 사용해야했습니다 .

그럼에도 불구하고 CSS 골프 전처리 언어가 코드 골프에 자주 사용되는 것은 아닙니다!

일부 HTML과 함께 사용하려면 다음을 수행하십시오.

p::after { .x(1, 3); }
<p>Number on top: </p>


답변

Pyth, 30 바이트

K"23542 31463 12651 "h/x+K_Kz6

. (예 사이에는 공간이 입력으로 두 자리가 필요 23없다 2 3).

설명:

안에있는 두 자리 시퀀스는 맨 위에 23542있는 두면을 나타냅니다 1. 마찬가지로 314632 등의 경우.이 문자열을 반대로하면에 대한 시퀀스가 ​​제공 4됩니다 6.

이 코드는 문자열에서 조회를 수행 "23542 31463 12651 15621 36413 24532"하고 색인을 6으로 나누고 증가하여 상단이 무엇인지 결정합니다.

여기에서 온라인으로 테스트하십시오.

골프 팁에 대한 @FryAmTheEggman에게 감사합니다.


답변

다른 조회 문자열을 사용하여 es1024와 비슷한 방법을 사용합니다.

자바 스크립트 (ES6), 73 72 61 바이트

t=(l,r)=>-~('354233146312651215623641332453'.search([l]+r)/5)

자바 스크립트 (ES5), 88 87 77 바이트

function t(l,r){return -~('354233146312651215623641332453'.indexOf([l]+r)/5)}

CoffeeScript, 71 62 바이트

그리고 재미있게, 허용되는 괄호 생략으로 인해 CoffeeScript에서 ES6로 코드가 1 바이트 더 짧습니다.

-~트릭을 사용했기 때문에 ES6과 동일한 수의 문자로 판명되었습니다.

t=(l,r)->-~('354233146312651215623641332453'.indexOf([l]+r)/5)


답변

J (9)

게시물 의 알고리즘을 사용합니다 .

7|3***+*-

함수의 트리 그래프 (일부 항목을 지울 수 있음) :

    f=:7|3***+*-
    f
7 | 3 * * * + * -
   5 !: 4 < 'f'
  ┌─ 7
  ├─ |
──┤   ┌─ 3
  │   ├─ *
  └───┤   ┌─ *
      │   ├─ *
      └───┤   ┌─ +
          └───┼─ *
              └─ -

데모:

   3 f 5
1
   4 f 6
2
   2 f 6
3
   2 f 1
4
   1 f 2
3
   4 f 5
6