দুটি অক্ষরের মধ্যে চিঠি


22

এমন একটি প্রোগ্রাম লিখুন যা কোনও একক ছোট হাতের শব্দটিকে ইনপুট হিসাবে গ্রহণ করে এবং বর্ণের মতো শব্দের মধ্যে অক্ষরের সংখ্যার সমান সংখ্যক বর্ণের সংখ্যার আউটপুট দেয়।

উদাহরণস্বরূপ, 'প্রকৃতি' শব্দটিতে আমাদের 4 টি জোড়া রয়েছে:

  • এনআর: যেহেতু শব্দের ভিতরে (ক, টি, ইউ) এবং তাদের মধ্যে বর্ণমালায় তিনটি বর্ণ রয়েছে (ও, পি, কিউ)
  • উ: যেহেতু শব্দের ভিতরে (টি, ইউ, আর) এর মধ্যে তিনটি অক্ষর এবং বর্ণমালায় তাদের মধ্যে তিনটি বর্ণ রয়েছে (খ, সি, ডি)
  • তু: যেহেতু শব্দের ভিতরে তাদের মধ্যে কোনও বর্ণ নেই এবং বর্ণমালাতে তাদের মধ্যে কোনও অক্ষর নেই
  • tr: যেহেতু (u) শব্দের ভিতরে তাদের মধ্যে একটি বর্ণ আছে এবং বর্ণমালায় তাদের মধ্যে একটি অক্ষর রয়েছে

যেহেতু চারটি জোড়া রয়েছে, এই ক্ষেত্রে আউটপুট 4 হওয়া উচিত।


10
কথাটি আরও কিছুটা স্পষ্ট করা যায়।
অপ্টিমাইজার

আমি প্রশ্ন পাই না। কিভাবে অক্ষর হয় একটি , টি , U ভিতরে হতে যাচ্ছে NR ? এবং নীচের সমস্ত উদাহরণ ... (সিসি @ ফ্লোডেল)
নিকেল

আপনি যদি প্রকৃতির বানান করে থাকেন তবে n এবং r প্রথম এবং 5 ম অবস্থানে রয়েছে। সুতরাং তাদের মধ্যে তিনটি চিঠি আছে। তারা দ্বিতীয়, তৃতীয় এবং চতুর্থ অবস্থানে একটি, টি এবং ইউ u পাঠ্যটির অর্থ শব্দের ভিতরে n এবং r এর মধ্যে তিনটি অক্ষর রয়েছে
ফ্লোডেল

@ ফ্লোডেল আপনি সম্পাদনায় ঠিক আছেন; আমি ৪ র্থ জুটি মিস করলাম।
প্রেতাত্মা_ইন_কোড

কথাটি যদি হত rjjjnfffr? এটি কি এক জোড়া ( nr) বা দুটি জোড়া ( nrএবং rn) হবে? আর কি abzab? এটা abনাকি দু'র জোড়া ?
চার্লস

উত্তর:


5

পাইথ, 19 বাইট

lfqF-MSMCT.cCUBCMz2

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

lfqF-MSMCT.cCUBCMz2
                 z   read a string from input
               CM    convert into list of ascii-values
            CUB      create a list of pairs (ascii-value, index in string)
          .c      2  all combinations of length 2
 f                   filter for combinations T, which satisfy:
        CT              transpose T ((ascii1, ascii2), (index1, index2)
      SM                sort each list
    -M                  create the the difference for each
  qF                    check if they are equal
l                    print the number of remaining combinations

4

আর, 110 বাইট

function(s){w=strsplit(s,"")[[1]]
O=outer
n=nchar(s)
sum(abs(O(r<-match(w,letters),r,"-"))==O(1:n,1:n,"-"))-n}

Degolfed:

F = function(s){
   chars = strsplit(s,"")[[1]]
   num_chars = nchar(s)
   letter_rank = match(chars, letters)
   rank_dist = abs(outer(letter_rank, letter_rank, "-"))
   position_dist = outer(1:num_chars, 1:num_chars, "-")
   return(sum(rank_dist == position_dist) - num_chars)
}

F("nature")
# [1] 4
F("supercalifragilisticexpialidocious")
# [1] 25



2

জে, 27 বাইট

#-:@-~#\+/@,@:=&(|@-/~)3&u:

ব্যবহার:

   (#-:@-~#\+/@,@:=&(|@-/~)3&u:) 'nature'
4

ব্যাখ্যা:

#-:@-~#\+/@,@:=&(|@-/~)3&u:
      #\                    lengths of input prefixes (1,2,...,length)
                       3&u: codepoints of input
               &(     )     with the last two do parallel:
                 |@-/~      create difference table with itself and take absolute values
              =             compare the elements of the two difference tables
        +/@,@:              sum the table              
#   -~                      subtract the length of the input (self-similar letters)
 -:@                        half the result (each pair was accounted twice)

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


2

সিজেম, 25 বাইট

l:T,_2m*{_:-\Tf=:-z=},,\-

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

ব্যাখ্যা:

l     Get input.
:T    Store in variable T for later use.
,     Calculate length.
_     Copy for use at the very end.
2m*   Use Cartesian power to calculate all possible position pairs.
{     Start filter.
  _     Create copy of index pair.
  :-    Calculate difference between indices.
  \     Swap copy of index pair to top.
  T     Get input string stored in variable T.
  f=    Extract the letters for the index pair.
  :-    Calculate difference of the two letters.
  z     Take the absolute value.
  =     Compare index difference and letter difference.
},    End filter.
,\
-     Pairs of identical indices passed the filter. Eliminate them from the
      count by subtracting the length of the input.

2

জাভাস্ক্রিপ্ট (ES6), 98 বাইট

f=w=>(p=0,q="charCodeAt",[...w].map((c,a)=>{for(b=a;w[++b];)p+=Math.abs(w[q](a)-w[q](b))==b-a}),p)

ব্যবহার

f("nature")
=> 4

ব্যাখ্যা

f=w=>(
  p=0,                                 // p = number of pairs
  q="charCodeAt",
  [...w].map((c,a)=>{                  // iterate through each character of input
                                       // a = character A index
    for(b=a;w[++b];)                   // iterate through the remaining input characters
                                       // b = character B index
      p+=                              // add 1 to p if true or 0 if false
        Math.abs(w[q](a)-w[q](b))==b-a // compare absolute difference of character codes
                                       //     to difference of indices
  }),
  p                                    // return p
)

1

পাইথন 2, 91 টি অক্ষর

lambda i:sum(y-x==abs(ord(i[y])-ord(i[x]))for x in range(len(i))for y in range(x+1,len(i)))

1

ম্যাটল্যাব, 84 বাইট

s=input('');disp(sum(diff(nchoosek(find(s),2),[],2)==abs(diff(nchoosek(s,2),[],2))))

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


1

জাভাস্ক্রিপ্ট ES7, 93

অ্যারে বোধগম্যতা ব্যবহার করে । ES6 এর সাথে .map.map.map2 বাইট দীর্ঘ হয়।

ফায়ারফক্সের সাথে নীচে স্নিপেট চালানোর পরীক্ষা করুন

f=s=>[for(x of s)x.charCodeAt()].map((a,i,s)=>s.map((b,j)=>t+=j>i&(b>a?b-a:a-b)==j-i),t=0)&&t

document.write('nature'+'\n'+f('nature'))


1

পাওয়ারশেল, 114 100 বাইট

param($a)$b=$a.length;0..($b-1)|%{$i=$_;($_+1)..$b|%{$o+=[math]::Abs(+$a[$_]-$a[$i])-eq($_-$i)}};+$o

বেশ সোজা-এগিয়ে, কিন্তু কয়েকটি কৌশল ব্যবহার করে।

  • param(..)আমাদের ইনপুট লাগে, এটি সংরক্ষণ করে $a
  • আমরা আমাদের ইনপুট $bহতে একটি অস্থায়ী পরিবর্তনশীল সেট .length। এটি পরে একটি বাইট সংরক্ষণ করে।
  • 0..($b-1)|%{..}এটি একটি for($i=0;$i-le($b-1);$i++){..}লুপের সমতুল্য , তবে যথেষ্ট ছোট।
  • যাইহোক, আমাদের এটিকে $iচলতে রাখতে চলক সেট করা দরকার ...
  • ($_+1)..$b|%{..}পরবর্তী forলুপ, যেহেতু$_ কেবলমাত্র অভ্যন্তরীণ লুপের অবস্থানগত।
  • তারপরে আমরা আমাদের দুটি অক্ষরের মধ্যে নিখুঁত মান (এখানে আমরা +একগুচ্ছ বাইট সংরক্ষণ করার জন্য অন্তর্নিহিত কাস্টিং ব্যবহার করি ) -eqঅ্যারের অবস্থানগত পার্থক্যের জন্য ইউয়াল কিনা তা পরীক্ষা করতে আমরা একটি দীর্ঘ। নেট কল ব্যবহার করি । যেহেতু আমাদের স্পষ্টভাবে ছোট হাতের ইনপুট দেওয়া হয়েছে, তাই আমাদের কেস রূপান্তর করার দরকার নেই। এই বিবৃতি হয় Trueবা ফিরে আসবে False
  • ফলাফলটি জড়িত করতে আমরা অন্তর্নিহিত castালাইকে পুনর্বার অপব্যবহার করি $o, সুতরাং True1 যুক্ত করব, যখন False0 যুক্ত করবে।
  • লুপগুলি শেষ হয়ে গেলে, আমরা আউটপুট $o। নোট করুন যদি কোনও মিল না থাকে তবে +মুদ্রণ এড়ানোর জন্য আমাদের একই কৌশল-কাস্ট-টু-ইনটি করা দরকার False

0

রুবি, 74

 ->s{[*0...s.size].permutation(2).count{|i,j|(s[i].ord-s[j].ord).abs==j-i}}

এখানে সুপার আকর্ষণীয় কিছুই। আমি ব্যবহার করতে পছন্দ করতাম eval("s[i].#{["succ"]*(j-i)*?.}")তবে ... খুব দীর্ঘ মনে হয়েছিল।


0

মতলব(94)(80)

সম্পাদনা করুন: 'প্রকৃতির' ক্ষেত্রে (টি, আর) হিসাবে বিপরীত বর্ণানুক্রমিক ক্রমে আমি গ্রহণ করতে পারি নি, তাই ওজনে আরও বাইট :(

@(a)sum(arrayfun(@(x)sum(1:nnz(find(a==fix(x/2)+(-1)^x*(1:1:nnz(a))))-1),2:244))

  • দ্বিপদী ফাংশন একটি মূ .় ব্যতিক্রম ছুঁড়ে দেয় যখন কে এন এর চেয়ে বড় হয় এবং আমি arraycellফাংশনের অভ্যন্তরে ব্যতিক্রমগুলি ধরতে পারি না অন্যথায় আমি এটি আরও গল্ফ করতে পারি। কার একটি বিল্ট ইন ফাংশন দরকার ??

    এখন আমি কেবল হাতে হাতে এটি করতে পারলাম, দ্বিপদী (এন, 2) = এন / (2 (এন -2)!) = এন (এন -1) / 2 সরল করে। মন্তব্য করুন যে এই শেষ মানটি 1 থেকে এন -1 পর্যন্ত পূর্ণসংখ্যার যোগফলকে পুনরায় উপস্থাপন করে, এটি মাতলাবগুলিতে কোনও ব্যতিক্রম নষ্ট করে না, Godশ্বর গণিতকে মঙ্গল করুন।

  • PS: এই পদ্ধতিটি slvrbld এর চেয়ে দ্বিধাহীন

ফাঁসি

  >> ans('abef')

  ans =

       2

  >> ans('abcd')

  ans =

       6

  >> ans('nature')

  ans =

       4

আমি মনে করি এটি ইনপুট () এর যুক্তি থেকে 'স' মুছে ফেলা নিরাপদ । আপনাকে 4 বাইট বাঁচায় তদ্ব্যতীত, হার্ড-কোডিং-লুপ রেঞ্জের কারণে এটি দীর্ঘতর স্ট্রিংগুলিতে ব্যর্থ হয়েছে (যেমন 'সুপারক্যালিফরাগিলিস্টিসিপিয়ালিডোসিয়াস' যা টেস্ট কেস হিসাবে ফ্লোডেল ব্যবহৃত হয়) ... আপনি এটি ঠিক করতে চাইতে পারেন।
slvrbld

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