क्या यह एक साइक्लोप्स संख्या है? "कोई नहीं जानता!


66

कार्य:

एक पूर्णांक इनपुट को देखते हुए, यह पता लगाएं कि यह साइक्लोप्स नंबर है या नहीं।

साइक्लोप्स संख्या क्या है, आप पूछ सकते हैं? खैर, यह एक संख्या है जिसका द्विआधारी प्रतिनिधित्व केवल 0केंद्र में है!

परीक्षण के मामलों:

Input | Output | Binary  | Explanation
--------------------------------------
0     | truthy | 0       | only one zero at "center"
1     | falsy  | 1       | contains no zeroes
5     | truthy | 101     | only one zero at center
9     | falsy  | 1001    | contains two zeroes (even though both are at the center)
10    | falsy  | 1010    | contains two zeroes
27    | truthy | 11011   | only one zero at center
85    | falsy  | 1010101 | contains three zeroes
101   | falsy  | 1100101 | contains three zeroes
111   | falsy  | 1101111 | only one zero, not at center
119   | truthy | 1110111 | only one zero at center

इनपुट:

  • एक पूर्णांक या समकक्ष प्रकार। ( int, long, decimal, आदि)

  • मान लें कि यदि एक पूर्णांक अतिप्रवाह या अन्य अवांछनीय समस्याओं में इनपुट परिणामों का मूल्यांकन किया जाता है, तो उस इनपुट का मूल्यांकन नहीं किया जाना चाहिए।

आउटपुट:

  • सत्य या मिथ्या।

  • ट्रू / फाल्सी आउटपुट ट्रू / फैल्सी के लिए इस्तेमाल की गई भाषा के विनिर्देशों को पूरा करना चाहिए। (जैसे सी के 0रूप में झूठी, गैर शून्य के रूप में सच है)

चुनौती नियम:

  • इनपुट जो 0 से कम है, उसे मिथ्या माना जाता है और इस प्रकार उसका मूल्यांकन नहीं किया जाता है।

  • यदि संख्या के द्विआधारी प्रतिनिधित्व की लंबाई समान है, तो संख्या Cyclops संख्या नहीं हो सकती है।

सामान्य नियम:


यह मेरी पहली प्रोग्रामिंग पहेलियाँ और कोड गोल्फ चुनौती है, इसलिए मुझे कैसे सुधार करना चाहिए इस पर कोई प्रतिक्रिया बहुत सराहना की जाएगी!


25
ध्यान दें: यह है A129868
TSH

35
शीर्षक में 2800 वर्ष देर से पॉप संस्कृति संदर्भ के लिए +1
Sanchises

परीक्षण की जाने वाली अधिकतम संख्या क्या है?
सर्वरोग

@Serverfrog चूंकि मैंने कोई सीमा निर्दिष्ट नहीं की है, इसलिए मान लें कि किसी भी सकारात्मक पूर्णांक का परीक्षण किया जा सकता है।
ताऊ

बाइनरी इनपुट की अनुमति है?
Qwertiy

जवाबों:


11

जाप, 8 बाइट्स

1¥¢q0 äè

इसे ऑनलाइन चलाएं

स्पष्टीकरण:

1¥¢q0 äè   
                                                              119
  ¢          // Convert the input into a binary string        "1110111"
   q0        // Split the string on "0"                       ["111","111"]
      ä      // Reduce each item by:                            a     b
       è     //   Seeing how many times a is found in b       [1]
 1¥          // == 1; See if the result equals 1              True                                         

यह विचार बाइनरी स्ट्रिंग को विभाजित करने के लिए है 0, जो केवल एक होने पर दो वस्तुओं का उत्पादन करेगा 0। फिर हम देखते हैं कि क्या यह सुनिश्चित करने के लिए पहला आइटम दूसरे से मेल खाता है कि क्या यह स्पष्ट है। यदि बाइनरी स्ट्रिंग में कई 0एस होते हैं, तो कम एक बहु-आइटम सरणी लौटाएगा और यह ==1स्थिति को विफल कर देगा । यदि बाइनरी स्ट्रिंग में एक होता है 0, लेकिन पेलिंड्रोमिक नहीं है, äèतो वापस आ जाएगी 0क्योंकि bइसमें 0मैच होते हैं a


1
मेरे पूर्व कैफीनयुक्त मस्तिष्क को कुछ सेकंड के लिए देख लिया कि यहाँ क्या हो रहा था! अच्छी तरह से किया। काम भी करना चाहिए।
झबरा

1
मैं जाप को नहीं जानता, लेकिन अगर मैं सही ढंग से समझूं तो यह निम्न कार्य करता है: ¤= बाइनरी में कनवर्ट करें; q0= 0 पर विभाजित; äèमुझे पूरा यकीन नहीं है ..; और ध्वज -Nसूचियों को परिवर्तित करता है NaN, लेकिन पत्तियां 0और 1समान। के लिए äèभाग मैं देख सकता हूँ कि 119है [111,111]विभाजन, जिसके बाद äèमें बदल जाती है 1; और 85है [1,1,1,1]विभाजन, जिसके बाद äèमें बदल जाती है [1,1,1]। क्या आप बता सकते हैं कि कैसे .ä("è")काम करता है?
केविन क्रूज़सेन

2
@ केविनक्रूजसेन मैंने एक स्पष्टीकरण जोड़ा। मुझे आशा है कि वह मदद करेंगे।
ओलिवर

1
क्या NaNजाप में मिथ्या है? (यानी यदि आप इसके साथ एक और प्रदर्शन करते हैं, जैसा कि स्थिति निष्पादित होने पर करता है? "ट्रू / फाल्सी आउटपुट के लिए सत्य / मिथ्या के लिए इस्तेमाल की गई भाषा के विनिर्देशों को पूरा करना होगा") 2पैदावार 2जो मुझे संदेह है वह गलत है (लेकिन हो सकता है कि जाप हो 05AB1E की तरह है)।
जोनाथन एलन

1
जेएस ने 0माना कि सत्य के अलावा किसी भी पूर्णांक को सत्य माना जाता है ... हालांकि, यदि सत्य के रूप 2में वापस आ रहा है 2, तो इस सबमिशन को वापस लेने की आवश्यकता हो सकती है।
ताउ

21

पायथन 2 , 30 बाइट्स

lambda n:(2*n^2*n+3)**2==8*n+9

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

ध्यान दें कि 2*n^2*n+3बिटकॉइन का xor है 2*nऔर 2*n+3, क्योंकि वह पायथन के ऑपरेटर पूर्वता है।


1
क्या साइक्लोप्स नंबरों के lambda n:(2*n^2*n+3)**2-8*n-9रिटर्न वैल्यू के साथ वापसी करना स्वीकार्य होगा 0?
एरिक डुमिनील

2
यह पैदावार TRUEके लिएn = -1
user2390246

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

3
@SolomonUcko नकारात्मक संख्याओं को आम तौर पर दो पूरक पूरक प्रतिनिधित्व में संग्रहीत किया जाता है। पहले निश्चित आकार के पूर्णांक (उदाहरण के लिए 32 बिट) पर विचार करें। अन्य गुणों में, TCR की आवश्यकता है कि MSB नकारात्मक संख्याओं में 1 है, और सकारात्मक में 0 है। यह तुरंत आवश्यकता होगी कि सभी सकारात्मक आउटपुट झूठे हैं। अजगर में हालांकि हम एक समस्या का और भी अधिक है। सबसे महत्वपूर्ण दिशा में नकारात्मक संख्या में 1s का अनंत क्रम है। गुड लक उस के मध्य को खोजने की कोशिश कर रहा है
ड्रीमकन्सपाइरी

2
@ user2390246 समस्या को तब से संपादित किया गया था जब यह स्पष्ट किया गया था कि हमारे कोड को नकारात्मक के लिए काम करने की आवश्यकता नहीं है। इसे 2 बाइट्स के लिए जोड़ा जा सकता है >1
xnor

18

x86 मशीन कोड, 17 ​​बाइट्स

8D 47 01 31 F8 89 C2 F7 D2 0F AF C2 8D 44 78 02 C3

उपरोक्त बाइट्स एक फ़ंक्शन को परिभाषित करता है जो एक 32-बिट पूर्णांक इनपुट मूल्य को स्वीकार करता है ( EDIइस उदाहरण के लिए रजिस्टर में, एक सामान्य सिस्टम वी कॉलिंग कन्वेंशन के बाद, लेकिन आप वास्तव में बहुत अधिक किसी भी इनपुट रजिस्टर को चुन सकते हैं जिसे आप परिणाम के आकार को प्रभावित किए बिना चाहते थे। कोड), और एक परिणाम देता है ( EAXरजिस्टर में) यह दर्शाता है कि इनपुट मूल्य एक साइक्लोप्स संख्या है।

इनपुट को एक अहस्ताक्षरित पूर्णांक माना जाता है, क्योंकि चुनौती नियम कहते हैं कि हम नकारात्मक मूल्यों को अनदेखा कर सकते हैं।

निर्णय के तर्क को नील के उत्तर से उधार लिया गया है : चूँकि एक साइक्लॉप्स संख्या में , हम बिट-ट्विडलिंग संचालन की एक श्रृंखला का उपयोग कर सकते हैं। इनपुट।n=(2k+1)(2k11)

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

असेंबली लैंग्वेज मेंमिक्स, यह है:

; EDI = input value
; EAX = output value (0 == Cyclops number)
8D 47 01           lea    eax, [edi + 1]          ; \ EAX = ((EDI + 1) ^ EDI)
31 F8              xor    eax, edi                ; /
89 C2              mov    edx, eax                ; \ EDX = ~EAX
F7 D2              not    edx                     ; /
0F AF C2           imul   eax, edx                ; EAX *= EDX
8D 44 78 02        lea    eax, [eax + edi*2 + 2]  ; EAX  = (EAX + (EDI * 2) + 2)
C3                 ret                            ; return, with EAX == 0 for Cyclops number

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


जैसा कि वादा किया गया है, अगर आपको लगता है कि यह मशीन कोड में भी सत्य / झूठ के शब्दार्थ को उलटने के लिए धोखा दे रहा है जहां कोई वास्तविक मानक या रूढ़ि नहीं हैं, तो कुल 21 बाइट्स के लिए तीन और बाइट्स जोड़ें :

; EDI = input value
; AL  = output value (1 == Cyclops number)
8D 47 01           lea    eax, [edi + 1]          ; \ EAX = ((EDI + 1) ^ EDI)
31 F8              xor    eax, edi                ; /
89 C2              mov    edx, eax                ; \ EDX = ~EAX
F7 D2              not    edx                     ; /
0F AF C2           imul   eax, edx                ; EAX *= EDX
8D 44 78 01        lea    eax, [eax + edi*2 + 1]  ; EAX  = (EAX + (EDI * 2) + 1)
40                 inc    eax                     ; EAX += 1
0F 94 C0           setz   al                      ; AL = ((EAX == 0) ? 1 : 0)
C3                 ret                            ; return, with AL == 1 for Cyclops number

इस कोड की पहली छमाही मूल ( imulनिर्देश के माध्यम से ) के समान है। यह leaलगभग समान है, लेकिन एक निरंतर 2 को जोड़ने के बजाय, यह केवल एक निरंतर 1 जोड़ता है। ऐसा इसलिए है क्योंकि निम्न incनिर्देश EAXझंडे को सेट करने के लिए रजिस्टर में 1 से मूल्य बढ़ाता है । यदि "शून्य" ध्वज सेट है, तो setzनिर्देश AL1 पर सेट हो जाएगा ; अन्यथा, AL0. पर सेट किया जाएगा। यह एक मानक तरीका है कि एक सी कंपाइलर मशीन कोड को वापस करने के लिए उत्पन्न करेगा bool

leaनिर्देश में निरंतर जोड़ा जाने से स्पष्ट रूप से कोड आकार में परिवर्तन नहीं होता है, और incनिर्देश बहुत छोटा (केवल 1 बाइट) है, लेकिन setzनिर्देश एक अधिक विस्तृत 3 बाइट्स है। दुर्भाग्य से, मैं इसे लिखने के किसी भी छोटे तरीके के बारे में नहीं सोच सकता।


4
यह बहुत तेज़ है, मुझे लगता है कि यह एक बड़े मूल्य तक सभी नंबरों का परीक्षण करके दिखावा करने का हकदार है: इसे ऑनलाइन आज़माएं!
डेडकोड

यह वास्तव में भी तेज होना चाहिए, @Deadcode। :-) इनलाइन असेंबली के साथ प्रदर्शित करना कुछ ओवरहेड जोड़ता है, लेकिन बाइट्स के एक स्ट्रिंग में कूदने की मेरी पुरानी चाल (उदाहरण के लिए, इस उत्तर ) ने TIO के संकलक के साथ काम करना बंद कर दिया है, और विधानसभा में सीधे परिणाम प्रिंट करने के लिए कोड लिखना बहुत अधिक है साथ परेशान करने के लिए काम करते हैं। यह उन असामान्य मामलों में से एक है, हालांकि, जहां आकार के लिए अनुकूलन गति के लिए अनुकूलन के साथ बाधाओं पर नहीं है। यदि आप आकार से अधिक गति के लिए जा रहे हैं तो यह कोड को asm में लिखना होगा।
कोड़ी ग्रे

सर्वसम्मति से, यह asm सबमिशन कोडगुल्फ.स्टैकएक्सचेंज . com/a/165020/84624 और stackoverflow.com/questions/48381234/ में स्टेटस फ्लैग वापस करने के लिए अस्वीकार्य नहीं है । यदि हां, तो आप अपने दूसरे उत्तर से 3 कर सकते हैं।
640KB

9

रेगेक्स (ईसीएमएस्क्रिप्ट), 60 58 57 60 58 बाइट्स

इनपुट , unary में है, s की एक स्ट्रिंग की लंबाई के रूप में ।nx

स्पिनर चेतावनी : वर्गमूल के लिए, यह रेगेक्स सामान्यीकृत गुणन एल्गोरिथ्म के एक प्रकार का उपयोग करता है, जो गैर-स्पष्ट है और अपने दम पर काम करने के लिए एक पुरस्कृत पहेली हो सकता है। अधिक जानकारी के लिए, Find Rocco संख्या में एल्गोरिथ्म के इस रूप के लिए एक स्पष्टीकरण देखें ।

zग्रिट के लिए -1 बाइट धन्यवाद के लिए खोज में -2 बाइट्स की अनुमति देकर -2 बाइट्स , इसके विपरीत za -2 के बाइट्स को संभालने के लिए इसके विपरीत za -2 को संभालने के लिए सबसे छोटे के बजाए से छोटे से सबसे बड़े बाइट की तलाश करके, लुकहेड के बाहर वर्गमूल कैप्चर को स्थानांतरित करके।z
z

यह , 2 की एक पूर्ण वर्गाकार शक्ति करता है , जिसके लिए । केवल 2 की सबसे बड़ी सही वर्ग शक्ति से अधिक नहीं हो सकती है, लेकिन यह एक गोल्फ अनुकूलन के कारण, रेगेक्स उन सभी को सबसे छोटे से शुरू करने की कोशिश करता है। चूँकि हर एक साइक्लोप्स संख्या से मेल खाता है, इसलिए केवल सबसे बड़ा एक मैच हो सकता है।zn=2(nz)+z+1n

^(x*)(?!(x(xx)+)\2*$)(x(x*))(?=(?=(\4*)\5+$)\4*$\6)x\1$|^$

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

^                 # N = tail
(x*)              # tail = Z, with the smallest value that satisfies the following
                  # assertions (which is no different from the largest value that
                  # would satisfy them, since no more than one value can do so);
                  # \1 = N - Z

(?!(x(xx)+)\2*$)  # Assert Z is a power of 2

# Assert Z is a perfect square, and take its square root
(x(x*))           # \4 = square root of Z; \5 = \4 - 1; tail = N - \1 - \4
(?=(\4*)\5+$)     # iff \4*\4 == Z, then the first match here must result in \6==0
(?=\4*$\6)        # test for divisibility by \4 and for \6==0 simultaneously

# Assert that N == \1*2 + \4 + 1. If this fails, then due to a golf optimization,
# the regex engine will backtrack into the capturing of \4, and try all smaller
# values to see if they are the square root of Z; all of these smaller values will
# fail, because the \4*\4==Z multiplication test only matches for one unique value
# of \4.
x\1$

|^$               # Match N==0, because the above algorithm does not

ओपी ने स्पष्ट किया कि 0 सत्य होना चाहिए, इसलिए यह वर्तमान में चुनौती का समाधान नहीं करता है।
ग्रिम

1
एक सरल ^(1*)0\1$पर्याप्त नहीं है?
अज्ञान

4
@EmbodimentofIgnorance केवल यदि इनपुट बाइनरी में थे। यह बहुत सारी चुनौतियों का सामना करेगा; निरंतर इनपुट का उपयोग करना जहां लागू अधिक दिलचस्प है।
डेडकोड

9

जावास्क्रिप्ट (Node.js) , 20 बाइट्स

p=>~p==(p^=p+1)*~p/2

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

शायद यह सही है, हो सकता है।

धन्यवाद ग्रिम, 1 बाइट बचाई गई।


जावास्क्रिप्ट (Node.js) , 32 बाइट्स

f=(p,q)=>p&1?f(p/2,q+q|2):!(p^q)

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


जावास्क्रिप्ट (Node.js) , 34 बाइट्स

p=>/^(1*)0\1$/.test(p.toString(2))

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



टेस्ट, मैच नहीं
edc65

1
@ edc65 क्या आपको किसी भी असफल टेस्टकेस का पता चला?
tsh

2
@ सत् .testनहीं.match
केवल

@ ASCII- केवल वाह, उचित ध्वनि ... आप इसे कैसे पढ़ सकते हैं?
tsh



7

गणितज्ञ (वुल्फ्राम भाषा), 32 31 बाइट्स

1 बाइट ने J42161217 को धन्यवाद दिया!

OddQ@Log2[#+Floor@Sqrt[#/2]+2]&

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

शुद्ध फ़ंक्शन इनपुट और रिटर्न के रूप में पूर्णांक ले रहा है Trueया False। (मज़ा साबित करने के लिए!) तथ्य के आधार पर कि एक नंबर nसाइक्लोप्स है यदि और केवल यदि nका वर्गमूल प्लस n/2प्लस 22. का एक अजीब शक्ति के लिए नीचे दौर (एक जगह ले सकता है Floorया तो द्वारा Ceilingया Roundजब तक एक भी बदल देता है के रूप में +2से +1।) Trueइनपुट पर देता है 0


1
आप 1 बाइट का उपयोग करके बचा सकते हैंLog2[#+Floor@Sqrt...
J42161217

और 1 के √()बजाय 1 का उपयोगSqrt[]
attinat

क्या बाइट की गिनती सही है? TIO वर्तमान कार्यक्रम के लिए 32 बाइट्स देता है।
mbomb007 21

@ mbomb007 aha, TIO ने J42161217 की 1-बाइट बचत को शामिल नहीं किया। फिक्स्ड।
ग्रेग मार्टिन

क्या ऐसा कोई कारण था जो आपने सुझाया था कि क्या इस्तेमाल नहीं किया गया है?
mbomb007


5

जाप, 8 बाइट्स

¢ðT ¥¢Êz

मेरे प्रस्तुत को ठीक करने के लिए लुइस फेलिप डी जीसस मुनोज़ का धन्यवाद!

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

पुराने रेगेक्स-आधारित समाधान, 15 बाइट्स

¤f/^(1*)0\1$/ l

सत्य के लिए १, झूठ के लिए ०।

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


अच्छी तरह से खेला, मुझे वास्तव में कुछ समय के लिए नियमित अभिव्यक्ति सीखना चाहिए। :) +1
क्विंटेक

1
@ क्विंट रेगेक्स कमाल है :)
इग्नोरेंस

अपडेट: छोटा रास्ता मिला :)
क्विंटेक


1
@LuisfelipeDejesusMunoz धन्यवाद, यह ==ऑपरेटर का एक बहुत अच्छा उपयोग है !
अज्ञान

4

जेली ,  8  7 बाइट्स

-1 एग्री टू द आउटगर्फ़र (उपयोग इस्लिपिंड्रोम निर्मित ŒḂ, इसके बजाय, ⁼Ṛ$)

B¬ŒḂ⁼SƊ

एक पूर्णांक लिंक जो एक पूर्णांक को स्वीकार करता है जो पैदावार (सत्य) 1या 0(झूठी) देता है।

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

कैसे?

B¬ŒḂ⁼SƊ - Link: integer             e.g. 1    9          13         119
B       - to base 2                      [1]  [1,0,0,1]  [1,1,0,1]  [1,1,1,0,1,1,1]
 ¬      - logical NOT (vectorises)       [0]  [0,1,1,0]  [0,0,1,0]  [0,0,0,1,0,0,0]
      Ɗ - last three links as a monad:
  ŒḂ    -   is a palindrome?             1    1          0          1
     S  -   sum                          0    2          1          1
    ⁼   -   equal?                       0    0          0          1

लगता है कि आप वास्तव में मेरे सामने चतुर विचार थे, लेकिन इसकी चतुराई स्पष्ट नहीं है ( Bċ0⁼1ȧŒḂयह भी 8 बाइट्स है), -1 ⁼Ṛ$के समान है ŒḂ। इसके अलावा, आपको नकारात्मक संख्याओं को संभालने की आवश्यकता नहीं है।
आउटगोल्फर

धन्यवाद एरिक, है palindrome निर्मित में किसी कारण के लिए मेरे दिमाग फिसल गया!
जोनाथन एलन

दरअसल, आप ṚƑआजकल इसके स्थान पर भी उपयोग कर सकते हैं, इसलिए आप इसे इस तरह याद रखना चाहते हैं (सबसे महत्वपूर्ण Ƒ)।
आउटगॉल्फ


4

रेगेक्स (ECMAScript), 53 47 बाइट्स

-6 बाइट्स डेडकोड ​​और ग्रिमी दोनों के लिए धन्यवाद

^((?=(x*?)(\2((x+)x(?=\5$))+x$))(?!\2{6})\3x)*$

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


पूरी तरह से टिप्पणी करने और अपने regex (अभी तक समाप्त नहीं हुआ) को साबित करने के क्रम में, मैंने इसे 50 बाइट्स तक नीचे कर दिया: ^((?=(x(x*?))(\3((x+)(?=\6$))+xx$))(?!\2{6})x\4)*$( इसे ऑनलाइन आज़माएं! )
डेडकोड

4

ब्रेकीलॉग , 8 बाइट्स

ḃD↔Dḍ×ᵐ≠

यह एक विधेय है जो सफल होता है यदि इसका इनपुट साइक्लोप्स संख्या है और विफल रहता है यदि इसका इनपुट साइक्लोप्स संख्या नहीं है। Brachylog में सफलता / असफलता सबसे मौलिक सत्य / गलत अवधारणा है।

इसे ऑनलाइन आज़माएं! या, 10000 तक सभी सत्य आउटपुट प्राप्त करें

व्याख्या

          Input is an integer
ḃ         Get its binary representation, a list of 1's and 0's
 D        Call that list D
  ↔       When reversed...
   D      It's the same value D
    ḍ     Dichotomize: break the list into two halves
          One of these halves should be all 1's; the other should contain the 0
     ×ᵐ   Get the product of each half
       ≠  Verify that the two products are not equal

यह तभी सफल होता है जब एक साइक्लॉप्स नंबर दिया जाता है, क्योंकि:

  • यदि बाइनरी प्रतिनिधित्व एक palindrome नहीं है, D↔Dतो विफल हो जाएगा; इस प्रकार, हम मान सकते हैं कि यह एक ताल है।
  • यदि एक से अधिक शून्य हैं, तो दोनों हिस्सों में कम से कम एक शून्य होगा। तो उत्पाद दोनों शून्य हो जाएंगे, और ×ᵐ≠विफल हो जाएंगे।
  • यदि कोई शून्य नहीं है, तो दोनों हिस्सों में केवल एक ही होगा। तो उत्पाद दोनों एक हो जाएंगे, और ×ᵐ≠असफल हो जाएंगे।
  • उस मामले को छोड़ देता है जहां बिल्कुल शून्य है; चूँकि हम पहले से ही जानते हैं कि हमारे पास एक ताल है, यह केंद्रीय बिट होना चाहिए। यह एक आधे में दिखाई देगा, जिससे आधा उत्पाद शून्य हो जाएगा; दूसरे आधे हिस्से में सभी शामिल होंगे, इसलिए इसका उत्पाद एक होगा। तब हमारे पास 1, 0 है, ×ᵐ≠सफल होता है, और संपूर्ण विधेय सफल होता है।

3

रूबी , 27 24 बाइट्स

बाइनरी में कनवर्ट करें और एक रेगेक्स के साथ जांचें। रिटर्न 0सच है, अगर nilहै, तो गलत।

-3 बाइट्स जीबी के लिए धन्यवाद ।

->n{"%b"%n=~/^(1*)0\1$/}

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

दो बाइट्स के लिए, पायथन समाधान का एक सीधा पोर्ट है:

->n{(2*n^2*n+3)**2==8*n+9}

@GB आपको बहुत बहुत धन्यवाद!
एरिक डुमिनील

3

05AB1E , 8 (या 9) बाइट्स

bD0¢sÂQ*

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

रिटर्न 1truthy अगर; 0या किसी भी अन्य पूर्णांक के अलावा सकारात्मक पूर्णांक 1। 05AB1E में केवल सत्य 1और बाकी सब कुछ गलत है, लेकिन मुझे यकीन नहीं है कि यह एक अनुमत आउटपुट है, या यदि आउटपुट दो सुसंगत और अद्वितीय मान होना चाहिए। यदि दूसरा, एक अनुगामी Θजोड़ा जा सकता है तो सभी आउटपुट अन्य के अलावा 1बन सकते हैं 0:

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

b     # Convert the (implicit) input-integer to a binary-string
 D    # Duplicate it
  0¢  # Count the amount of 0s
 s    # Swap to get the binary again
  ÂQ  # Check if it's a palindrome
 *    # Multiply both (and output implicitly)

  Θ   # Optionally: check if this is truthy (==1),
      # resulting in truthy (1) or falsey (0)

एक अंकगणितीय दृष्टिकोण 10 बाइट्स होगा:

LoD<s·>*Iå

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

a(n)=(2n1)(22n+1)

L        # Create a list in the range [1, (implicit) input-integer]
 o       # For each integer in the list, take 2 to the power this integer
  D<     # Create a copy, and decrease each value by 1
  s·     # Get the copied list again, and double each value
    >    # Then increase each value by 1
  *      # Multiply the numbers at the same indices in both lists
     Iå  # Check if the input-integer is in this list
         # (and output the result implicitly)

1सत्य और अन्य सभी नंबरों के रूप में झूठी होने के रूप में इस चुनौती के लिए स्वीकार्य है, क्योंकि अन्य भाषाओं (जैसे सी और टीआई-बेसिक) में समान सत्य / मिथ्या परिभाषाएं (दोनों के लिए 0 / गैर-शून्य) हैं। जब तक इसे सत्य या असत्य माना जाता है, तब तक यह भाषा की विशिष्टताओं से मेल खाता है, तब तक यह उचित खेल है।
ताऊ

3

एक्सेल, 97 63 बाइट्स

=A1=2*4^(ROUND(LOG(A1,4),0))-2^(ROUND(LOG(A1,4),0))-1

2 संख्याओं की गणना करता है:

4 की निकटतम शक्ति दो बार
>Num|Binary|2*Power4|Binary
> 1| 1| 2* 1= 2| 10
> 2| 10| 2* 4= 8| 1000
> 4| 100| 2* 4= 8| 1000
> 20| 10100| 2*16=32|100000

 

1 प्लस 4 के निकटतम पावर का वर्गमूल
>Num|Binary|1+√Power4|Binary
> 1| 1|1+ √1= 2| 10
> 2| 10|1+ √4= 3| 11
> 4| 100|1+ √4= 3| 11
> 20| 10100|1+ √16= 5| 101

फिर पहले से दूसरे नंबर को घटाएं:

>Num|Binary|2*Power4|Binary|1+√Power4|Binary|a-b|Binary
> 1| 1| 2* 1= 2| 10|1+ √1= 2| 10| 0| 0
> 2| 10| 2* 4= 8| 1000|1+ √4= 3| 11| 5| 101
> 4| 100| 2* 4= 8| 1000|1+ √4= 3| 11| 5| 101
> 20| 10100| 2*16=32|100000|1+ √16= 5| 101| 27| 11011

और इस परिणाम की मूल संख्या के साथ तुलना करें

पुरानी विधि

=DEC2BIN(A1)=REPLACE(REPT("1",1+2*INT(IFERROR(LOG(A1,2),0)/2)),1+IFERROR(LOG(A1,2),0)/2,1,"0")

A1 के लॉग-बेस -2 से शुरू करें और इसे निकटतम सम संख्या में गोल करें, फिर 1 जोड़ें।

अगला उस कई "1"s की एक स्ट्रिंग बनाता है , और मध्य वर्ण को बदलने के "0"लिए एक के साथ एक साइक्लॉप्स संख्या बनाता है जो हमेशा एक द्विआधारी लंबाई होती है, और यह A1 की बाइनरी लंबाई से कम या 1 के समान है।

फिर, इसे A1 के बाइनरी प्रतिनिधित्व के साथ तुलना करें


3

आर , 37 33 बाइट्स

(x=scan())%in%(2*4^(n=0:x)-2^n-1)

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

R के पास बाइनरी में कनवर्ट करने के लिए बिल्ट-इन नहीं है, इसलिए मैंने अनुक्रम से शर्तों की सूची की गणना करने के लिए OEIS से केवल एक सूत्र का उपयोग किया।

n<-0:xआरंभिक मूल्यों की एक उदार सूची बनाता है। 2*4^(n<-0:x^2)-2^n-1)OEIS से सूत्र है, और फिर यह जाँचता है कि क्या इनपुट उस क्रम में दिखाई दे रहा है %in%

नकारात्मक इनपुट को संभालने के लिए नहीं होने से -2 बाइट्स। मैं बदल सकते हैं याद करके -2 बाइट्स <-करने के लिए =


3

सी (जीसीसी), 26 बाइट्स

f(n){n=~n==(n^=-~n)*~n/2;}

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

पोर्ट ऑफ नील का जवाब । संचालन के कार्यान्वयन-परिभाषित आदेश पर निर्भर करता है।

सी ++ (क्लैंग), 38 बाइट्स

int f(int n){return~n==(n^=-~n)*~n/2;}

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

C ++ में टाइप्स को छोड़ नहीं सकते, क्लैंग में रिटर्न को छोड़ नहीं सकते, अन्यथा समान।


1
मैं यह पसंद करूंगा कि C ++ उत्तरों returnको नाजुक और प्लेटफॉर्म पर निर्भर निहित संचायक रिटर्न डिफॉल्ट के बजाय C उत्तरों से विभेदित किया जाए ।
डेडकोड

2
मैं मानक-अनुपालन की आवश्यकता के लिए नियमों को भी पसंद करूंगा, लेकिन वे ऐसा नहीं करते हैं, इसलिए इसका उपयोग नहीं करना सिर्फ खराब गोल्फ होगा। C ++ (क्लैंग) को वापसी की आवश्यकता होती है, जिससे यह 38 बाइट्स बन जाता है।
ग्रिम

फिर आप C (gcc) और C ++ (gcc) के बजाय अपने उत्तर में C (gcc) और C ++ (क्लैंग) रखकर इसे प्राप्त कर सकते हैं। मैंने अब वह कर दिया है।
डेडकोड


3

जे , 22 19 17 15 14 बाइट्स

-3 बाइट्स के लिए धन्यवाद BolceBussiere!

-4 बाइट धन्यवाद ngn करने के लिए!

ट्रेट्स के लिए -1 बाइट धन्यवाद!

जे , 14 बाइट्स

1=1#.(*:|.)@#:

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


1
#=1++/­­­­­­­
ngn

1
(#=1++/)@(*|.)@#:
ngn

1
1=1#.1-(*|.)@#:
NGN

1
मुझे इसका उपयोग करने के लिए पर्याप्त जे पता नहीं है लेकिन इसे छोटा करने की कोशिश करके अन्य लोगों के कोड से सीखने में मज़ा है
nnn

1
-1 बाइट1=1#.(*:|.)@#:
Traws


2

अटैची , 22 बाइट्स

{Flip@_=_∧1=0~_}@Bin

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

वैकल्पिक

27 बाइट्स: {BitXor[2*_,2*_+3]^2=8*_+9}

27 बाइट्स: {BitXor@@(2*_+0'3)^2=8*_+9}

27 बाइट्स: {Palindromic@_∧1=0~_}@Bin

28 बाइट्स: {BitXor[...2*_+0'3]^2=8*_+9}

28 बाइट्स: {BitXor[…2*_+0'3]^2=8*_+9}

28 बाइट्स: {Same@@Bisect@_∧1=0~_}@Bin

29 बाइट्स: {_[#_/2|Floor]=0∧1=0~_}@Bin

30 बाइट्स: Same@Bin@{_+2^Floor[Log2@_/2]}

30 बाइट्स: {_[#_/2|Floor]=0and 1=0~_}@Bin


2

रेटिना 0.8.2 , 38 37 बाइट्स

.+
$*
+`^(1+)\1
$+0
10
1
^((1+)0\2)?$

इसे ऑनलाइन आज़माएं!लिंक में परीक्षण मामले शामिल हैं। संपादित करें: स्पष्टीकरण के बाद, पिछले समाधान ने शून्य को सही तरीके से नहीं संभाला। स्पष्टीकरण:

.+
$*

दशमलव से unary में परिवर्तित करें।

+`^(1+)\1
$+0
10
1

रेटिना विकी से विधि का उपयोग करके, यूनिरी से बाइनरी में परिवर्तित करें।

^((1+)0\2)?$

1पहले और बाद में 0या खाली स्ट्रिंग (जो उपरोक्त रूपांतरण शून्य को संभालती है) की समान संख्या के लिए जाँच करें ।


1

बैच, 39 37 बाइट्स

@cmd/cset/a"m=%1^-~%1,!(m/2*(m+2)-%1)

n=(2k+1)(2k11)m=2k1n=m2(m+2)n


1

एक्सेल, 101 107 बाइट्स

-6 बाइट्स @Chronocidal की बदौलत।

=AND(ISEVEN(LOG(A1,2)),MID(DEC2BIN(A1),LEN(DEC2BIN(A1))/2+1,1)="0",LEN(SUBSTITUTE(DEC2BIN(A1),1,))=1)

3 चेक करता है:

  • विषम लंबाई
ISEVEN(LOG(A1,2))
  • मध्य वर्ण है 0
MID(DEC2BIN(A1),LEN(DEC2BIN(A1))/2+1,1)="0"
  • एक ही है 0
LEN(SUBSTITUTE(DEC2BIN(A1),1,))=1

1
बदलकर 6 बाइट्स सहेजें ISODD(LEN(DEC2BIN(A1)))करने के लिएISEVEN(LOG(A1,2))
Chronocidal


1

VBA, 41 36 बाइट्स

x=2^Int([Log(A1,4)]):?[A1]=2*x^2-x-1

तत्काल विंडो में चलाएं, स्पष्ट घोषणा के साथ। इनपुट A1सक्रिय शीट का सेल है। आउटपुट तत्काल विंडो के लिए सही / गलत है।

मेरे एक्सेल उत्तर के समान तर्क का उपयोग करता है है बिट्स की एक ही संख्या के साइक्लॉप्स संख्या (या 1 बिट कम यदि कोई सम संख्या है!) को खोजने के लिए और फिर इनपुट के साथ तुलना करता है।

फार्म के लिए उन्हें कम करके कुछ बाइट्स जब साइक्लोप्स संख्या की गणना की बचत होती है y = 2x^2 - x - 1(जहां x = n-1के लिए n वें साइक्लोप्स नंबर, या x = 2^Int(Log([A1])/Log(4))एक चर में बिट्स के एक कम या समान संख्या के साथ सबसे बड़ा साइक्लोप्स संख्या को खोजने के लिए) और भंडारण एक्स

(-5 बाइट्स टेलर स्कॉट के लिए धन्यवाद !)


1
लॉग डिवीजन का उपयोग करके लॉग के आधार को परिवर्तित करने के बजाय, आप इसे सीधे [...]संकेतन का उपयोग करके बदल सकते हैं[(Log(A1,4)]
टेलर स्कॉट

1

PHP , 74 बाइट्स

function($x){return($c=strlen($a=decbin($x)))&1&&trim($a,1)===$a[$c/2|0];}

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

पूरी तरह से गैर-गणितीय दृष्टिकोण, बस तार।

function cyclops( $x ) {
    $b = decbin( $x );     // convert to binary string (non-zero left padded)
    $l = strlen( $b );     // length of binary string
    $t = trim( $b, 1 );    // remove all 1's on either side
    $m = $b[ $l / 2 |0 ];  // get the middle "bit" of the binary string
    return 
        $l & 1 &&          // is binary string an odd length?
        $t === $m;         // is the middle char of the binary string the same as
                           // the string with left and right 1's removed? (can only be '0')
}

या ऊपर @ क्रोनोसाइडल के एल्गोरिथ्म पर आधारित 60 बाइट्स

function($x){return decbin($x)==str_pad(0,log($x,2)|1,1,2);}

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


1

हास्केल, 82 बाइट्स

import Text.Printf
(`all`[(==)<*>reverse,("0"==).filter(<'1')]).flip($).printf"%b"

और xnor के पायथन समाधान का एक बंदरगाह:

हास्केल, 47 बाइट्स

import Data.Bits
\n->(2*n`xor`(2*n+3))^2==8*n+9
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.