कल्पना कीजिए कि आप दो बक्से है B(x)
और B(y)
, प्रत्येक एक अज्ञात सा युक्त - 0 या 1, और एक मशीन F
है कि कर सकते हैं एक्स-रे के लिए उन्हें और के लिए एक तीसरे बॉक्स उत्पादन B(x^y)
( XOR )। F
गणना B(x*y)
( और ) भी कर सकते हैं । वास्तव में, उन एकल ऑपरेशन के विशेष मामले हैं जो मशीन प्रदर्शन कर सकती है - आंतरिक उत्पाद प्रत्येक , F()
नीचे के साथ चिह्नित ।
दो समान-लंबाई सरणियों के लिए
[B(x[0]), B(x[1]), ..., B(x[n-1])]
[B(y[0]), B(y[1]), ..., B(y[n-1])]
आंतरिक उत्पाद के रूप में परिभाषित किया गया है
B(x[0]*y[0] ^ x[1]*y[1] ^ ... ^ x[n-1]*y[n-1])
" प्रत्येक " का अर्थ है F()
के कई जोड़े संसाधित कर सकते हैं x[]
, y[]
एक ही बार में। एक x[]
और y[]
एक जोड़ी की लंबाई समान होनी चाहिए; x[]
-s और y[]
-s अलग-अलग जोड़े से जरूरी नहीं है।
बक्से को अद्वितीय पूर्णांक आईडी द्वारा दर्शाया जाता है।
जावास्क्रिप्ट में प्रत्येक आंतरिक उत्पाद का कार्यान्वयन जैसा दिख सकता है
var H=[0,1]; // hidden values, indexed by boxId
function B(x) { // seal x in a new box and return the box id
return H.push(x)-1;
}
function F(pairs) { // "inner product each"
return pairs.map(function (pair) {
var r = 0, x = pair[0], y = pair[1];
for (var i = 0; i < x.length; i++) r ^= H[x[i]] * H[y[i]];
return B(r);
})
}
(कृपया अपनी पसंद की भाषा में उपरोक्त अनुवाद करें।)
F()
अपनी भाषा के लिए उपयुक्त तरीके से क्रियान्वयन को देखते हुए (लेकिन कोई एक्सेस H
या नहीं B()
) और दिए गए बॉक्स आईडी के दो सरणियों को दो पूर्णांकों के 16-बिट बाइनरी अभ्यावेदन के साथ दिया a
और b
, आपका कार्य 16-बिट बाइनरी प्रतिनिधित्व के लिए बॉक्स आईडी का उत्पादन करना है। की a+b
न्यूनतम संख्या के साथ (ओवरफ्लो को त्यागना) F()
।
सबसे F()
कम बार कॉल करने वाला समाधान जीत जाता है। कुल x[],y[]
जोड़ियों F()
को गिनने से संबंध टूट जाएंगे - कम बेहतर है। यदि अभी भी बंधा हुआ है, तो आपके कोड का आकार ( F()
इसके सहायकों के कार्यान्वयन को छोड़कर ) पारंपरिक कोड गोल्फ तरीके से विजेता को निर्धारित करता है। कृपया अपने उत्तर के लिए "MyLang, 123 कॉल, 456 जोड़े, 789 बाइट्स" जैसे शीर्षक का उपयोग करें।
एक समारोह या एक पूरा कार्यक्रम लिखें। इनपुट / आउटपुट / दलीलें / परिणाम किसी भी उचित प्रारूप में आंतरिक सरणियाँ हैं। बाइनरी प्रतिनिधित्व थोड़ा- या बड़ा-एंडियन हो सकता है - एक को चुनें।
परिशिष्ट 1: चुनौती को थोड़ा आसान बनाने के लिए, आप मान सकते हैं कि आईडी 0 और 1 वाले बक्से में 0 और 1 के मान हैं। यह आपको स्थिरांक देता है, जैसे कि निषेध के लिए उपयोगी ( x^1
"नहीं")। स्थिरांक की कमी के आसपास तरीके थे, निश्चित रूप से, लेकिन बाकी चुनौती वैसे भी काफी कठिन है, तो चलिए इस व्याकुलता को खत्म करते हैं।
परिशिष्ट 2: इनाम जीतने के लिए, आपको निम्नलिखित में से एक करना होगा:
समय सीमा से पहले अपना स्कोर (कॉल, जोड़े, बाइट) और अपना कोड पोस्ट करें
समय सीमा से पहले अपने स्कोर और अपने कोड के एक sha256 हैश पोस्ट; फिर समय सीमा के बाद 23 घंटे के भीतर वास्तविक कोड पोस्ट करें
y=f(x)
और x
निर्भर रहने दूंगा y
।
data Box = B Int deriving (Show); f :: [[[Box]]] -> [Box]
मुझे यह जानने के लिए अधिक समय की आवश्यकता होगी कि कैसे लागू किया जाए f
(हास्केल फोर्स लोअरकेस यहां) - मैं इसे कल आजमाऊंगा।
F
केवल एक बार मूल्य पुनरावर्तन और कॉल का उपयोग कर सकता था । यह निश्चित रूप से धोखा होगा, लेकिन मुझे यकीन नहीं है कि यह अच्छा धोखा या बुरा धोखा होगा।