क्या यह स्ट्रिंग पैलिंड्रोम है (मोर्स कोड में)?


16

चुनौती

इस वीडियो से प्रेरित

जैसा कि आप जानते हैं कि, एक पैलिंड्रोम एक ऐसा शब्द है, जो आगे की ओर उतना ही फैला हुआ होता है। शब्द "PULP" एक पैलिंड्रोम नहीं है, लेकिन जब मोर्स कोड में अनुवाद किया जाता है (हटाए गए अक्षरों के बीच अंतर के साथ), "PULP" बन जाता है "-। ... ... -और-...--" जो एक पैलेंड्रोम है। आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो एक स्ट्रिंग लेता है और रिटर्न करता है कि क्या यह शब्द अंतर्राष्ट्रीय मोर्स कोड में एक palindrome है।

A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..

नियम

इनपुट

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

उत्पादन

आपके प्रोग्राम को इनपुट इनपुट के आधार पर 2 निरंतर भिन्न परिणामों में से 1 का उत्पादन करना चाहिए, जैसे कि ट्रू / फॉल्स, 1/0, HOTDOG / NOTHOTDOG

स्कोरिंग

यह इसलिए बाइट्स जीत में सबसे छोटा जवाब है। मानक खामियों को मना किया जाता है।

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

इनपुट => आउटपुट

"PULP"       => True
"RESEARCHER" => True
"HOTDOGS"    => True
""           => True
"A"          => False
"RACECAR"    => False
"PROGRAMMING"=> False
"PUZZLES"    => False


4
केवल मेरा वोट एक हथौड़ा है, मैं इसे लुइस से जुड़ी चुनौती के एक डुबकी के रूप में वीटीसी करूँगा; अधिकांश समाधानों का थोक मोर्स कोड को इनपुट परिवर्तित करने जा रहा है।
झबरा

1
ऐसा लगता है कि सभी समाधान एक मोर्स कोड मैपिंग हैं, जिसमें "समान रूप से रिवर्स" चेक से निपटने की कोशिश की जाती है, इसलिए मैं एक डुप्लिकेट के रूप में बंद कर रहा हूं।
xnor

2
यह शर्म की बात है कि यह एक डुप्लिकेट के रूप में बंद है, क्योंकि डुप्लिकेट-लक्ष्य ने निर्दिष्ट किया है (ए) कि इनपुट मानक इनपुट से है (कार्यों को छोड़कर) और (बी) एक को गैर छोड़ देना चाहिए [AZ] | [Az] | - [0- 9] जैसा कि वे इनपुट में हैं। साथ में ये कुछ उत्तर यहाँ तुच्छ बंदरगाह से कम है।
जोनाथन एलन

अरे यार - ऐसा लग रहा है जैसे मैं भी हथौड़ा खोलता हूँ! मुझे लगा कि मैंने सिर्फ एक वोट दिया है। मैंने इसे फिर से बंद कर दिया है, लेकिन लगता है कि यह नहीं होना चाहिए।
जोनाथन एलन

जवाबों:


7

जेली , 28 बाइट्स

ØAŻŻ“¡9o|çṫ¡X1ỴỌġQ’œ?iⱮḃ2FŒḂ

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

ØA                             The uppercase alphabet.
  ŻŻ                           Prepend two zeroes.
    “¡9o|çṫ¡X1ỴỌġQ’œ?          Get the 73540211105102870315464559332nd permutation.
                                  (= “ETIANMSURWDKGOHVF0L0PJBXCYZQ”)
                     iⱮ        Find indices of input letters in this list.
                       ḃ2      Bijective base 2: map [1,2,3,4,5…] to
                                 [1], [2], [1,1], [1,2], [2,1], …
                         F     Flatten.
                          ŒḂ   Is palindrome?

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

यहाँ छवि विवरण दर्ज करें


73,540,211,105,102,870,315,464,559,332nd... क्या?! आपको वह नंबर कैसे मिला ? यह भी कि चलाने के लिए हमेशा के लिए कैसे नहीं लेता है ?
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn मूल रूप से, यह आदेश के सापेक्ष उस स्ट्रिंग में अक्षरों के क्रम का एन्कोडिंग है 00ABCDEFGHIJKLMNOPQRSTUVWXYZ। जेली ने एक क्रमांक को एक संख्या में बदलने के लिए अंतर्निहित किया है, और इस तरह के एक संख्या को क्रमचय में वापस कर दिया है। विकिपीडिया पर तथ्यात्मक संख्या आधार
लिन

1
यह सबसे अच्छी बात है जो मैंने लंबे समय में देखी है! तो मूल रूप से factorials के साथ आप "पता" कर सकते हैं कि क्रमचय कहां झूठ होगा, क्योंकि क्रमपरिवर्तन एक विशिष्ट क्रम में किया जाता है। क्या यह एक निरंतर समय का उपयोग है? रैखिक? लॉग? पूरी तरह से कुछ और?
मैजिक ऑक्टोपस Urn


7

जेली ,  35 32 27  25 बाइट्स

-2 डेनिस के लिए धन्यवाद (बदलाव से बचने के लिए शिफ्ट करें %32)

Oị“¡\ḣḶɼz3ç³ƝMƒ§’Œ?¤ḃ2FŒḂ

ऊपरी मामले में इनपुट लेता है; उत्पादन 1सत्य के लिए है, 0असत्य के लिए है।

इसे ऑनलाइन आज़माएं! या परीक्षण-सूट देखें

कैसे?

Oị“...’Œ?¤ḃ2FŒḂ - Link: list of characters (in [A-Za-z]), S   e.g. 'FoOl'
O               - to ordinals                                      [70,111,79,108]
 %32            - modulo by 32 (A->1, a->1, ...)                   [6,15,15,12]
         ¤      - nilad followed by link(s) as a nilad:
  “...’         -   base 250 literal = 41482574787853596522350494865
       Œ?       -   first permutation of [1,N] which resides at that
                -   index when all permutations of [1,N] are sorted
                -   = [8,16,10,24,26,27,18,20,4,23,25,11,1,17,13,15,3,22,12,19,6,5,14,21,28,9,7,2]
                - index into (modular-indexing & vectorises)       [17,14,14,19]
          ḃ2    - to bijective base 2 (vectorises)                 [[1,1,2,1],[2,2,2],[2,2,2],[1,2,1,1]]
            F   - flatten                                          [1,1,0,1,0,0,0,0,0,0,1,0,1,1]
             ŒḂ - is palindromic?                                  1

पिछले 35 बाइट समाधान (ऊपरी मामले में इनपुट भी लेता है) ...

ØẠḣ29“...’œ?iⱮ⁸d⁴BnⱮ/€FŒḂ - Link: list of characters (in [A-Z] only), S
ØẠ                        - alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  ḣ29                     - head to index 29 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabc'
     “...’                - base 250 literal = 1222276956185766767980461920692
          œ?              - permutation at index = 'EAIWRUSJPaLbFVHcTNMDKGOBXCYZQ'
              ⁸           - chain's left argument = S       e.g. 'FOOL'
             Ɱ            - map with:
            i             -   first index of (char in 'EAI...')  [13,23,23,11]
                ⁴         - literal 16                           16
               d          - divmod                               [[0,13],[1,7],[1,7],[0,11]]
                 B        - to binary (vectorises)               [[[0],[1,1,0,1]],[[1],[1,1,1]],[[1],[1,1,1]],[[0],[1,0,1,1]]]
                     €    - for each:
                    /     -   reduce by:
                   Ɱ      -     map with:
                  n       -       not equal                      [[1,1,0,1],[0,0,0],[0,0,0],[1,0,1,1]]
                      F   - flatten                              [1,1,0,1,0,0,0,0,0,0,1,0,1,1]
                       ŒḂ - is palindromic?                      1


2

MBASIC , 325 बाइट्स

पहले प्रयास, बड़ी तोपों से पहले यहाँ :-)

1 DATA .-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-,.-.,...,-,..-,...-,.--,-..-,-.--,--..
2 DIM C$(26):FOR I=1 TO 26:READ C$(I):NEXT:INPUT T$:FOR I=1 TO LEN(T$):N=ASC(MID$(T$,I,1))-64:S$=S$+C$(N):NEXT:L=LEN(S$):FOR I=1 TO L:IF MID$(S$,I,1)<>MID$(S$,(L+1)-I,1) THEN 4
3 NEXT:PRINT"True":END
4 PRINT"False

उत्पादन

? PULP
True

? RESEARCHER
True

? HOTDOGS
True

?
True

? A
False

? RACECAR
False

? PROGRAMMING
False

? PUZZLES
False


2

पर्ल 6 , 87 बाइट्स

{$_ eq.flip}o*.trans(/./=>{S/.//}o{'  ETIANMSURWDKGOHVF L PJBXCYZQ'.index($/).base(2)})

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

शब्द को 1s और 0s की श्रृंखला में परिवर्तित करता है और जाँचता है कि क्या यह पैलिंड्रोमिक है।

स्पष्टीकरण:

             *.trans(/./=>  # Translate each letter of the input to
                                   '...'.index($/)   # The index of the letter in the lookup string
                                                  .base(2)  # Converted to binary
                          {S/.//}o{                       } # With the first digit removed
{$_ eq.flip}o   # Return if the string is equal to its reverse

2

पायथन 3 , 172 148 104 बाइट्स

पहला कोड गोल्फ कभी कृपया दया करें और कोई भी सहायता दें :)

यह C # उत्तर: /codegolf//a/175126/83877 पर आधारित है । मैंने उसी विचारों को लिया और इसे पायथन 3 पर लागू किया। मैंने गोल्फ-इफ कोड में अपना सर्वश्रेष्ठ करने की कोशिश की, लेकिन मुझे यकीन है कि बहुत कुछ है जो मैं कर सकता हूं।

संपादित करें 1: मुझे कुछ व्हाट्सएप और अनावश्यक कोड हटाने में मदद करने के लिए @Stephen और @Cowabunghole धन्यवाद।

EDIT 2: धन्यवाद बाइनरी में करने के सुझाव के लिए @JoKing। यह एक बहुत साफ चाल है जहाँ '-' और '।' आवश्यक भी नहीं हैं। इसके चलते भारी बाइट घट गई।

समाधान

def b(w):x=''.join(map(lambda c:bin('  ETIANMSURWDKGOHVF L PJBXCYZQ'.index(c))[3:],w));return x==x[::-1]

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


1
PPCG में आपका स्वागत है! व्हॉट्सएप गोल्फ के साथ 152 बाइट्स बंद है: इसे ऑनलाइन आज़माएं!
स्टीफन

1
कुछ वर्णों को सहेजने के लिए कुछ सुझाव: हर जगह व्हाट्सएप निकालें। उदाहरण के लिए, आप बदल सकते हैं while i > 0:करने के लिए while i>0:2 बाइट्स को बचाने के लिए। इसके अलावा, मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि आप > 0पूरी तरह से और बस उपयोग कर सकते हैं while i:। दूसरा, जबकि लूप में स्टेटमेंट नई लाइन और इंडेंटेशन को बचाते हुए एक ही लाइन पर जा सकता है। अंतिम, जब कोड गोल्फिंग को छोड़कर हर जगह यह भयानक सलाह है, लेकिन यदि आप पायथन 3 के बजाय पायथन 2 का उपयोग करते हैं, तो आप विभाजन के /बजाय 1 बाइट का उपयोग करने से बचा सकते हैं //
काउबुनघोल

1
ओह, इसके अलावा, आप के ~-iबजाय का उपयोग कर सकते हैं i-1। यह बाइट्स की समान संख्या है, लेकिन फिर आप कोष्ठक को छोड़ सकते हैं जो 2 बाइट्स बचाता है।
काउबुनघोल

1
आप उपयोग करने के बजाय बाइनरी कर सकते हैं -और .105 बाइट्स
जो किंग

1
नहीं, मुझे पहले से ही एक पर्ल 6 उत्तर मिला है जो तकनीक का उपयोग करता है। तकनीक का उपयोग करने के लिए स्वतंत्र महसूस करें
Jo King

1

पायथ, 35 33 बाइट्स

कोड में अनपेक्षित वर्ण हैं, इसलिए यहां एक हेक्सडंप है।

00000000: 5f49 7358 7a47 632e 2207 0901 3f08 82ee  _IsXzGc."...?...
00000010: bd3f c256 9d54 c381 7dac 6590 37d3 c8f5  .?.V.T..}.e.7...
00000020: 52                                       R

इसे ऑनलाइन आज़माएं। परीक्षण सूट।

व्याख्या

."कोड के अंत से शुरू होकर मोर्स वर्णमाला उत्पन्न करता है, डॉट्स के रूप में \x08और डैश के रूप में \x07, और टैब द्वारा अलग किया जाता है।

c टैब द्वारा स्ट्रिंग को विभाजित करता है।

XzG(तुलना X) इनपुट ( z) वर्णमाला (से G) इस "मोर्स वर्णमाला" करने के लिए।

ssums (joins) मोर्स प्रतीक एक साथ। खाली जानकारी के लिए, 0 देता है, लेकिन यह कोई समस्या नहीं है।

_Iयदि परिणाम Iउलट नहीं होता है तो जाँच करता है (उलट होने पर _)। खाली इनपुट के लिए, अगर 0 को बदला नहीं जाता है तो चेक किया जाता है।


0

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

[B-ILNPRSZ]
$&.
[AJKMOQT-Y]
$&-
}T`L`\EDKN_UMS\EWNRTTMWGAI_ISADKG
+`^(.)(.*)\1$
$2
^.?$

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। स्पष्टीकरण:

[B-ILNPRSZ]
$&.

इस सेट में अक्षरों के लिए सभी मोर्स कोड के साथ समाप्त होता है .

[AJKMOQT-Y]
$&-

इस सेट में अक्षरों के लिए सभी मोर्स कोड के साथ समाप्त होता है -

T`L`\EDKN_UMS\EWNRTTMWGAI_ISADKG

प्रत्येक अक्षर को उस अक्षर से बदलें, जिसका मोर्स कोड उस अक्षर का उपसर्ग है (यहाँ Eऔर Tबस यूनेस्कैप के माध्यम से हटा दिया गया है _, लेकिन आम तौर पर उन्हें रिक्त स्थान में बदल दिया जाएगा)। उदाहरण के लिए, अंत में अतिरिक्त के साथ Pमोर्स कोड है ; हमने उपरोक्त जोड़ा है इसलिए अब जो शेष है उसे डिकोड करना है ।W..W

}

उपरोक्त चरणों को तब तक दोहराएं जब तक कोई अक्षर शेष न हों।

^(.)(.*)\1$
$2

यदि पहले और अंतिम अक्षर समान हैं, तो उन दोनों को हटा दें।

+`

जितने भी अक्षर मेल खाते हैं उनके लिए दोहराएं।

^.?$

यदि यह एक पैलिंड्रोम था, तो सबसे अधिक एक पात्र बचा है।


0

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

PalindromeQ[##2&@@@(IntegerDigits[Tr@StringPosition[" ETIANMSURWDKGOHVF L PJBXCYZQ",#],2]&/@Characters@#)]&

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

इस जेली उत्तर के समान : हम मोर्स कोड को द्विआधारी के रूप में सोचते हैं, और एक स्ट्रिंग लिखते हैं " ETIANMSURWDKGOHVF L PJBXCYZQ"जहां एक चरित्र की स्थिति, बाइनरी में, हमें अपना मोर्स कोड देती है। लेकिन 1 अतिरिक्त के साथ, क्योंकि हम अंतर करना चाहते हैं S = 000और H = 0000उदाहरण के लिए। फिर ##2&@@@एक साथ इस अग्रणी 1 से छुटकारा पाता है और समतल होता है।


हुह, मुझे उम्मीद है कि वुल्फराम भाषा में मोर्स कोड बिल्ट-इन होगा। या यह एक है, लेकिन यह बहुत क्रिया है?
जैक ब्रूनस्टीन

1
मैं एक नहीं मिल सका। (और दस्तावेज़ीकरण में कुछ ऑडियो कमांड के लिए उदाहरण कोड शामिल है जो हार्ड-कोड मोर्स कोड है, जो मुझे उम्मीद नहीं है कि अगर कोई अंतर्निहित है।)
मीशा लावरोव

0

05AB1E , 37 बाइट्स

v•1êÿµµÈ∞Ƶipδ8?a¡š%=тîδ/•3B0¡Aykè}JÂQ

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


आधार 3 में वर्णमाला को एनकोड करता है, जिसे आधार 255 में परिवर्तित किया गया है:

12021110212102110101121022101111011012220212012110220210222012210221201210111020112011120122021120212202211

आधार 255:

•1êÿµµÈ∞Ƶipδ8?a¡š%=тîδ/•

फिर मूल रूप से, मैं इसे 0 पर अलग करता हूं, स्ट्रिंग को स्थिति के अनुसार बनाता हूं और पैलिंड्रोम के लिए जांच करता हूं।


0

सी # (.NET कोर) , 191 बाइट्स

a=>{var s="";int r=1,x=0,i;foreach(var t in a){var c="";for(i=" ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf(t);i>0;i/=2)c="-."[i--%2]+c;s+=c;}i=s.Length;for(;x<i;x++)r=s[x]==s[i-x-1]?r:0;return r;}

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

इस उत्तर का एक हिस्सा निक लार्सन के मोर्स कोड गोल्फ से अनुकूलित किया गया था । उत्तर पर टिप्पणियों के आधार पर, इसे संभावित रूप से आगे बढ़ाया जा सकता है।

Ungolfed:

a => {
    var s = "";                 // initialize s
    int r = 1, x = 0, i;        // initialize r, x, and i

    /*
        This portion was adapted from Nick Larsen. He described it as follows:
            -- The string of characters is a heap in which the left child is a dot and the right child is a dash.
            -- To build the letter, you traverse back up and reverse the order.
        I have edited it to remove number support, which saves 34 bytes.
    */
    foreach(var t in a)
    {
        var c = "";
        for(i = " ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf(t); i > 0; i /= 2)
            c = "-."[i-- % 2] + c;
        s += c;
    }

    i = s.Length;               // reuse i and set to the length of the morse code string
    for(; x < i; x++)           // increment x until x reaches i
        r = s[x] == s[i - x - 1] ?      // if the xth character on the left side of s is equal to the xth character on the right side of s
                                    r :     // true: do not change r
                                        0;  // false: set r to zero (set to false)

    return r;
}

0

पॉवरशेल , 204 187 बाइट्स

param($a);$a|% t*y|%{$b+=[convert]::ToString("  ETIANMSURWDKGOHVF L PJBXCYZQ".IndexOf($_),2).substring(1)};$c=($b=($b|% *ce 0 .|% *ce 1 -)).ToCharArray();[array]::Reverse($c);$b-eq-join$c

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

अशक्त स्ट्रिंग पर त्रुटियाँ ... किसी को भी इस के साथ मदद कर सकते हैं?

टेस्ट कोड (स्क्रिप्ट ब्लॉक में कोड को लपेटने और चर Z को असाइन करने के बाद ...):

$tests = @(
    "PULP", "True"
    "RESEARCHER", "True"
    "HOTDOGS", "True"
    "A", "False"
    "RACECAR", "False"
    "PROGRAMMING", "False"
    "PUZZLES", "False"
)
$outputs = @()
for($i = 0; $i -lt $tests.length/2; $i++){
    $output = New-Object "PSObject"
    $output  | Add-Member -MemberType NoteProperty -Name Name -Value "`"$($tests[2*$i])`""
    $output | Add-Member -MemberType NoteProperty -Name Expected -Value $tests[2*$i + 1]
    $output | Add-Member -MemberType NoteProperty -Name Result -Value $(&$Z -a $tests[2*$i])
    $outputs += $output 
}
$outputs | Format-Table

आउटपुट:

Name          Expected Result
----          -------- ------
"PULP"        True       True
"RESEARCHER"  True       True
"HOTDOGS"     True       True
"A"           False     False
"RACECAR"     False     False
"PROGRAMMING" False     False
"PUZZLES"     False     False

PPCG में आपका स्वागत है। यह आपके लिए उपयोगी होगा कि आप PowerShell में गोल्फ के लिए टिप्स देखें
mazzy

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