주사위의 왼쪽과 오른쪽 값을 정수 (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인지 확인할 수 있습니다.
답변
양변 a 와 b가 주어지면 제 3 변에 대해 좋은 다항식 모듈로 7이 있습니다.
또는 인수 분해
모듈로 7은 {0,1,2,3,4,5,6}의 나머지에 매핑됩니다.
이 Math SE answer 에서 왜 작동하는지 설명 하지만 누락 된 명확한 주장이 있다고 생각합니다. 작동하는 유일한 다른 2 항 다항식은
원래 비트 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
. 마찬가지로 31463
2 등의 경우.이 문자열을 반대로하면에 대한 시퀀스가 제공 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