पुलिस और लुटेरों को लूटना (लुटेरे)


12

यह एक चुनौती है। इस चुनौती के लिए पुलिस का धागा यहां है

निम्नलिखित के बारे में सोचने के लिए एक दिलचस्प सवाल:

यदि मेरे पास संख्याओं का एक क्रम है, तो उनमें से कितने को मुझे प्रदान करना है इससे पहले कि यह स्पष्ट हो कि मैं किस क्रम की बात कर रहा हूँ?

उदाहरण के लिए यदि मैं से शुरू होने वाले सकारात्मक पूर्णांक के बारे में बात करना चाहता हूं 1, तो मैं कह सकता हूं , लेकिन क्या यह वास्तव में पर्याप्त है?1,2,3,

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

चुनौती

यह चुनौती एक चुनौती है। जिसमें पुलिस परीक्षण-मामलों को प्रस्तुत करेगी और लुटेरों को इच्छित अनुक्रम के अलावा परीक्षण-मामलों को बिगाड़ने के लिए एक छोटा रास्ता खोजना होगा। पुलिस निम्नलिखित बातें प्रस्तुत करेगी:

  • कोड का एक टुकड़ा जो इनपुट के रूप में एक सकारात्मक पूर्णांक लेता है और आउटपुट के रूप में पूर्णांक बनाता है। यह कोड या तो शून्य या एक अनुक्रमित हो सकता है लेकिन यह स्पष्ट होना चाहिए कि अनुक्रमण क्या है। यह कोड आपके अनुक्रम को परिभाषित करेगा।

  • किसी भी प्रासंगिक प्लेटफ़ॉर्म या भाषा की आवश्यकताएं जो आउटपुट को प्रभावित कर सकती हैं, उदाहरण के लिए लॉन्गिंट का आकार।

  • कोड द्वारा गणना के अनुसार अनुक्रम की पहली शर्तों के साथ एक संख्या । ये "परीक्षण-मामलों" के रूप में कार्य करेंगे।nnn

लुटेरों को उसी भाषा में एक प्रोग्राम मिल जाएगा जो प्रस्तुत किए गए से कम है और सभी परीक्षण मामलों को पास करता है ( पुलिस के कोड के रूप में पहले इनपुट के लिए एक ही आउटपुट का उत्पादन करता है )। लुटेरा का कोड भी पुलिस के कार्यक्रम से आउटपुट में भिन्न होना चाहिए जो कि से कुछ बड़ी संख्या के लिए है ।nnn

स्कोरिंग

लुटेरों को उन दरारों की संख्या में स्कोर किया जाएगा जो उन्हें अधिक दरारें बेहतर लगती हैं। मूल दरार की तुलना में वैध उत्तर को खोजकर एक उत्तर को फिर से क्रैक किया जा सकता है। यदि किसी उत्तर को दूसरी बार क्रैक किया जाता है तो बिंदु को पहले के बजाय दूसरे पटाखे को दिया जाता है।


2
क्या हम एक जवाब देने के लिए लुटेरों को एक दूसरे को मारने नहीं दे रहे (यानी जीतने वाली भाषा में सबसे छोटी दरार)
fɛn Junt'k

@ f @n thattɪk लगता है, अच्छा है कि मैंने जोड़ा।
तदर्थ गार्फ हंटर

जवाबों:



5

जावास्क्रिप्ट, f 17n , tɪk का जवाब (17 बाइट्स)

x=>"11237"[x]||22

वैसे यह बहुत कम स्कोर प्राप्त करने के लिए हार्डकोड करना आसान था ... किसी भी प्रविष्टि , 0-अनुक्रमित के लिए संदर्भ कार्यान्वयन से मुश्किल । यह एक बहुत अच्छी तरह से ज्ञात जेएस गोल्फिंग ट्रिक का उपयोग करता है: एक पूर्णांक के साथ अनुक्रम में अनुक्रमित करता है जो इसकी सीमा से अधिक होता है, एक मिथ्या मान ( ) लौटाता है , इसलिए इसे तार्किक या ( ) का उपयोग करके डिफ़ॉल्ट मान में लिया जा सकता है। मामला , अनुक्रम के अंतिम शब्द को संभालने के लिए लेकिन उन लोगों का पालन करने के लिए भी।एक्स6undefined||22

परिक्षण

let f=x=>"11237"[x]||22

for (x of [1,2,3,4,5,6,7]) {
  console.log(x + ' -> ' + f(x))
}

वैकल्पिक रूप से, इसे ऑनलाइन आज़माएं!


4

हास्केल , लैकोनी का जवाब , 15 बाइट्स

b n=n*div(n+1)2

इसे ऑनलाइन आज़माएं!

मैं आमतौर पर एक टिप्पणी में कुछ इस तरह से इंगित करता हूं, लेकिन फिर मैंने सोचा, पुलिस और लुटेरे थोड़े अधिक कट-गले हैं।

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

a 100000000000000000000000 = 4999999999999999580569600000000000000000000000
b 100000000000000000000000 = 5000000000000000000000000000000000000000000000

मैंने सोचा था कि यह संभव हो सकता है (इसलिए मैंने लिखा है कि इसे आवश्यक शर्तों के लिए फिर से लिखा जा सकता है), लेकिन इसके लिए कोई मूल्य नहीं मिला जिसके लिए यह काम करता है .. अच्छी तरह से किया!
ბიმო

4

पायथन 2 , xnor का जवाब , 43 बाइट्स

पहला अंतर लिए होता है :n=69

f=lambda n,p=2:n<1or-~f(n-(~-2**p%p<2),p+1)

इसे ऑनलाइन आज़माएं!

क्रेडिट

इस दरार के लिए क्रेडिट का एक बड़ा सौदा @ Mr.Xcoder को जाना चाहिए जिसने पहली बार इस पद्धति का उपयोग करके संभावित हमले के बारे में एक टिप्पणी पोस्ट की, और @PoonLevi को जिसने 44-बाइट समाधान पाया।

कैसे?

सिद्धांत

दरार Fermat की छोटी प्रमेय पर आधारित है जिसमें कहा गया है कि यदि अभाज्य है और p अपेक्षाकृत अभाज्य है, तो:pap

(1)ap11(modp)

विशेष रूप से, :a=2

2p11(modp)

तो कुछ सकारात्मक पूर्णांक मौजूद है जैसे:k

2p1=kp+1

जिससे होता है:

2p=2kp+2
2p1=2kp+1
(2)2p11(modp)

p=22

an11(modn)n

2n=341=1 1×31

2341-11(आधुनिक341)
2341-11(आधुनिक341)

341347

कार्यान्वयन

(2)

f=lambda n,p=1:n and-~f(n-(~-2**p%p==1),p+1)

<2==112110(mod1)

f=lambda n,p=1:n and-~f(n-(~-2**p%p<2),p+1)

इसे ऑनलाइन आज़माएं!

p=2

f=lambda n,p=2:n and-~f(n-(~-2**p%p<2),p+1)

इसे ऑनलाइन आज़माएं!

इसके n<1orबजाय अंतिम चाल का उपयोग करना है n and। यह सिर्फ लंबा है, लेकिन 0 के बजाय अंतिम पुनरावृत्ति को सही बनाता है , इसलिए प्रत्येक पद के लिए अनुपलब्ध ऑफसेट जोड़ रहा है।


आप सभी को बधाई! यह वह उपाय है जो मेरे मन में था। मुझे लगता है कि यह मज़ेदार है, चुनौती प्रेरणा से "अगर मेरे पास संख्याओं का एक क्रम है, तो उनमें से कितने को मुझे प्रदान करना है इससे पहले कि यह स्पष्ट है कि मैं किस अनुक्रम के बारे में बात कर रहा हूं?", पहले 50 primes स्पष्ट रूप से पर्याप्त नहीं हैं - पायथन-गोल्फिंग एलियन मान जाएगा कि आप एक अलग अनुक्रम के बारे में बात कर रहे हैं।
xnor

@xnor मुझे "पायथन-गोल्फिंग एलियन" के विचार से प्यार है
dylnan



2

हास्केल , लैकोनी का जवाब , 26 22 बाइट्स

-4 बाइट्स का उपयोग न करके div, लाईकोनी के लिए धन्यवाद !

b 42=0;b n=n*div(n+1)2

इसे ऑनलाइन आज़माएं!

व्याख्या

के लिए 0n20ceiling(realToFrac n/2)div(n+1)2n>20

b 42=0

आह, मैंने ऐसा नहीं सोचा था। मेरे पास एक अलग दृष्टिकोण है जो उस मामले में 20 बाइट्स दरार की ओर जाता है जब आप थोड़ा और पहेली बनाना चाहते हैं। इसके अलावा ((n+1)`div`2)-> div(n+1)2
लकोनी

@ लिकोनी: हाँ, यह अभी तक प्रकट नहीं करते हैं! ओह, हाँ, यह काफी समय हो गया है क्योंकि मैंने कुछ गोल्फिंग की है, मैं इसे अपडेट करूँगा।

2

> <> , क्रैशोज का जवाब 203 बाइट्स

:l2-$g:0=?;n:





M
-
B
"
BM
",
7M
!"
BBM
!",
7CM
!"-
BBBM
!!",
7BBMM
!!,,
7BBBMM
!!,,
7BBBMM
!!!,,
7BBBBMM
!!!,,
7BBBBMM
!!!!,,
7BBBBBMM
!!!!,,
7BBBBBMM
!!!!!,,
7BBBBBBMM

इसे ऑनलाइन आज़माएं!

मैं इस तथ्य के साथ कुछ चालाक करने जा रहा था कि ऊपर / विषम संख्याएं n=20केंद्र में एक दोहराए गए तत्व को छोड़कर समान थीं, लेकिन हर तत्व को केवल कठिन कोड करना आसान था।

इनपुट -vझंडे के माध्यम से है । 34 से ऊपर के तत्वों के लिए प्रिंट कुछ भी नहीं है।


2

पास्कल (एफपीसी) , एलेक्सर के जवाब , 80 बाइट्स

var n,m:word;begin read(n);while n<>0 do begin n:=n div 2;m:=m+n;end;write(m)end.

इसे ऑनलाइन आज़माएं!

0n120n=128127126

यह देर से उत्तर लगता है, लेकिन वैसे भी @AlexRacer एक अच्छी पहेली के लिए धन्यवाद!


1
वाह, यह मेरे द्वारा की गई तुलना में भी कम है। PPCG में आपका स्वागत है!
AlexRacer

1

जावास्क्रिप्ट, fɛn , tɪk का जवाब (12 बाइट्स)

x=6

x=>2.72**x|0

परिक्षण

g=
x=>2.72**x|0

tmp=[0,1,2,3,4]
console.log(tmp.map(g).join(','))

वैकल्पिक रूप से, इसे ऑनलाइन आज़माएं!


1

जावास्क्रिप्ट, f 17n , tɪk का जवाब (17 बाइट्स)

15

x=>2.7182819**x|1

n1415x=>Math.exp(x)|1 16 बाइट्स के लिए के रूप में अच्छी तरह से काम करेगा।

परिक्षण

f=x=>2.7182819**x|1
g=x=>(3-(5/63)**.5)**x|1

tmp=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]
console.log(tmp.map(f).join(","))
console.log(tmp.map(g).join(","))

वैकल्पिक रूप से, इसे ऑनलाइन आज़माएं!


1

भूसी ,  3 के  साथ बीएमओ के 5 बटर क्रैकिंग 2 बाइट्स के

-1 बीएमओ के लिए धन्यवाद ( LdΣ-> जब से, एक दिया Tnum, L"स्ट्रिंग प्रतिनिधित्व की लंबाई" करता है)

इसे ऑनलाइन आज़माएं!

(0)(23)(24)
3←d+164

टी(0)=010


बधाई हो, यह मेरा सटीक समाधान था! हालांकि मैं सिर्फ ने कहा कि के लिए TNum रों Lऔर Ld बराबर हैं बचत आप एक बाइट;)
ბიმო

आह, मैंने डिजिटल-लंबाई खोजने की कोशिश करने के लिए विकी में "अंक" की खोज की, लेकिन इसके Lलिए "स्ट्रिंग प्रतिनिधित्व की लंबाई" के रूप में ओवरराइड नहीं किया Tnum
जोनाथन एलन

(ध्यान दें कि वे केवल गैर-नकारात्मक पूर्णांक के लिए बराबर हैं - इसके लिए काफी अच्छा है।)
जोनाथन एलन

1

> <> , आइडेन एफ। पियर्स का जवाब , 36 बाइट्स

v101786
i5844
419902
%
>l{:}g:0=?;o:

इसे ऑनलाइन आज़माएं!

प्रत्येक मान के साथ एक और समाधान प्रति पंक्ति हार्डकोड किया गया। चूँकि मूल उत्तर भी ज्यादातर हार्ड-कोडेड था, इसलिए मैं इस बारे में बहुत दोषी नहीं हूँ।


0

जावास्क्रिप्ट, f 23n , tɪk का जवाब , 23 बाइट्स

0n14

x=>14-`${73211e9}`[x]|0

इसे ऑनलाइन आज़माएं!

कैसे?

अभिव्यक्ति `${73211e9}`स्ट्रिंग में फैलती है "73211000000000", 14 से घटने वाले 14 मानों की एक लुकअप तालिका प्रदान करती है, जो अपेक्षित अनुक्रम देती है।

n14

(14 - undefined) | 0
=== NaN | 0
=== 0

21 बाइट्स

NaNn14

x=>14-`${73211e9}`[x]

इसे ऑनलाइन आज़माएं!

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