{0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}에 대한 최단 표현


24

주어진 정수 목록 {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}. 이 숫자에 관심이있는 사람들은 평일 계산에 사용됩니다.

Weekday = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;, 여기서 m[n]-검색중인 표현식, d-월, y- year - (month <= 2).

산술, 논리 및 비트 연산자로 구성된 표현식을 구성 합니다. 목록에서 n 번째 숫자와 같 도록 양의 정수 n정수를 출력 합니다.mm % 7

분기, 삼항 연산자, 테이블 조회 및 포인터는 허용되지 않습니다.

점수 :
1 -위한 | & ^ ~ >> <<연산자
1.1 -위한 + - < > <= >= == != ! && ||연산자
1.2 -위한 *연산자
1.4 -위한 / %연산자

가장 낮은 점수로 답하십시오.

개인적으로 나는 다음을 발견했다.

(41*n)>>4+((n+61)>>4)<<2점수 6.4. 나는 이것이 처음부터 자신의 표현을 제공하기가 어려울 것이라고 생각했다.


배열 역 참조 (및 친족)도 허용되지 않는 것 같습니다.
John Dvorak

예, 물론 질문을 편집했습니다.
Somnium

6
문제는 약간의 동기 부여에 의해 크게 개선 될 것입니다. 그 숫자는 어디에서 왔습니까?
피터 테일러

table lookups내가 생각하는 재미있는 문구 ...
ɐɔıʇǝɥʇuʎs

4
왜 점수에서 % 7을 계산하지 않습니까? 아마도 %를 사용하지 않는 다른 해결책이있을 수 있습니다. 0이 양수인지 , 음수인지 또는 둘 다입니까?
Thomas Weller

답변:


34

2 2.2

나는 임의의 정밀한 산술을 좋아합니다.

0x4126030156610>>(n<<2)

또는 16 진수가 마음에 들지 않으면

1146104239711760>>(n<<2)

테스트:

print([(0x4126030156610>>(n<<2))%7 for n in range(1,13)])
[0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]

4*n대신 룩업 테이블을 만들어서 다음 과 같이 작성하여 0.2 포인트를 절약 할 수 n<<2있습니까?
xnor

@xnor 절대적으로! 8 진수에서 16 진수로 바꾸는 것입니다. 초처럼
isaacg

시원한. 나는 하나의 작업 만 사용해야하기 때문에 더 잘 할 수있는 것이 없다고 확신하며 모두 너무 많은 구조 모드를 가지고있는 것 같습니다 7. 정수 바닥 부문 내 최고의 후보 const/n와 모순으로 실행 n=4하고 n=8.
xnor

@xnor 또 다른 가까운 const%n것은 n = 1,2 및 3을 제외한 모든 것을 만족시킬 수있는 것입니다.
isaacg

나는 똑같은 일을하려고했지만, 당신은 나를 이겼습니다.
ɐɔıʇǝɥʇuʎs

32

2.0

(127004 >> i) ^ 60233

또는 (점수 2.2) :

(i * 3246) ^ 130159

모든 무차별 대입 :-)


이것은 isaacg의 답변과 같은 점수이지만 64 비트 정수를 사용하지 않기 때문에이 답변을 허용되는 답변으로 선택합니다. 답변 주셔서 감사합니다!
Somnium

8
@ user2992539이 답변이 32 비트 정수를 사용하는 것이 좋지만 챌린지에이 기준을 지정하지 않아 isaacg의 답변이 완벽하게 유효합니다. 따라서 두 답변은 동점 이며이 점수를 얻은 첫 번째 답변을 수락하는 것이 공평하다고 생각합니다 . (Kudos to Super Chafouin, +1!)
Martin Ender

@ m.buettner 동의합니다. 다음에는 설명과 답변 선택에 더주의를 기울일 것입니다.
Somnium

다른 사람들이 배울 수 있도록 무차별 대입 계산 방법을 자세히 설명해 주시겠습니까?
Thomas Weller

@Thomas 방금 이중 for루프를 만들어 공식에 대한 모든 값 p, q를 테스트 (p >> i) ^ q한 다음 커피를 마시고 10 백만 후에 결과를 읽었습니다.
Arnaud

8

35.3

이것이 목록을 작성하는 가장 효율적인 방법 일지 모릅니다.

1.7801122128869781e+003 * n - 
1.7215267321373362e+003 * n ^ 2 + 
8.3107487075415247e+002 * n ^ 3 - 
2.0576746235987866e+002 * n ^ 4 + 
1.7702949291688071e+001 * n ^ 5 + 
3.7551387326116981e+000 * n ^ 6 - 
1.3296432299817251e+000 * n ^ 7 + 
1.8138635864087030e-001 * n ^ 8 - 
1.3366764519057219e-002 * n ^ 9 + 
5.2402527302299116e-004 * n ^ 10 - 
8.5946393615396631e-006 * n ^ 11 -
7.0418841304671321e+002

다항식 회귀를 계산했습니다. 다른 끔찍한 방법을 시도해보고 싶은 유혹이 있습니다.

특히 결과가 반올림되면 3.3 포인트를 절약 할 수 있습니다. 이 시점에서 나는 그것이 중요하지 않다고 생각합니다.


5

3.2

제로 기반 솔루션 :

7 & (37383146136 >> (i*3))

하나의 기반 솔루션 :

7 & (299065169088 >> (i*3))

나는 처음에 %7작업이 잘 계산되고 %여기에서 비싼 작업이라고 생각했는데, 그것을하지 않고 해결하려고했습니다.

나는 3.2와 같은 결과를 얻었습니다.

// Construction of the number
// Use 3 bits per entry and shift to correct place
long c = 0;
int[] nums = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
for (int i = nums.Length - 1; i >= 0; i--)
{
    c <<= 3;
    c += nums[i];
}
// c = 37383146136

// Actual challenge
for (int i = 0; i < 13; i++)
{
    Console.Write("{0} ",7 & 37383146136 >> i*3);
}

이 접근법을 사용하지 않고 최적화하는 데 관심이 %있습니다. 감사.


이것은 시원합니다, 아마도 이것이 언젠가 도움이 될 것입니다) 어떻게 생각합니까, 아마도 전체 수식 최소화에 대해 별도의 질문을 만들어야합니까?
Somnium

1
어때요 (0426415305230 >> (i*3)) & 7? 출력 숫자를 역순으로 볼 수 있습니다.
CJ Dennis

@ CJDennis : C #에는 8 진수가 없다고 생각합니다.
Thomas Weller

나는 그것이 단지 C라고 생각했다? C #에 대한 다른 참조를 볼 수 없습니다.
CJ 데니스

0

파이썬 (3)

요즘에는 이러한 질문이 상당히 많기 때문에 3 (또는 2) 개의 토큰으로 자동으로 해결하는 프로그램을 만들기로 결정했습니다. 이 도전에 대한 결과는 다음과 같습니다.

G:\Users\Synthetica\Anaconda\python.exe "C:/Users/Synthetica/PycharmProjects/PCCG/Atomic golfer.py"
Input sequence: 0 3 2 5 0 3 5 1 4 6 2 4
f = lambda n: (72997619651120 >> (n << 2)) & 15
f = lambda n: (0x426415305230L >> (n << 2)) & 15
f = lambda n: (0b10000100110010000010101001100000101001000110000 >> (n << 2)) & 15

Process finished with exit code 0

이것이 작동한다는 증거 :

f = lambda n: (72997619651120 >> (n << 2)) & 15

for i in range(12):
   print i, f(i)

0 0
1 3
2 2
3 5
4 0
5 3
6 5
7 1
8 4
9 6
10 2
11 4

솔버는 피연산자 비용을 어떻게 고려합니까?
Thomas Weller

@ThomasW. 항상 오른쪽 시프트, 아마도 왼쪽 시프트 (값이 1 비트가 아닌 경우) 및을 사용하지는 않습니다 &.
ɐɔıʇǝɥʇuʎs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.