Biểu thức ngắn nhất cho {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}


24

Đưa ra danh sách các số nguyên {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}. Đối với những người quan tâm những con số này được sử dụng trong tính toán ngày trong tuần.

Ngày trong tuần = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;, nơi m[n]- biểu thức tôi đang tìm kiếm, d- ngày trong tháng, y- year - (month <= 2).

Xây dựng biểu thức bao gồm các toán tử số học, logic và bitwise, sẽ xuất ra số nnguyên nguyên dương msao cho m % 7bằng số thứ n trong danh sách.

Các chi nhánh, toán tử ternary, tra cứu bảng và con trỏ không được phép.

Điểm:
1 - cho | & ^ ~ >> <<toán tử
1.1 - cho + - < > <= >= == != ! && ||toán tử
1.2 - cho *toán tử
1.4 - cho / %toán tử

Trả lời với số điểm thấp nhất sẽ thắng.

Cá nhân tôi đã tìm thấy:

(41*n)>>4+((n+61)>>4)<<2với số điểm 6.4. Tôi nghĩ rằng điều này sẽ khó tìm thấy vì vậy cung cấp biểu thức riêng để bắt đầu.


Tôi đoán rằng hội nghị truyền hình mảng (và họ hàng) cũng không được phép?
John Dvorak

Ồ, vâng tất nhiên, tôi đã chỉnh sửa câu hỏi.
Somnium

6
Câu hỏi sẽ được cải thiện rất nhiều bởi một số động lực. Những con số đó đến từ đâu?
Peter Taylor

table lookups
Phrasing

4
Tại sao không tính% 7 trong điểm số? Có lẽ có một giải pháp khác không sử dụng%. Là không tích cực , tiêu cực, cả hai hoặc không có gì?
Thomas Weller

Câu trả lời:


34

2 2.2

Tôi yêu số học chính xác tùy ý.

0x4126030156610>>(n<<2)

Hoặc, nếu bạn không thích hex,

1146104239711760>>(n<<2)

Kiểm tra:

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

Có lẽ bạn có thể tạo một bảng tra cứu 4*nthay thế và lưu 0,2 điểm bằng cách viết nó thành n<<2?
xnor

@xnor Tuyệt đối! Chỉ để chuyển từ bát phân sang thập lục phân. Cũng như giây.
isaacg

Mát mẻ. Tôi khá tin rằng không có gì có thể làm tốt hơn bởi vì nó chỉ yêu cầu sử dụng một thao tác và tất cả chúng dường như có quá nhiều mod cấu trúc 7. Ứng cử viên tốt nhất của tôi về phân chia sàn số nguyên const/nchạy vào một mâu thuẫn với n=4n=8.
xnor

@xnor Một thứ gần gũi khác const%ncó thể thỏa mãn mọi thứ trừ n = 1,2 và 3.
isaacg 17/07/14

Tôi cũng sẽ làm điều tương tự, nhưng bạn đã đánh bại tôi ...
"

32

2.0

(127004 >> i) ^ 60233

hoặc (điểm 2.2):

(i * 3246) ^ 130159

Tất cả được tìm thấy với lực lượng vũ phu :-)


Vì câu hỏi này có cùng số điểm với câu trả lời của isaacg, nhưng không sử dụng số nguyên 64 bit, nên tôi chọn đây là câu trả lời được chấp nhận. Cảm ơn bạn đã trả lời!
Somnium

8
@ user2992539 Mặc dù thật tuyệt khi câu trả lời này sử dụng số nguyên 32 bit, bạn đã không chỉ định tiêu chí này trong thử thách của mình, điều này làm cho câu trả lời của isaacg hoàn toàn hợp lệ. Do đó, hai câu trả lời ràng buộc và tôi nghĩ thật công bằng khi chấp nhận câu trả lời đầu tiên đạt được điểm này. (Mặc dù vậy, Kudos cho Super Chafouin, +1!)
Martin Ender

@ m.buettner Tôi phải đồng ý với bạn. Lần tới, tôi sẽ cẩn thận hơn với lựa chọn mô tả và trả lời.
Somnium

Đối với những người khác để tìm hiểu, bạn có thể giải thích về cách bạn đã thực hiện tính toán vũ phu?
Thomas Weller

@Thomas Tôi chỉ thực hiện một forvòng lặp kép , kiểm tra tất cả các giá trị p, q cho công thức (p >> i) ^ q, sau đó đi uống cà phê và 10 triệu sau khi đọc kết quả.
Arnaud

8

35.3

Tôi nghi ngờ đây có thể là phương pháp kém hiệu quả nhất để tạo danh sách:

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

Tôi chỉ tính toán hồi quy đa thức. Tôi muốn xem phương pháp khủng khiếp nào khác có thể được thử.

Đáng chú ý, tôi có thể lưu 3,3 điểm nếu kết quả được làm tròn. Tại thời điểm này, tôi không nghĩ rằng vấn đề.


5

3.2

Giải pháp dựa trên không:

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

Một giải pháp dựa trên:

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

Ban đầu tôi nghĩ rằng %7hoạt động cũng sẽ được tính và %là một hoạt động đắt tiền ở đây, tôi đã cố gắng giải quyết nó mà không có nó.

Tôi đã đạt được kết quả 3,2 như thế này:

// 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);
}

Tôi muốn được tối ưu hóa bằng cách sử dụng phương pháp này (không có %). Cảm ơn.


Điều này thật tuyệt, có lẽ điều này sẽ giúp tôi một ngày nào đó) Bạn nghĩ thế nào, có lẽ tôi nên tạo một câu hỏi riêng cho việc giảm thiểu toàn bộ công thức?
Somnium

1
Thế còn (0426415305230 >> (i*3)) & 7? Bạn có thể thấy các chữ số đầu ra theo thứ tự ngược lại.
CJ Dennis

@CJDennis: Tôi nghĩ rằng không có số bát phân trong C #.
Thomas Weller

Tôi nghĩ đó chỉ là C? Tôi không thể thấy bất kỳ tài liệu tham khảo nào khác về C #.
CJ Dennis

0

Con trăn (3)

Vì có khá nhiều câu hỏi trong số những ngày này, tôi quyết định tạo một chương trình để tự động giải quyết chúng trong 3 (hoặc 2) mã thông báo. Đây là kết quả cho thử thách này:

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

Bằng chứng là điều này hoạt động:

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

Làm thế nào để người giải quyết của bạn xem xét chi phí của toán hạng?
Thomas Weller

@ThomasW. Không, nó sẽ luôn sử dụng dịch chuyển phải, có thể là dịch chuyển trái (nếu các giá trị không phải là 1 bit) và một &.
18:00
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.