{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}। उन लोगों के लिए जो इन संख्याओं में रुचि रखते हैं, का उपयोग कार्यदिवस की गणना में किया जाता है।

वीकडे = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;, जहाँ m[n]- जहाँ मैं खोज रहा हूँ, d- महीने का दिन, y- year - (month <= 2)

अंकगणित, तर्क और बिटवाइज़ ऑपरेटरों से मिलकर अभिव्यक्ति का निर्माण करें, जो सकारात्मक पूर्णांक nपूर्णांक के लिए आउटपुट करेगा mताकि m % 7सूची में एन-वें नंबर के बराबर हो।

शाखाएँ, टर्नरी ऑपरेटर, टेबल लुकअप और पॉइंटर्स की अनुमति नहीं है।

स्कोर:
1 - | & ^ ~ >> <<ऑपरेटरों के लिए
1.1 - + - < > <= >= == != ! && ||ऑपरेटरों के लिए
1.2 - *ऑपरेटर के लिए
1.4 - / %ऑपरेटरों के लिए

सबसे कम स्कोर जीत के साथ जवाब दें।

व्यक्तिगत रूप से मैंने पाया है:

(41*n)>>4+((n+61)>>4)<<2स्कोर 6.4 के साथ। मैंने सोचा था कि इसे शुरू करने के लिए स्वयं की अभिव्यक्ति प्रदान करना कठिन होगा।


मुझे लगता है कि सरणी डेरेफेरिंग (और परिजनों) को अनुमति नहीं है?
जॉन ड्वोरक

ओह, हां, निश्चित रूप से, मैंने प्रश्न संपादित किया है।
सोमनीम

6
सवाल कुछ प्रेरणा से बहुत सुधार होगा। वे संख्याएँ कहाँ से आती हैं?
पीटर टेलर

table lookupsदिलचस्प बात यह है कि मुझे लगता है ...
.ı .u Juls

4
% 7 को स्कोर में क्यों नहीं गिना जाता? शायद वहाँ एक और समाधान% का उपयोग नहीं कर रहा है। क्या शून्य सकारात्मक , नकारात्मक, दोनों है या कुछ भी नहीं है?
थॉमस वेलर

जवाबों:


34

२.२

मुझे मनमाना सटीक अंकगणित पसंद है।

0x4126030156610>>(n<<2)

या, यदि आपको हेक्स पसंद नहीं है,

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 बिल्कुल! बस अष्टदल से हेक्साडेसिमल पर स्विच करने के लिए। बस सेक के रूप में।
इसाॅग

ठंडा। मुझे पूरा यकीन है कि कुछ भी बेहतर नहीं हो सकता क्योंकि इसके लिए केवल एक ऑपरेशन का उपयोग करने की आवश्यकता होगी, और वे सभी बहुत अधिक संरचना मॉड लगते हैं 7। पूर्णांक मंजिल विभाजन का मेरा सबसे अच्छा उम्मीदवार के const/nसाथ एक विरोधाभास में चलता है n=4और n=8
xnor

@xnor एक और करीबी const%nजो n = 1,2 और 3. को छोड़कर सब कुछ संतुष्ट कर सकता है
isaacg

मैं वही काम करने जा रहा था, लेकिन तुमने मुझे इसके लिए हरा दिया ...
ʇǝɥʇıʎu Juls

32

2.0

(127004 >> i) ^ 60233

या (स्कोर 2.2):

(i * 3246) ^ 130159

सभी जानवर बल के साथ पाए गए :-)


चूँकि इसमें isaacg के उत्तर के समान स्कोर है, लेकिन 64-बिट पूर्णांक का उपयोग नहीं करता है, इसलिए मैं इसे स्वीकृत उत्तर के रूप में चुन रहा हूं। उत्तर देने के लिए आपका शुक्रिया!
सोमनि

8
@ user2992539 हालांकि यह अच्छा है कि यह उत्तर 32-बिट पूर्णांक का उपयोग करता है, आपने अपनी चुनौती में इस मानदंड को निर्दिष्ट नहीं किया है, जो इसहाक के उत्तर को पूरी तरह से मान्य बनाता है। इसलिए, दो जवाब टाई करते हैं और मुझे लगता है कि यह पहला स्कोर स्वीकार करना ही उचित है । (कुडोस टू सुपर चाफिन, हालांकि, +1!)
मार्टिन

@ m.buettner मुझे आपसे सहमत होना है। अगली बार, मैं विवरण और उत्तर चयन के साथ अधिक सावधान रहूंगा।
सोमनियम जूल

दूसरों को सीखने के लिए, क्या आप इस बात पर विस्तार से बता सकते हैं कि आपने पाशविक बल गणना कैसे की?
थॉमस वेलर

@ थोमस मैंने सिर्फ एक डबल forलूप बनाया , सूत्र के लिए सभी मान p, q का परीक्षण किया (p >> i) ^ q, फिर एक कॉफी लेने गया, और परिणाम पढ़ने के लिए 10 mn आया।
अरनौद

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

मैं इस दृष्टिकोण (बिना %) का उपयोग किए अनुकूलन में दिलचस्पी लूंगा । धन्यवाद।


यह अच्छा है, शायद यह मुझे किसी दिन मदद करेगा) आप कैसे सोचते हैं, शायद मुझे पूरे फॉर्मूला कम से कम करने के लिए अलग प्रश्न बनाना चाहिए?
सोमनियम

1
कैसे के बारे में (0426415305230 >> (i*3)) & 7? आप आउटपुट अंकों को रिवर्स ऑर्डर में देख सकते हैं।
CJ डेनिस

@CJDennis: मुझे लगता है कि C # में कोई ऑक्टल नंबर नहीं हैं।
थॉमस वेलर

मैंने सोचा कि यह सिर्फ सी था? मैं C # के लिए कोई अन्य संदर्भ नहीं देख सकता।
सीजे डेनिस

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

आपका सॉल्वर ऑपरेंड की लागत को कैसे मानता है?
थॉमस वेलर

@ThomasW। यह नहीं है, यह हमेशा एक सही बदलाव का उपयोग करेगा, संभवतः एक बाईं पारी (यदि मान 1 बिट नहीं हैं) और ए &
atı 12:uʎs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.