उत्परिवर्तित स्रोत कोड पुनर्प्राप्त करें


27

रेडियम के एक छोटे से नमूने, एक इलेक्ट्रोक्यूटेड व्हेल और तीन गमी भालू से जुड़े एक बहुत ही असामान्य दुर्घटना में, प्रबंधन के स्रोत कोड में से कुछ को उत्परिवर्तित किया गया है। थोड़ा प्रबंधन के मालिक को पता है, यह वास्तव में पुलिस © जो जिम्मेदार था, प्रबंधन की "बुराई" योजनाओं को विफल करने के प्रयास में था। तो मूल कोड को पुनः प्राप्त करने के प्रयास में रॉबर्स® को काम पर रखा गया है, क्योंकि कभी-कभी बुराई करना पसंद नहीं करता है?

नोट: यह चुनौती स्रोत कोड को खोलना से बहुत अधिक प्रेरित थी ।

विवरण

यह एक चुनौती है।

  • पुलिस एक कार्यक्रम (उत्परिवर्तित कोड) कि प्रदर्शन टास्क # 1 (और यह भी एक प्रोग्राम है जो प्रदर्शन टास्क # 2, लेकिन गुप्त रखा जाता है लिखना) लिखेगा।
  • लुटेरों "उत्परिवर्तन" को बदलने का प्रयास और कोड है कि प्रदर्शन टास्क # 2 में इस मूल कोड बदल जाएगा।

इस चुनौती में, टास्क # 1 वें प्राइम नंबर को आउटपुटn करने के लिए होगा , और टास्क # 2 को वें फाइबोनैचि नंबर (जो कि किसी भी तरह से बुरा है, कॉप्स के अनुसार © वैसे भी) के आउटपुट केn लिए होगा । फिबोनाची अनुक्रम को ( n=11; n=21; n=32; ...) के रूप में परिभाषित किया गया है, और अभाज्य संख्याओं को ( n=12; n=23; n=35; ...) के रूप में परिभाषित किया गया है ।

पुलिस का लक्ष्य टास्क # 1 और टास्क # 2 को पूरा करने वाले कार्यक्रमों के बीच अंतर को कम करना है, जबकि लुटेरों को टास्क # 2 को पूरा करने वाले कोड को फिर से बनाने से रोकना है।

कॉप नियम

कॉप्स दो प्रोग्राम लिखेंगे (एक जो टास्क # 1 को पूरा करता है, और एक जो टास्क # 2 को पूरा करता है), और निम्नलिखित जानकारी को निम्नलिखित में से एक बना देगा:

  • पहला कार्यक्रम (कि आउटपुट nवें अभाज्य संख्या)
  • Levenshtein संपादित दूरी पहला कार्यक्रम और दूसरे कार्यक्रम के बीच
  • प्रोग्रामिंग भाषा है कि दोनों कार्यक्रमों में लिखे गए हैं (दोनों कार्यक्रमों के लिए एक ही भाषा होना चाहिए)

निम्नलिखित प्रतिबंध दोनों कार्यक्रमों पर लागू होते हैं:

  • वे लंबाई या उससे कम में 128 वर्ण होने चाहिए।
  • उन्हें केवल प्रिंट करने योग्य एएससीआईआई (प्लस नईलाइन्स, जो भी अनुमत हैं) का उपयोग करना होगा।
  • उन्हें चलाने के लिए 10 सेकंड से कम समय लेना चाहिए n=45, और उन्हें किसी भी के लिए सही आउटपुट का उत्पादन करने की आवश्यकता नहीं है n>45
  • उन्हें किसी हैशिंग या क्रिप्टोग्राफिक कार्यों का उपयोग नहीं करना चाहिए।

डाकू नियम

लुटेरा पुलिस द्वारा निर्दिष्ट एडिट दूरी में टास्क # 2 (जो पुलिस द्वारा लिखित मूल कार्यक्रम नहीं है) को पूरा करने वाले प्रोग्राम में पुलिस के कार्यक्रम (जो टास्क # 1 पूरा करता है) को बदलने का प्रयास करेगा।

पहले से क्रैक किए गए सबमिशन को फिर से क्रैक नहीं किया जा सकता है (केवल एक ऐसा पहला लुटेरा जो क्रैक जमा करता है, उसे क्रेडिट मिल जाता है)।

सबमिशन क्रैक करने के बाद, कृपया निम्नलिखित करें:

  • एक जवाब पोस्ट करने के लिए इस चुनौती के साथ प्रश्न (लिंक) , भाषा, अपने समाधान है, और मूल जवाब के लिए एक लिंक प्रदान करते हैं।
  • पाठ "क्रैक" के साथ एक टिप्पणी छोड़ें जो आपके पोस्ट किए गए उत्तर के लिए लिंक करता है।
  • पुलिस के उत्तर को संपादित करें यदि आपके पास विशेषाधिकारों का संपादन है (यदि आप नहीं करते हैं, तो या तो तब तक प्रतीक्षा करें जब तक कि आवश्यक विशेषाधिकारों वाला कोई अन्य व्यक्ति आपके लिए ऐसा न करे या संपादन का सुझाव दें)।

स्कोरिंग

यदि एक पुलिस का कार्यक्रम 1 सप्ताह के लिए अनियंत्रित रहता है, तो पुलिस टास्क # 2 (निर्दिष्ट एडिट दूरी में) को पूरा करने वाले मूल कोड को पोस्ट कर सकती है, और तब से प्रस्तुत किया जाता है, जिसे "सुरक्षित माना जाता है।" सुरक्षित सबमिशन जिसमें सबसे छोटी एडिट डिस्टेंस है, वह जीत जाएगा। एक टाई की स्थिति में, सबसे छोटा प्रोग्राम (मूल जो टास्क # 1 को पूरा करता है) जीतता है। यदि दो प्रस्तुतियाँ अभी भी बंधी हुई हैं, तो पहले वाला पोस्ट जीत जाता है।

यदि कोई लुटेरा पुलिस के सबमिशन को सफलतापूर्वक क्रैक करता है, तो डकैत का स्कोर उस सबमिशन की एडिट दूरी से बढ़ जाता है। उदाहरण के लिए, एक डाकू जो 3 की संपादित दूरी के साथ एक सबमिशन क्रैक करता है और 5 की दूरी के साथ 8 अंक अर्जित करता है। उच्चतम स्कोर के साथ डाकू जीतता है। टाई होने की स्थिति में, स्कोर हासिल करने वाला डाकू पहले जीत जाता है।

लीडरबोर्ड

  1. रूबी, 6 (हिस्टोक्रेट)

लेवेंशेटिन दूरी की गणना करने के लिए एक छोटा उपकरण


1
पहली फाइबोनैचि संख्या क्या है? 0 या 1? या इससे कोई फर्क नहीं पड़ता
kukac67 3

@ kukac67 यह 1 है; मैंने पोस्ट को एडिट किया है।
दरवाज़े

अतिप्रवाह के मामले में, कार्यक्रमों का आउटपुट क्या होना चाहिए?
es1024

यह एक पूर्ण कार्यक्रम होना चाहिए या यह एक कार्य हो सकता है? अनाम फ़ंक्शन के बारे में क्या?
टिलो

2
"हैशिंग या क्रिप्टोग्राफ़िक फ़ंक्शन" के रूप में क्या मायने रखता है? क्या मैं सामान को आधार बना सकता हूं? क्या मैं बड़े एक्सपोनेंशियल मोडुलो बड़े प्राइम ले सकता हूं?
मार्टिन एंडर

जवाबों:


6

अजगर 2, दूरी = 8 [ फटा ]

from fractions import*
n=input()
k,=P=[2]
while n>len(P):k+=1;z=reduce(lambda x,y:x*y,P,1);P+=[k]*(gcd(z,k)<2)
print P[-1]

अंत में यह एक चार की सीमा के तहत मिला। बहुत कठिन नहीं होना चाहिए, लेकिन मुझे लगा कि यह विचार दिलचस्प था।


इरादा समाधान:

from fractions import* n=input() k,=P=[1] while n>len(P):k+=1;z=reduce(lambda x,y:x+y,P[:-1],1);P+=[z]*(gcd(z,k)<2) print P[-1]

इस विचार का उपयोग करना था F(n+2) = 1 + (sum over F(k) from k = 1 to n), और यह तथ्य कि लगातार फाइबोनैचि संख्याएँ प्रतिरूप हैं। 1को कम बहस में प्रदान करने के लिए चाहिए था +1

लगता है कि सामंतों को हमले की एक अलग रेखा मिली!




4

रूबी, दूरी 6 [सुरक्षित]

require'prime';p Prime.take(n=gets.to_i)[-1]
#p (((807462154311276410)**n/(5**0.5)).round)

शॉर्ट एडिट डिस्टेंस वाले फॉर्मूलों के जोड़े के साथ आना मजेदार है, लेकिन ऐसा लगता है कि यह दृष्टिकोण अधिक प्रभावी / कष्टप्रद हो सकता है। आप समझ सकते हैं कि मैंने क्या किया है, लेकिन इसका मतलब यह नहीं है कि आप इसे उलट सकते हैं।

समाधान:

require'prime';p=Prime.take(n=gets.to_i)[-1] p (((0742154311276/4e10)**n/(5**0.5)).round)

स्पष्टीकरण:

यह कोड 11 दशमलव स्थानों के लिए सुनहरा अनुपात उत्पन्न करता है और इसे सीधे Fibbonaci अनुक्रम की गणना करने के लिए उपयोग करता है। अधिकार की आवश्यक संख्या प्राप्त करने के लिए यह पर्याप्त सटीक है। यदि आप सूत्र को जानते हैं, तो यह हिस्सा बिल्कुल भी बाधित नहीं था। अपने म्यूटेशनों को उल्टा करने और निरंतर ठीक होने के लिए इसे कठिन बनाने के लिए, मैंने ऑक्टल नोटेशन (अग्रणी 0) और वैज्ञानिक अंकन (4e10) का उपयोग किया। 1e11 के बजाय 4e10 द्वारा विभाजित करने से यह अधिक दिखता है जैसे मैं .0फ्लोट डिवीजन को मजबूर करने के लिए किसी चीज से विभाजित कर रहा हूं , जब वास्तव में वैज्ञानिक संकेतन में कुछ भी होता है, किसी कारण से हमेशा रूबी में एक फ्लोट होता है, तब भी जब एक बाइनम अधिक समझ बनाने के लिए प्रतीत हो सकता है। मुझे लगा कि मैं p=सामान के साथ चालाक हो रहा हूं , लेकिन जिस तरह से मैंने इसे लिखा है, आप इसे हटा सकते हैं p। मैं कर सकता'p=दूसरी पंक्ति के p&&बजाय का उपयोग करके समाधान #, लेकिन मैंने इसके बारे में नहीं सोचा था।


eब्रूट फोर्स करते समय वहां नीचे डालने की कोशिश करने के बारे में नहीं सोचा । वास्तव में डरपोक समाधान। :)
vectorized

3

पायथन 2 - एलडी = 13 क्रैक किया गया

n=1;j=input();
while j>0:
    n+=1;j-=1;
    while~-all(n%i for i in range(2,n)):n+=1;
print n

चीजों को शुरू करने के लिए एक अच्छा, आसान (उम्मीद से ज्यादा आसान नहीं ) एक :)

ऐसा लगता है कि यह बहुत आसान था;) मुझे यह मूर्खतापूर्ण लगता है कि मैं भूल गया कि आप टिप्पणियों का उपयोग कर सकते हैं: /



3

हास्केल, दूरी = 13

import Data.List
x=id=<<snd(mapAccumL(\m n->(,)=<<(++m)$[n|and[n`mod`m1/=0|m1<-m]])[1+1][3..])
main=print.(!!)(0:2:x)=<<readLn

यह अधिक पठनीय हो सकता है, लेकिन importबहुत सारे बाइट्स खा गए, इसलिए मुझे इसे थोड़ा गोल्फ करना पड़ा।


2

रूबी, दूरी 14 ( फटा )

p [x=2,y=1,*(1..200).map{|i|y==(y*x**(i-1)+x%2).divmod(i)[x-1]?i:1}].-([x-1])[gets.to_i-1]


हम्म, आपका फाइबॉनासी अनुक्रम 0 से शुरू होता है, जहां नियम 1 से शुरू करने के लिए कहते हैं। अन्यथा चेक आउट (हालांकि मेरे इच्छित समाधान से बहुत अलग)।
हिस्टोक्रेट

ठीक है, ठीक किया गया। Fermat के btw का अच्छा उपयोग।
वेक्टरित


2

जे, दूरी = 4 [सुरक्षित]

f =: 3 :  '{. (p:) (+) / 0 , y - 1x'

समाधान:

f =: 3: '{। 2 (x :) (+%) / 0, y $ 1x '

तरीका:

भाजक {. 2(x:)निरंतर अंश का (+%)1 + 1 / (... (1 + 1 / (1 + 1 / (1 + 1 / (1))))) ।


1

अजगर 3, दूरी = 14 [ फटा ]

n = int(input())
P = [2]
k = 2
while n > len(P):
 k += 1
 for x in P:
  if k%x == 0: break
 else: P += [k]
print(k)

मेरे पास कुछ अतिरिक्त आकर्षण थे इसलिए मैंने स्पष्टता के लिए कुछ व्हाट्सएप डाल दिए :)




1

टीआई-बेसिक , दूरी 38

Input N:{2>L1:For(A,3,E99:If min(1=gcd(A,seq(A,A,2,$(A:A>L1(1+dim(L1:End:L1(N

>का प्रतिनिधित्व करता है STO→कुंजी और $वर्गमूल प्रतीक का प्रतिनिधित्व करता।


4
इनमें से कुछ अक्षर मुद्रण योग्य ASCII प्रतीत नहीं होते हैं।
feersum

@ Faersum धन्यवाद, सही किया गया। दूरी अभी भी 38 है।
टिमटेक

1

अजगर 2 - दूरी = 12 [ फटा ]

मैं खुश हूं कि यह कैसे निकला।

f=lambda p,i:p if p[45:]else f(p+[i]if all(i%q for q in p[1:])else p,-~i)
print f([1,2,3],2)[input()]

चलो देखते हैं कि कितना समय लगता है ... मुझे लगता है कि यह अभी भी टूट जाएगा।

संपादित करें: छोटा कोड एक छोटा सा, ऑपरेशन / दूरी पर कोई प्रभाव नहीं।

इरादा समाधान

मैंने बिना किसी टिप्पणी या न्यूलाइन बदलाव के जाने की कोशिश की।

f=lambda p,i:p if p[45:]else f(p+[p[i]+p[-2]]if all(i|q for q in p[1:])else p,-~i) print f([1,1,1],2)[input()]



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.