> <> , 137 131 বাইট
আমি যখন এই চ্যালেঞ্জটি দেখেছি, তখন আমি ভেবেছিলাম> << অবশেষে ভাষার ভাল পছন্দ হতে পারে কারণ এটি ব্যবহার করার মাধ্যমে আপনি বেশিরভাগ প্যালিনড্রোমগুলিকে উপেক্ষা করতে পারেন; এটি নিশ্চিত করা সহজ যে পয়েন্টারটি কেবল যেখানে থাকবে সেখানেই রয়েছে। যদিও এটি সত্য,> <> দুর্ভাগ্যক্রমে গল্ফিং শর্তগুলি উদ্দীপক (বা কেবল সাধারণভাবে গল্ফিং) করে। আমি এর ক্ষতিপূরণ দেওয়ার জন্য ভেবেছিলাম এমন কিছু অদ্ভুত কৌশল ব্যবহার করব, তবে এখানে একটি "চটজলদি" (বাস্তবে নয়, প্রোগ্রাম ভিত্তিক এবং সৃষ্টি-বুদ্ধিমান উভয়) উত্তর রয়েছে। আপনি এটি এখানে অনলাইনে চেষ্টা করতে পারেন ।
i:0(?v>:"Z")?vl1-:1(?v&:{:@=?v$&e0.>
;n1<^ -*48< .00~< ;n-10<01-n; >~00. >84*- ^>1n;
<.0e&$v?=@:}:&v?)1:-1lv?("Z":<v?)0:i
সত্যের জন্য 1 এবং মিথ্যা -1 প্রদান করে (আমি এটি 0 তে পরিবর্তন করতে পারতাম তবে দুর্ভাগ্যক্রমে দৈর্ঘ্য একই থাকবে)
সর্বদা হিসাবে, আমাকে জানাতে এটি কাজ করে না এবং কীভাবে গল্ফ করবেন সে সম্পর্কে আপনার যদি কোনও ধারণা থাকে। আমি কয়েকটি পরীক্ষার ক্ষেত্রে এটি পরীক্ষা করেছি, তবে সর্বদা একটি ব্যতিক্রম হতে পারে।
এখানে আরও একটি সংস্করণ রয়েছে যা আমি মনে করি এটি আরও বেশি চালাক, তবে হায়রে দশ বাইট বেশি is সত্যবাদী / মিথ্যা মানগুলি এবার 1 এবং একটি ত্রুটি ( something smells fishy...
):
>i:0(?v>:"Z")?vl: 2(?v&{:@$:@=01-*2.
< ;n1<^ -*48<f6+0.0<
&1-:1)e*1.1*e(1:-1&
>0.0+6f>84*- ^>1n; >
.2*-10=@:$@:}&v?)2 :lv?("Z":<v?)0:i<
ব্যাখ্যা:
অংশটি ছাড়াই কোড এখানে দেওয়া হয়েছে যাতে এটি একটি প্যালিনড্রোম তৈরি হয়। এই বিকল্প বিকল্পটির জন্য আমি ব্যবহার করার চেষ্টা করেছি এমন "আরও চালাক" কৌশলগুলি ব্যবহার করে না, সুতরাং এটি ব্যাখ্যা করা কিছুটা সহজ (যদি কেউ "কৌশলগুলি" এর ব্যাখ্যাতে আগ্রহী হন তবে আমি একটি দিতে পেরে খুশি হব) যদিও)।
i:0(?v>:"Z")?vl1-:1(?v&:{:@=?v$&e0.>
;n1<^ -*48< .00~< ;n-10<
লাইন 1:
i:0(?v>:"Z")?vl1-:1(?v&:{:@=?v$&e0.>
i:0(?v #Pushes input and directs down if negative
>:"Z")?v #Directs down if input is greater than "Z"
#(reduces lowercase input to uppercase)
l #Pushes length
#Main loop begins
1-:1(?v #Decrements top, and then directs down if less than 1
& #Pushes top of stack onto register (length minus 1)
:{ #Duplicates top, shifts stack to the left
:@ #Duplicates top, shifts top three values of the stack to the right
=?v #If top two values are equal, directs down
$ #Swaps top two values of the stack
& #Pushes register onto stack
e0. #Jumps back to the "1" after "?vl"
#Main loop ends
> #Makes sure when the pointer jumps back to i it goes the right way
কনভোলিউটেড অদলবদল ( :{:@=?v$
) কীভাবে কাজ করে তা এখানে - আমি এই স্ট্যাকের একটি পরীক্ষার কেস ব্যবহার করব: [5,1,8,1]
যেখানে শেষ চরিত্রটি শীর্ষে রয়েছে।
:{
স্ট্যাকের শীর্ষটি নকল: [5,1,8,1,1]
এবং স্ট্যাকটি বামে স্থানান্তরিত:[1,8,1,1,5]
:@
শীর্ষটি নকল হয়েছে:, [1,8,1,1,5,5]
তারপরে শীর্ষ তিনটি মান ডানদিকে স্থানান্তরিত হবে:[1,8,1,5,1,5]
=?v
ব্যাখ্যার এই অংশটির জন্য অপ্রয়োজনীয়
$
শীর্ষ মানটি আবারও ফলনযোগ্য [1,8,1,5]
, যা যদি আপনি খেয়াল করেন তবে মূল স্ট্যাকটি একবারে স্থানান্তরিত হবে ( {
যেন একমাত্র কমান্ড ছিল)।
সুতরাং এটি ইংরেজিতে কী করে ("Godশ্বরকে ধন্যবাদ, তিনি আসলে জিনিসগুলি ব্যাখ্যা করছেন") শীর্ষ স্তরের বিপরীতে পুরো স্ট্যাকটি পরীক্ষা করে দেখায় এবং যদি কোনও মান শীর্ষের সমান হয় তবে দ্বিতীয় লাইনের একটি বিন্দুতে চলে যায়। এই চেকিংটি স্ট্যাকের মধ্যে কতগুলি মান রয়েছে তার সমানুপাতিকভাবে করা হয় ( l - 1
, স্ট্যাকের l
দৈর্ঘ্য কোথায় ) যাতে সমস্ত মান একে অপরের বিপরীতে পরীক্ষা করা হয়।
লাইন 2:
;n1<^ -*48< .00~< ;n-10<
n1< #If input is less than 0 (i.e. there is none), print 1
; #and terminate
< #If redirected because input is greater than "Z"
-*48 #Push 32, subtract (reducing lowercase to uppercase, numerically)
^ #And move back to the portion that tests if input
#is uppercase (which it will pass now)
< #If counter is less than 1 (for main loop)
.00~ #Pop the counter and jump to the beginning (i)
< #If any two values in the stack are equal
-10 #Push -1 (subtract 1 from 0)
;n #Print and terminate
(hellolleh)
একটি বৈধ প্যালিনড্রোম? জন্য অনুরূপ[]
,{}
এবং<>
(যেখানে উপযুক্ত)।