स्लॉट मशीन हैकर


17

समस्या: फेसबुक हैकर कप 2011 राउंड 1 बी से स्लॉट मशीन हैकर

लक्ष्य: स्टड / स्टडआउट का उपयोग करके अपनी पसंदीदा भाषा में सबसे छोटा कोड। आप getRandomNumberपरिभाषित नहीं कर सकते हैं , यानी आपके समाधान में एक संभावित गोल्फ संस्करण को एक फ़ंक्शन के रूप में या किसी अन्य तरीके से शामिल करना है।

संदर्भ समाधान: SO पर [मैंने मेरा चयन किया, क्योंकि यह stdin / stdout का उपयोग करता है और मैं dave के समाधान के बारे में अनिश्चित हूं।]

समस्या पाठ इस प्रकार है:

आपने हाल ही में एक लड़के से दोस्ती की है जो स्लॉट मशीनों के लिए सॉफ्टवेयर लिखता है। उसके साथ थोड़ा बाहर घूमने के बाद, आप देखते हैं कि उसके पास यह जानने के लिए पेनकंट है कि स्लॉट मशीन कैसे काम करती है। आखिरकार आप उसे सटीक विवरण के लिए वर्णन करने के लिए प्राप्त करते हैं, जो कि मशीन के किसी विशेष ब्रांड में उपयोग किए जाने वाले एल्गोरिदम है। एल्गोरिथ्म इस प्रकार है:

int getRandomNumber() {
  secret = (secret * 5402147 + 54321) % 10000001;
  return secret % 1000;
}

यह फ़ंक्शन [0, 999] में पूर्णांक संख्या देता है; प्रत्येक अंक एक दस प्रतीकों का प्रतिनिधित्व करता है जो एक विशेष मशीन की स्थिति के दौरान एक पहिया पर दिखाई देते हैं। गुप्त शुरू में आप के लिए अज्ञात कुछ अप्राप्य मूल्य पर सेट है।

लंबे समय तक मशीन के संचालन का अवलोकन करके, आप गुप्त मूल्य निर्धारित कर सकते हैं और इस प्रकार भविष्य के परिणामों की भविष्यवाणी कर सकते हैं। भविष्य के परिणामों को जानने से आप स्मार्ट तरीके से दांव लगा पाएंगे और बहुत सारे पैसे जीत पाएंगे।

इनपुट

इनपुट की पहली पंक्ति में सकारात्मक संख्या टी , परीक्षण मामलों की संख्या शामिल है। इसके बाद टी परीक्षण के मामले हैं। प्रत्येक परीक्षण मामले में एक सकारात्मक पूर्णांक N होता है , आपके द्वारा किए जाने वाले अवलोकन की संख्या। अगले N टोकन 0 से 999 तक पूर्णांक हैं जो आपकी टिप्पणियों का वर्णन करते हैं।

उत्पादन

प्रत्येक परीक्षण मामले के लिए, अगले 10 मूल्यों को आउटपुट करें जो कि व्हाट्सएप द्वारा अलग किए गए मशीन द्वारा प्रदर्शित किए जाएंगे। यदि आपके द्वारा देखा गया अनुक्रम आपके मित्र द्वारा बताई गई मशीन द्वारा उत्पादित नहीं किया जा सकता है, तो "Wrong machine"इसके बजाय प्रिंट करें । यदि आप अगले 10 मानों को विशिष्ट रूप से निर्धारित नहीं कर सकते हैं, तो "Not enough observations"इसके बजाय प्रिंट करें ।

प्रतिबन्ध

  • टी = 20
  • 1 ≤ एन ≤ 100
  • इनपुट में टोकन 3 वर्णों से अधिक लंबे नहीं हैं और इनमें केवल 0-9 अंक हैं।

उदाहरण इनपुट

5
1 968 
3 767 308 284 
5 78 880 53 698 235 
7 23 786 292 615 259 635 540 
9 862 452 303 558 767 105 911 846 462 

उदाहरण आउटपुट

Not enough observations
577 428 402 291 252 544 735 545 771 34
762 18 98 703 456 676 621 291 488 332
38 802 434 531 725 594 86 921 607 35
Wrong machine

जवाबों:


3

पायथन, 293 वर्ण

import sys
n=1e7+1
for s in[map(int,x.split())for x in sys.stdin][1:]:
 Q=[]
 for i in range(s[1],n,1e3):A=[i];R=[A.append((A[-1]*5402147+54321)%n)or A[-1]%1e3for x in[0]*8+s];Q+=[R[-10:]]*(R[:-10]==s[2:])
 print Q and["%d "*10%tuple(Q[0]),"Not enough observations"][len(Q)>1]or"Wrong Machine"

2

पायथन, 316 वर्ण

C=10**7+1
G=lambda:(s*5402147+54321)%C
import sys
I=map(int,sys.stdin.read().split())[1:]
while I:
 n=I[0]+1;S=range(C)
 for x in I[1:n]:S=[G()for s in S if s%1000==x]
 if len(S)-1:V="Not enough observations"if S else"Wrong machine"
 else:
  s=S[0];V=""
  for i in range(10):V+="%d "%(s%1000);s=G()
 print V;I=I[n:]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.