बाइनरी ट्विस्ट के साथ पलिंड्रोमिक संख्या


29

चेतावनी: यह एक "अरे नहीं है, चलो ASCII- कला में एक केक तैयार करें" चुनौती! कृपया पढ़ते रहें;)

कुछ समय पहले यह मेरा जन्मदिन था, मैं अब 33 वर्ष का हूं।

तो यह अजीब सामाजिक परंपरा है जिसमें परिवार और दोस्तों को आमंत्रित करने, केक पर नंबर जैसी मोमबत्तियां लगाने, गाने गाने और खुले उपहार देने की परंपरा है।

   33   
--------

संख्याओं के बजाय, मैं मानक मोमबत्तियाँ लगाने के लिए बाइनरी सिस्टम का उपयोग कर सकता हूं: मैं उनमें से 6 को केक पर रखता हूं और उनमें से दो को प्रकाश देता हूं।

 100001
--------

मैं देख सकता हूँ कि मेरी उम्र के दशमलव और द्विआधारी दोनों संख्याएँ हैं!

चुनौती

मैं जानना चाहता हूं कि क्या मोमबत्तियों के साथ केक पर कोई अन्य नंबर डाला जा सकता है और पैलिंड्रोमिक, दशमलव और बाइनरी हो सकता है।

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

इनपुट

एक दशमलव संख्या x जिसे मैं परीक्षण करना चाहता हूं यदि वह 0 <x <2 32 -1 के साथ जन्मदिन का पैलंड्रोमिक है (हां, मेरे आयाम में लोग बहुत लंबे समय तक जीवित रहते हैं)

उत्पादन

सत्य अगर यह इन दो स्थितियों को पूरा करता है, तो फ़ासी और:

  • संख्या का दशमलव प्रतिनिधित्व एक मानक पैलिंड्रोम है
  • संख्या का द्विआधारी प्रतिनिधित्व एक मानक पैलिंड्रोम है, और अग्रणी शून्य को जोड़ने से इसमें मदद मिल सकती है

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

1 > 1 => Truthy
6 > 110 (0110) => Truthy
9 > 1001 => Truthy
10 > 1010 (01010) => Falsey, 10 is not palindromic
12 => 1100 (001100) => Falsey, 12 is not palindromic
13 => 1101 (...01101) => Falsey, neither 13 nor 1101 are palindromic
14 => 1110 (01110) => Falsey, 14 is not palindromic
33 > 100001 => Truthy
44 > 101100 (..0101100) => Falsey, 101100 is not palindromic
1342177280 > 1010000000000000000000000000000 (00000000000000000000000000001010000000000000000000000000000) => Falsey, 1342177280 is not palindromic (but the binary representation is)
297515792 > 10001101110111011101100010000 (000010001101110111011101100010000) => Truthy

नियम

गुड लक, और अंत में जन्मदिन मुबारक हो!



6
शीर्षक बदलना चाह सकते हैं क्योंकि जन्मदिन का हिस्सा असंबद्ध है।
NoOneIsHere

@NoOneIsHere अच्छी तरह से चुनौती जन्मदिन के केक पर मोमबत्तियों के बारे में है। इसके अलावा बाइनरी प्रतिनिधित्व पर मोड़ है तो यह "जेनेरिक पैलिंड्रोमिक संख्या" नहीं है। यदि आपकी टिप्पणी को रद्द किया जाता है तो मैं एक और शीर्षक के साथ आऊंगा।
Goufalite

इसलिए, नियमों के अनुसार, 0b01010000000000000000000000000000यह पल्लिंड्रोमिक नहीं है क्योंकि इसे और अधिक शून्य जोड़ने की आवश्यकता होगी और इस प्रकार 2 ^ 32-1 से अधिक होगा? इस मामले में यह 1342177280फाल्सी टेस्ट केस की तरह कुछ जोड़ने में मदद करेगा ।
क्रिस्टियन लुपस्कु

1
@ w0lf मैंने शून्य जोड़ने की कोई सीमा नहीं लिखी है लेकिन मैं आपकी स्टैक ओवरफ्लो समस्या को समझता हूं;) इसके अलावा, 1342177280दशमलव पैलिंड्रोमिक नहीं है इसलिए फाल्सी। संपादन
गौफलाइट १५'१

जवाबों:


17

05AB1E , 7 बाइट्स

b0Ü‚DíQ

इसे ऑनलाइन आज़माएं! या टेस्ट सूट के रूप में

व्याख्या

b         # convert input to binary
 0Ü       # remove trailing zeroes
   ‚      # pair with input
    D     # duplicate
     í    # reverse each (in the copy)
      Q   # check for equality

Bifurcate ने मदद नहीं की?
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn: दुर्भाग्य से नहीं, जैसा कि मैं सूची में प्रत्येक संख्या को उल्टा करना चाहता हूं और सूची को ही नहीं।
एमिग्ना

11

पायथन 3 , 59 बाइट्स

lambda a:all(c==c[::-1]for c in[str(a),bin(a).strip('0b')])

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

-3 बाइट्स रॉड
-3 बाइट्स के लिए धन्यवाद कॉनर जॉनसन को धन्यवाद



1
स्ट्रिंग्स के साथ स्ट्रिप का उपयोग करने से एकल वर्ण हटा दिए जाएंगे: [बिन (ए) [2:]। स्ट्रिप ('0') => (ए) .स्ट्रिप ('0 बी')] ( tio.run/… "पायथन 3 - कोशिश इट ऑनलाइन ")
कोनर जॉनसन

@ConnerJohnston ओ शांत, धन्यवाद!
हाइपरन्यूट्रिनो 20

8

जावास्क्रिप्ट (ईएस 6), 65 बाइट्स

लौटाता है 0या 1

n=>(g=b=>[...s=n.toString(b)].reverse().join``==s)()&g(2,n/=n&-n)

कैसे?

हेल्पर फंक्शन g () इनपुट के रूप में एक पूर्णांक b लेता है और परीक्षण करता है कि n आधार b में एक पैलिंड्रोम है या नहीं । यदि बी निर्दिष्ट नहीं है, तो यह परीक्षण करने से पहले एन को एक स्ट्रिंग में परिवर्तित करता है।

हम द्विआधारी प्रतिनिधित्व में अनुगामी शून्य से छुटकारा पाने के एन कम से कम महत्वपूर्ण अलग से 1 के साथ n&-nऔर विभाजित n जिसके परिणामस्वरूप मात्रा द्वारा।

मजेदार तथ्य: यह सत्य है 0क्योंकि (0/0).toString(2)बराबरी "NaN", जो एक पैलेंड्रोम है। (लेकिन 0वैसे भी वैध इनपुट नहीं है।)

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


5

गणितज्ञ, 52 49 बाइट्स

i=IntegerReverse;i@#==#&&!i[#,2,Range@#]~FreeQ~#&

इसे वुल्फ्राम सैंडबॉक्स पर आज़माएं

प्रयोग

f = (i=IntegerReverse;i@#==#&&!i[#,2,Range@#]~FreeQ~#&);

f[6]

True

f /@ {9, 14, 33, 44}

{True, False, True, False}

व्याख्या

i=IntegerReverse;i@#==#&&!i[#,2,Range@#]~FreeQ~#&

i=IntegerReverse                                   (* Set i to the integer reversing function. *)
                 i@#==#                            (* Check whether the input reversed is equal to input. *)
                       &&                          (* Logical AND *)
                          i[#,2,Range@#]           (* Generate the binary-reversed versions of input, whose lengths *)
                                                   (* (in binary) are `{1..<input>}` *) 
                                                   (* trim or pad 0s to match length *)
                                        ~FreeQ~#   (* Check whether the result is free of the original input *)
                         !                         (* Logical NOT *)

बिलिन के साथ संस्करण PalindromeQ

PalindromeQ@#&&!IntegerReverse[#,2,Range@#]~FreeQ~#&


3

जाप , 14 बाइट्स

s ꬩ¢w n2 ¤ê¬

इसे ऑनलाइन टेस्ट करें!

व्याख्या

 s ê¬ © ¢   w n2 ¤  ê¬
Us êq &&Us2 w n2 s2 êq   Ungolfed
                         Implicit: U = input integer
Us êq                    Convert U to a string and check if it's a palindrome.
        Us2 w            Convert U to binary and reverse. 
              n2 s2      Convert to a number, then back to binary, to remove extra 0s.
                    êq   Check if this is a palindrome.
      &&                 Return whether both of these conditions were met.

13 बाइट्स के लिए इसी तरह के समाधान के एक जोड़े के साथ आया: sêQ *(¢w)sêQऔरsêQ &¢w n sêQ
झबरा

@ धन्यवाद, लेकिन दुर्भाग्य से उन दोनों पर विफल 297515792(उलट बाइनरी दशमलव में परिवर्तित जेएस को संभालने के लिए बस बहुत बड़ा है) ...
ETHproductions


2

एपीएल, 27 31 बाइट्स

∧/(⌽≡⊢)∘⍕¨{⍵,⊂{⍵/⍨∨\⍵}⌽2⊥⍣¯1⊢⍵}

यह कैसे काम करता है? तर्क के रूप में 6 का उपयोग ...

      2⊥⍣¯1⊢6 ⍝ get the bit representation
1 1 0

      ⌽2⊥⍣¯1⊢6 ⍝ reverse it (if it's a palindrome, it doesn't matter)
0 1 1

      {⍵/⍨∨\⍵}⌽2⊥⍣¯1⊢6 ⍝ drop off the trailing (now leading 0's)
1 1

      6,⊂{⍵/⍨∨\⍵}⌽2⊥⍣¯1⊢6 ⍝ enclose and concatenate the bits to the original number
┌─┬───┐
│6│1 1│
└─┴───┘

      (⌽≡⊢)∘⍕ ⍝ is a composition of
      ⍕ ⍝ convert to string and 
      (⌽≡⊢) ⍝ palindrome test

      (⌽≡⊢)∘⍕¨6,⊂{⍵/⍨∨\⍵}⌽2⊥⍣¯1⊢6 ⍝ apply it to each of the original argument and the bit representation
  1 1

      ∧/(⌽≡⊢)∘⍕¨6,⊂{⍵/⍨∨\⍵}⌽2⊥⍣¯1⊢6  ⍝ ∧/ tests for all 1's (truth)
  1

इसे TryAPL.org पर आज़माएं


चश्मा के अनुसार, 6 को एक अच्छा इनपुट माना जाता है, लेकिन अभिव्यक्ति प्रदान की गई झूठी है।
lstefano

आह, चूहों! यही मुझे इस समस्या को पूरी तरह से न पढ़ने के लिए मिलता है। अच्छी पकड़। धन्यवाद! मैंने थोड़ी देर के साथ संशोधन किया है, लेकिन उम्मीद है कि अधिक सही, समाधान।
ब्रायन बेकर

PPCG में आपका स्वागत है। अच्छी पहली पोस्ट! दुर्भाग्य से, अपने वर्तमान स्वरूप में आपका प्रस्तुतिकरण न तो कोई कार्यक्रम है, न ही कोई फ़ंक्शन। हालांकि कोई चिंता नहीं है, आप इसे एक समारोह में बना सकते हैं लेकिन बाहरी ब्रेसिज़ को पूरे कोड को संलग्न करने देते हैं।
अड्म

तीन बाइट्स बचाएं: {(⌽¨≡⊢)⍕¨⍵,⊂(⌽↓⍨~⊥~)2⊥⍣¯1⊢⍵}(यह पूरे टेस्ट सूट को चलाने के लिए एक लिंक प्रदान करने के लिए अच्छा रूप है)
Adám


1

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

↔?ḃc↔.↔

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

यह बहुत है ...

व्याख्या

निहित इनपुट और आउटपुट के साथ, कोड है: ?↔?ḃc↔.↔.

?↔?        The Input is a palindrome
   ḃ       Convert it to the list of its digits in binary
    c      Concatenate it into an integer
     ↔     Reverse it: this causes to remove the trailing 0's
      .↔.  The resulting number is also a palindrome

1

एपीएल (डायलॉग क्लासिक) , 26 बाइट्स

{≡∘⌽⍨⍕⍵,⍵,⍨(<\⊂⊢)⌽2⊥⍣¯1⊢⍵}

व्याख्या

                  2⊥⍣¯1⊢⍵  encode  as binary
                          reverse
           (<\⊂⊢)          partition from first 1
      ⍵,⍵,⍨                prepend and append 
                         turn into text string
≡∘⌽⍨                       match text with its reverse (fX is XfX, where f is a composed function that reverses its right argument and matches with left)

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


ओह, तुम बाहर बी बी गोल्फ!
एडम


1

पाईट , १० बाइट्स

रिटर्न [1] अगर सच है, [0] अगर गलत है

ĐɓƖ₫áĐ₫=ʁ∧

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

स्पष्टीकरण:

              Implicit input
Đ             Duplicate input
ɓ             Get input in binary (as string)
Ɩ             Cast to integer
₫             Reverse the digits (this removes any trailing zeroes)
á             Push the stack into a list
Đ             Duplicate the list
₫             Reverse the digits of each element of the list
=             Are the two lists equal element-wise
ʁ∧            Reduce the list by bitwise AND

0

रेटिना , 72 बाइट्स

.+
$*_;$&
+`(_+)\1
$+0
0_
_
0+;
;
+`\b(\w)((\w*)\1)?\b
$3
(\B;\B)|.*
$.1

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण मामले शामिल हैं। मूल संख्या की एक डुप्लिकेट बनाकर काम करता है, लेकिन _एस का उपयोग करके इसलिए कि यह भ्रमित नहीं है उदाहरण के लिए 11। अनार्य संख्या फिर "बाइनरी" और ट्रेलिंग जीरो से छीन ली जाती है। Palindromes तब क्रमिक रूप से काट दिया जाता है और अंतिम चरण का परीक्षण होता है कि क्या कुछ बचा है।


0

गणितज्ञ, 70 बाइट्स

(P=PalindromeQ)[PadRight[#~IntegerDigits~2,#~IntegerExponent~2]]&&P@#&


0

गैया , 10 बाइट्स

ṙṭ@ḍ2⁻Πbṭ∧

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

व्याख्या

बाइनरी में अग्रणी शून्य के साथ जांच करने के बजाय, मैं अनुगामी शून्य के बिना जांच करता हूं।

ṙ           String representation of number
 ṭ          Is palindromic?
  @         Push input again
   ḍ        Prime factors
    2⁻      Remove all 2s
      Π     Product
       b    Convert to binary
        ṭ   Is palindromic?
         ∧  Logical and

0

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

r(n,b){int s=0,c=n;for(;n;n/=b)s=s*b+n%b;return s==c;}
c;f(n){for(c=n;c%2<1;c/=2);return r(n,10)&r(c,2);}

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


तुम दोनों घटनाओं जगह ले सकता है return के साथ n=। ( 95 बाइट्स। )
जोनाथन फ्रीच

और आप सहेजे गए अतिरिक्त बाइट के लिए नई लाइन निकाल सकते हैं।
जोनाथन फ्रेच

0

सी # (.NET कोर) , 130 129 179 173 + 23 बाइट्स

कुछ बातें, एड मार्टी को यह बताने के लिए धन्यवाद कि मुझे एक पलिंड्रोम के लिए 0 के सामने पैडेड के रूप में जांचने की आवश्यकता है। और मुझे यह सुनिश्चित करने की आवश्यकता है कि मैं x ^ 32 -1 तक जांच कर सकता हूं ।

x=>{var a=Convert.ToString(x,2);var b=x+"";Func<string,bool>p=z=>z.SequenceEqual(z.Reverse());return new int[a.Length].Select((_,z)=>p(new string('0',z)+a)).Any(z=>z)&p(b);}

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


1
आप के बीच की जगह को हटा सकते हैं returnऔर (के लिए 129 बाइट्स
श्री Xcoder

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

@EdMarty जो हैंडल किया गया है, साथ ही स्टैक ओवरफ्लो बग।
डेनिस.वीरविज

आप लापता हैं using System;औरusing System.Linq
LiefdeWen

या यह है कि 13: बाइट्स?
LiefdeWen

0

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

lambda n:all(s==s[::-1]for s in(`n`,bin(n).strip("0b")))

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

पायथन की stripविधि का उपयोग करने के लिए दोनों bin(..)आउटपुट के प्रमुख 0b और द्विआधारी संख्या के अनुगामी शून्य को हटाते हैं (क्योंकि उनके पास हमेशा एक मिलान बिट होगा)।


0

पायथ , २५ २२ १ ९ 18 17 बाइट्स

- 3 6 7 8 बाइट्स आगे की भाषा सीखकर

Ks_.Bsz&_IzqKs_`K

स्पष्टीकरण:

Ks        Set K to the integer version of...
 _.BsJ    Reverse string of the binary input
&         And
 _Iz      Is the input equal to the reverse of itself?
 qKs_`K   Is K equal to int(the reverse of basically string(K))

मुझे यकीन है कि यह नीचे गोल्फ हो सकता है, मैं उस पर काम करूंगा।

परीक्षण सूट


0

PHP, 69 + 1 बाइट्स

$q=trim(decbin($p=$argn),0);if(strrev($p)==$p&&strrev($q)==$q)echo$p;

-nR
Echoes के साथ पाइप के रूप में चलाएँ सत्य के लिए मूल इनपुट / झूठी के लिए कुछ भी नहीं

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


0

ऑक्टेव , 68 66 बाइट्स

@(x)all([d=num2str(x) b=deblank(['' dec2bin(x)-48])]==flip([b d]))

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

प्रारंभिक भेंट ऑक्टेव से।

हम मूल रूप से एक सरणी बनाते हैं जिसमें दशमलव स्ट्रिंग के रूप में संख्या होती है और 0 को हटाने के साथ द्विआधारी स्ट्रिंग के रूप में संख्या होती है। फिर हम एक समान स्ट्रिंग्स के साथ एक सरणी बनाते हैं लेकिन बाइनरी और दशमलव संख्या के साथ फ़्लिप किया। अंत में दोनों सरणियों की तुलना की जाती है और परिणाम या तो सच है यदि वे मेल खाते हैं (दोनों palindromes) या झूठे हैं यदि वे नहीं (एक या दोनों नहीं palindromes)।


  • के flipबजाय का उपयोग कर 2 बाइट बचाओ fliplr

0

APL2 (Dyalog नहीं), 36 बाइट्स

(N≡⌽N←⍕N)^∨/(((⌽B)⍳1)↓B)⍷B←(32⍴2)⊤N←

पहले B को N का 32-बिट प्रतिनिधित्व दें:

B←(32⍴2)⊤N

फिर दर्पण बी और 1 1 की स्थिति का पता लगाएं:

(⌽B)⍳1

फिर बी से कई पदों को छोड़ें। यह 0 की सही संख्या को संरक्षित करेगा।

फिर FIND और OR-REDUCTION को देखें कि क्या क्रॉप्ड B में अपना दर्पण है या नहीं।

अब एन को देखें, दशमलव। बाईं-सबसे कोष्ठक की अभिव्यक्ति N को एक वर्ण वेक्टर में परिवर्तित करती है और जाँचती है कि क्या वह अपने दर्पण को देखती है।

अंत में, एक और दो चेक में शामिल होता है।


APL2 में मैं एक साफ-सुथरा मेमना नहीं बना सकता, इसलिए मैंने एक-लाइनर लिखा और असाइनमेंट तीर शामिल किया। आशा है कि यह धोखा नहीं है।


1
PPCG में आपका स्वागत है!
मार्टिन एंडर

PPCG में आपका स्वागत है! कम धोखा देने वाले संस्करण के लिए, क्या आप इसके बजाय एक पूर्ण कार्यक्रम बनाने के लिए एक क्वाड ( ) जोड़ सकते हैं ? इसके अलावा, आप को छोटा करने में सक्षम हैं (N≡⌽N←⍕N)^∨/(B↓⍨1⍳⍨⌽B)⍷B←(32⍴2)⊤N←⎕?
आउटगॉल्फ

एरिक, जाँच के लिए धन्यवाद! मुझे यकीन है कि इसमें सुधार किया जा सकता है, लेकिन मेरे पास APL2 में improved स्क्वीगल नहीं है।
म्प्पो

0

जावा 8, 105 104 बाइट्स

n->{String t=n+n.toString(n,2).replaceAll("0*$","")+n;return t.contains(new StringBuffer(t).reverse());}

स्पष्टीकरण:

इसे यहाँ आज़माएँ।

n->{                         // Method with Integer parameter and boolean return-type
  String t=n                 //  Create a String `t` starting with the input Integer
    +n.toString(n,2)         //  Append the binary representation of the input Integer,
      .replaceAll("0*$","")  //   with all trailing zeroes removed
    +n;                      //  Append the input Integer again
  return t.contains(new StringBuffer(t).reverse());
                             //  Return true if `t` is a palindrome
}                            // End of method
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.