ব্যবহারকারীর প্রশংসা চ্যালেঞ্জ # 1: ডেনিস ♦


53

আমি পিপিসিজি সম্প্রদায়কে প্রত্যেকের জন্য উপভোগযোগ্য জায়গা হতে সাহায্য করে এবং অব্যাহত রেখেছি এমন ব্যবহারকারীদের একাধিক চ্যালেঞ্জ তৈরি করার স্বতঃস্ফূর্ত ধারণা পেয়েছি, বা সম্ভবত বিশেষত আমার জন্য। : P: P

আপনি যদি ডেনিসের নামকে প্রতিটি ব্যঞ্জনবর্ণের এবং প্রতিটি স্বরযুক্ত যেখানে 1s এবং 0s এর অ্যারে রূপান্তর করেন তবে অ্যারেটি যা প্রতিসম হয়। সুতরাং, আপনার চ্যালেঞ্জটি অন্যান্য নামগুলি এর মতো কী তা নির্ধারণ করা।10[1, 0, 1, 1, 0, 1]

চ্যালেঞ্জ

একটি এএসসিআইআই স্ট্রিং দেওয়া হয়েছে, অক্ষর নয় এমন সমস্ত অক্ষর মুছে ফেলুন এবং স্বর এবং ব্যঞ্জনবর্ণের কনফিগারেশন প্রতিসাম্য কিনা তা নির্ধারণ করুন। 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 = '')

এটি অনলাইন চেষ্টা করুন!



আমাকে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ এটি মেগো সম্পর্কে হতে চলেছে (টিএনবি আরও অতএব ইতালীয়) তবে এটি এখনও চূড়ান্ত করতে আমি পাইনি।
হাইপারনিউটারিনো

আমি কি তাকে বলব নাকি সে মাছের সন্ধানের জন্য জলে ডুব দেবে?
কেয়ারড কোইনরিঙ্গিংহিং

@ Caairccherheraaahing আমি নিশ্চিত যে সে ইতিমধ্যে জানে; আমি বলেছিলাম যে আমি তার সম্পর্কে একটি করব তবে আমি এখনও সিদ্ধান্ত নিইনি যে আমি এখনও পেঙ্গুইন বা টিএনবি সম্পর্কিত কিছু করতে যাচ্ছি কিনা।
হাইপার নিউট্রিনো

আমি পেঙ্গুইন গণনা। এটিই তিনি জানেন (আমার জন্য)
কায়ারড coinheringaahing

উত্তর:


15

05 এ বি 1 ই , 9 বাইট

žM¹álSåÂQ

এটি অনলাইন চেষ্টা করুন!

-2 আদনানকে ধন্যবাদ ।

এটি জেলির বেদনা বিন্দুকে ঠিক আক্রমণ করে। এটি ব্যবহার করে lএবং Aজেলি এর জন্য, 1-বাইট সমতুল Œlএবং Øaযথাক্রমে।


আপনি কি নিশ্চিত যে এটি কাজ করে? এটি চালান
এমসিসিএস

@ এমসিসিএসএস হুম, আপনি ঠিক থাকতে পারেন।
এরিক আউটগল্ফার

আপনি দ্বারা áএবং DRদ্বারা প্রতিস্থাপন করতে পারেন Â
আদনান

@ আদনান ভুলে গেছেন á, জানেন না কী Âকরে, ধন্যবাদ!
এরিক দ্য আউটগল্ফার

11
@alexis এই golfing ভাষায় অধিকাংশ 256 বিভিন্ন অক্ষর এবং যে হেক্স মানচিত্র একটি কাস্টম codepage ব্যবহার 00করতে FFঐ 256 অক্ষর, জেলি উত্তর দেখার
স্টিফেন

18

জেলি , 11 বাইট

ŒufØAe€ØCŒḂ

এটি অনলাইন চেষ্টা করুন!

বিকল্প সংস্করণ:

ŒlfØae€ØCŒḂ

ŒufØAe€ØcŒḂ

ŒlfØae€ØcŒḂ

অবশ্যই ডেনিসের প্রশংসা করা একটি চ্যালেঞ্জের একটি ভাষায় তার উত্তর থাকতে হবে।


15
ফরাসী ভাষায় ইউফ ডিম । শুধু বলুন '
ওয়াইএসসি

13

x86 32-বিট মেশিন-কোড ফাংশন, 42 41 বাইট

বর্তমানে গল্ফিং-না-উত্তর উত্তর, @ স্ট্রিস্টারের কিউ / কেডিবি + এর চেয়ে 1 বি কম ।

সত্যের জন্য 0 এবং মিথ্যা জন্য শূন্য নয়: 41 40 বাইট। (সাধারণভাবে, 32-বিটের জন্য 1 বাইট, 64-বিটের জন্য 2 বাইট সংরক্ষণ করে)।

অন্তর্নির্মিত দৈর্ঘ্যের স্ট্রিং (সি-স্টাইল 0-সমাপ্ত): 45 44 বাইট

x86-64 মেশিন-কোড (32-বিট পয়েন্টার সহ, x32 এবিআই এর মতো): 44 43 বাইট

অন্তর্নির্মিত দৈর্ঘ্যের স্ট্রিং সহ x86-64, এখনও 46 বাইট (শিফট / মাস্ক বিটম্যাপ কৌশলটি এখন ব্রেক-সমান)।

এটি সি স্বাক্ষর সহ একটি ফাংশন _Bool dennis_like(size_t ecx, const char *esi)। কলিং কনভেনশনটি কিছুটা মানহীন, এমএস ভেক্টরক্যাল / ফাস্টকলের কাছাকাছি তবে বিভিন্ন আর্গ রেজিস্টরের সাথে: ইসি তে স্ট্রিং এবং ইসিএক্সের দৈর্ঘ্য। এটি কেবল তার আরগ-রেজি এবং ইডিএক্স ক্লোবার করে। AL হাই বাইটগুলি আবর্জনা ধারণ করে রিটার্নের মান রাখে (সিসভি x86 এবং x32 এবিআই দ্বারা অনুমোদিত allowed


অ্যালগরিদমের ব্যাখ্যা :

ইনপুট স্ট্রিংয়ের উপর দিয়ে লুপ করুন, স্ট্যাকের উপরে বুলিয়ান অ্যারেতে ফিল্টারিং এবং শ্রেণিবদ্ধকরণ: প্রতিটি বাইটের জন্য, এটি কোনও বর্ণমালা অক্ষর (যদি না, তবে পরবর্তী চরটিতে অবিরত থাকে) তা পরীক্ষা করে দেখুন এবং 0-25 (এজেড) থেকে পূর্ণসংখ্যায় রূপান্তর করুন । স্বর = 0 / ব্যঞ্জনবর্ণ = 1 এর বিটম্যাপটি পরীক্ষা করতে সেই 0-25 পূর্ণসংখ্যার ব্যবহার করুন। (বিটম্যাপটি 32-বিট তাত্ক্ষণিক ধ্রুবক হিসাবে একটি রেজিস্টারে লোড করা হয়)। বিটম্যাপের ফলাফল অনুসারে স্ট্যাকের উপর 0 বা 0xFF চাপুন (আসলে একটি 32-বিট উপাদানটির নিম্ন বাইটে, যার উপরের 3 বাইটে আবর্জনা থাকতে পারে)।

প্রথম লুপটি 0 বা 0xFF এর অ্যারে উত্পাদন করে (আবর্জনায় আবদ্ধ শব্দগুলির উপাদানগুলিতে)। সাধারণত প্যালিনড্রোমটি দ্বিতীয় লুপের সাহায্যে পরীক্ষা করুন যা পয়েন্টারগুলি মাঝখানে অতিক্রম করার সময় বন্ধ হয়ে যায় (বা যখন উভয় বর্ণমালার অক্ষরগুলির একটি পৃথক সংখ্যক যদি একই উপাদানকে নির্দেশ করে)। উপরের দিকে চলন্ত পয়েন্টার হ'ল স্ট্যাক পয়েন্টার এবং আমরা + ইনক্রিমেন্ট লোড করতে পপ ব্যবহার করি। এই লুপটিতে তুলনা / সেটসিটির পরিবর্তে, আমরা কেবল দুটি সম্ভাব্য মান আছে বলেই কেবল একই / আলাদা সনাক্ত করতে এক্সওআর ব্যবহার করতে পারি। আমরা কোনও অ-মিলের উপাদান খুঁজে পেয়েছি কিনা (ওআর দিয়ে) জমে উঠতে পারতাম, তবে এক্সওআর দ্বারা নির্ধারিত পতাকাগুলিতে একটি প্রাথমিক-শাখা কমপক্ষে ভাল good

লক্ষ্য করুন যে দ্বিতীয় লুপটি byteঅপরেন্দ্র-আকার ব্যবহার করে , সুতরাং এটি বিবেচ্য নয় যে প্রতিটি অ্যারের উপাদানের নিম্ন বাইটের বাইরে প্রথম লুপটি কী আবর্জনা ফেলে।


এটি সিওএফsalc থেকে AL সেট করতে একইভাবে, অদ্বন্ধিত নির্দেশ ব্যবহার করে sbb al,al। এটি প্রতিটি ইন্টেল সিপিইউতে সমর্থিত (64৪-বিট মোড ব্যতীত), এমনকি নাইটের ল্যান্ডিং! আগ্নার ফাগ তার জন্য সমস্ত এএমডি সিপিইউতে (রাইজেন সহ) তালিকাভুক্ত করে , তাই x86 বিক্রেতারা যদি 8086 সাল থেকে অপকোড স্পেসের বাইটটি বেঁধে দেওয়ার জন্য জোর দেয়, তবে আমরা সম্ভবত এটির সুবিধা নিতে পারি।

আকর্ষণীয় কৌশল:

  • একটি সম্মিলিত ইসলফা () এবং টপার্পার () এর জন্য স্বাক্ষরযুক্ত-তুলনা কৌশল এবং শেক্সটি পূরণ করার জন্য বাইটটি প্রসারিত করে, এটির জন্য সেট আপ:
  • এর জন্য একটি নিবন্ধে তাত্ক্ষণিক বিটম্যাপ bt, এর জন্য কিছু সুন্দর সংকলক আউটপুট দ্বারা অনুপ্রাণিতswitch
  • একটি লুপে পুশ করে স্ট্যাকের উপর একটি পরিবর্তনশীল-আকারের অ্যারে তৈরি করা। (Asm এর জন্য স্ট্যান্ডার্ড, তবে অন্তর্নিহিত দৈর্ঘ্যের স্ট্রিং সংস্করণের জন্য আপনি সি দিয়ে কিছু করতে পারেন না)। এটি প্রতিটি ইনপুট চরিত্রের জন্য 4 বাইট স্ট্যাক স্পেস ব্যবহার করে, তবে কমপক্ষে 1 বাইট বনাম সর্বোত্তম গল্ফিং সাশ্রয় করে stosb
  • বুলিয়ান অ্যারেতে সিএমপি / সেটেনের পরিবর্তে এক্সওআর বুলিয়ানরা একসাথে সত্যের মান পেতে। ( cmp/ salcকোনও বিকল্প নয়, কারণ salcকেবল সিএফ-এর জন্য কাজ করে, এবং 0xFF-0 সিএফ সেট করে না sete3 বাইট হয়, তবে inc2 বাইটের নিখরচায় (-৪-বিট মোডে 1 )) লুপের মধ্যে বনাম xor এবং এটি Inc সহ স্থির করে।
; 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 মেমরির ব্যবহারের ফলে অনেক বেশি ক্যাশে-মিস হয় না। (এটি এমন উত্তরগুলিও হারাতে পারে যা সমস্ত অক্ষরকে ফাঁকে ফাঁকে ফাঁকে দেওয়ার আগে নন-ডেনিস-জাতীয় স্ট্রিংগুলির প্রথম দিকে নিয়ে যায়) অনেকগুলি সিপিইউয়ের salcতুলনায় ধীর setccহয় (উদাহরণস্বরূপ 3 উফ বনাম 1 স্কাইলেকে), তবে একটি বিটম্যাপ চেক bt/salcস্ট্রিং-সন্ধান বা রেজেক্স-ম্যাচের চেয়ে এখনও দ্রুত। এবং ওভারহেডের কোনও প্রারম্ভ নেই, সুতরাং এটি সংক্ষিপ্ত স্ট্রিংগুলির জন্য অত্যন্ত সস্তা।

উড়ে যাওয়ার সময় এক পাসে করা মানে আপ এবং ডাউন দিকের জন্য শ্রেণিবদ্ধকরণ কোডটি পুনরাবৃত্তি করা। এটি দ্রুত তবে বৃহত্তর কোড-আকারের হবে। (অবশ্যই যদি আপনি দ্রুত চান, আপনি এসএসই 2 বা এভিএক্স 2 এর সাথে একসাথে 16 বা 32 টি করতে পারেন, স্বাক্ষরিত রেঞ্জের নীচে সীমা স্থানান্তর করে তুলনা কৌশলটি ব্যবহার করে)।


টেস্ট প্রোগ্রাম (ia32 বা x32 লিনাক্সের জন্য) এই ফাংশনটি একটি সেমিডলাইন আর্গ দিয়ে কল করতে এবং স্ট্যাটাস = রিটার্ন মান সহ প্রস্থান করুন। 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 রয়েছে)। এক্স 32 এবিআই (লং মোডে 32-বিট পয়েন্টার) ব্যবহার করে আমরা পয়েন্টারগুলি অনুলিপি এবং তুলনা করেও আমরা REX উপসর্গগুলি এড়াতে পারি।

setc [rdi]মেমোরিতে সরাসরি লিখতে পারে, তবে স্ট্যাক স্পেসের ইসিএক্স বাইট সংরক্ষণের জন্য সাশ্রয়ের চেয়ে কোড-আকার বেশি লাগে। (এবং আমাদের আউটপুট অ্যারেটি স্থানান্তরিত করতে হবে [rdi+rcx]the অ্যাড্রেসিং মোডের জন্য আরও একটি অতিরিক্ত বাইট লাগবে, তবে সত্যিই আমাদের এমন কাউন্টার দরকার যা ফিল্টারযুক্ত অক্ষরগুলির জন্য আপডেট হয় না যাতে এটি এর চেয়ে খারাপ হতে চলেছে))


এটি শর্তসাপেক্ষে ওয়াইএএসএম / এনএএসএম উত্স %if। এটি -felf32(32-বিট কোড) বা -felfx32(x32 এবিআই সহ 64-বিট কোড) এবং অন্তর্নিহিত বা স্পষ্ট দৈর্ঘ্যের সাহায্যে নির্মিত যেতে পারে । আমি সমস্ত 4 সংস্করণ পরীক্ষা করেছি। NASM / YASM উত্স থেকে একটি স্ট্যাটিক বাইনারি তৈরি করতে স্ক্রিপ্টের জন্য এই উত্তরটি দেখুন ।

X32 এবিআইয়ের সমর্থন ছাড়াই কোনও মেশিনে -৪-বিট সংস্করণটি পরীক্ষা করতে, আপনি পয়েন্টার রেগগুলি 64৪-বিটে পরিবর্তন করতে পারেন। (তারপরে গণনা থেকে কেবল REX.W = 1 উপসর্গ (0x48 বাইট) সংখ্যা বিয়োগ করুন case এই ক্ষেত্রে, 4 টি নির্দেশাবলী EX৪-বিট রেগগুলিতে পরিচালনা করতে 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.

আমি ডিএফ (যে দিকের পতাকাটি নিয়ন্ত্রণ করে lodsd/ scasdএবং এমন কি) এর সাথে চারপাশে গোলযোগের দিকে তাকিয়েছিলাম , তবে এটি বিজয় বলে মনে হয় নি। সাধারণ এবিআইদের প্রয়োজন হয় যে ফাংশন এন্ট্রি এবং প্রস্থানকালে ডিএফ সাফ হয়ে যায়। এন্ট্রি-তে ক্লিয়ার হয়ে থাকলেও এটিকে প্রস্থান করার সময় সেট করা ঠকানো হবে, আইএমও। 3-বাইট এড়াতে LODSD / SCASD ব্যবহার করা ভাল লাগবে sub esi, 4, বিশেষত যেখানে উচ্চ আবর্জনা নেই case


বিকল্প বিটম্যাপ কৌশল (x86-64 অন্তর্ভুক্ত দৈর্ঘ্যের স্ট্রিংয়ের জন্য)

দেখা যাচ্ছে এটি কোনও বাইট সংরক্ষণ করে না, কারণ bt r32,r32এখনও বিট-ইনডেক্সে উচ্চ আবর্জনা নিয়ে কাজ করে। এটি কেবল নথিবদ্ধ নয় উপায় shr

bt / sbbসিএফ-তে বিটটি প্রবেশ করার পরিবর্তে, বিটম্যাপ থেকে আমরা যা চাই তা বিচ্ছিন্ন করতে একটি শিফট / মাস্ক ব্যবহার করুন।

%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/1 উত্পাদন করে (0 / 0xFF এর পরিবর্তে), আমরা ফাংশন শেষে xor al, 1(2 বি) দিয়ে ( dec eaxx86-64 এ 2 বি) পরিবর্তে ফাংশনটির শেষে ফেরত মানটির প্রয়োজনীয় বিপর্যয়ও করতে পারি এখনও একটি সঠিক bool/_Bool ফেরতের মান উত্পাদন করে ।

এটি ইএএক্স এর উচ্চ বাইট শূন্যের প্রয়োজনীয়তা এড়িয়ে, ইমপ্লিট-দৈর্ঘ্যের স্ট্রিং সহ x86-64 এর জন্য 1 বি সংরক্ষণ করতে ব্যবহৃত হয়েছিল। (আমি and eax, 0x7F ^ 0x20উচ্চতর ক্ষেত্রে বল প্রয়োগ করতে এবং বাক্সটি 3-বাইটের সাথে শূন্য করতে and r32,imm8ব্যবহার করে আসছি। তবে এখন আমি 2-বাইট অবিলম্বে-আল-এনকোড ব্যবহার করছি যা বেশিরভাগ 8086 নির্দেশাবলী রয়েছে, যেমন আমি ইতিমধ্যে করছিলাম এর জন্য subএবং cmp।)

এটি 32-বিট মোডে bt/ salcএ হারিয়ে যায় এবং সুস্পষ্ট দৈর্ঘ্যের স্ট্রিংগুলিকে গণনার জন্য ইসিএক্স দরকার হয় যাতে এটি সেখানে কাজ করে না।

তবে আমি বুঝতে পেরেছিলাম যে আমি ভুল ছিলাম: bt edx, eaxতবুও ইক্সে উচ্চ আবর্জনা নিয়ে কাজ করে। এটি দৃশ্যত শিফট গণনাটিকে একইভাবেshr r32, cl মাস্ক করে (কেবলমাত্র ক্লেলের কম 5 বিটের দিকে তাকিয়ে)। এটি এর থেকে আলাদা bt [mem], reg, যা অ্যাড্রেসিং-মোড / আকার দ্বারা রেফারেন্স করা মেমরির বাইরে অ্যাক্সেস করতে পারে, এটি একটি বিটস্ট্রিং হিসাবে বিবেচনা করে। (ক্রেজি সিআইএসসি ...)

ইন্টেলের ইনসন সেট রেফ ম্যানুয়ালটি মাস্কিংয়ের নথি দেয় না, সুতরাং এটি সম্ভবত অননুমোদিত আচরণ যা বর্তমানে ইন্টেল সংরক্ষণ করছে। (এই ধরণের জিনিসটি অস্বাভাবিক নয় bsf dst, srcs এসআরসি = 0 দিয়ে সর্বদা ডিসস্টিমেড ছেড়ে যায়, যদিও এই ক্ষেত্রে এটি অনির্ধারিত মান রাখার নথিভুক্ত থাকে AM এএমডি আসলে src = 0 আচরণের নথি দেয়)) আমি স্কাইলেক এবং কোর 2 তে পরীক্ষা করেছি, এবং btসংস্করণটি AL এর বাইরে EAX- এ শূন্য-নন আবর্জনা নিয়ে কাজ করে।

সিএলে xchg eax,ecxগণনা পেতে এখানে একটি ঝরঝরে কৌশল (1 বাইট) ব্যবহার করছে । দুর্ভাগ্যক্রমে, BMI2 shrx eax, edx, eaxহ'ল 5 বাইট, বনাম মাত্র 2 বাইট shr eax, cl। ব্যবহারের bextrজন্য একটি 2-বাইট প্রয়োজন mov ah,1(বিটগুলির সংখ্যা বের করার জন্য), সুতরাং এটি আবার SHRX + AND এর মতো 5 + 2 বাইট।


%ifশর্তাদি যুক্ত করার পরে উত্স কোডটি বেশ অগোছালো হয়ে গেছে । এখানে x32 অন্তর্নিহিত দৈর্ঘ্যের স্ট্রিংগুলি বিছিন্ন করা (বিটম্যাপের জন্য বিকল্প কৌশল ব্যবহার করে, এটি এখনও 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

রেটিনা ,49 47 45 বাইট

\P{L}

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

এটি অনলাইন চেষ্টা করুন!

নীলকে ধন্যবাদ 2 বাইট সংরক্ষণ করুন

মার্টিনের জন্য ধন্যবাদ আরও 2 বাইট সংরক্ষণ করা।

সামঞ্জস্যপূর্ণ মানগুলি পেতে নন-অক্ষরগুলি সরায় তারপরে স্বর 1 টি এবং 2 দিয়ে ব্যঞ্জনবর্ণ প্রতিস্থাপন করে। তারপরে বারবার প্রথম এবং শেষ চরিত্রটি একই রকম হয় তবে তারা মুছে ফেলবে। একবার সেগুলি না হয়ে গেলে শব্দটি একসম্মত ছিল যদি সেখানে একটি বা শূন্য অক্ষর বাকী থাকে।


না \D 2কাজ তোমাদের উপর বাইট দুয়েক সংরক্ষণ করতে T`lL`2?
নিল

@ নীল হ্যাঁ মনে হচ্ছে এটি খুব ভাল!
FryAmTheEggman

সাবাশ. আমি এটি করার চেষ্টা করছিলাম :(
ক্রিস্টোফার

7

পিএইচপি, 82 বাইট

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

এটি অনলাইন চেষ্টা করুন!


আপনি টাইপকাস্টিং প্রিপেন্ড করতে (bool)পারেন $s=এবং ==$s1 বাইট সংরক্ষণ করার জন্য চেকটি এবং মুছে ফেলতে পারেন ।
কায়সার

যদি আমার ভুল না হয় তবে আপনি (bool)কেবলমাত্র মিথ্যা0|| বলার জন্য বা ... পরিবর্তে 3 টি অতিরিক্ত বাইট সংরক্ষণ করতে পারবেন could
কায়সার

হুঁ। আপনি কি পরিবর্তে শব্দ অক্ষরের \wজন্য ব্যবহার করতে পারেন ? a-z
কায়সার

@ কাইজারে \wঅঙ্কগুলি আন্ডারস্কোর এবং অক্ষর রয়েছে। এটি কাজ করবে না এবং i [^/p{L}]হিসাবে দীর্ঘতর longer [^a-z]আমি বিপরীত স্ট্রিংটি স্ট্রিংয়ের সাথে তুলনা করি তাই $sবুলিয়ান তৈরি করতে প্রয়োজনীয়
জার্গ হালসারম্যান

ঐটা সত্য. তবুও অন্যদের কাজ করা উচিত। "উচিত" ... তারা করে।
কায়সার

6

এমএটিএল, 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
সম্ভবত সুয়েভার এমন একটি বিক্ষোভ চেয়েছিল যা প্রথম ধাপে ফিল্টারিংয়ের পরিমাণ ছিল।
গ্রেগ মার্টিন

তারপরে তার "অ্যালেক্স এ" ব্যবহার করা উচিত পরিবর্তে, এটি একটি সময়কাল আছে।
এরিক দি আউটগল্ফার

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,cELEM ['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(আক্রমণ চালক অপারেটর আই ব্যবহার করে)
কার্লকাস্টার

@ কার্লকাস্টোর আমি জানতাম যে সেখানে কিছু অপারেটর থাকতে হবে ... ধন্যবাদ। (বিটিডাব্লু আমিও এখন তা সরিয়ে ফেলতে 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

জাভাস্ক্রিপ্ট (ES6), 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] থেকে সেই উপাদানগুলি সরিয়ে ফেলি, আমাদের উইল ছেড়ে [65..90, 97..122]। সেগুলিই আমরা চাই কোডপয়েন্টস।

এখন যেহেতু আমরা উপরের / নিম্ন বর্ণমালা কোডপয়েন্ট তালিকা তৈরি করেছি, আমরা আমাদের ফিল্টারিংয়ের কাজটি চালিয়ে যাচ্ছি। ফাংশনটি প্রতিটি অক্ষরকে ইনপুট স্ট্রিংয়ের সাথে ম্যাপ করা হয়, যা আমি প্রথমদিকে বলেছিলাম পরিবর্তে এর কোডপয়েন্ট হিসাবে পার্স হয়ে যায়। সুতরাং এখন আমরা মূলত আছে [codepoint, [65..90, 97..122]]। চরটি codepointএকটি চিঠি কিনা তা অনুসন্ধান করার জন্য , আমরা কেবল আমাদের তৈরি তালিকায় এটি সূচকটি নিই। যদি এটি সেখানে না থাকে, আমরা -1পরিবর্তে সূচক হিসাবে পেয়ে যাব ।

এই মুহুর্তে, আমরা কেবলমাত্র একটি মিথ্যা মান পেয়ে যাচ্ছি codepoint == 65, অর্থাৎ আমাদের তালিকার প্রথম সূচক, যেহেতু কেবল তখন সূচক 0 হবে তবে একক বর্ধন এই সমস্যাটি সমাধান করবে, এবং, এখন codepointআমাদের তালিকায় থাকলে, আমরা করব এর সূচক + 1 পান যা সর্বদা একটি ধনাত্মক সংখ্যা, এভাবে সর্বদা সত্যবাদী, যদিও এটি সেখানে না থাকলে আমরা -1 + 1 = 0 পাব, অর্থাৎ মিথ্যা।

আমরা ইনপুটটির প্রতিটি চরকে বর্ণিত ফাংশনটি অবশেষে প্রয়োগ করি এবং আমরা কেবল সেই অক্ষর গ্রহণ করি যার জন্য ফাংশনটি সত্যবাদী ফলাফল দেয় returned

পরবর্তী প্রত্যেকটি চরটি একটি স্বর বা ব্যঞ্জনবর্ণ কিনা তা আমাদের নির্ধারণ করতে হবে। যেহেতু স্বরগুলি ব্যঞ্জনবর্ণের তুলনায় কম, স্বরগুলির একটি স্ট্রিং তৈরি করে যাতে আমরা সেই অবস্থাটি ব্যঞ্জনবর্ণের একটি স্ট্রিং তৈরির চেয়ে সংক্ষিপ্ততর হিসাবে পরীক্ষা করি, তাই আমরা প্রতিটি চরকে স্বরযুক্ত কিনা তা পরীক্ষা করে দেখি। তবে, বুলিয়ান তালিকাটি প্যালিনড্রমিক কিনা তা পরীক্ষা করতে আমাদের বুলিয়ান দরকার, যা কেবল সূচক + 1 নিয়ে আমরা পাই না, যেহেতু চরটি একটি স্বর হয় তবে এটি কোনও সংখ্যক [১.১.১০] হতে পারে। এবং, বেশিরভাগ গল্ফিং ভাষা হিসাবে, এইগুলিরও কোনও boolকার্যকারিতা নেই। সুতরাং, আমরা সহজভাবে ব্যবহার করি not not x, যেহেতু notসর্বদা একটি বুলিয়ান দেয়। কিন্তু অপেক্ষা করো; আমাদের কি সত্যিই নির্দিষ্ট বুলিয়ান থাকা দরকার? যেহেতু notসর্বদা একটি বুলিয়ান দেয়, কেন আমরা কেবল দ্বিতীয়টি সরিয়ে নেইnot, এবং প্রকৃতপক্ষে প্রতিটি চরটি ব্যঞ্জনাত্মক কিনা তা পরীক্ষা করে দেখুন? হ্যাঁ, আমরা ঠিক তাই করব!

চুলির পরে, যা বুলিয়ানগুলির একটি তালিকা দেয়, আমরা পরীক্ষা করে দেখি যে আমাদের কাছে পাওয়া এই বুলিয়ান তালিকাটি একটি প্যালিনড্রোম কিনা, যা এই চ্যালেঞ্জটি আমাদের করতে বলে। আচ্ছা, প্যালিনড্রোমের সংজ্ঞা কী? হ্যাঁ, একটি প্যালিনড্রোম হল এমন একটি তালিকা বা স্ট্রিং যা এর বিপরীতে সমান। তো, আমরা কীভাবে চেক করব? সরল, আমরা এটিকে সদৃশ করব, এর বিপরীত করব এবং মূল তালিকার বিপরীতে যাচাই করব। ফলাফলের আমরা পেতে হয় পরিশেষে , কি আমাদের কোড ফেরত পাঠাবেন।


1
একটি 42-বাইট প্রোগ্রামের জন্য বিশাল ব্যাখ্যা। এখন আমি অনুমান করি যে এটি অনেকটা স্ব-
বর্ণনামূলক

2

পিএইচপি , 87 বাইট

রেগেক্স ফ্রি পিএইচপি সংস্করণ। স্ট্রিপোজগুলি 0 ফেরত দিতে পারে বলে একটি "স্বর" যুক্ত হয়েছে যা পিএইচপি-তে মিথ্যা।

ত্রুটি Jörg দ্বারা স্থির।

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);তবে এটি শূন্য ধারণ করে এমন স্ট্রিংগুলির জন্য সঠিক ফলাফল
পেয়েছে

@ জার্গহেলসারম্যান ধন্যবাদ
এমই

2

q / kdb +, 42 38 বাইট

সমাধান:

{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 এসোলাং ফলকে ধন্যবাদ ।


বাইট সংরক্ষণ করতে আপনি এর 26,'af+সাথে প্রতিস্থাপন করতে পারেন '{,97>
এইচলং ফল

@ এ্যাসোলেংফ্র্ট যেমন একটি পুরানো উত্তর ...
এরিক আউটগলফার

অর্ধ বছর পূর্বে সংরক্ষিত একটি বাইট এখন সংরক্ষিত বাইটের চেয়ে আলাদা নয়। এটি বাইট মুদ্রাস্ফীতি বা অন্য কোনও
কিছুের

@ এসল্যাঙ্গিংফ্রুট আমি গল্ফিংয়ের সাথে আমার সর্বদা বিকাশের অভিজ্ঞতার কথা উল্লেখ করছিলাম ... অবশ্যই আপনি যথারীতি কৃতিত্ব পেয়েছেন, চিন্তা করবেন না!
এরিক আউটগল্ফার

2

ব্রেনল্ফ,  4  3 বাইট

&JP

-1 বাইট ধন্যবাদ আউটগলফার এরিককে ধন্যবাদ

Pএই চ্যালেঞ্জের আগেও আমার সমস্ত কিছু ছিল had

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?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার কারণ আমি একটি প্রত্যয়িত
মুরন

হুঁ, আপনি ব্যাখ্যাটি থেকে এটি সরাতে ভুলে গেছেন।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার আমি "এরিক" লিখতে গিয়ে সি'র দিকে হামলা চালিয়েছি, তবে এটি দেখতে "এরিক" এর মতো মনে হচ্ছে
স্কিডদেব

এটি পছন্দ মত ব্যর্থ হবে না 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, এটির জন্য 10 বি ব্যয় কম হয়।
পিটার


0

এপিএল (ডায়ালগ) , 34 33 বাইট

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

এটি অনলাইন চেষ্টা করুন!

গল্ফিং চলছে।


এর সাথে একটি বাইট সংরক্ষণ করুন819⌶⍨∘1
Adám

এবং দুটি সহ(⊢≡⌽)
Ad:18m

… তবে আমি এটি 24-এ সমাধান করতে পারি। কোনও ইঙ্গিত চান?
Adám


0

অ্যাক্সিয়াম, 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.