उपयोगकर्ता प्रशंसा चैलेंज # 1: डेनिस #


53

मुझे उन उपयोगकर्ताओं की चुनौतियों की एक श्रृंखला बनाने का सहज विचार मिला है जिन्होंने पीपीसीजी समुदाय को सभी के लिए एक सुखद स्थान बनाने में मदद की है और जारी रखा है, या शायद विशेष रूप से मेरे लिए। : पी

यदि आप डेनिस के नाम को 1एस और 0एस के एक सरणी में परिवर्तित करते हैं, जहां प्रत्येक व्यंजन है 1और प्रत्येक स्वर है 0, तो सरणी है [1, 0, 1, 1, 0, 1], जो सममित है। इस प्रकार, आपकी चुनौती यह निर्धारित करना है कि अन्य नाम इस प्रकार हैं।

चुनौती

ASCII स्ट्रिंग को देखते हुए, सभी वर्णों को हटा दें जो अक्षर नहीं हैं और यह निर्धारित करते हैं कि स्वर और व्यंजन का विन्यास सममित है या नहीं। yएक स्वर नहीं है।

कृपया ध्यान दें कि आपके प्रोग्राम को इस प्रकार का स्ट्रिंग होना आवश्यक नहीं है।

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

Dennis -> truthy
Martin -> truthy
Martin Ender -> truthy
Alex -> falsy
Alex A. -> truthy
Doorknob -> falsy
Mego -> falsy

संदर्भ कार्यान्वयन

यह पायथन 3 कोड सही आउटपुट देगा जो एक टेस्ट केस दिया गया है। यह उतना ही असंयमित है जितना मैं इसे हास्यास्पद होने के बिना बना सकता था।

अजगर ३

s = input()
l = []
for c in s:
	if c in 'AEIOUaeiou':
		l.append(0)
	elif c in 'BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz':
		l.append(1)
print(l == list(reversed(l)), end = '')

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



@cairdcoinheringaahing मुझे याद दिलाने के लिए धन्यवाद। यह Mego (TNB RO इसलिए इटैलिक्स) के बारे में होने जा रहा है, लेकिन मैंने इसे अभी तक अंतिम रूप देने के लिए नहीं देखा है।
हाइपरनेत्रिनो

क्या मुझे उसे बताना चाहिए या वह सिर्फ मछली की तलाश में पानी में गोता लगाएगा?
caird coinheringaahing

@cairdcoinheringaahing मुझे पूरा यकीन है कि वह पहले से ही जानता है; मैंने कहा कि मैं उसके बारे में एक करूँगा, लेकिन मैंने यह तय नहीं किया है कि मैं पेंगुइन या TNB से संबंधित कुछ करने जा रहा हूँ या नहीं।
हाइपरनेत्रिनो

मैं पेंगुइन पर भरोसा करता हूं। यह वह है जो वह (मेरे लिए) जानता है
caird coinheringaahing

जवाबों:


15

05AB1E , 9 बाइट्स

žM¹álSåÂQ

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

-2 अदनान को धन्यवाद ।

इससे जेली का दर्द बिल्कुल ठीक हो जाता है। यह जेली के क्रमशः और क्रमशः के लिए 1-बाइट समकक्ष का उपयोग करता है lऔर ।AŒlØa


क्या आप सुनिश्चित हैं कि यह काम करता है? इसे चलाएं
एमसीसीएस

@ एमसीसीसीएस हम्म, आप सही हो सकते हैं।
आउटगॉल्फ को एरिक

आप की जगह ले सकता द्वारा áऔर DRद्वारा Â
अदनान

@ अदनान के बारे में भूल गया á, पता नहीं क्या Âकरता है, धन्यवाद!
द एग्रीकल्चर आउटरीक

11
@alexis इनमें से अधिकांश गोल्फिंग भाषाओं में 256 विभिन्न वर्णों और एक कस्टम कोडपेज का उपयोग करते हैं, जो उन 256 वर्णों के लिए हेक्स 00को मैप करते FFहैं, जेली उत्तर देखें
स्टीफन

18

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

ŒufØAe€ØCŒḂ

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

वैकल्पिक संस्करण:

ŒlfØae€ØCŒḂ

ŒufØAe€ØcŒḂ

ŒlfØae€ØcŒḂ

बेशक डेनिस की सराहना करने वाली एक चुनौती का जवाब उनकी भाषा में होना चाहिए।


15
Œuf है अंडे में फ्रेंच। बस '
कहो

13

x86 32-बिट मशीन-कोड फ़ंक्शन, 42 41 बाइट्स

वर्तमान में सबसे छोटा गैर-गोल्फिंग-भाषा उत्तर, 1B @ स्ट्रीटस्टर q / kdb + से छोटा है ।

सत्य के लिए 0 और झूठे के लिए गैर-शून्य: 41 40 बाइट्स। (सामान्य तौर पर, 32-बिट के लिए 1 बाइट, 64-बिट के लिए 2 बाइट्स बचाता है)।

अंतर्निहित लंबाई के तार के साथ (सी-शैली 0-समाप्त): 45 44 बाइट्स

x86-64 मशीन-कोड (32-बिट पॉइंटर्स के साथ, जैसे x32 ABI): 44 43 बाइट्स

x86-64 अंतर्निहित लंबाई के तार के साथ, अभी भी 46 बाइट्स (शिफ्ट / मास्क बिटमैप रणनीति अभी भी ब्रेक है)।

यह C सिग्नेचर वाला एक फंक्शन है _Bool dennis_like(size_t ecx, const char *esi)। कॉलिंग सम्मेलन थोड़ा गैर-मानक है, एमएस वेक्टरकॉल / फास्टकॉल के करीब है, लेकिन विभिन्न आर्ग रजिस्टरों के साथ: ईएसआई में स्ट्रिंग और ईसीएक्स में लंबाई है। यह केवल अपने arg-regs और EDX को देखता है। AL, उच्च बाइट्स कचरा रखने के साथ वापसी मूल्य रखता है (जैसा कि SysV x86 और x32 ABIs द्वारा अनुमत है। आईडीके एमएस के एबीआई बूल या संकीर्ण पूर्णांक वापस करते समय उच्च कचरा के बारे में कहते हैं।)


एल्गोरिथ्म की व्याख्या :

इनपुट स्ट्रिंग पर लूप करें, स्टैक पर बूलियन एरे में फ़िल्टरिंग और वर्गीकृत करें: प्रत्येक बाइट के लिए, जांचें कि क्या यह एक अल्फाबेटिक कैरेक्टर है (यदि नहीं, तो अगले चार पर जारी रखें), और इसे 0-25 (AZ) से पूर्णांक में बदलें । स्वर के एक बिटमैप की जाँच करने के लिए उस 0-25 पूर्णांक का उपयोग करें = 0 / व्यंजन = 1। (बिटमैप को 32-बिट तत्काल के रूप में रजिस्टर में लोड किया जाता है)। बिटमैप परिणाम के अनुसार स्टैक पर 0 या 0xFF दबाएं (वास्तव में 32-बिट तत्व के निचले बाइट में, जिसमें शीर्ष 3 बाइट्स में कचरा हो सकता है)।

पहला लूप 0 या 0xFF का एक सरणी (कचरे के साथ गद्देदार तत्वों में) पैदा करता है। एक दूसरे लूप के साथ सामान्य पैलिंड्रोम की जाँच करें जो तब रुकता है जब पॉइंटर्स बीच में पार हो जाते हैं (या जब वे दोनों एक ही तत्व की ओर इशारा करते हैं यदि विषम संख्या में वर्ण होते हैं)। ऊपर की ओर बढ़ने वाला पॉइंटर स्टैक पॉइंटर है, और हम POP का उपयोग लोड + वृद्धि के लिए करते हैं। इस लूप में तुलना / सेटक के बजाय, हम केवल एक ही / अलग का पता लगाने के लिए XOR का उपयोग कर सकते हैं क्योंकि केवल दो संभावित मान हैं। हम (या के साथ) जमा कर सकते हैं चाहे हमें कोई भी गैर-मिलान तत्व मिले, लेकिन XOR द्वारा स्थापित झंडे पर एक प्रारंभिक-आउट शाखा कम से कम उतनी ही अच्छी है।

ध्यान दें कि दूसरा लूप byteऑपरेंड-आकार का उपयोग करता है , इसलिए यह परवाह नहीं करता कि प्रत्येक लूप तत्व के कम बाइट के बाहर पहला लूप क्या कचरा छोड़ता है।


यह सीएफ़ से एएल को सेट करने के लिए अनिच्छुक salcनिर्देश का उपयोग करता है , उसी तरह से जो sbb al,alकरेगा। यह हर इंटेल सीपीयू (64-बिट मोड को छोड़कर) पर समर्थित है, यहां तक ​​कि नाइट लैंडिंग भी! एग्नर फॉग सभी एएमडी सीपीयू (साथ ही रियान सहित) पर इसके लिए समय की सूची देता है , इसलिए यदि x86 विक्रेता 8086 के बाद से ओपकोड स्पेस के उस बाइट को बांधने पर जोर देते हैं, तो हम इसका लाभ उठा सकते हैं।

दिलचस्प ट्रिक्स:

  • संयुक्त इलफ़्फ़ा () और टॉपर () के लिए अहस्ताक्षरित तुलना चाल , और शून्य ईईएक्स भरने के लिए बाइट का विस्तार करता है, के लिए सेटिंग:
  • के लिए एक रजिस्टर में तत्काल बिटमैप bt, के लिए कुछ अच्छा संकलक उत्पादन से प्रेरितswitch
  • एक लूप में धक्का के साथ ढेर पर एक चर-आकार की सरणी बनाना। (Asm के लिए मानक, लेकिन कुछ नहीं आप अंतर्निहित लंबाई स्ट्रिंग संस्करण के लिए C के साथ कर सकते हैं)। यह हर इनपुट चरित्र के लिए स्टैक स्पेस के 4 बाइट्स का उपयोग करता है, लेकिन कम से कम 1 बाइट बनाम इष्टतम गोल्फिंग के आसपास बचाता है stosb
  • बूलियन सरणी पर cmp / setne के बजाय XOR बूलियन सीधे सत्य मूल्य प्राप्त करने के लिए। ( cmp/ salcएक विकल्प नहीं है, क्योंकि salcकेवल CF के लिए काम करता है, और 0xFF-0 CF सेट नहीं करता है। sete3 बाइट्स हैं, लेकिन inc2 बाइट्स की शुद्ध लागत के लिए लूप से बचना होगा (64-बिट मोड में 1) )) बनाम लूप में xor और इंक के साथ इसे ठीक करना।
; explicit-length version: input string in ESI, byte count in ECX
08048060 <dennis_like>:
 8048060:       55                      push   ebp
 8048061:       89 e5                   mov    ebp,esp  ; a stack frame lets us restore esp with LEAVE (1B)
 8048063:       ba ee be ef 03          mov    edx,0x3efbeee ; consonant bitmap

08048068 <dennis_like.filter_loop>:
 8048068:       ac                      lods   al,BYTE PTR ds:[esi]
 8048069:       24 5f                   and    al,0x5f    ; uppercase
 804806b:       2c 41                   sub    al,0x41    ; range-shift to 0..25
 804806d:       3c 19                   cmp    al,0x19    ; reject non-letters
 804806f:       77 05                   ja     8048076 <dennis_like.non_alpha>
 8048071:       0f a3 c2                bt     edx,eax    # AL = 0..25 = position in alphabet
 8048074:       d6                      SALC     ; set AL=0 or 0xFF from carry.  Undocumented insn, but widely supported
 8048075:       50                      push   eax
08048076 <dennis_like.non_alpha>:
 8048076:       e2 f0                   loop   8048068 <dennis_like.filter_loop>   # ecx = remaining string bytes
 ; end of first loop

 8048078:       89 ee                   mov    esi,ebp  ; ebp = one-past-the-top of the bool array
0804807a <dennis_like.palindrome_loop>:
 804807a:       58                      pop    eax      ; read from the bottom
 804807b:       83 ee 04                sub    esi,0x4
 804807e:       32 06                   xor    al,BYTE PTR [esi]
 8048080:       75 04                   jne    8048086 <dennis_like.non_palindrome>
 8048082:       39 e6                   cmp    esi,esp             ; until the pointers meet or cross in the middle
 8048084:       77 f4                   ja     804807a  <dennis_like.palindrome_loop>

08048086 <dennis_like.non_palindrome>:
 ; jump or fall-through to here with al holding an inverted boolean
 8048086:       40                      inc    eax
 8048087:       c9                      leave  
 8048088:       c3                      ret    
;; 0x89 - 0x60 = 41 bytes

यह शायद सबसे तेज़ जवाबों में से एक है, क्योंकि कोई भी गोल्फिंग वास्तव में बहुत बुरी तरह से दर्द नहीं करता है, कम से कम कुछ हजार वर्णों के तहत तार के लिए जहां 4x मेमोरी का उपयोग बहुत सारे कैश-मिस नहीं करता है। (यह उन उत्तरों को भी खो सकता है जो सभी वर्णों पर लूप करने से पहले गैर-डेनिस-जैसे तारों के लिए एक प्रारंभिक-आउट लेते हैं।) कई सीपीयू (जैसे स्काईलेक पर 3 उफ़ बनाम 1 ) salcकी तुलना में धीमी है setcc, लेकिन एक बिटमैप की जाँच करें bt/salcअभी भी एक स्ट्रिंग-खोज या रेगेक्स-मैच की तुलना में तेज़ है। और कोई स्टार्टअप ओवरहेड नहीं है, इसलिए यह छोटे तारों के लिए बेहद सस्ता है।

फ्लाई पर एक पास में करने का मतलब होगा अप और डाउन दिशाओं के लिए वर्गीकरण कोड को दोहराना। यह तेज़ लेकिन बड़ा कोड-आकार होगा। (बेशक अगर आप उपवास चाहते हैं, तो आप SSE2 या AVX2 के साथ एक बार में 16 या 32 वर्ण कर सकते हैं, फिर भी तुलनात्मक चाल का उपयोग रेंज-शिफ्टिंग द्वारा हस्ताक्षरित सीमा के निचले भाग में कर सकते हैं)।


इस फ़ंक्शन को cmdline arg के साथ कॉल करने के लिए टेस्ट प्रोग्राम (ia32 या x32 Linux के लिए) , और स्थिति = वापसी मान के साथ बाहर निकलें। int80h.orgstrlen से कार्यान्वयन ।

; build with the same %define macros as the source below (so this uses 32-bit regs in 32-bit mode)
global _start
_start:
    ;%define PTRSIZE 4   ; true for x32 and 32-bit mode.

    mov  esi, [rsp+4 + 4*1]  ; esi = argv[1]
    ;mov  rsi, [rsp+8 + 8*1]  ; rsi = argv[1]   ; For regular x86-64 (not x32)

%if IMPLICIT_LENGTH == 0
        ; strlen(esi)
         mov     rdi, rsi
         mov     rcx, -1
        xor     eax, eax
        repne scasb    ; rcx = -strlen - 2
        not     rcx
        dec     rcx
%endif

    mov  eax, 0xFFFFAEBB   ; make sure the function works with garbage in EAX
    call dennis_like

    ;; use the 32-bit ABI _exit syscall, even in x32 code for simplicity
    mov ebx, eax
    mov eax, 1
    int 0x80           ; _exit( dennis_like(argv[1]) )

    ;; movzx edi, al   ; actually mov edi,eax is fine here, too
    ;; mov eax,231     ; 64-bit ABI exit_group( same thing )
    ;; syscall

इस फ़ंक्शन का 64-बिट संस्करण उपयोग कर सकता है sbb eax,eax, जो कि 3 के बजाय केवल 2 बाइट्स है setc al। इसके लिए decया notअंत में एक अतिरिक्त बाइट की भी आवश्यकता होगी (क्योंकि केवल 32-बिट में 1-बाइट इंक / डीईसी आर 32 है)। X32 ABI (लॉन्ग मोड में 32-बिट पॉइंटर्स) का उपयोग करके, हम अभी भी REX उपसर्गों से बच सकते हैं, भले ही हम पॉइंटर्स की प्रतिलिपि बनाएँ और तुलना करें।

setc [rdi]सीधे मेमोरी में लिख सकते हैं, लेकिन स्टैक स्पेस के ईसीएक्स बाइट्स को जमा करने से बचत होती है। (और हमें आउटपुट सरणी के माध्यम से आगे बढ़ने की आवश्यकता है। [rdi+rcx]एड्रेसिंग मोड के लिए एक अतिरिक्त बाइट लेता है, लेकिन वास्तव में हमें एक काउंटर की आवश्यकता होती है जो फ़िल्टर्ड वर्णों के लिए अपडेट नहीं करता है, इसलिए यह इससे भी बदतर होने वाला है।)


यह %ifसशर्त के साथ YASM / NASM स्रोत है । इसे -felf32(32-बिट कोड) या -felfx32(x32 एबीआई के साथ 64-बिट कोड), और अंतर्निहित या स्पष्ट लंबाई के साथ बनाया जा सकता है । मैंने सभी 4 संस्करणों का परीक्षण किया है। NASM / YASM स्रोत से एक स्थिर बाइनरी बनाने के लिए एक स्क्रिप्ट के लिए इस उत्तर को देखें ।

X32 ABI के लिए समर्थन के बिना मशीन पर 64-बिट संस्करण का परीक्षण करने के लिए, आप सूचक को 64-बिट में बदल सकते हैं। (फिर बस गिनती से REX.W = 1 उपसर्गों (0x48 बाइट्स) की संख्या घटाएं। इस मामले में, 4 निर्देशों को 64-बिट regs पर काम करने के लिए REX उपसर्गों की आवश्यकता है)। या बस इसे rspऔर 4 जी पता स्थान के कम इनपुट सूचक के साथ कॉल करें ।

%define IMPLICIT_LENGTH 0

; This source can be built as x32, or as plain old 32-bit mode
; x32 needs to push 64-bit regs, and using them in addressing modes avoids address-size prefixes
; 32-bit code needs to use the 32-bit names everywhere

;%if __BITS__ != 32   ; NASM-only
%ifidn __OUTPUT_FORMAT__, elfx32
%define CPUMODE 64
%define STACKWIDTH 8    ; push / pop 8 bytes
%else
%define CPUMODE 32
%define STACKWIDTH 4    ; push / pop 4 bytes
%define rax eax
%define rcx ecx
%define rsi esi
%define rdi edi
%define rbp ebp
%define rsp esp
%endif

    ; A regular x86-64 version needs 4 REX prefixes to handle 64-bit pointers
    ; I haven't cluttered the source with that, but I guess stuff like %define ebp rbp  would do the trick.


    ;; Calling convention similar to SysV x32, or to MS vectorcall, but with different arg regs
    ;; _Bool dennis_like_implicit(const char *esi)
    ;; _Bool dennis_like_explicit(size_t ecx, const char *esi)
global dennis_like
dennis_like:
    ; We want to restore esp later, so make a stack frame for LEAVE
    push  rbp
    mov   ebp, esp   ; enter 0,0 is 4 bytes.  Only saves bytes if we had a fixed-size allocation to do.

    ;         ZYXWVUTSRQPONMLKJIHGFEDCBA
    mov  edx, 11111011111011111011101110b   ; consonant/vowel bitmap for use with bt

;;; assume that len >= 1
%if IMPLICIT_LENGTH
    lodsb   ; pipelining the loop is 1B shorter than  jmp .non_alpha
.filter_loop:
%else
.filter_loop:
    lodsb
%endif

    and   al, 0x7F ^ 0x20  ; force ASCII to uppercase.
    sub   al, 'A'          ; range-shift to 'A' = 0
    cmp   al, 'Z'-'A'      ; if al was less than 'A', it will be a large unsigned number
    ja  .non_alpha
    ;; AL = position in alphabet (0-25)

    bt    edx, eax              ; 3B
%if CPUMODE == 32
    salc                        ; 1B   only sets AL = 0 or 0xFF.  Not available in 64-bit mode
%else
    sbb   eax, eax              ; 2B   eax = 0 or -1, according to CF.
%endif
    push  rax

.non_alpha:
%if IMPLICIT_LENGTH
    lodsb
    test   al,al
    jnz .filter_loop
%else
    loop .filter_loop
%endif
    ; al = potentially garbage if the last char was non-alpha
    ; esp = bottom of bool array

    mov   esi, ebp  ; ebp = one-past-the-top of the bool array
.palindrome_loop:
    pop   rax

    sub   esi, STACKWIDTH
    xor   al, [rsi]   ; al = (arr[up] != arr[--down]).  8-bit operand-size so flags are set from the non-garbage
    jnz .non_palindrome

    cmp   esi, esp
    ja .palindrome_loop

.non_palindrome:  ; we jump here with al=1 if we found a difference, or drop out of the loop with al=0 for no diff
    inc   eax     ;; AL transforms 0 -> 1  or  0xFF -> 0.
    leave
    ret           ; return value in AL.  high bytes of EAX are allowed to contain garbage.

मैंने DF के साथ गड़बड़ करने की दिशा में देखा (दिशा ध्वज जो lodsd/ scasdऔर इसी तरह नियंत्रित करता है ), लेकिन यह सिर्फ एक जीत नहीं लगती थी। सामान्य ABI को यह आवश्यक है कि फ़ंक्शन प्रविष्टि और निकास पर DF को मंजूरी दे दी जाए। प्रवेश पर मंजूरी दे दी है, लेकिन इसे बाहर निकलने पर सेट छोड़ दिया जाएगा, धोखा दे रही है, IMO। 3-बाइट से बचने के लिए LODSD / SCASD का उपयोग करना अच्छा होगा sub esi, 4, विशेषकर उस स्थिति में जहां कोई उच्च कचरा नहीं है।


वैकल्पिक बिटमैप रणनीति (x86-64 के लिए अंतर्निहित लंबाई के तार)

यह पता चला है कि यह किसी भी बाइट को नहीं बचाता है, क्योंकि bt r32,r32अभी भी बिट-इंडेक्स में उच्च कचरा के साथ काम करता है। यह सिर्फ दस्तावेज नहीं है जिस तरह से shrहै।

bt / sbbबिट के / CF से बाहर निकलने के बजाय , बिटमैप से हम जो बिट चाहते हैं, उसे अलग करने के लिए एक शिफ्ट / मास्क का उपयोग करें।

%if IMPLICIT_LENGTH && CPUMODE == 64
    ; incompatible with LOOP for explicit-length, both need ECX.  In that case, bt/sbb is best
    xchg  eax, ecx
    mov   eax, 11111011111011111011101110b   ; not hoisted out of the loop
    shr   eax, cl
    and   al, 1
%else
    bt    edx, eax
    sbb   eax, eax
%endif
    push  rax

चूंकि यह AL में अंत में (0 / 0xFF के बजाय) 0/1 का उत्पादन करता है, हम फ़ंक्शन के अंत में रिटर्न वैल्यू के आवश्यक उलटा xor al, 1(2 बी) के बजाय dec eax(x86-64 में भी 2 बी) कर सकते हैं। अभी भी एक उचित bool/_Bool वापसी मूल्य का उत्पादन करते हैं ।

यह EAX के उच्च बाइट्स को शून्य करने की आवश्यकता से बचने के साथ, अंतर्निहित लंबाई के तार के साथ x86-64 के लिए 1 बी को बचाने के लिए उपयोग किया जाता है। (मैं and eax, 0x7F ^ 0x203-बाइट के साथ अपर-केस को बल देने और बाकी ईईएक्स को शून्य करने के लिए उपयोग कर रहा था and r32,imm8। लेकिन अब मैं 2-बाइट का उपयोग तत्काल-एएल एन्कोडिंग के साथ कर रहा हूं जो कि सबसे अधिक 8086 निर्देश हैं, जैसे मैं पहले से ही कर रहा था। ( subऔर cmp) के लिए

यह 32-बिट मोड में bt/ को खो देता salcहै, और स्पष्ट लंबाई के तार को गिनती के लिए ECX की आवश्यकता होती है ताकि यह वहां भी काम न करे।

लेकिन तब मुझे एहसास हुआ कि मैं गलत था: bt edx, eaxअभी भी ईगल में उच्च कचरा के साथ काम करता है। यह जाहिरा तौर पर शिफ्ट की गणना करता है उसी तरह से shr r32, clकरता है (केवल कम 5 बिट्स क्ल को देखते हुए)। यह इससे अलग है bt [mem], reg, जो एड्रेसिंग-मोड / साइज द्वारा संदर्भित मेमोरी के बाहर पहुंच सकता है, इसे बिटस्ट्रिंग के रूप में मानता है। (क्रेजी CISC ...)

इंटेल के इनस सेट रेफरी मैनुअल में मास्किंग का दस्तावेज नहीं है, इसलिए हो सकता है कि यह अबाधित व्यवहार है जिसे इंटेल अभी के लिए संरक्षित कर रहा है। (इस तरह की बात असामान्य नहीं है। bsf dst, srcsrc = 0 के साथ हमेशा dst unmodified निकलता है, भले ही यह उस स्थिति में अपरिभाषित मान रखने वाले dst को छोड़ने के लिए प्रलेखित हो। AMD वास्तव में src = 0 व्यवहार का दस्तावेज है।) Skylake और Core2 में परीक्षण किया गया है। और btसंस्करण AL के बाहर EAX में गैर-शून्य कचरा के साथ काम करता है।

xchg eax,ecxसीएल में गिनती प्राप्त करने के लिए यहां एक साफ सुथरी चाल (1 बाइट) का उपयोग किया जाता है। दुर्भाग्य से, BMI2 shrx eax, edx, eax5 बाइट्स है, बनाम केवल 2 बाइट्स के लिए shr eax, cl। का प्रयोग bextrकी जरूरत है 2-बाइट mov ah,1(बिट्स की संख्या के लिए निकालने के लिए), तो यह फिर से 5 + 2 बाइट्स SHRX + और की तरह है।


स्रोत कोड %ifसशर्त जोड़ने के बाद बहुत गड़बड़ हो गया है । यहां एक्स 32 इम्प्लांट-लेंथ स्ट्रिंग्स (बिटमैप के लिए वैकल्पिक रणनीति का उपयोग करके, इसलिए यह अभी भी 46 बाइट्स है) का डिस्सैप्शन है।

स्पष्ट-लंबाई संस्करण से मुख्य अंतर पहले लूप में है। ध्यान दें कि lodsलूप के शीर्ष पर केवल एक के बजाय, इसके पहले और नीचे में कैसे है।

    ; 64-bit implicit-length version using the alternate bitmap strategy
    00400060 <dennis_like>:
      400060:       55                      push   rbp
      400061:       89 e5                   mov    ebp,esp
      400063:       ac                      lods   al,BYTE PTR ds:[rsi]

    00400064 <dennis_like.filter_loop>:
      400064:       24 5f                   and    al,0x5f
      400066:       2c 41                   sub    al,0x41
      400068:       3c 19                   cmp    al,0x19
      40006a:       77 0b                   ja     400077 <dennis_like.non_alpha>
      40006c:       91                      xchg   ecx,eax
      40006d:       b8 ee be ef 03          mov    eax,0x3efbeee  ; inside the loop since SHR destroys it
      400072:       d3 e8                   shr    eax,cl
      400074:       24 01                   and    al,0x1
      400076:       50                      push   rax
    00400077 <dennis_like.non_alpha>:
      400077:       ac                      lods   al,BYTE PTR ds:[rsi]
      400078:       84 c0                   test   al,al
      40007a:       75 e8                   jne    400064 <dennis_like.filter_loop>

      40007c:       89 ee                   mov    esi,ebp
    0040007e <dennis_like.palindrome_loop>:
      40007e:       58                      pop    rax
      40007f:       83 ee 08                sub    esi,0x8
      400082:       32 06                   xor    al,BYTE PTR [rsi]
      400084:       75 04                   jne    40008a <dennis_like.non_palindrome>
      400086:       39 e6                   cmp    esi,esp
      400088:       77 f4                   ja     40007e <dennis_like.palindrome_loop>

    0040008a <dennis_like.non_palindrome>:
      40008a:       ff c8                   dec    eax  ; invert the 0 / non-zero status of AL.  xor al,1 works too, and produces a proper bool.
      40008c:       c9                      leave  
      40008d:       c3                      ret    

   0x8e - 0x60 = 0x2e = 46 bytes

8

रेटिना ,४ ९ ४ 47 45 बाइट्स

\P{L}

i`[aeiou]
1
\D
2
+`^(.)(.*)\1$
$2
^.?$

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

नील को धन्यवाद देकर 2 बाइट्स बचाए।

मार्टिन की बदौलत एक और 2 बाइट्स बचाए।

गैर-अक्षरों को हटाता है और फिर 1 और व्यंजन के साथ स्वरों को बदलता है, लगातार मान प्राप्त करने के लिए। फिर बार-बार पहले और आखिरी चरित्र को हटा देता है यदि वे समान हैं। यदि वे नहीं हैं, तो शब्द सममित था यदि एक या शून्य अक्षर शेष हैं।


क्या \D 2आप बाइट्स के एक जोड़े को बचाने के लिए काम करता है T`lL`2?
नील

@ नील यह अच्छा लग रहा है, हाँ!
FryAmTheEggman 28:17

बहुत बढ़िया। मैं ऐसा करने की कोशिश कर रहा था :(
क्रिस्टोफर

7

PHP, 82 बाइट्स

<?=strrev($s=preg_replace(["#[^a-z]#i","#[aeiou]#i","#\pL#"],["",0,1],$argn))==$s;

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


आप टाइपकास्टिंग को रोक सकते हैं (bool)और 1 बाइट को बचाने के $s=लिए ==$sचेक को हटा सकते हैं।
केसर

अगर मैं गलत नहीं हूं, तो आप (bool)केवल 3 अतिरिक्त बाइट्स बचाने के 0||लिए झूठे, या ... कहने के साथ बदल सकते हैं ।
केसर

हम्म। क्या आप इसके बजाय शब्द वर्णों के \wलिए उपयोग नहीं कर सकते ? a-z
केसर

@kaiser \wमें अंक अंडरस्कोर और अक्षर होते हैं। यह काम नहीं करेगा और [^/p{L}]अधिक से [^a-z]अधिक i है। मैं स्ट्रिंग के साथ रिवर्स स्ट्रिंग की तुलना करता हूं ताकि $sबूलियन बनाने की जरूरत हो
Jörg Hülsermann

यह सच है। फिर भी दूसरों को काम करना चाहिए। "क्या" ... वे करते हैं।
केसर

6

MATL, 14 बाइट्स

t3Y2m)13Y2mtP=

इसे MATL ऑनलाइन पर आज़माएं

यहां सभी परीक्षण मामलों की जांच करने के लिए थोड़ा संशोधित संस्करण है।

व्याख्या

        % Implicitly grab the input as a string
        %     STACK: {'Martin Ender'}
t       % Duplicate the input
        %     STACK: {'Martin Ender', 'Martin Ender'}
3Y2     % Push the string 'ABC...XYZabc...xyz'
        %     STACK: {'Martin Ender', 'Martin Ender', 'ABC...XYZabc...xyz'}
m       % Find which characters of the input are letters using this string
        %     STACK: {'Martin Ender', [1 1 1 1 1 1 0 1 1 1 1]}
)       % Use this boolean array to select only the letters
        %     STACK: {'MartinEnder'}
13Y2    % Push the string literal 'aeiouAEIOU' to the stack
        %     STACK: {'MartinEnder', 'aeiouAEIOU'}
m       % Check for membership of each letter of the input in this string.
        %     STACK: {[0 1 0 0 1 0 1 0 0 1 0]}
tP      % Create a reversed copy
        %     STACK: {[0 1 0 0 1 0 1 0 0 1 0], [0 1 0 0 1 0 1 0 0 1 0]}
=       % Perform an element-wise comparison yielding a truthy (all 1's) or 
        % falsey (any 0's) result
        %     STACK: {[1 1 1 1 1 1 1 1 1 1 1]}
        % Implicitly display the result

आप इसे "डेनिस" के बजाय "मार्टिन एंडर" के साथ प्रदर्शित करते हैं? मुझे चुनौती शीर्षक पर फिर से गौर करना होगा।
रोमन ग्रैफ

1
संभवतः Suever एक ऐसा प्रदर्शन चाहता था जिसमें पहले चरण में कुछ मात्रा में फ़िल्टरिंग हो।
ग्रेग मार्टिन

तो उसे "एलेक्स ए" का उपयोग करना चाहिए इसके बजाय, इसकी एक अवधि भी है।
बजे द एग्रीकल्चर आउटरीक

2
मैं उलझन में हूँ कि मुद्दा क्या है। मैंने मार्टिन एंडर को चुना क्योंकि यह वास्तव में सच होगा यदि आप रिक्त स्थान हटाते हैं और अन्यथा झूठे हैं। मैंने सभी परीक्षण मामलों के लिए एक लिंक भी शामिल किया
स्यूवर

6

हास्केल, 84 75 74 69 बाइट्स

-10 धन्यवाद @nimi
-5 धन्यवाद @Zgarb करने के लिए

f x=(==)<*>reverse$[elem c"aeiouAEIOU"|c<-x,'@'<c,c<'{','`'<c||c<'[']

सूची की समझ प्रत्येक पत्र को एक बूलियन के साथ बदल देती है और अन्य सभी पात्रों को हटा देती है। पहला भाग जांचता है कि परिणामी सूची एक पैलिंड्रोम है या नहीं।

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


दो युक्तियां: 1) एक सूची की समझ अक्सर छोटी होती filterहै, mapभले ही आपको गैर-कवितात्मकता पर स्विच करना पड़े। 2) <$>idसतही है। f x=(==)<*>reverse$[elem c"aeiouAEIOU"|c<-x,cहाथी ['A'..'Z']++['a'..'z']]
निमि

आप के बीच की जगह को छोड़ सकते हैं cऔर "एक और बाइट के लिए।
नीमी

1
मुझे लगता है कि c`elem`['A'..'Z']++['a'..'z']इसे छोटा किया जा सकता है'@'<c,c<'{','`'<c||c<'['
ज़र्गब

5

पायथ, 18 15 बाइट्स

_I/L"aeiou"@Gr0

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

-2 कार्लक्लस्टर के लिए धन्यवाद , और बाद में -1।


16 बाइट्स: _I/L"aeiou"@Grz0(
इन्वर्टिस

@KarlKastor मुझे पता था कि उस तरह कुछ ऑपरेटर होना चाहिए ... धन्यवाद। (BTW मैं अब zभी हटा सकते हैं , मैं उद्धृत इनपुट मान लेंगे)
एरिक द आउटगेलर


3

ऐलिस , 28 बाइट्स

/uia.QN."-e@
\1"lyuy.Ra$i1/o

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

सत्य के 1रूप में आउटपुट और मिथ्या के रूप में कुछ भी नहीं।

व्याख्या

इस कार्यक्रम में प्रत्येक कमांड ऑर्डिनल मोड में निष्पादित होती है, लेकिन टेम्पलेट में एक मामूली मोड़ के साथ जो मुझे एक बाइट को बचाने की अनुमति देता है। यदि एक नईलाइन एक स्वीकार्य सत्य मूल्य है, तो मैं उसी विधि द्वारा एक और बाइट बचा सकता हूं।

रैखिक, कार्यक्रम इस प्रकार है:

1il.uN."aei ou"ayQy.R-$@1o1@

1                           % Append "1" to top of stack
                            % STACK: ["1"]
 i                          % Push input to stack
                            % STACK: ["1", "Dennis"]
  l                         % Convert to lowercase
                            % STACK: ["1", "dennis"]
   .                        % Duplicate
                            % STACK: ["1", "dennis", "dennis"]
    u                       % Convert to uppercase
                            % STACK: ["1", "dennis", "DENNIS"]
     N                      % Take multiset difference; this removes all non-alphabetic characters
                            % STACK: ["1", "dennis"]
      .                     % Duplicate
                            % STACK: ["1", "dennis", "dennis"]
       "aei ou"             % Push "aei ou"
                            % STACK: ["1", "dennis", "dennis", "aei ou"]
              a             % Push newline
                            % STACK: ["1", "dennis", "dennis", "aeiou", "\n"]
               y            % Transliterate: replace all vowels with newlines
                            % STACK: ["1", "dennis", "d\nnn\ns"]
                Q           % Reverse stack
                            % STACK: ["d\nnn\ns", "dennis", "1"]
                 y          % Transliterate: replace remaining characters with "1"
                            % STACK: ["1\n11\n1"]
                  .         % Duplicate
                            % STACK: ["1\n11\n1", "1\n11\n1"]
                   R        % Reverse top of stack
                            % STACK: ["1\n11\n1", "1\n11\n1"]
                    -       % Remove occurrences: for same-length strings, result is "" iff strings are equal.
                            % STACK: [""]
                     $      % Pop stack, and skip next command if ""
                      @     % Terminate (skipped if c/v pattern is palindromic)
                       1o   % Output "1"
                         1  % Push "1" (useless)
                          @ % Terminate


3

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

नील को धन्यवाद देकर 3 बाइट्स बचाए

एक बूलियन देता है।

s=>(a=s.match(/[a-z]/gi).map(c=>!/[aeiou]/i.exec(c)))+''==a.reverse()

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


2 खाली स्ट्रिंग्स को बदलकर बाइट्स के एक जोड़े को बचाएं 2
झबरा

1
क्या आपको भी +''अंत में आवश्यकता है ? इसके बजाय 3 बाइट्स बचाएगी।
नील

मुझे @ नील का आइडिया बेहतर लगा!
झबरा

2

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

PalindromeQ@StringCases[StringReplace[#,{Characters["aeiouAEIOU"]->"1",CharacterRange["A","z"]->"0"}],{"0","1"}]&

आप काफी कुछ बाइट्स से छुटकारा पा सकते हैं:PalindromeQ@StringReplace[#,{Characters@"aeiouAEIOU"->"1",LetterCharacter->"0",_->""}]&
पेड़ नहीं '

2

गोल्फस्क्रिप्ट , 42 बाइट्स

{123,65>.26>6<-?)},{"AEIOUaeiou"?)!}%.-1%=

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

हार्ड भाग एक स्ट्रिंग में अपरकेस और लोअरकेस वर्णमाला दोनों उत्पन्न कर रहा है, जिसका उपयोग हम इनपुट फ़ंक्शन में इनपुट से बाहर फिल्टर करने के लिए करेंगे। सौभाग्य से, चूंकि गोल्फस्क्रिप्ट में तार सिर्फ एक विशेष संपत्ति के साथ कोडपॉइंट ऐरे हैं, इसलिए हम सिर्फ एक कुशल तरीके से कोडप्वाइंट उत्पन्न कर सकते हैं। यहाँ हम उन्हें कैसे उत्पन्न करते हैं:

सबसे पहले, हम रेंज [0..122] उत्पन्न करते हैं, 122 के लिए कोडपॉइंट है z। फिर, हम तत्व से तत्वों को सूचकांक 65 पर ले जाते हैं। 65 के लिए कोडपॉइंट है A। अभी, हमारे पास [65..122] है। सभी ठीक है, सिवाय इसके कि हमारे पास कुछ अवांछित कोडपॉइंट्स ([91..96]) हैं। तो, हम पहले उस सीमा का डुप्लिकेट बनाते हैं। फिर, हम तत्वों को इंडेक्स 26 से आगे की ओर ले जाते हैं, और हमारे पास [91..122] है। उसके बाद, हम तत्वों को इंडेक्स 5. सहित शामिल करते हैं। अब हमारे पास [91..96] है। अंत में, हम उन तत्वों को अपने [65..122] से हटा देते हैं, जिससे हमें wil [65..90, 97..122] छोड़ना पड़ता है। वे कोडपॉइंट हैं जो हम चाहते हैं।

अब जब हमने ऊपरी / निचली वर्णमाला कोडपॉइंट सूची बनाई, तो हम अपने फ़िल्टरिंग फ़ंक्शन को जारी रखते हैं। फ़ंक्शन इनपुट स्ट्रिंग पर प्रत्येक वर्ण के लिए मैप किया जाता है, जैसा कि मैंने शुरू में कहा था, इसके कोडपॉइंट के रूप में पार्स किया गया। इसलिए अब हमारे पास अनिवार्य रूप से है [codepoint, [65..90, 97..122]]। यह पता लगाने के लिए कि क्या चार codepointएक पत्र है, हम बस हमारे द्वारा बनाई गई सूची में इसका सूचकांक लेते हैं। यदि यह नहीं है, तो हम -1इसके बजाय सूचकांक के रूप में प्राप्त करेंगे।

अभी, हमें एक गलत मूल्य मिलता है अगर codepoint == 65, यानी हमारी सूची का पहला सूचकांक, उसके बाद ही सूचकांक 0. होगा। लेकिन एक वेतन वृद्धि इस समस्या को ठीक कर देगी, और, अब, अगर codepointहमारी सूची में है, तो हम इसका अनुक्रमणिका + 1 प्राप्त करें, जो हमेशा एक सकारात्मक संख्या है, इस प्रकार हमेशा सत्य है, जबकि अगर यह नहीं है तो हमें -1 + 1 = 0 मिलेगा, अर्थात गलत।

हम अंततः इनपुट के प्रत्येक चार्ट में वर्णित फ़ंक्शन को लागू करते हैं, और हम केवल उन चार्ज़ को लेते हैं जिनके लिए फ़ंक्शन ने एक सत्य परिणाम दिया।

अगली बार हमें यह निर्धारित करना होगा कि क्या प्रत्येक चर स्वर या व्यंजन है। चूंकि स्वर व्यंजन की तुलना में कम हैं, इसलिए स्वरों की एक स्ट्रिंग का निर्माण होता है ताकि हम उस स्थिति की जांच करें कि वे व्यंजन की स्ट्रिंग बनाने से कम हैं, इसलिए हम जांचते हैं कि क्या प्रत्येक वर्ण एक स्वर है। लेकिन, यह जांचने के लिए कि क्या बूलियन लिस्ट पैलिंड्रोमिक है, हमें बूलियन्स की जरूरत है, जो हमें सिर्फ इंडेक्स + 1 लेने से नहीं मिलता है, क्योंकि इसके परिणामस्वरूप किसी भी संख्या में [१.१०] हो सकता है अगर चार स्वर है। और, अधिकांश गोल्फिंग भाषाओं के रूप में, यह एक, एक boolफ़ंक्शन भी नहीं है । इसलिए, हम बस उपयोग करते हैं not not x, क्योंकि notहमेशा एक बूलियन वापस करता है। लेकिन रुकें; क्या हमें वास्तव में विशिष्ट बूलियन्स की आवश्यकता है? चूँकि notहमेशा एक बूलियन लौटता है, हम दूसरे को क्यों नहीं हटातेnot, और वास्तव में जाँच करें कि क्या प्रत्येक वर्ण एक व्यंजन है? हाँ, यह ठीक है कि हम क्या करेंगे!

चेक के बाद, जो बूलियन्स की एक सूची देता है, हम जांचते हैं कि क्या यह बूलियन सूची हमें मिली है, एक पैलिंड्रोम है, जो कि यह चुनौती हमें करने के लिए कहती है। ठीक है, एक पैलिंड्रोम की परिभाषा क्या है? हां, एक पैलिंड्रोम एक सूची या स्ट्रिंग है जो इसके रिवर्स के बराबर है। तो, हम कैसे जांचें? सरल, हम इसे डुप्लिकेट करते हैं, इसके रिवर्स लेते हैं, और मूल सूची के खिलाफ जांच करते हैं। हमें जो परिणाम मिलता है, आखिरकार , हमारे कोड को क्या लौटना चाहिए।


1
42-बाइट कार्यक्रम के लिए विशाल व्याख्या। अब मुझे लगता है कि यह बहुत आत्म-व्याख्यात्मक है ...
एरिक द आउटग्राफर

2

PHP , 87 बाइट्स

Regex मुक्त PHP संस्करण। एक "स्वर" जोड़ा गया क्योंकि स्ट्रिप 0 0 वापस आ सकता है जो PHP में गलत है।

जौग द्वारा तय की गई ज्वाला।

for(;a&$c=$argn[$p++];)!ctype_alpha($c)?:$s.=stripos(_aeiou,$c)?0:1;echo$s==strrev($s);

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


उसी बाइट की गिनती। for(;a&$c=$argn[$p++];)ctype_alpha($c)?$s.=stripos(_aeiou,$c)?0:1:0;echo$s==strrev($s);लेकिन यह उन तारों के लिए सही परिणाम प्राप्त करता है जिनमें शून्य होता है
Jörg Hülsermann

@ JörgHülsermann धन्यवाद।
एमई

2

क्यू / केडीबी +, ४२ ३ + बाइट्स

उपाय:

{x~|:[x]}{inter[x;.Q.a]in"aeiou"}lower

उदाहरण:

q){x~|:[x]}{inter[x;.Q.a]in"aeiou"}lower"Dennis"
1b
q){x~|:[x]}{inter[x;.Q.a]in"aeiou"}lower"Adam"
0b
q){x~|:[x]}{inter[x;.Q.a]in"aeiou"}lower"Alex A."
1b

स्पष्टीकरण:

lower        // converts argument on the right to lowercase
.Q.a         // lowercase alphabet "abc..xyz"
inter[x;y]   // intersection of x and y (thus only return a-z)
x in "aeiou" // returns boolean list whether x is a vowel; "dennis" = 010010b
|:           // k shorthand for 'reverse'

संपादन:

  • -4 निवाले; से स्विच reverseकश्मीर समकक्ष के लिए|:

2

सीजेएम , 26 बाइट्स

lel_'{,97>--"aeiou"fe=_W%=

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

-1 Esolanging फल के लिए धन्यवाद ।


आप एक बाइट को बचाने के 26,'af+साथ बदल सकते हैं '{,97>
फलन

@EsolangingF ऐसे ही एक पुराने उत्तर पर ध्यान दें ...
एरिक आउटगोल्फर

आधे साल पहले बचा लिया गया एक बाइट अब बाइट से अलग नहीं है। यह बाइट मुद्रास्फीति या कुछ भी नहीं की तरह है: P
Esolanging Fruit

@EsolangingFruit मैं गोल्फ के साथ अपने हमेशा विकासशील अनुभव का जिक्र कर रहा था ... बेशक आपको हमेशा की तरह एक क्रेडिट मिला है, चिंता न करें!
E पर आउटगॉल्फ

2

ब्रिंगोल्फ,  4  3 बाइट्स

&JP

-1 बाइट थैंक्स टू एरिक द आउटगोलर

Pइस चुनौती से पहले ही मैं सब कुछ बदल चुका था ।

J हालांकि, इस चुनौती से पहले बनाए जाने के बावजूद, चुनौती से पहले जीथब को धक्का नहीं दिया गया था, इस प्रकार अभी भी गैर-प्रतिस्पर्धात्मक है।

स्पष्टीकरण:

&JP  Implicit input, push ASCII value of each char in string to stack
&J   Replace each item in stack with 1 if vowel, otherwise 0
  P  Pop entire stack, push 1 if stack is palindromic, 0 otherwise
     Implicit output of last item on stack

आपको आवश्यकता क्यों है n?
एग्री आउटलोफर

@EriktheOutgolfer क्योंकि मैं एक प्रमाणित
मोरन हूं

हम्म, आप इसे स्पष्टीकरण से दूर करना भूल गए।
एरिक आउटोलॉफ़र

@EriktheOutgolfer मैं गन्ना लिख ​​रहा था "एरिक" तो सी को हड़ताल करें, लेकिन यह सिर्फ "एरिक" की तरह दिखता है
स्काइदेव

की पसंद के लिए यह असफल नहीं होगा Alex A.?
झबरा

1

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

def f(x):k=map(lambda y:y.lower()in"aeiou",filter(str.isalpha,x));return k==k[::-1]

एक फ़ंक्शन को परिभाषित करता है जो या तो देता है TrueयाFalse


के "aeiouAEIOU".__contains__बजाय का उपयोग करके आप 2 बाइट्स बचा सकते हैं lambda y:y.lower()in"aeiou"
ब्लेंडर


1

पायथन 3 , 92 87 74 72 69 68 बाइट्स

l=[c in'aeouiAEOUI'for c in input()if c.isalpha()]
print(l==l[::-1])

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


आप इससे पहले अंतरिक्ष को हटा सकते हैंfor c in s
क्रिति लिथोस

और आप sचर sको दूसरी पंक्ति में बदलकर निकाल सकते हैंinput().lower()
क्रिस्सी लिथोस


1

बैश , 82 बाइट्स

i=${1//[^a-zA-Z]};a=aeouiAEOUI;b=${i//[$a]/0};c=${b//[!0$a]/1};[ $c = `rev<<<$c` ]

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

नाम को पैरामीटर के रूप में याद करता है, गैर-अक्षरों को हटाता है, स्वरों को 0 के साथ बदलता है, गैर-स्वरों का और न ही 0 के साथ 1 और उसी उलट की तुलना करता है।

कुछ और गोल्फ कर सकते हैं अगर काम करने के लिए डबल या ट्रिपल प्रतिस्थापन मिल सकता है

बाहर निकलने की स्थिति 0 के लिए सच है और 1 के लिए नहीं है।


हाल के बैश संस्करणों में, अपरकेस में i=${i^^*};कनवर्ट करता iहै। लेकिन मुझे लगता है कि यह केवल आप एक बचत होती है a-zऔर एक aeiouहै, जो 10B यह लागत से कम है।
पीटर कॉर्डेस

1

जाप v2.0a0, 19 11 बाइट्स

k\L mè\v ê¬

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


व्याख्या

        :Implicit input of string U.
 k\L    :Remove all non-letter characters from U.
 m      :Map over resulting string, replacing each character ...
 è\v    :with the count of the number of vowels in each single character substring.
 ê¬     :Is the above a palindrome?
        :Implicit output of boolean result.

0

APL (Dyalog) , 34 33 बाइट्स

{(∧/⊢=⌽)'AEIOU'∊⍨⍵/⍨⍵∊⎕A}1∘(819⌶)

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

गोल्फ का काम जारी है।


एक बाइट के साथ सहेजें819⌶⍨∘1
Adám

और दो के साथ(⊢≡⌽)
Adám

... लेकिन मैं इसे 24 में हल कर सकता हूं। कोई संकेत चाहते हैं?
एडम


0

Axiom, 126 बाइट्स

g(x)==~member?(x,alphabetic());v(s:String):Boolean==(w:=remove(g,s);a:=[member?(w.r,"aeiouAEIOU")for r in 1..#w];a=reverse(a))

परीक्षा

(8) -> [[i,v(i)] for i in ["Dennis", "Martin", "Martin Ender", "Alex", "Alex A.", "Doorknob", "Mego"]]
   (8)
   [["Dennis",true], ["Martin",true], ["Martin Ender",true], ["Alex",false],
    ["Alex A.",true], ["Doorknob",false], ["Mego",false]]
                                                      Type: List List Any


0

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

$s=("$args"-replace '\P{L}'-replace'[aeiou]',0-replace'\D',1);$s-eq(-join($s[-1..-99]))

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

आउटपुट:

PS C:\Users\Connor> "Dennis","Martin","Martin Ender","Alex","Alex A.","Doorknob","Mego" | % {
    $s=("$_"-replace '\P{L}'-replace'[aeiou]',0-replace'\D',1);$s-eq(-join($s[-1..-99]))
}
True
True
True
False
True
False
False

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