হিটারগ্রাম, প্যালিনড্রোমস, ওহ আমার!


28

(প্রথম চ্যালেঞ্জ, কোনও সমস্যা আছে কিনা তা দয়া করে আমাকে জানান))

একজন heterogram একটি শব্দ যেখানে বর্ণমালার কোন চিঠি একাধিকবার ঘটে, এবং একটি যে শব্দ কবিতা প্রভৃতি উলটা করিয়া পড়িলেও একই থাকে শব্দবন্ধের যে একই একবার সামনে একবার পিছনে হয়।

এখানে চ্যালেঞ্জটি হ'ল একটি টুকরো কোড লিখুন যা কোনও শব্দে (কেবল অক্ষরগুলি) ইনপুট হিসাবে গ্রহণ করে এবং এটি হিটারগ্রাম (সত্যবাদী / মিথ্যা) কিনা তা খুঁজে বের করে। ক্যাচটি হ'ল প্রোগ্রামটি অবশ্যই একটি প্যালিনড্রোম হতে পারে - একই পিছনের দিকে এবং সামনের দিকে পড়ে reads ক্যাপিটালাইজেশান নেই এখানে কোন ব্যাপার, তাই heterogram জন্য বৈধ এটি উভয় কুই এবং Q, উদাহরণস্বরূপ থাকতে পারে না যাবে। কোনও মন্তব্যের অনুমতি নেই এবং প্যালিনড্রোম অংশটি সহজ করার চেষ্টা করার জন্য আপনি আপনার কোড (বা আপনার কোডের একটি উল্লেখযোগ্য অংশ) যুক্ত স্ট্রিং রাখতে পারবেন না: পি

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোড জিততে পারে। শুভকামনা!

সম্পাদনা: পেরেনস, বন্ধনী বা অন্যান্য চিহ্ন যা বাম এবং ডান ফর্ম রয়েছে তাদের অবশ্যই প্যালিনড্রোম অংশের জন্য অ্যাপ্রিয়েটে বিপরীত হওয়া উচিত। সুতরাং (হেল্লোল্লেহ) একটি প্যালিনড্রোম, তবে (হেল্লুল্লেহ (এটি নয় App দৃশ্যত এটিকে সুবিধাজনক প্যালিনড্রোম বলে।

সম্পাদনা 2: আপনি কোনও খালি ইনপুট, একাধিক শব্দের সাথে ইনপুট বা বর্ণগুলি ছাড়া অন্য অক্ষরগুলির সাথে ইনপুট পাবেন না। সুতরাং যে সম্পর্কে চিন্তা করবেন না :)


বন্ধনীগুলি প্যালিনড্রোমিসিটির সমতুল্য হিসাবে বিবেচিত হয়? অর্থাৎ, (hellolleh)একটি বৈধ প্যালিনড্রোম? জন্য অনুরূপ [], {}এবং <>(যেখানে উপযুক্ত)।
গ্লেন ও

হ্যাঁ। দুঃখিত, আমার এটি ব্যাখ্যা করা উচিত ছিল।
একটি স্প্যাগেটো

নতুন লাইনগুলির কি হবে, asdsaসমান বিবেচিত হবে asd\nsa?
wendelbsilva

না, তারা সমতুল্য হবে না।
একটি স্প্যাগেটো

5
আমি বিশ্বাস করি একে সুবিধাজনক প্যালিনড্রোম বলা হয় ।
lirtosiast

উত্তর:


9

পাইথ - 11 বাইট

(প্রয়োজনীয় এবং গণনাযোগ্য স্থান এবং শীর্ষস্থানীয় স্থান)।

 z.{ z }.z 

টেস্ট স্যুট

<space>        Suppress print
 z             Input (for palindromness)
.{             Unique - actually does testing
  z            Input
<space>        Suppress print
  }            In operator
   .z          Cached input list
   <space>     At end of program makes empty tuple

মাইকের পাইথ উত্তরটি করার আগে লোয়ারকেসে রূপান্তরিত {you, আপনি কি নিশ্চিত যে এটিও করার দরকার নেই?
স্পার

18

পাইথ, 17 বাইট

 Z.{rzZ.q.Zzr}.Z 

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

নেতৃস্থানীয় স্থান প্রয়োজন। আমি এটি এবং বাইট গণনায় পিছনের স্থান গণনা করেছি।

এখানে ভাঙ্গন:

     z            z is initialized to the input
    r Z           Z is initialized to 0, and r(string)0 converts the string to lowercase
  .{              .{ is pyth's builtin uniqueness test
       .q         .q terminates the program
         .Zzr}    This is just the program mirrored
              .Z  . requires a number to immediately follow it
                  If left blank the parser would throw an error
 Z                This is just mirrored from the end
                  The leading space suppresses the automatic printing of this 0
                  The trailing space mirrors the leading space

3
জিজ, এবং আমি ভেবেছিলাম যে এটি খুব কঠিন হবে ... চমৎকার কাজ!
একটি স্প্যাগেটো

2
আপনি একটি আছে .qআপনার মন্তব্য, কিন্তু একটি .wআপনার প্রোগ্রাম হবে।
জেমস ওয়েবস্টার

@ জেমস ওয়েবেস্টার এটি উল্লেখ করার জন্য ধন্যবাদ। এটি .q
মাইক বুফার্ডেসি

16

পাইথন 3, 125

মূল সমস্যাটি কোডের বিপরীতটিকে পার্সেবল করে তোলা। তারপরে আমরা এটিকে অপরিবর্তিত শনাক্তকারীদের থেকে ত্রুটি থেকে বের করতে পারি।

w=[str.lower][0]((input)())
(print)((max)((map)(w.count,w))<2)
(2>((w,tnuoc.w)(pam))(xam))(tnirp)
(()(tupni))[0][rewol.rts]=w

খুব সামান্য বিষয়, তবে নিয়ম থেকে আপনার দ্বিতীয়টি <একটিতে পরিবর্তিত করা উচিত >!
জারমেক্স


6

> <> , 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

একটি> <> উত্তর :) দেখে খুশি
একটি স্প্যাগেটো

1
এছাড়াও, ><>নিজেই একটি প্যালিনড্রোম (কেবল কোনও সুবিধাজনক নয়)
জো কিং

5

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

আপনার 5.4 বা short_tagsততোধিকের ইনআই নির্দেশিকাটি বন্ধ করে এটি চালানো দরকার ।

প্রথম গল্ফ। দুটি অনুলিপি, প্রথমে জালিয়াতি / সত্যতার ফলাফল সহ পুরো গুচ্ছ আবর্জনা ছাপায়:

<?=var_dump(max(array_count_values(str_split(end($argv))))<2)?><?(2>((((vgra$)dne)tilps_rts)seulav_tnuoc_yarra)xam)pmud_rav=?>

এই সংস্করণটি কোনও জার্গন (162 বাইট) মুদ্রণ করবে না:

<?=var_dump(max(array_count_values(str_split(end($argv))))<2);__halt_compiler()?><?()relipmoc_tlah__;(2>((((vgra$)dne)tilps_rts)seulav_tnuoc_yarra)xam)pmud_rav=?>

কমান্ড লাইন থেকে চালান

php -f golf.php heterogram

সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে


চতুর, যদিও বৈধতার সীমা চাপছে। খেলাধুলার জন্য মন্তব্যগুলির সাথে সমাধানের কথা ভাবতে পারে
মার্টিজন

পরিবর্তে ?><?, আপনি ব্যবহার করতে পারেন //\\। এটি সেই প্রয়োজনটি সরিয়ে নেবে। এবং __halt_compiler()ব্যবহারের পরিবর্তেreturn;
ইসমাইল মিগুয়েল

এটিকে উপেক্ষা করুন। আপনি মন্তব্য ব্যবহার করতে পারবেন না। তবে এটি return;এখনও বৈধ।
ইসমাইল মিগুয়েল

2

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

lDÙQqQÙDl

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

* আমার প্রথম চ্যালেঞ্জে ফিরে যাওয়ার পথে কিছু সন্নিবেশ করান *

এই প্রতিদ্বন্দ্বিতার পরে 05AB1E সাল থেকে অ-প্রতিযোগী করা হয়েছিল।

ব্যাখ্যা

lDÙQqQÙDl
l           Take input and lowercase it.
 DÙ         Duplicate and uniquify.
   Q        Compare the two strings.
    q       Immediately exit.
     QÙDl   The rest of the program is ignored.

1
"এই প্রতিদ্বন্দ্বিতার আগে 05AB1E সাল থেকে অ-প্রতিযোগী করা হয়েছিল" " সম্ভবত আপনি এই চ্যালেঞ্জ পরে বোঝানো ? ;)
ETH প্রোডাকশনগুলি

2

ব্র্যাচল্যাগ , 3 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

DdD

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

এটি খুব কয়েকটি প্রোগ্রামগুলির মধ্যে একটি যা ব্র্যাচল্যাগ 1 এবং ব্র্যাচল্যাগ 2 উভয় ক্ষেত্রেই কাজ করে old টিআইও লিঙ্কটি পুরানো সময়ের জন্য ব্র্যাচল্যাগ 1 এর সাথে যুক্ত। এছাড়াও ব্র্যাচল্যাগের পক্ষে এটি একটি সম্পূর্ণ প্রোগ্রাম, কোনও ফাংশন নয়। (ব্র্যাচল্যাগের সম্পূর্ণ প্রোগ্রামগুলি স্পষ্টতই বুলেটদের আউটপুট দেয়, যা আমরা এই প্রশ্নের জন্য চাই))

এখানে সাধারণ নীতিটি হ'ল এক জোড়া বড় আকারের অক্ষরগুলির মধ্যে একটি শিকারী স্থাপন করা একটি দৃser় বক্তব্য যে বর্তমান মান সেই প্রাক্কলকের অধীনে অবিচ্ছিন্ন। সুতরাং আপনি প্রায়শই দেখতে পাবেন AoAযেমন "সাজানো হয়" ("সাজানোর আক্রমনে আক্রমণকারী"); A↔A(ব্র্যাচল্যাগ ২-এ) এর অর্থ হ'ল "একটি প্যালিনড্রোম" ("বিপরীতে আক্রমনাত্মক")) ইত্যাদি। এই প্রোগ্রামটি "অনুলিপিগুলি অপসারণের অধীনে", অর্থাত্ "সদৃশগুলি ধারণ করে না"। এটি সত্যই সুবিধাজনক যে ইনভারিয়েন্স নির্দিষ্ট করার এই পদ্ধতিটি প্যালিনড্রোম হিসাবে ঘটে।


1

ব্র্যাচল্যাগ , 3 বাইট

≠ụ≠

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

ইনপুটটি হিটারোগ্রাম হলে প্রিডিকেট সফল হয় এবং যদি তা না হয় তবে ব্যর্থ হয়।

≠      The characters of the input are all distinct,
 ụ     and when converted to upper case,
  ≠    are still all distinct.

0

এমএটিএল , 7 বাইট

tuX=Xut

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

ইনপুটটি হিটারগ্রাম হলে [1, 1] তালিকা এবং [0, 0] না হলে ফিরিয়ে দেয়।

ব্যাখ্যা:

t       % duplicate the input
u       % remove duplicates from the original
X=      % check the two lists are equal
Xu      % unique rows (does nothing as we now have a boolean)
t       % duplicate the result
        % (implicit) convert to string and display
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.